← WebRTC 1.0 Spesifikasyonu

Eşler Arası Veri API

W3C WebRTC 1.0 Spesifikasyonu — Türkçe Çeviri

6. Eşler arası Veri API’si

Eşler arası Veri API’si, bir web uygulamasının eşler arasında genel uygulama verilerini gönderip almasına olanak tanır. Veri gönderme ve alma API’si, Web Sockets davranışını modeller.

6.1 RTCPeerConnection Arayüzü Uzantıları

Eşler arası veri API’si, aşağıda açıklandığı şekilde RTCPeerConnection arayüzünü genişletir.

WebIDL          partial interface RTCPeerConnection {
                          readonly attribute RTCSctpTransport? sctp;
                          RTCDataChannel createDataChannel(USVString label,
                                                           optional RTCDataChannelInit dataChannelDict = {});
                          attribute EventHandler ondatachannel;
                        };

Nitelikler

sctp · RTCSctpTransport · salt okunur · null olabilir

SCTP verilerinin gönderilip alındığı SCTP taşıması. SCTP müzakere edilmemişse değer null’dır. Bu nitelik MUST, [[SctpTransport]] iç yuvasında saklanan RTCSctpTransport nesnesini döndürmelidir.

ondatachannel · EventHandler

Bu olay işleyicisinin olay türü datachannel’dır.

Yöntemler

createDataChannel

Verilen etiketle yeni bir RTCDataChannel nesnesi oluşturur. RTCDataChannelInit sözlüğü, veri güvenilirliği gibi alttaki kanalın özelliklerini yapılandırmak için kullanılabilir.

createDataChannel yöntemi çağrıldığında, kullanıcı aracısı aşağıdaki adımları MUST çalıştırmalıdır.

  1. connection, yöntemin çağrıldığı RTCPeerConnection nesnesi olsun.
  2. Eğer connection.[[IsClosed]] true ise, bir InvalidStateError fırlatın.
  3. Bir RTCDataChannel, channel oluşturun.
  4. channel.[[DataChannelLabel]] değerini ilk argümanın değerine başlatın.
  5. [[DataChannelLabel]]’ın UTF-8 gösterimi 65535 bayttan uzunsa, bir TypeError fırlatın.
  6. options, ikinci argüman olsun.
  7. channel.[[MaxPacketLifeTime]]’ı, varsa option.maxPacketLifeTime değerine, aksi halde null’a başlatın.
  8. channel.[[MaxRetransmits]]’i, varsa option.maxRetransmits değerine, aksi halde null’a başlatın.
  9. channel.[[Ordered]]’ı option.ordered değerine başlatın.
  10. channel.[[DataChannelProtocol]]’ü option.protocol değerine başlatın.
  11. [[DataChannelProtocol]]’ün UTF-8 gösterimi 65535 bayttan uzunsa, bir TypeError fırlatın.
  12. channel.[[Negotiated]]’ı option.negotiated değerine başlatın.
  13. channel.[[DataChannelId]]’yi, mevcutsa ve [[Negotiated]] true ise option.id değerine, aksi halde null’a başlatın.
Bu, veri kanalı bant içi müzakere ediliyorsa id üyesinin yok sayılacağı anlamına gelir; bu kasıtlıdır. Bant içi müzakere edilen veri kanalları, [RFC8832]’de belirtildiği üzere DTLS rolüne göre seçilen kimliklere sahip olmalıdır.
  1. Eğer [[Negotiated]] true ve [[DataChannelId]] null ise, bir TypeError fırlatın.
  2. Hem [[MaxPacketLifeTime]] hem de [[MaxRetransmits]] nitelikleri ayarlanmışsa (null değilse), bir TypeError fırlatın.
  3. Güvenilmez modu göstermek için [[MaxPacketLifeTime]] veya [[MaxRetransmits]] ayarlarından biri belirlenmişse ve bu değer kullanıcı aracısının desteklediği azami değeri aşıyorsa, değer kullanıcı aracısının azami değerine ayarlanmalıdır.
  4. [[DataChannelId]] 65535’e eşitse; bu, izin verilen azami kimlik olan 65534’ten büyük olmasına rağmen işaretsiz kısa türüne uymaya devam ettiğinden, bir TypeError fırlatın.
  5. [[DataChannelId]] yuvası null ise (createDataChannel içine bir kimlik geçirilmemesi veya [[Negotiated]]’ın false olması nedeniyle) ve SCTP taşımasının DTLS rolü zaten müzakere edilmişse, [RFC8832]’ye göre kullanıcı aracısı tarafından üretilen bir değere [[DataChannelId]]’yi başlatın ve bir sonraki adıma geçin. Kullanılabilir bir kimlik üretilemezse veya [[DataChannelId]] yuvasının değeri mevcut bir RTCDataChannel tarafından kullanılıyorsa, bir OperationError istisnası fırlatın.
