3.1.1.2 Protocol Grammar
This section uses the Augmented Backus-Naur Form (ABNF) notation that is specified in [RFC2234] to define the protocol stream grammar. ProtocolStream-a represents the stream of octets flowing from the initiator to the receiver, and ProtocolStream-b represents the stream of octets flowing from the receiver to the initiator.
-
ProtocolStream-a = 1*(SingletonUnsizedStream-a / DuplexStream-a / SimplexStream-a / SingletonSizedStream-a) ProtocolStream-b = 1*(SingletonUnsizedStream-b / DuplexStream-b) SingletonUnsizedStream-a = VersionRecord ModeRecordType SingletonUnsizedMode ViaRecord EncodingRecord *UpgradeRequest PreambleEndRecord UnsizedEnvelopeRecord EndRecord DuplexStream-a = VersionRecord ModeRecordType DuplexMode ViaRecord EncodingRecord *UpgradeRequest PreambleEndRecord *SizedEnvelopeRecord EndRecord SimplexStream-a = VersionRecord ModeRecordType SimplexMode ViaRecord EncodingRecord PreambleEndRecord *SizedEnvelopeRecord EndRecord SingletonSizedStream-a = VersionRecord ModeRecordType SingletonSizedMode ViaRecord EncodingRecord Octets SingletonUnsizedStream-b = (*UpgradeResponse FaultRecord) / (*UpgradeResponse PreambleAckRecord *1UnsizedEnvelopeRecord (FaultRecord / EndRecord)) DuplexStream-b = (*UpgradeResponse FaultRecord) / (*UpgradeResponse PreambleAckRecord *SizedEnvelopeRecord (FaultRecord / EndRecord)) EncodingRecord = KnownEncodingRecord / ExtensibleEncodingRecord UpgradeRequest = UpgradeRequestRecord Octets UpgradeResponse = UpgradeResponseRecord Octets VersionRecord = VersionRecordType MajorVersionNumber MinorVersionNumber VersionRecordType = %x00 MajorVersionNumber = %x01 MinorVersionNumber = %x00 ModeRecordType = %x01 SingletonUnsizedMode = %x01 DuplexMode = %x02 SimplexMode = %x03 SingletonSizedMode = %x04 ViaRecord = ViaRecordType EncodedSize Utf8Octets ViaRecordType = %x02 KnownEncodingRecord = KnownEncodingRecordType KnownEncodingType KnownEncodingType = TextEncoding / BinaryEncoding / MtomEncoding BinaryEncoding = BinarySessionlessEncoding / BinarySessionEncoding TextEncoding = Soap11TextEncoding / Soap12TextEncoding Soap11TextEncoding = Soap11Utf8Encoding / Soap11Utf16Encoding / Soap11UnicodeFFFEEncoding Soap12TextEncoding = Soap12Utf8Encoding / Soap12Utf16Encoding / Soap12UnicodeFFFEEncoding KnownEncodingRecordType = %x03 Soap11Utf8Encoding = %x00 Soap11Utf16Encoding = %x01 Soap11UnicodeFFFEEncoding = %x02 Soap12Utf8Encoding = %x03 Soap12Utf16Encoding = %x04 Soap12UnicodeFFFEEncoding = %x05 MtomEncoding = %x06 BinarySessionlessEncoding = %x07 BinarySessionEncoding = %x08 ExtensibleEncodingRecord = ExtensibleEncodingRecordType EncodedSize Utf8Octets ExtensibleEncodingRecordType = %x04 UnsizedEnvelopeRecord = UnsizedEnvelopeRecordType 1*(EncodedSize Octets) Terminator UnsizedEnvelopeRecordType = %x05 Terminator = %x00 SizedEnvelopeRecord = SizedEnvelopeRecordType EncodedSize Octets SizedEnvelopeRecordType = %x06 EndRecord = EndRecordType EndRecordType = %x07 FaultRecord = FaultRecordType EncodedSize Utf8Octets FaultRecordType = %x08 UpgradeRequestRecord = UpgradeRequestRecordType EncodedSize Utf8Octets UpgradeRequestRecordType = %x09 UpgradeResponseRecord = UpgradeResponseRecordType UpgradeResponseRecordType = %x0A PreambleAckRecord = PreambleAckRecordType PreambleAckRecordType = %x0B PreambleEndRecord = PreambleEndRecordType PreambleEndRecordType = %x0C Utf8Octets = 1*(Utf8Octet) Utf8Octet = %x00-7F / %xC2-DF %x80-BF / %xE0-EF %x80-BF %x80-BF / %xF0-F4 %x80-BF %x80-BF %x80-BF Octets = 1*(%x00-FF) EncodedSize = %x01-7F / %x80-FF %x01-7F / %x80-FF %x80-FF %x01-7F / %x80-FF %x80-FF %x80-FF %x01-7F / %x80-FF %x80-FF %x80-FF %x80-FF %x01-07