view Side-By-Side changes
Network Working Group H. Hannu (Editor), Ericsson INTERNET-DRAFTZ. Liu, Nokia Expires: April 2002 R. Price, Siemens/Roke Manor J. Rosenberg, DynamicsoftJ. Christoffersson, Ericsson Expires: May 2002 C. Clanton, Nokia S. Forsgren. Ericsson K. Le, Nokia K. Leung, Nokia Z. Liu, Nokia R. Price, Siemens/Roke Manor J. Rosenberg, Dynamicsoft K. Svanbro, EricssonOctober 31,November 21, 2001 Signaling Compression (SigComp)draft-ietf-rohc-sigcomp-01.txtdraft-ietf-rohc-sigcomp-02.txt Status of this memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or cite them other than as "work in progress". The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/lid-abstracts.txt The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html This document is a submission of the IETF ROHC WG. Comments should be directed to its mailing list, rohc@cdt.luth.se. Hannu,Liu, Price, Rosenberg,et al. [Page 1] INTERNET-DRAFT SigCompOctober 31November 21 , 2001 Abstract The Session Initiation Protocol (SIP), along with many otherIPprotocols used for multimedia communications, such as RTSP, are textual protocols engineered for bandwidth rich links. With the planned usage of these protocols in wireless handsets as part of 2.5G and 3Gwireless,cellular networks, the large size ofthesetheir messagesisand the chatty nature of the protocols are problematic. Thisdraftdocument provides a modular, robust and efficient message compression scheme, suitable for compression of ASCII based protocols' messages. 0. Document History - October 19, 2001, version 00 First version. The draft describes the current ideas, from people involved in the ROHC WG, of how to perform compression of application signaling messages.TABLE OF CONTENTS- October 31, 2001, version 01 Second version. Additional section, 5.2.1, which describes when a message identifier can be reused. - November 21, 2001, version 02 Third version. Section 6 has been moved to a separate draft. The third version describes a modular solution, providing flexibility for implementers to decide which functions they want to integrate. Table of contents 1. Introduction..................................................3 2. Terminology...................................................3 3. High-leveldescription........................................3description of SigComp.............................4 4. The SigCompComponents............................................6protocol..........................................5 5.Protocol Component............................................6 6.Compression FrameworkComponent...............................12Component...............................9 6. Capability exchange...........................................13 7. Securityconsiderations.......................................21considerations.......................................14 8. IANAconsiderations...........................................21considerations...........................................14 9.Authors addresses.............................................22Authors' addresses............................................14 10. Intellectual Property RightConsiderations....................22Considerations....................16 11.References....................................................22References....................................................16 Hannu,Liu, Price, Rosenberg,et al. [Page 2] INTERNET-DRAFT SigCompOctober 31November 21 , 2001 1. Introduction The Session Initiation Protocol (SIP) [SIP], along with many otherIPapplication protocols used for multimedia communications, such as RTSP [RTSP], are textual protocols engineered for bandwidth rich links. As a result, these messages have not been optimized for message size. Typical SIP messages are from a few hundred bytes to as high as 2000. To date, this has not been a significant problem. With the planned usage of these protocols in wireless handsets as part of 2.5G and 3Gwireless,cellular networks, the large size of these messages is problematic. The problem is not bandwidth efficiency (the media stream still consumes the majority of the bandwidth), but rather latency. With low-rate IP connectivity, store-and-forward delays are significant. For CDMA2000, for example, the basic channel will support only 9.6 kbps. At this rate, transmission of each byte requires 0.8ms. A 500 byte SIP message requires nearly half a second to transmit. Taking into account retransmits, and the multiplicity of messages that are required in some flows, call setup and feature invocation are adversely affected. Therefore, we believe there is merit in investigatingimprovements inways to reduce message sizes. This document defines SigComp,an efficient anda modular, robustscheme forand efficient message compression scheme, even when thetransmissiontransport path between the compressor and decompressor is unreliable, i.e. prone to errors, losses and misordering. From the view of external users, SigCompfulfillsis only to provide compression service. What you get is therequirements stated in [REQ]service of the underlying transport + compression. Nothing more. Nothing less. SigComp consists of a compression component and a protocol component. The protocol component should not be "extracted" out of the contents of this document for other purpose. This document does not specify a negotiation mechanism. The application that would like to apply SigComp should also negotiate the usage of SigComp. 2. Terminology The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC-2119]. Byte buffer TheSigCompdecompressor used by SigComp maintains a bytebuffer containingbuffer, which depending on the implementation choice, contain any previously received text strings that might be useful for future compression.Token A token is an instruction transmitted from the compressor to the decompressor. 3. High-level description SigComp is useful for compression of ASCII-based application signaling protocol messages. Compression and decompression is performed at two points, e-net and e-ms, see Figure 1. The compressor uses the context to compress a message to a SigComp message. TheHannu,Liu, Price, Rosenberg,et al. [Page 3] INTERNET-DRAFT SigCompOctober 31November 21 , 2001reverse process is done at the decompressor.Context The context of SigComp isdefined astheinformationnecessary information to perform compression and decompression. The correct context to use is identified by the IP Source and Destinationaddressesaddresses. 3. High-level description ofthe IP header. By using this identification method thereSigComp Compression and decompression is performed at two communicating end- points, A and B, see Figure 1. When a message isno needtoadd an explicitbe compressed the compressing entity looks up the IP source and destination addresses and identifies the correct contextidentifier into use. If no context exists, one is created. Depending on the implementation of the SigCompmessage. To improvecompressing entity thecompression efficiency,protocol might add a header to the output of the compressor. The final SigCompuses previous messages inmessage is then passed on to underlying layers for transport to thecompression/decompression processdecompressing entity. Upon the arrival oflater message. To be robust againsta SigComp message the SigComp decompressing entity will, if no contextinconsistency in this process,exists create one. If the SigComphas an internal acknowledgement scheme.message carries a header it removes the header and takes the appropriate actions (which depends on the implementation of the decompressing entity), then it gives the remaining SigComp message as input to the decompressor. After a correct decompression the uncompressed message will be passed on to the receiver. original +------------------+ SigComp +--------------------+| +--------------+ | | +----------------+ | | | Context | | | | Context | | | +--------------+ | | +----------------+ | | | | | | | | | original | | | | compressed | | | |message | +----------+ ||message | +------------+ || ------------+>|Compressor|-)------------+>|Compressor|-- - + - - - - --+>|Decompressor|-)---+->-+>|Decompressor|-----+-> |+----------++-----|----+ | | +----|-------+ |+------------+| +---|---+ | | +---|---+ | | |Context| | | |Context| |decompressed| +---+---+ | |compressed+---+---+ | | +---+---+ | | +---+---+ | | |Context| | | |Context| | decompressed | +---|---+ | SigComp | +---|---+ | message |+--------------++-----|--------+ | message |+----------------++----|-----------+ | <------------+-| Decompressor |<+- - - - - - +-| Compressor |<+-- | +--------------+ | | +----------------+ | +------------------+ +--------------------+E-ms E-netA B Figure 1. SigComp High-level view.Although Figure 1. implies that the contextNote: There isshared between compressor and decompressor located in the same entity, this must not necessarily be the case. SigCompno need for one uncompressed message to correspond to exactly one compressed message. Two or more compressed messages can beapplied in an environment where shared context is not possible or unwanted, with just one change: The context is identified by the IP-source and IP-destination address pair. Thus, if the IP-source and IP-destination addresses would switch, it will generatesent to reconstruct anew context. However, itsingle uncompressed message, which isrecommendeduseful for segmenting compressed messages thatSigComp is used with shared context because ofare larger than theincrease in compression ratio this gives. 3.1. Context data The ContextMTU ofSigComp is defined as the information necessary to perform compression and decompression. The context at compressor and the corresponding decompressor must be kept consistent. The context is built up by the parts described inthefollowing subsections.transport protocol, see [ALG]. Hannu,Liu, Price, Rosenberg,et al. [Page 4] INTERNET-DRAFT SigCompOctober 31November 21 , 20013.1.1. Static Context Data4. ThecontextSigComp protocol The main task of the SigComp protocol ispopulated with static informationtouse inprovide feedback from thecompression/decompression process, i.e. static context data.decompressor to its peer compressor. Thestaticamount of feedback informationcomes from knowing what protocols areand how the compressor react tobe compressed. Information such as protocol-specific header field names, Methods, Status codes etc.the feedback aretypical static context data. It does not change over time, is relevant for all userschoices ofSigComp, and can be appliedthe implementation. An implementation may also choose not toall sessions. Thus,implement any feedback mechanisms. For the purpose of feedback, SigComp has a set of headers, as defined in Section 4.1. The use of headers is established atleastthestatic context data cancapability exchange phase, see Section 6. The acknowledgment procedure in Section 4.2 together with the headers MAY beapplied when compressing messages. 3.1.2. User specific Context Data To further increaseused by a decompressing entity to provide knowledge to thecompression efficiencycompressing entity about what SigComp messages it has received. This would allow thepossibilitycompressor topre-populate the context with information usefuluse previously sent messages in the compressionprocess. This type of informationprocess, even when the underlying transport protocol isregarded as user specific context data as itunreliable, see Section 5. 4.1. The SigComp headers The SigComp headers consist of the following fields: Message IDentification (MID) number The MID number isnot defined within SigComp. Information about commonlyusedconnections, such as SIP URLsto keep track of sent andappliction settings (speech codecs, etc) are typical examplesreceived messages, and is useful for detecting message loss and/or misordering. CRC-verification ofuser specific context data. Note: How pre-populationmessages (CRC-M) This CRC isperformedcalculated over the uncompressed message, e.g. the SIP INVITE message, and isyetused to verify the correctness of a decompressed SigComp message. Acknowledgement A SigComp acknowledgement can either bedetermined. 3.1.3. Dynamic Context Data Messages associated with protocols such as SIP tend to have similar characteristicscarried within asession. ThereforeSigCompmakes use of messagesmessage (Piggybacked) or be sentfrom/toby itself (Standalone). Note: It is assumed that the total length of auser. To be able to decompressSigCompmessages correctly, information in previous messages must not be used inmessage is provided by thecompression process untilunderlying transport layer. Since themessage(s) has been acknowledged. This partlength of thecontextheader part isreferred to asself-contained thedynamic context data part. 3.1.4. Cross session Context The messages also have similar characteristics between sessions. The idea is to take advantagelength ofthis with Cross session context. Basically this means thatthecontext is kept between sessions, e.g. between two SIP INVITES. Note: How to utilize Cross Session Context is yet tocompressed information can bedetermined. 3.1.5. Keeping Context TBW.derived by subtracting the header length from the total SigComp message length. The compressed information length could be zero in the case of a Standalone acknowledgement. Header formats are described in the following sub-sections. Hannu,Liu, Price, Rosenberg,et al. [Page 5] INTERNET-DRAFT SigCompOctober 31November 21 , 20014. SigComp Components The SigComp compression scheme is divided into two components, Protocol and Compression framework component. Basically,4.1.1. Normal header formats These are theprotocol component seesnormal header formats tothatuse. Format 1 SHOULD be used when there has been no gap in thecontexts are consistent even for a certain amountreceived MID numbers up to the generation ofmessage loss and misordering and also make it possible to use previously sent andthis SigComp message. To acknowledge receivedmessageSigComp messages after a gap in thecompression/decompression of later messages. The compression framework component defines the structure of the part of the context that isreceived MID numbers, Format 2 MUST be usedin the compression/decompression process and whatFormat 1 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | MID | Cumulative ACK| +---+---+---+---+---+---+---+---+ | CRC-M | +---+---+---+---+---+---+---+---+ / Compressed information / / according toupdate the context with. FigureSection 5 / +---+---+---+---+---+---+---+---+ Format 2depicts which parts of the SigComp message that relates to which component. +-----------------+0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ |SigComp Header1 1 1 0 |* Protocol Component +-----------------+MID | +---+---+---+---+---+---+---+---+ | CRC-M | +---+---+---+---+---+---+---+---+ | AC | RMID (1) | +---+---+---+---+---+---+---+---+ | RMID (2) | RMID (3) | +---+---+---+---+---+---+---+---+ :Compressed:* Compression framework Component/ / : : +---+---+---+---+---+---+---+---+ |informationRMID (C-1) |+-----------------+ Figure 2. SigCompRMID (C) | +---+---+---+---+---+---+---+---+ / Compressed information / / according to Section 5 / +---+---+---+---+---+---+---+---+ MID: "0000" to "1101". The Message IDentification (MID) number is commonly increased with one for each sent message.5. Protocol Component This chapter describesHowever, there is theprotocol componentexception when the next MID to be assigned is not "free", see Section 4.2.1. Hannu, et al. [Page 6] INTERNET-DRAFT SigComp November 21 , 2001 Cumulative ACK Acknowledges all SigComp messages with MID number equal to or less than the value ofSigComp.this field. Theprotocol component include functions, such asvalue of this field MUST NOT be set to a value so that non-received SigCompmessagemessages are acknowledged. A received acknowledgementscheme and context verification function. The four main task thatwith higher value than theprotocol component performs are: 1) Process a messagemaximum MID MUST be ignored andsending it compressed,MUST NOT be considered asaan acknowledgement for SigCompmessage. 2) Receivingmessages. CRC-M TBW RMID Received MID of a SigCompmessage and pass it on uncompressed. 3) Acknowledgemessage, which is being acknowledged. AC Number of received SigCompmessages. 4) Receiving acknowledgements for SigComp messages. The sections in this chapter describes functions thatmessage being acknowledged (RMID), which areneeded forincluded in theSigComp protocol componentList. If AC is an even number the last RMID, RMID(C), is only padding, in order toperform its tasks. 5.1. SigComp header To achieve robustness and keep trackget octet aligned. 4.1.2. Extended message formats Format 3 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | 1 1 1 1 | TBD | +---+---+---+---+ + / TBD / : : / / +---+---+---+---+---+---+---+---+ Note: The usage ofsent and received messages, a headerthis format isaddedyet tothe compressed message.be determined. (Decompressing failure etc.) 4.2. Acknowledgement procedure TheSigComp header consist ofacknowledgement procedure is dependent on thefollowing fields: * Message IDentification (MID) number: The MID numberinformation carried in the SigComp headers. It isused to keep track of sent andRECOMMENDED that all SigComp messages are acknowledged. Three functions are needed: - A function that holds the receivedmessages, and is useful for detecting message loss and/or misordering.MID-numbers which should be acknowledged. Hannu,Liu, Price, Rosenberg,et al. [Page6]7] INTERNET-DRAFT SigCompOctober 31November 21 , 2001* CRC-verification of messages (CRC-M): This CRC is calculated over the uncompressed message, e.g. the SIP INVITE message, and is used to verify the correctness of decompressed SigComp messages. * Acknowledgement:- ASigComp acknowledgement can either be carried withinfunction that keeps aSigComp message (Piggybacked) or bemapping between sentby itself (Standalone). Note: It is assumedMID numbers and acknowledged MID numbers. - A function thatthe total length of a SigComp message is provided by the lower layer. Since the length of the header partcontrols which MID numbers that an entity isself-contained the length of the compressed message can be derived by subtracting the header length from the total SigComp message length. The compressed information length could be zero in the case of a Standalone acknowledgement. Formats are described in the following sub-sections. 5.1.1 Normal message formats These are the normal formatsallowed to use.Format 1 should be used when there has been no gap in the received MID numbersIt is up to thegeneration of this SigComp message. Format 2 should be used to acknowledge received SigComp messages when there has been a gap in the received MID numbers. Format 1: 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | MID | Cumulative ACK| +---+---+---+---+---+---+---+---+ | CRC-M | +---+---+---+---+---+---+---+---+ / Compressed message / / accordingimplementation tosection 6 / +---+---+---+---+---+---+---+---+ Format 2: 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+realize these functions The acknowledgement procedure is best described using an example, see Figure 3. A B |1 1 1 0| Step (0) |<----------- MID 1B ----------| |+---+---+---+---+---+---+---+---+ | CRC-M | +---+---+---+---+---+---+---+---+ | AC|RMIDStep (1) |-------- MID 1A, ACK 1B ---->| |+---+---+---+---+---+---+---+---+|RMIDStep (2) |<--------MID 2B, ACK 1A ------| |RMID (3)|+---+---+---+---+---+---+---+---+ : : Hannu, Liu, Price, Rosenberg, et al. [Page 7] INTERNET-DRAFTFigure 3. Example of the acknowledgement procedure. Step (0): A SigCompOctober 31 , 2001 / / : : +---+---+---+---+---+---+---+---+ | RMID (C-1) | RMID (C) | +---+---+---+---+---+---+---+---+ / Compressedmessage/ / according to section 6 / +---+---+---+---+---+---+---+---+ * MID: "0000" to "1101". Thewith MessageIDentification (MID)IDenitifcation number 1 iscommonly increased with one for eachsentmessage. However, there is the exception when the next MIDfrom B to A, denoted MID 1B in Figure 3. MID 1B MUST beassignedacknowledged by A until A isnot "free", see section X. * Cumulative ACK: Acknowledges all SigComp messagesconfident that B knows that MID 1B is received. Step (1): Entity A acknowledges MID 1B with SigComp message MIDnumber equal1A. A mapping between MID 1A and MID 1B is stored at A. Note that MID 1A do not have toor less thancarry compressed information, it can be a Standalone Acknowledgement. Step (2): Entity B acknowledges MID 1A and stores a mapping between MID 2B and MID 1A. When Entity A receives MID 2B it uses thevalue of this field.mapping to find out which SigComp message(s) from B was acknowledged by MID 1A. Thevaluemapping is removed and MID 1B MUST NOT be acknowledged anymore. 4.2.1. Reuse ofthis field must notMessage IDentification numbers This section describe when a MID can besetreused toa value so that non-received SigComp messages are acknowledged. A received acknowledgementavoid misinterpretations in case of wraparound of MID numbers combined withhigher value than the maximummessage loss and/or misordering. A MIDmustnumber MUST NOT beignoredreused until the SigComp message with that particular MID number has been acknowledged andnotstopped being acknowledged, or that the message can be regarded asacknowledgement for SigComp messages. * CRC-M: TBD AC: Number of received SigComp message being acknowledged (RMID), which are included in the List. If AC is an even number the last RMID, RMID(C), is only padding, in order to get octet aligned. RMID: Received MID of a SigComp message, which are being acknowledged. 5.1.2 Extended message formats Format 3: Reserved. 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | 1 1 1 1 | TBD | +---+---+---+---+ + / TBD / : : / / +---+---+---+---+---+---+---+---+ Note: The usage of this format is yet to be determined. 5.2. Acknowledgement procedure There is one basic rule for the acknowledgement procedure:lost. Hannu,Liu, Price, Rosenberg,et al. [Page 8] INTERNET-DRAFT SigCompOctober 31November 21 , 2001"All SigComp messages should be acknowledged". Two functions are needed: 1) A mapping function between sending MID numbers and acknowledged MID numbers, called MAPP-Function. 2) A function that keeps track of when a received SigComp MID number is not to be acknowledged anymore, called TRACK-Function. ItFigure 4, isup to the implementation to realizea continuation of thetwo functions. The acknowledgement procedure is best described using an example, seeexample given in Figure 3.There is one purpose with the procedure: "MakeThe Figure depicts an example when itpossibleis allowed touse information in previous messages in the compression and decompression process of future messages". e-A e-B | | Step (0) |<-----------reuse a MID1B ----------|number that has been acknowledged and stopped being acknowledged. A B | | Step(1)(3) |-------- MID1A,2A, ACK1B2B ---->| | |Step (2) |<--------MID 2B, ACK 1A ------| | |Figure3. Example4. Continuation ofthe acknowledgement procedure. Step (0): A SigComp message with Message IDenitifcation number 1 is sent from e-B to e-A, denoted MID 1B inFigure 3. Step (3): When Entity B receives an acknowledgement for MID1B must be acknowledged by e-A until e-A is positive that e-B2B it knows thatMID 1B is received. Step (1): Entity e-A acknowledges MID 1B with SigComp message MID 1A. Athe mappingbetween MID 1A andfor MID 1B isstoredremoved ate-A. Note that MID 1A do not have to carry compressed information,A. Therefore it is safe for entity B to reuse MID 1B. A message can bea Standalone Acknowledgement. Step (2): Entity e-B acknowledges MID 1A and stores a mapping between MID 2B andregarded as lost, if the SigComp entity has received acknowledgments for higher MID1A. When Entity e-A receivesnumbers than the MID2B it usesnumber themappingentity wishes tofind out whichreuse. However, as SigCompmessage(s) from e-B was acknowledged by MID 1A. The mapping is then removed and MID 1B does not havemust stand against moderate misordering according to [REQ], a MID number X MUST NOT beacknowledged anymore. To summarize: When an entity is to generateregarded as lost until an acknowledgementitfor message(s) with MID numbers > (X+2) has been received. 5. Compression Framework Component SigComp uses theTRACK- Function to find out the MID number it should acknowledge. Upon"Universal Decompression Algorithm" described in [ALG] for thereceptionactual compression. The "universal decompressor" is capable of interoperating with aSigComp message the headerwide range of compression algorithms. It isscanned to find the acknowledgements andtheMAPP-Functioncompressor which decides what information that isused to find outstored in thecorresponding received SigComp messages that do not have to be acknowledged anymore. Hannu, Liu, Price, Rosenberg, et al. [Page 9] INTERNET-DRAFT SigComp October 31 , 2001 5.2.1. Reusedictionary ofMessage IDentification numbersthe decompressor. The compressor also controls how the decompressor performs the decompression. This sectiondescribe when a MID can be reuseddescribes various features that a SigComp implementation may use toavoid misinterpretations in caseimprove the compression efficiency. Some ofwraparoundthese feature requires additional entries in the byte buffer ofMID numbers combinedthe "universal decompressor". 5.1. Pre-population A compressor MAY pre-populate the dictionary withmessage loss and/or misordering. Basicallywell-known information (text-strings), in order to increase the compression efficiency. This is aMID number MUST not be reused untilrather simple approach with theSigComp"universal decompressor", see [ALG]. 5.2. Per-message compression Compressing a messageusing that particular MID number has been acknowledged or that thewithout any relation to any other message isregardedreferred to aslost. Figure 4 is a continuationper-message compression. Per-message compression can be used regardless ofFigure 3the reliability of the underlying transport anddepicts when it is ok to reuse a MID number that has been acknowledged. e-A e-B | | Step (3) |-------- MID 2A, ACK 2B ---->| | | Figure 4. ContinuationHannu, et al. [Page 9] INTERNET-DRAFT SigComp November 21 , 2001 the usage ofFigure 3. Step (3): When Entity e-B receives an acknowledgement for MID 2B it knows thatthemapping for MID 1BSigComp headers, as it isremovednot dependent on any previously transmitted messages. To get compression of messages ate-A. Therefore itall, this issafe for entity e-B to reuse MID 1B. Inthecaseapproach which all implementations ofMID number reuse when the previous message using that MID number has not been acknowledged. ThenSigComp MUST support. Implementation support for theprevious message should be regarded as lost, iffeatures in the following sections is optional. 5.3. Dynamic compression A compressing entityhas received acknowledgments for higher MID numbers thanMAY choose to use previously sent messages in theMID numbercompression process in an attempt to improve theentity wishescompression efficiency. This is referred toreuse. However,asSigComp should stand against moderate misordering according to [REQ], a MID number X should not be regarded as lost until an acknowledgement for message(s) with MID numbers > (X+2) has been received. 5.2.2. Specificationdynamic compression. To ensure reliable operation ofordering constraints Inconsistency inthe compression algorithm a compressor MUST NOT use dynamiccontext datacompression, unless it is certain of that the message it is about to compress canhappen ifbe decompressed by thecontextdecompressor. If SigComp isshared and messages, which will updateused over reliable transport, such as TCP, dynamic compression does not introduce any robustness problem. To withhold robustness over unreliable transport, such as UDP, the SigComp acknowledgement procedure MUST be used when dynamiccontext data, arecompression is applied. Thus, a previously sentconcurrently by both entities. The approachmessage MUST NOT be used in the compression process until it has been acknowledged. Referring todeal with this problemFigure 3, B MAY use information in 1B to improve the compression efficiency of the message corresponding to 2B. 5.4. Shared compression Shared compression is referred tospecify ordering constraintsthe case when a compressor 'A' make use ofall updatedecompressed messagessentreceived byboth entities so that the order is total andthesame at both entities,decompressor located atleast fortheeligible updates. Three rules are defined, local, causality and concurrent rule. Withsame SigComp entity. These decompressed messages MUST originate from thefirst two rulescorresponding SigComp entity, which decompressor is controlled by compressor 'A'. Shared compression is OPTIONAL and its support is established in the capability exchange. To allow shared compression it is REQUIRED to use the SigComp acknowledgment procedure regardless of the3-way handshake, it is possiblereliability of the underlying transport. Referring toensure consistency during updatesFigure 3, B MAY use information in 1A to improve the compression efficiency ofdynamic context data, but there is one case that these do not resolve; dynamic context data updates issued concurrently by both entities. With an update requestthe message corresponding to 2B. For shared compression to be applicable with the "universal decompressor" a SigComp entity supporting shared compression MUST implement two additional entries in thedescriptionbyte buffer of therules below means; Every message that carries information thatdecompressor: shared_start This isused to updatethedynamic context data.start address in the byte buffer where original Hannu,Liu, Price, Rosenberg,et al. [Page 10] INTERNET-DRAFT SigCompOctober 31November 21 , 2001* Local Rule: When a dynamic context data update request R' is sent before R" at the samemessages (not compressed) from this entity,R' is scheduled to perform an update before R" at both entities. A sending entity schedules its own update requests according to their sequence numbers, whereas a receiving entity schedules these requests according to the request sequence numbers,whichcanare being acknowledged, are to beinferred fromplaced into thesequence numbersbyte buffer ofthose SigComp messages containing these requests. * Causality rule: Whenthe decompressor. By setting shared_start = 0, aSigCompcompressor can avoid that any acknowledged messagecontaining a dynamic context data update request R' piggybacks with acknowledgements, R'isscheduledwritten toperform an update after alltheupdates correspondingbyte buffer. shared_length This is used by the protocol part to inform theacknowledged update requests. * Concurrent rule: The problem explained above can be eliminated by requiringdecompressor algorithm if there was any new information, and themaintenancelength ofa total order relationship for a sequenceit, written to the shared compression part ofall known context update requests at each entity. This requiresthe byte buffer. To avoid thatone entitysame message information isthe master andprocessed twice, in case of multiple acknowledges for oneismessage, theslave. An example showing how the scheme with the total order relationship solves the inconsistent context update problem is shown inprotocol MUST set shared_length = 0. Figure 5.Suppose alldepicts a logical view of the decompressor byte buffer at a SigComp entity which supports shared compression. +----A----------------------B---------------------+ | | Circular buffer for | Circular buffer for | | | received messagesexchanged between Entity X (a master entity)| shared compression | +----A----------------------B---------------------+ Figure 5. Logical view of the decompressor byte buffer. A andEntity Y (a slave entity)B areemployed for subsequent compression/decompression,the addresses which circular_buffer andallshared_start point to. The receivedmessages are acknowledgedcircular buffer will be between circular_buffer andpiggybacked in all subsequent messages sent by the receiver. Whenever concurrent dictionary updates are happened, update requests initiated fromshared_start-1. When themasterdecompressing SigComp entityare ordered first. For example, the update requestsreceives a SigComp message containing acknowledgements forMessages 1, 2,e.g. MID-2 and3 are ordered before those for Messages 101, 102,MID-3 it will copy the original messages corresponding to MID-2 and103 respectively inMID-3 to thelist ofdecompressor buffer at thetotal order relationship for a sequence of dictionary updates (TOL). DD is a logical representationaddress specified in shared_start. 5.4.1. Specification of ordering constraints Inconsistency in theDynamic Context Data, TSSdynamic context data can happen if the context is shared and messages, which will update thelogical representation ofdynamic context data, are sentSigComp messages and TRSconcurrently by both entities. The approach to deal with this problem isthe logical representation storageto specify ordering constraints ofreceived SigComp messages. Since theall updaterequest for Message 1 is ordered beforemessages sent by both entities so thatfor Message 101 according tothetotalorderrelationship, the update request for Message 101 at Entity Y is blocked until that for Message 1 becomes ready to be moved, as indicated by the reception of the acknowledgement piggybacked with Message 3. | | DD = {} | | DD = {} TSS = {1} | | TSS = {101} TRS = {} | | TRS = {} TOL = {1} | | TOL = {} | [1] [101] | |-----------\ /-----------| | \/ | | /\ | |<----------/ \---------->| | | Hannu, Liu, Price, Rosenberg, et al. [Page 11] INTERNET-DRAFT SigComp October 31 , 2001 DD = {} | | DD = {} TSS = {1, 2} | | TSS = {101, 102} TRS = {101} | | TRS = {1} TOL = {1, 101, 2} | | TOL = {1} | [2] [102] | |-----------\ /-----------| | \/ | | /\ | |<----------/ \---------->| | | DD = {1} | | DD = {} TSS = {2, 3} | | TSS = {101 - 103} TRS = {101, 102} | | TRS = {1, 2} TOL = {101, 2, | | TOL = {1, 101, 2} 102, 3} | | | [3] [103] | |-----------\ /-----------| | \/ | | /\ | |<----------/ \---------->| | | DD = {1, 101, 2} | | DD = {1, 101} TSS = {3} | | TSS = {102, 103} TRS = {102, 103} | | TRS = {2, 3} TOL = {102,3,103} | | TOL = {2, 102, 3} | | CD Entity X CD Entity Y Figure 5. An Example of Proposed Scheme with Total Order Relationship for Dynamic Context Data Updates. 6. Compression Framework Component This chapter introduces a simple but flexible dictionary structure for the SigComp compression scheme. The goal with the flexible dictionary structure is to standardize a decompressor capable of interoperating with a wide range of compression algorithms. Consequently this chapter describes the decompressor operation only, i.e. the actions which the decompressor takes upon receiving a certain instruction from the compressor. 6.1. Information stored in the SigComp dictionary An important feature of SigComp is that it offers a standard decompressor which can interoperate with a wide range of compression algorithms. The precise method for compression is left as an Hannu, Liu, Price, Rosenberg, et al. [Page 12] INTERNET-DRAFT SigComp October 31 , 2001 implementation decision, and in fact the standard decompressor can interoperate with any of the following classes of algorithm: * Generic text compressor (for example [DEFLATE] or a similar algorithm) * Protocol-aware compressor offering excellent performance for one signaling protocol * Hybrid compressor with similar performance to [DEFLATE] for generic text strings and superior performance for certain signaling protocols The choice of which instructions to send to the decompressor are left as a local implementation decision at the compressor. The only requirement is that of transparency, i.e. the compressor MUST NOT send instructions which cause the decompressor to incorrectly decompress a given signaling message. Note however that it is perfectly acceptable for the compressor to send tokens which update the dictionary at the decompressor, but which cause no decompressed message to be outputted. Indeed, this is a useful technique for pre-populating the dictionary with well-known text strings. 6.1.1. Structure of SigComp dictionary The SigComp dictionary consists of a simple byte buffer designed to hold the current uncompressed message, the current compressed message, and any other previously received text strings that might be useful for future compression. The size buffer_size of the byte buffer is negotiated by an externally defined mechanism (e.g. by the underlying SigComp protocol used to transport the compressed messages, or alternatively by the mechanism used to negotiate use of SigComp itself). Entries in the byte buffer are referred to as buffer[n] where 0 =< n < buffer_size. As all of the SigComp tokens currently use 2-byte indices into the byte buffer, the maximum size of the buffer is 64K. 6.1.2. Important entries in the byte buffer The first few bytes in the SigComp byte buffer are used to store some important 2-byte integers. These integers are given the following names: Hannu, Liu, Price, Rosenberg, et al. [Page 13] INTERNET-DRAFT SigComp October 31 , 2001 Position in buffer: Name: 0 - 1 first_token 2 - 3 compressed_start 4 - 5 compressed_length 6 - 7 uncompressed_start 8 - 9 uncompressed_length 10 - 11 circular_buffer 12 - 13 result_integer 14 - 15 stack_free 16 - 17 stack[0] 18 - 19 stack[1] 20 - 21 stack[2] : : The MSBs of the integer are always stored before the LSBs. So, for example, the MSBs of first_token are stored in buffer[0] whilst the LSBs are stored in buffer[1]. The use of each integer is described in the following sections of the draft. 6.1.3. Decompressor actions upon receiving a SigComp message When a SigComp context is initialized all entries in the byte buffer are set to 0. Upon receiving a SigComp message, the decompressor strips off the underlying protocol header and then performs the following actions: 1.) The message is copied directly into the byte buffer beginning at the byte specified in compressed_start. The length of the compressed message in bytes (known from the underlying protocol used to transport the compressed message) is then copied into compressed_length. Note that the buffer is circular, so once a byte is copied into buffer[buffer_size - 1], the next byte is copied into buffer[circular_buffer]. The parameter circular_buffer (see Section 3.2) can be set to prevent the first part of the buffer from being overwritten by new compressed messages. Typically this area of the buffer is used to hold important tokens and text strings that should be kept from one compressed message to the next. 2.) Next, the tokens contained within the byte buffer are executed beginning at the byte specified in first_token. The tokens are executed consecutively unless indicated explicitly (for example when the decompressor encounters a SWITCH token). If the byte buffer[buffer_size - 1] is ever reached, the next byte is found in buffer[circular_buffer]. Hannu, Liu, Price, Rosenberg, et al. [Page 14] INTERNET-DRAFT SigComp October 31 , 2001 3.) When the decompressor reaches buffer[0], instead of executing the token contained within buffer[0] it stops token execution and outputs the uncompressed message. The location of the uncompressed message is specified by uncompressed_start and uncompressed_length. As stated before the buffer is circular, so once a byte is copied from buffer[buffer_size - 1], the next byte is copied from buffer[circular_buffer]. Note that the byte buffer is not reset between SigComp messages unless explicitly requested by the underlying protocol. Note also that if uncompressed_length is set to 0 then the decompressor does not output an uncompressed message. This is very useful for populating the byte buffer with well-known text strings, before any actual decompression of signaling messages takes place. 6.1.4. Decompression failure If the compressed messages received by the decompressor are corrupted (either accidentally or maliciously) then one of three possibilities might occur: * A decompressed message is outputted that is incorrect. * A token is encountered that cannot be processed successfully by the decompressor (for example a RETURN token when no CALL token has reviously been encountered). * The decompressor never finishes decompressing a message. To counter the first possibility the underlying protocol SHOULD include a checksum to ensure that each message is decompressed successfully. If the decompressed message fails the checksum then "decompression failure" has occurred. The decompressor does not output an uncompressed message, and ignores any future compressed message except those which explicitly request the byte buffer to e reinitialized. If a token is encountered that cannot be successfully processed then decompression failure occurs automatically. To counter the third possibility, decompression failure SHOULD also occur after a certain number of tokens have been processed for a given compressed message. The maximum number of tokens to process is currently left as an implementation decision (but might in future be negotiated). Hannu, Liu, Price, Rosenberg, et al. [Page 15] INTERNET-DRAFT SigComp October 31 , 2001 6.2. Library of tokens The SigComp decompressor currently understands seven types of token, chosen to support the widest possible range of compression algorithms with the minimum possible overhead. All tokens are stored as a single byte to indicate the token type, followed by 0 or more bytes containing the parameters required by the token. The following token types are currently available: COPY ADD / SUBTRACT LSHIFT / RSHIFT COMPARE SWITCH CALL ... RETURN HUFFMAN Each token is explained in more detail below: 6.2.1. COPY The COPY token instructs the decompressor to copy a string of bytes from one part of the byte buffer to another. A COPY token is stored in the byte buffer as 7 consecutive bytes as described below. A simple mnemonic description of the COPY token is also provided, which can be useful when writing example lists of tokens to be transmitted within a compressed message. Mnemonic description: COPY (position, length, destination) Exact byte description: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0 0 0 0 0| Position MSB | Position LSB | Length MSB | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length LSB |Destination MSB|Destination LSB| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ The meaning of the three parameters is explained below: Position: 2-byte integer indicating the location of the first byte in the string to be copied. Length: 2-byte integer indicating the number of bytes to be Hannu, Liu, Price, Rosenberg, et al. [Page 16] INTERNET-DRAFT SigComp October 31 , 2001 copied. Destination: 2-byte integer indicating the location to which the first byte in the string will be copied. Note that once a byte is copied into buffer[buffer_size - 1], the next byteiscopied into buffer[circular_buffer]. 6.2.2. ADD / SUBTRACT The ADD token instructs the decompressor to add the two 2-byte integers at the specified locations in the byte buffer (addition performed modulo 2^16)total andto store the result in the location of the first integer. ADD (index_1, index_2) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0 0 0 0 1| Index 1 MSB | Index 1 LSB | Index 2 MSB | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ | Index 2 LSB | +-+-+-+-+-+-+-+-+ The SUBTRACT token isthe sameas the ADD token except that the second integer is subtracted from the first (subtraction performed modulo 2^16). SUBTRACT (index_1, index_2) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0 0 0 1 0| Index 1 MSB | Index 1 LSB | Index 2 MSB | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ | Index 2 LSB | +-+-+-+-+-+-+-+-+ 6.2.3. LSHIFT / RSHIFT The LSHIFT token instructs the decompressor to left shift the 2-byte integerat both entities, at least for thespecified location. As always, the MSBs of the integereligible updates. Three rules arestored before the LSBs. LSHIFT (index) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0 0 0 1 1| Index MSB | Index LSB | Hannu, Liu, Price, Rosenberg, et al. [Page 17] INTERNET-DRAFT SigComp October 31 , 2001 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Note that the least significant bit ofdefined; local, causality and concurrent rule. With theinteger becomes zero,first two rules and themost significant bit is discarded. The RSHIFT token performs a right shiftuse of the2-byte integer at the specified location. RSHIFT (index) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0 0 1 0 0| Index MSB | Index LSB | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 6.2.4. COMPARE The COMPARE token instructs the decompressor3-way handshake, it is possible tocompare the two 2- byte integers at the specified locations in the byte buffer. COMPARE (index_1, index_2) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0 0 1 0 1| Index 1 MSB | Index 1 LSB | Index 2 MSB | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ | Index 2 LSB | +-+-+-+-+-+-+-+-+ If the first integer referenced by the COMPARE tokenensure consistency during updates of dynamic context data, but there isless than the second integer then the decompressor sets result_integer = 0. Ifone case that these do not resolve; dynamic context data updates issued concurrently by bothintegers are equal then it sets result_integer = 1. If the first integer is greater thanentities. With an update request in thesecond thendescription of thedecompressor sets result_integer = 2. 6.2.5. SWITCH The SWITCH token performs a conditional jump based onrules below means; Every message that carries information that is used to update thecontents of result_integer. SWITCH (index_0, index_1, ... , index_n - 1) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0 0 1 1 0| Index 0 MSB | Index 0 LSB | Index 1 MSB | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+ | Index 1 LSB | ... +-+-+-+-+-+-+-+-+-+-+-+-+dynamic context data. Hannu,Liu, Price, Rosenberg,et al. [Page18]11] INTERNET-DRAFT SigCompOctober 31November 21 , 2001 Local Rule When aSWITCH tokendynamic context data update request R' is sent before R" at the same entity, R' isencountered,scheduled to perform an update before R" at both entities. A sending entity schedules its own update requests according to their sequence numbers, whereas a receiving entity schedules these requests according to thedecompressor readsrequest sequence numbers, which can be inferred from theinteger contained within result_integeer. Suppose that this integersequence numbers of those SigComp messages containing these requests. Causality rule When a SigComp message containing a dynamic context data update request R' piggybacks with acknowledgements, R' isj.scheduled to perform an update after all the updates corresponding to the acknowledged update requests. Concurrent rule Thedecompressor then continues token executionproblem explained above can be eliminated by requiring the maintenance of a total order relationship for a sequence of all known context update requests at each entity. This requires that one entity is thebyte position specifiedmaster and one is the slave. An example showing how the scheme with the total order relationship solves the inconsistent context update problem is shown in Figure 6. Suppose all messages exchanged between Entity X (a master entity) and Entity Y (a slave entity) are employed for subsequent compression/decompression, and all received messages are acknowledged and piggybacked in all subsequent messages sent byindex j. If result_integer specifies an index which beyondthesize ofreceiver. Whenever concurrent dictionary updates are happened, update requests initiated from thebyte buffer, a bad compressed message has been receivedmaster entity are ordered first. For example, the update requests for Messages 1, 2, anddecompression failure occurs. 6.2.6. CALL ... RETURN The CALL3 are ordered before those for Messages 101, 102, andRETURN tokens provide support103 respectively in the list of the total order relationship forcompression algorithms withanested structure. CALL (index) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0 0 1 1 1| Index MSB | Index LSB | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ RETURN +-+-+-+-+-+-+-+-+ |0 0 0 0 1 0 0 0| +-+-+-+-+-+-+-+-+ When the decompressor reachessequence of dictionary updates (TOL). DD is aCALL token, it finds the byte positionlogical representation of thetoken immediately followingDynamic Context Data, TSS is theCALL tokenlogical representation of sent SigComp messages andcopies this integer into stack[stack_free] readyTRS is the logical representation storage of received SigComp messages. Since the update request forlater retrieval. It then increases stack_free byMessage 1and continues token execution at the byte position specified inis ordered before that for Message 101 according to theCALL token. Whentotal order relationship, thedecompressor reaches a RETURN token it decreases stack_free by 1, and then continues token executionupdate request for Message 101 atthe byte position specified in stack[stack_free]. If stack_free ever becomes more than buffer_size - 1 or less than 0 then a bad compressed message has been received and decompression failure occurs (see Section 3.4.). 6.2.7. HUFFMAN The HUFFMAN token maps a shorthand Huffman code onto its uncompressed equivalent. HUFFMAN (position, bit offset, destination, n, length 0, length 1, ... , length n - 1) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |0 0 0 0Entity Y is blocked until that for Message 10 0 1| Position MSBbecomes ready to be moved, as indicated by the reception of the acknowledgement piggybacked with Message 3. |Position LSB|Bit OffsetDD = {} | | DD = {} TSS = {1} | | TSS = {101} TRS = {} | | TRS = {} TOL = {1} | | TOL = {} | [1] [101] | Hannu,Liu, Price, Rosenberg,et al. [Page19]12] INTERNET-DRAFT SigCompOctober 31November 21 , 2001+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Destination MSB|Destination LSB| MSB of n|-----------\ /-----------| |LSB of n\/ |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Length 0/\ |Length 1|<----------/ \---------->| | | DD = {} | | DD = {} TSS = {1, 2} | | TSS = {101, 102} TRS = {101} | | TRS = {1} TOL = {1, 101, 2} | | TOL = {1} | [2] [102] | |-----------\ /-----------| | \/ | | /\ | |<----------/ \---------->| | | DD = {1} | | DD = {} TSS = {2, 3} |...|Length nTSS = {101 -1103} TRS = {101, 102} |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ The meaning of the first three parameters is explained below: Position: 2-byte integer indicating the byte location of the Huffman code to be decompressed. Bit Offset: 1-byte integer indicating the bit offset at which the Huffman code begins within the byte specified above. Destination: 2-byte integer indicating the location to which the uncompressed value will be copied. Following the [DEFLATE] convention a bit offset of 0 indicates the least significant bit of a byte, whilst a bit offset of 7 indicates the most significant bit. For example, suppose that an 8-bit Huffman code begins at byte position 0 and bit offset 2. In this case the 8 bits of the Huffman code can be found in the following locations (Bit 0 is the first bit in the Huffman code and Bit 7 is the last bit): MSB LSB MSB LSB +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |5 4 3 2 1 0|7 6| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Byte 0 Byte 1 The remaining parameters specify the actual Huffman codes and their uncompressed equivalents. Note that the Huffman codes are downloadedTRS = {1, 2} TOL = {101, 2, | | TOL = {1, 101, 2} 102, 3} | | | [3] [103] | |-----------\ /-----------| | \/ | | /\ | |<----------/ \---------->| | | DD = {1, 101, 2} | | DD = {1, 101} TSS = {3} | | TSS = {102, 103} TRS = {102, 103} | | TRS = {2, 3} TOL = {102,3,103} | | TOL = {2, 102, 3} | | CD Entity X CD Entity Y Figure 6. An Example of Proposed Scheme with Total Order Relationship for Dynamic Context Data Updates. 6. Capability exchange Before two SigComp entities start to send compressed messages between them, they MUST agree on thedecompressor using "Canonical" Huffman as described in Section 3.2.2 of [DEFLATE].capabilities they will use. Thisformat is very efficient because it cansection does not specifya set of Huffman codes by sending only their lengths. The parameter n specifieshow to perform thetotal number of Huffman codes. Following this parameter isexchange, but preferably it should be conducted at thelengthnegotiation ofeach Huffman code in bits, where each code can be between 1 and 255 bits in lengths.applying SigComp. Buffer size Thelength j specifies the lengthavailable byte buffer size of theHuffman code which maps onto the uncompressed 2-byte integer j. If length j is set to 0 then theredecompressor MUST be exchanged. Hannu,Liu, Price, Rosenberg,et al. [Page20]13] INTERNET-DRAFT SigCompOctober 31November 21 , 2001is no Huffman code mapping onto the integer j, so it cannot be communicated to the decompressor. The actual Huffman codes themselves are assigned as per [DEFLATE], using the following two rules: * All codes of a given bit length have lexicographically consecutive values,SigComp headers Only in thesame order as the symbols they represent; * Shorter codes lexicographically precede longer codes. As an example, suppose thatcase when both SigComp entities indicate theuncompressed 2-byte integers 0, 1, 2 and 3 have Huffman codesuse oflengths 2, 1, 3 and 3 bits respectively. Then the actual Huffman codes have the following values: Uncompressed integer Code length (bits) Huffman code 0 2 10 1 1 0 2 3 110 3 3 111 Whenheaders, thedecompressor encountersSigComp protocol MUST add aHUFFMAN token it reads the Huffman code at the specified position and bit offset, and maps it to the corresponding 2-byte uncompressed integer. The decompressor then copies this uncompressed integerSigComp header to thespecified destination in the byte buffer. Finally, the decompressor updates the position and bit offset parameters with the location ofcompressor output. In any other case thenext Huffman code (ready to decompress it atprotocol MUST NOT add alater stage).header. Shared compression Ifthe bit offset doesa SigComp entity supports shared compression it MAY indicate that. However, shared compression can only be used in combination with SigComp headers. A SigComp entity is nottake a value between 0 and 7 inclusive then a bad compressed message has been received and decompression failure occurs (see Section 6.1.4.). Decompression failure also occursrequired to use shared compression even ifa Huffman codeit isencountered for which nosupported by the correspondinguncompressed integer has been defined.entity. CPU power TBW 7. Security considerations TBW 8. IANA considerations TBW 9. Authors' addresses Hans Hannu, Editor Box 920 Ericsson Erisoft AB SE-971 28 Lulea, Sweden Phone: +46 920 20 21 84 Fax: +46 920 20 20 99 EMail: hans.hannu@epl.ericsson.se Jan Christoffersson Box 920 Ericsson Erisoft AB SE-971 28 Lulea, Sweden Phone: +46 920 20 28 40 Fax: +46 920 20 20 99 EMail: jan.christoffersson@epl.ericsson.se Hannu,Liu, Price, Rosenberg,et al. [Page21]14] INTERNET-DRAFT SigCompOctober 31November 21 , 20019. Authors' Addresses Hans HannuChristopher Clanton Nokia Research Center 6000 Connection Drive Irving, TX 75039 USA Phone: +1 972 894-4886 Fax: +1 972 894-4589 E-mail: christopher.clanton@nokia.com Stefan Forsgren Box 920 Ericsson Erisoft AB SE-971 28 Lulea, Sweden Phone: +46 920 2021 8423 39 Fax: +46 920 20 20 99 EMail:hans.hannu@ericsson.comstefan.forsgren@epl.ericsson.se Khiem Le Nokia Research Center 6000 Connection Drive Irving, TX 75039 USA Phone: +1 972 894-4882 Fax: +1 972 894-4589 E-mail: khiem.le@nokia.com Ka Cheong Leung Nokia Research Center 6000 Connection Drive Irving, TX 75039 USA Phone: +1 972 374-0630 Fax: +1 972 894-4589 E-mail: kacheong.leung@nokia.com Zhigang Liu 2-700 Mobile Networks Laboratory Nokia Research Center 6000 Connection Drive Irving, TX 75039, USA Phone: +1 972 894-5935 Fax: +1 972 894-4589 Hannu, et al. [Page 15] INTERNET-DRAFT SigComp November 21 , 2001 EMail: zhigang.liu@nokia.com Richard Price Roke Manor Research Ltd Romsey, Hants, SO51 0ZN United Kingdom Phone: +44 1794 833681 Email: richard.price@roke.co.ukmore authors...Jonathan Rosenberg dynamicsoft 72 Eagle Rock Avenue First Floor East Hanover, NJ 07936 Email: jdrosen@dynamicsoft.com Krister Svanbro Box 920 Ericsson Erisoft AB SE-971 28 Lulea, Sweden Phone: +46 920 20 20 77 Fax: +46 920 20 20 99 EMail: krister.svanbro@epl.ericsson.se 10. Intellectual Property Right ConsiderationsThere might be IPR concerns relatedThe IETF has been notified of intellectual property rights claimed in regard tothis contribution. This will be further verified withsome or all of theauthors and clarifiedspecification contained infuture versions.this document. For more information consult the online list of claimed rights. 11. References [ALG] R. Price et. al., Universal Decompression Algorithm, Internet Draft (work in progress), November 2001. <draft-ietf-rohc-sigcomp-algorithm-00.txt> [DEFLATE] "DEFLATE Compressed Data Format Specification version 1.3", RFC 1951, P. Deutsch, May 1996 [RTSP] H. Schulzrinne, A. Rao and R. Lanphier, Real Time Streaming Protocol (RTSP), RFC 2326, April 1998. Hannu, et al. [Page 16] INTERNET-DRAFT SigComp November 21 , 2001 [REQ] H. Hannu (Editor), Signaling Compression Requirements & Assumptions, Internet Draft (work inprogress),Septemberprogress),November 2001.<draft-ietf-rohc-signaling-req-assump-02.txt> Hannu, Liu, Price, Rosenberg, et al. [Page 22] INTERNET-DRAFT SigComp October 31 , 2001<draft-ietf-rohc-signaling-req-assump-03.txt> [SIP] M. Handley, H. Schulzrinne, E. Schooler and J. Rosenberg, SIP: Session Initiation Protocol, RFC 2543, August 2000. This Internet-Draft expires inAprilMay 2002. Hannu,Liu, Price, Rosenberg,et al. [Page23]17] ----