Bu adımdan sonra [[DataChannelId]] yuvası null ise, RTCSctpTransport bağlantı kurma prosedürü sırasında doldurulacaktır.
  1. transport, connection.[[SctpTransport]] olsun.

[[DataChannelId]] yuvası null değilse, transport "connected" durumundaysa ve [[DataChannelId]], transport.[[MaxChannels]] değerinden büyük veya ona eşitse, bir OperationError fırlatın.

  1. Eğer channel, connection üzerinde oluşturulan ilk RTCDataChannel ise, connection için müzakere-gerekli bayrağını güncelleyin.
  2. channel’ı connection.[[DataChannels]]’a ekleyin.
  3. channel’ı döndürün ve aşağıdaki adımları paralel olarak sürdürün.
  4. channel’ın ilişkili alttaki veri taşımasını oluşturun ve channel’ın ilgili özelliklerine göre yapılandırın.

6.1.1 RTCSctpTransport Arayüzü

RTCSctpTransport arayüzü, bir uygulamanın belirli bir SCTP ilişkilendirmesine bağlı SCTP veri kanalları hakkında bilgiye erişmesine olanak tanır.

6.1.1.1 Bir örnek oluşturma

Başlangıç durumu initialState olan bir RTCSctpTransport oluşturmak için aşağıdaki adımları çalıştırın:

  1. transport yeni bir RTCSctpTransport nesnesi olsun.
  2. transport’un [[SctpTransportState]] iç yuvası initialState ile başlatılsın.
  3. transport’un bir [[MaxMessageSize]] iç yuvası olsun ve bunu başlatmak için veri azami mesaj boyutunu güncelle etiketli adımları çalıştırın.
  4. transport’un [[MaxChannels]] iç yuvası null ile başlatılsın.
  5. transport’u döndürün.

6.1.1.2 Azami mesaj boyutunu güncelleme

Bir RTCSctpTransport’un veri azami mesaj boyutunu güncellemek için aşağıdaki adımları çalıştırın:

  1. transport, güncellenecek RTCSctpTransport nesnesi olsun.
  2. remoteMaxMessageSize, [RFC8841] (bölüm 6)’da açıklandığı şekilde uzak açıklamadan okunan max-message-size SDP özniteliğinin değeri olsun; öznitelik yoksa 65536 olsun.
  3. canSendSize, bu istemcinin gönderebileceği bayt sayısı (yani yerel gönderme arabelleğinin boyutu) olsun; uygulama herhangi bir boyuttaki mesajları işleyebiliyorsa 0 olsun.
  4. Hem remoteMaxMessageSize hem de canSendSize 0 ise, [[MaxMessageSize]]’ı pozitif Sonsuzluk değerine ayarlayın.
  5. Aksi halde, remoteMaxMessageSize veya canSendSize’dan biri 0 ise, [[MaxMessageSize]]’ı ikisinden büyük olana ayarlayın.
  6. Aksi halde, [[MaxMessageSize]]’ı remoteMaxMessageSize ile canSendSize’dan küçük olana ayarlayın.

6.1.1.3 Bağlı duruma geçiş prosedürü

