The Presence-Specific Static Dictionary for Signaling Compression (Sigcomp)
Extracted elements (20)
A priority scheme (1–5) was assigned to each string, with low values (1) indicating high probability of occurrence in presence documents. Strings with low priority numbers are placed at the end of the dictionary to benefit compression algorithms like DEFLATE that achieve better efficiency when commonly-used strings are at the bottom.
Only strings of four or more characters were selected for the dictionary because most compression algorithms have a break-even point around three or four characters, making shorter strings inefficient to include.
Simulations showed that applying the presence-specific static dictionary on top of other mitigation mechanisms (SigComp, partial notification, partial publication) achieves a further compression factor of approximately 10%, motivating the creation of this separate presence-specific dictionary distinct from the SIP/SDP dictionary in RFC 3485.
The '<' and '>' delimiters were intentionally omitted from XML element strings so that the same string entry can be reused for start-tags (e.g., <foo>), start-tags with attributes (e.g., <foo attr="x">), empty-element tags (e.g., <foo/>), and end-tags (e.g., </foo>).
The dictionary is intentionally defined once and frozen forever, never intended to evolve as presence evolves. This design choice avoids the problems of updating, upgrading, and negotiating which dictionary version is supported at the remote end when multiple versions coexist.
URNs in the IETF address space (e.g., 'urn:ietf:params:xml') were split into substrings to allow dictionary reuse across multiple URN strings, improving compression efficiency by sharing common prefixes.
The presence-specific static dictionary is designed to coexist with the static SIP/SDP dictionary defined in RFC 3485. SigComp endpoints will initially announce the availability of one or both dictionaries until the other end acknowledges receipt of the announcement.
The presence-specific static dictionary is unique and MAY be available in SigComp implementations for SIP that support the presence service.
The dictionary includes core PIDF XML strings such as 'presence', 'tuple', 'contact', 'status', 'basic', 'open', 'closed', 'timestamp', and 'note' (priority 1–2), covering the fundamental elements of RFC 3863 presence documents.
The dictionary includes GEOPRIV location object strings from RFC 4119 such as 'geopriv', 'location-info', 'usage-rules', 'retransmission-allowed', 'retention-expiry', 'external-ruleset', 'civicAddress', and 'provided-by' at priorities 3–4.
The dictionary includes OMA Presence Simple strings ('urn:oma:xml:prs:pidf:oma-pres', 'service-description', 'service-id', 'willingness', 'registration-state', 'barring-state', 'overriding-willingness', 'network-availability') reflecting the OMA Presence Simple V1.0.1 specification.
The dictionary includes RPID (RFC 4480) activity strings such as 'activities', and a comprehensive set of mood values (e.g., 'afraid', 'amazed', 'angry', 'happy', 'sad' equivalents) and place-type values (e.g., 'airport', 'restaurant', 'hospital') all at priority 5.
The dictionary includes SIP method name strings (CANCEL, INFO, INVITE, MESSAGE, NOTIFY, OPTIONS, PRACK, PUBLISH, REFER, REGISTER, SUBSCRIBE, UPDATE) and SIP extension strings (e.g., '100rel', 'early-session', 'precondition', 'resource-priority') from RFC 3261 and related specifications, at priority 5.
The dictionary includes watcher information strings from RFC 3858, including 'watcherinfo', 'watcher-list', 'watcher', subscription states ('pending', 'waiting', 'terminated', 'approved', 'rejected', 'timeout'), and subscription parameters ('duration-subscribed=', 'expiration=').
The dictionary includes XML infrastructure strings 'encoding=', 'UTF-8?>', 'xmlns=', 'version=', '<?xml', and 'urn:ietf:params:xml' at priority 1, enabling compression of the XML declaration and namespace declarations common to all presence documents.
The dictionary supports partial loading by priority subset: implementers can use only priorities 1 through N to save UDVM space, with defined string offset/length and table offset/length values for each priority range (1 only through 1..5) as given in Table 1.
The presence-specific static dictionary is a collection of well-known strings appearing in most SIP presence documents, defined as a SigComp state item with state_identifier 0xd942297d0bb38fc01d6741d6b3b48157ac8e1be0, state_length 0x0D93, and minimum_access_length 6. It coexists with the SIP/SDP dictionary from RFC 3485 and is compression-algorithm independent.
The string subset of the dictionary can be accessed via STATE-ACCESS (%ps, 6, 0, 0x0955, %sa, 0) and the table subset via STATE-ACCESS (%ps, 6, 0x0955, 0x043E, %sa, 0), where %ps points to UDVM memory containing 0xd942297d0bb3.
This document defines a presence-specific static dictionary for SigComp and therefore the security considerations of RFC 3320 (Signaling Compression) apply in full. The memo does not introduce any known additional security risks beyond those already addressed by SigComp.
The binary SigComp dictionary state consists of two concatenated parts: a string subset (containing all presence strings roughly ordered by priority, with low-priority strings at the end) and a table subset (pairs of length/offset values where length is 1 byte and offset is 2 bytes with 1024 added to allow direct referencing when state is loaded at address 1024).