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.
-
connection, yöntemin çağrıldığıRTCPeerConnectionnesnesi olsun. -
Eğer
connection.[[IsClosed]]trueise, birInvalidStateErrorfırlatın. - Bir RTCDataChannel,
channeloluşturun. -
channel.[[DataChannelLabel]]değerini ilk argümanın değerine başlatın. -
[[DataChannelLabel]]’ın UTF-8 gösterimi 65535 bayttan uzunsa, birTypeErrorfırlatın. options, ikinci argüman olsun.-
channel.[[MaxPacketLifeTime]]’ı, varsaoption.maxPacketLifeTimedeğerine, aksi haldenull’a başlatın. -
channel.[[MaxRetransmits]]’i, varsaoption.maxRetransmitsdeğerine, aksi haldenull’a başlatın. -
channel.[[Ordered]]’ıoption.ordereddeğerine başlatın. -
channel.[[DataChannelProtocol]]’üoption.protocoldeğerine başlatın. -
[[DataChannelProtocol]]’ün UTF-8 gösterimi 65535 bayttan uzunsa, birTypeErrorfırlatın. -
channel.[[Negotiated]]’ıoption.negotiateddeğerine başlatın. -
channel.[[DataChannelId]]’yi, mevcutsa ve[[Negotiated]]true iseoption.iddeğerine, aksi haldenull’a başlatın.
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.
-
Eğer
[[Negotiated]]trueve[[DataChannelId]]nullise, birTypeErrorfırlatın. -
Hem
[[MaxPacketLifeTime]]hem de[[MaxRetransmits]]nitelikleri ayarlanmışsa (null değilse), birTypeErrorfırlatın. -
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. -
[[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, birTypeErrorfırlatın. -
[[DataChannelId]]yuvasınullise (createDataChanneliç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 birRTCDataChanneltarafından kullanılıyorsa, birOperationErroristisnası fırlatın.
[[DataChannelId]] yuvası
null ise, RTCSctpTransport bağlantı kurma prosedürü
sırasında doldurulacaktır.
-
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.
-
Eğer
channel,connectionüzerinde oluşturulan ilkRTCDataChannelise,connectioniçin müzakere-gerekli bayrağını güncelleyin. -
channel’ıconnection.[[DataChannels]]’a ekleyin. -
channel’ı döndürün ve aşağıdaki adımları paralel olarak sürdürün. -
channel’ın ilişkili alttaki veri taşımasını oluşturun vechannel’ı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:
-
transportyeni birRTCSctpTransportnesnesi olsun. -
transport’un[[SctpTransportState]]iç yuvasıinitialStateile başlatılsın. -
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. -
transport’un[[MaxChannels]]iç yuvasınullile başlatılsın. 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:
-
transport, güncellenecekRTCSctpTransportnesnesi olsun. -
remoteMaxMessageSize, [RFC8841] (bölüm 6)’da açıklandığı şekilde uzak açıklamadan okunanmax-message-sizeSDP özniteliğinin değeri olsun; öznitelik yoksa 65536 olsun. -
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. -
Hem
remoteMaxMessageSizehem decanSendSize0 ise,[[MaxMessageSize]]’ı pozitif Sonsuzluk değerine ayarlayın. -
Aksi halde,
remoteMaxMessageSizeveyacanSendSize’dan biri 0 ise,[[MaxMessageSize]]’ı ikisinden büyük olana ayarlayın. -
Aksi halde,
[[MaxMessageSize]]’ıremoteMaxMessageSizeilecanSendSize’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:
-
transport,RTCSctpTransportnesnesi olsun. -
connection,transportile ilişkiliRTCPeerConnectionnesnesi olsun. -
[[MaxChannels]]’ı, müzakere edilen gelen ve giden SCTP akışlarının miktarlarının en küçüğüne ayarlayın. -
connection’ın her birRTCDataChannel’ı için: -
channel,RTCDataChannelnesnesi olsun. -
Eğer
channel.[[DataChannelId]]nullise, [RFC8832]’ye göre alttaki sctp veri kanalı tarafından üretilen değere[[DataChannelId]]’yi başlatın. -
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. -
transportüzerindestatechangeadlı bir olay tetikleyin.
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
state türü RTCSctpTransportState, salt okunur
[[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
RTCDataChannel sayısının
azami miktarı. Bu nitelik, alındığında MUST,
[[MaxChannels]] yuvasının
değerini döndürmelidir.
connected" durumuna
geçene kadar
null olacaktır.
onstatechange türü EventHandler
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ı