Bir SCTP taşıması bağlandığında, yani bir RTCSctpTransport’un SCTP ilişkilendirmesi kurulduğunda, kullanıcı aracısı aşağıdaki adımları çalıştıran bir görevi sıraya MUST koymalıdır:

  1. transport, RTCSctpTransport nesnesi olsun.
  2. connection, transport ile ilişkili RTCPeerConnection nesnesi olsun.
  3. [[MaxChannels]]’ı, müzakere edilen gelen ve giden SCTP akışlarının miktarlarının en küçüğüne ayarlayın.
  4. connection’ın her bir RTCDataChannel’ı için:
  5. channel, RTCDataChannel nesnesi olsun.
  6. Eğer channel.[[DataChannelId]] null ise, [RFC8832]’ye göre alttaki sctp veri kanalı tarafından üretilen değere [[DataChannelId]]’yi başlatın.
  7. Eğer channel.[[DataChannelId]], transport.[[MaxChannels]]’dan büyük veya ona eşitse ya da bir önceki adım bir kimlik atayamadıysa, channel’ı bir hata nedeniyle kapatın. Aksi halde, kanalı açık olarak duyurun.
  8. transport üzerinde statechange adlı bir olay tetikleyin.
Bu olay, kanalı açık olarak duyurmanın tetiklediği open olaylarından önce tetiklenir; open olayları ayrı bir sıraya alınmış görevden tetiklenir.
WebIDL[Exposed=Window]
                        interface RTCSctpTransport : EventTarget {
                          readonly attribute RTCDtlsTransport transport;
                          readonly attribute RTCSctpTransportState state;
                          readonly attribute unrestricted double maxMessageSize;
                          readonly attribute unsigned short? maxChannels;
                          attribute EventHandler onstatechange;
                        };

Nitelikler

transport türü RTCDtlsTransport, salt okunur

Veri kanalları için tüm SCTP paketlerinin gönderilip alınacağı taşıma.

state türü RTCSctpTransportState, salt okunur

SCTP taşımasının mevcut durumu. Alındığında, bu nitelik MUST [[SctpTransportState]] yuvasının değerini döndürmelidir.

maxMessageSize türü sınırsız double, salt okunur

RTCDataChannel’ın send() yöntemine aktarılabilecek verinin azami boyutu. Bu nitelik, alındığında MUST, [[MaxMessageSize]] yuvasının değerini döndürmelidir.

maxChannels türü unsigned short, salt okunur, null olabilir

Eşzamanlı olarak kullanılabilecek RTCDataChannel sayısının azami miktarı. Bu nitelik, alındığında MUST, [[MaxChannels]] yuvasının değerini döndürmelidir.
Bu niteliğin değeri, SCTP taşıması "connected" durumuna geçene kadar null olacaktır.

onstatechange türü EventHandler

Bu olay işleyicisinin olay türü statechange’dir.

6.1.2 RTCSctpTransportState Enum

RTCSctpTransportState, SCTP taşımasının durumunu belirtir.

WebIDLenum RTCSctpTransportState {
                          "connecting",
                          "connected",
                          "closed"
                        };
Enum değeri Açıklama
connecting RTCSctpTransport, bir ilişkilendirmeyi müzakere etme sürecindedir. Bu, bir RTCSctpTransport oluşturulduğunda [[SctpTransportState]] yuvasının başlangıç durumudur.
connected Bir ilişkilendirmenin müzakeresi tamamlandığında, [[SctpTransportState]] yuvasını "connected" olarak güncellemek üzere bir görev sıraya alınır.
closed Aşağıdaki durumlarda [[SctpTransportState]] yuvasını "closed" olarak güncellemek üzere bir görev sıraya alınır:
- Bir SHUTDOWN veya ABORT parçası alındığında.
- Eş bağlantısının kapatılması ya da veriyi reddeden veya SCTP portunu değiştiren bir uzak açıklamanın uygulanması gibi nedenlerle SCTP ilişkilendirmesi kasıtlı olarak kapatıldığında.
- Alttaki DTLS ilişkilendirmesi "closed" durumuna geçtiğinde.
Son geçişin mantıksal olduğu unutulmamalıdır; çünkü bir SCTP ilişkilendirmesi kurulmuş bir DTLS bağlantısı gerektirir — [RFC8261] bölüm 6.1, DTLS üzerinden SCTP’nin tek bağlantı noktalı olduğunu belirtir — ve bu API’de alternatif bir taşımaya geçişin herhangi bir yolu tanımlanmamıştır.

: RTCSctpTransportState Numaralandırma açıklaması