2012-12-03 03:11:21 +00:00
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;
|
|
|
|
; RFC 5234 - ABNF CORE RULES
|
|
|
|
;
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
OCTET= %x00-FF ; 8 bits of data
|
|
|
|
CHAR= %x01-7F ; any 7-bit US-ASCII character, excluding NUL
|
|
|
|
VCHAR= %x21-7E ; visible (printing) characters
|
|
|
|
ALPHA= %x41-5A / %x61-7A ; A-Z / a-z
|
|
|
|
DIGIT= %x30-39 ; 0-9
|
|
|
|
|
|
|
|
CTL= %x00-1F / %x7F ; any US-ASCII control character: ; (octets 0 - 31) and DEL (127)
|
|
|
|
|
|
|
|
HTAB= %x09 ; horizontal tab
|
|
|
|
LF= %x0A ; linefeed
|
|
|
|
CR= %x0D ; carriage return
|
|
|
|
SP= %x20 ; space
|
|
|
|
DQUOTE= %x22 ; " (Double Quote)
|
|
|
|
BIT= "0" / "1"
|
|
|
|
|
|
|
|
HEXDIG= DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
|
|
|
|
|
|
|
|
CRLF= CR LF ; Internet standard newline
|
|
|
|
WSP= SP / HTAB ; white space
|
|
|
|
LWSP= *(WSP / CRLF WSP) ; linear white space (past newline)
|
|
|
|
;---------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;
|
|
|
|
; Most common definitions in Header Fields
|
|
|
|
;
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
|
|
|
;;;; accept-param
|
|
|
|
accept-param = ("q" EQUAL qvalue ) / generic-param
|
|
|
|
|
|
|
|
;;;; addr-spec
|
|
|
|
addr-spec = SIP-URI / SIPS-URI / absoluteURI
|
|
|
|
|
|
|
|
;;;; algorithm
|
|
|
|
algorithm = "algorithm" EQUAL ( aka-namespace / algorithm-value )
|
|
|
|
aka-namespace = aka-version "-" algorithm-value
|
|
|
|
aka-version = "AKAv" 1*DIGIT
|
|
|
|
algorithm-value = ( "MD5" / "MD5-sess" / token )
|
|
|
|
|
|
|
|
;;;; callid
|
|
|
|
callid = word [ "@" word ]
|
|
|
|
|
|
|
|
;;;; delta-seconds
|
|
|
|
delta-seconds = 1*DIGIT
|
|
|
|
|
|
|
|
;;;; generic-param
|
|
|
|
generic-param = token [ EQUAL gen-value ]
|
|
|
|
gen-value = token / host / quoted-string
|
|
|
|
|
|
|
|
;;;; name-addr
|
|
|
|
name-addr = [ display-name ] LAQUOT addr-spec RAQUOT
|
|
|
|
display-name = *(token LWS) / quoted-string
|
|
|
|
|
|
|
|
;;;; nonce
|
|
|
|
nonce = "nonce" EQUAL ( aka-nonce / nonce-value )
|
|
|
|
aka-nonce = LDQUOT aka-nonce-value RDQUOT
|
|
|
|
aka-nonce-value = <base64 encoding of RAND, AUTN, and server specific data>
|
|
|
|
nonce-value = quoted-string
|
|
|
|
|
|
|
|
;;;; not-defined ; This is my own ...
|
|
|
|
not-defined = token
|
|
|
|
|
|
|
|
;;;; option-tag
|
|
|
|
option-tag = token
|
|
|
|
|
|
|
|
;;;; qvalue
|
|
|
|
qvalue = ("0" [ "." 0*3DIGIT ] ) / ( "1" [ "." 0*3("0") ] )
|
|
|
|
|
|
|
|
;;;; pname
|
|
|
|
pname = 1*paramchar
|
|
|
|
|
|
|
|
;;;; pvalue
|
|
|
|
pvalue = 1*paramchar
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;
|
|
|
|
; URIs --> SIP / SIPS / TEL
|
|
|
|
;
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
|
|
|
;---------------------
|
|
|
|
; SIP-URI / SIPS-URI
|
|
|
|
;---------------------
|
|
|
|
SIP-URI = "sip:" [ userinfo ] hostport uri-parameters [ headers ]
|
|
|
|
SIPS-URI = "sips:" [ userinfo ] hostport uri-parameters [ headers ]
|
|
|
|
|
|
|
|
;---------------------
|
|
|
|
; URI -- userinfo
|
|
|
|
;---------------------
|
|
|
|
userinfo = ( user / telephone-subscriber ) [ ":" password ] "@"
|
|
|
|
user = 1*( unreserved / escaped / user-unreserved )
|
|
|
|
user-unreserved = "&" / "=" / "+" / "$" / "," / ";" / "?" / "/"
|
|
|
|
password = *( unreserved / escaped / "&" / "=" / "+" / "$" / "," )
|
|
|
|
|
|
|
|
;---------------------
|
|
|
|
; URI -- hostport
|
|
|
|
;---------------------
|
|
|
|
hostport = host [ ":" port ]
|
|
|
|
host = hostname / IPv4address / IPv6reference
|
|
|
|
hostname = *( domainlabel "." ) toplabel [ "." ]
|
|
|
|
domainlabel = alphanum / alphanum *( alphanum / "-" ) alphanum
|
|
|
|
toplabel = ALPHA / ALPHA *( alphanum / "-" ) alphanum
|
|
|
|
IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
|
|
|
|
IPv6reference = "[" IPv6address "]"
|
|
|
|
IPv6address = hexpart [ ":" IPv4address ]
|
|
|
|
hexpart = hexseq / hexseq "::" [ hexseq ] / "::" [ hexseq ]
|
|
|
|
hexseq = hex4 *( ":" hex4 )
|
|
|
|
hex4 = 1*4HEXDIG
|
|
|
|
port = 1*DIGIT
|
|
|
|
|
|
|
|
;---------------------
|
|
|
|
; URI -- uri-parameters
|
|
|
|
;---------------------
|
|
|
|
uri-parameters = *( ";" uri-parameter )
|
|
|
|
uri-parameter = transport-param / user-param / method-param / ttl-param / maddr-param / lr-param / compression-param / target-param / cause-param / orig / gr-param / other-param
|
|
|
|
|
|
|
|
;;;; transport-param
|
|
|
|
transport-param = "transport=" ( "udp" / "tcp" / "sctp" / "tls" / "tls-sctp" / other-transport )
|
|
|
|
other-transport = token
|
|
|
|
|
|
|
|
;;;; user-param
|
|
|
|
user-param = "user=" ( "phone" / "ip" / "dialstring" / other-user )
|
|
|
|
other-user = token
|
|
|
|
dialstring = dialstring-digits context
|
|
|
|
dialstring-digits = *dialstring-element dialstring-digit *dialstring-element
|
|
|
|
dialstring-digit = HEXDIG / "*" / "#"
|
|
|
|
dialstring-element = dialstring-digit / "P" / "X" / visual-separator
|
|
|
|
|
|
|
|
;;;; method-param
|
|
|
|
method-param = "method=" Method
|
|
|
|
|
|
|
|
;;;; ttl-param
|
|
|
|
ttl-param = "ttl=" ttl
|
|
|
|
|
|
|
|
;;;; maddr-param
|
|
|
|
maddr-param = "maddr=" host
|
|
|
|
|
|
|
|
;;;; lr-param
|
|
|
|
lr-param = "lr"
|
|
|
|
|
|
|
|
;;;; compression-param
|
|
|
|
compression-param = "comp=" ( "sigcomp" / other-compression )
|
|
|
|
other-compression = token
|
|
|
|
|
|
|
|
;;;; target-param
|
|
|
|
target-param = "target" EQUAL pvalue
|
|
|
|
|
|
|
|
;;;; cause-param
|
|
|
|
cause-param = "cause" EQUAL Status-Code
|
|
|
|
|
|
|
|
;;;; orig
|
|
|
|
orig = "orig"
|
|
|
|
|
|
|
|
;;;; gr-param
|
|
|
|
gr-param = "gr" [ "=" pvalue ]
|
|
|
|
|
|
|
|
;;;; other-param
|
|
|
|
other-param = pname [ "=" pvalue ]
|
|
|
|
paramchar = param-unreserved / unreserved / escaped
|
|
|
|
param-unreserved = "[" / "]" / "/" / ":" / "&" / "+" / "$"
|
|
|
|
|
|
|
|
|
|
|
|
;---------------------
|
|
|
|
; URI -- headers
|
|
|
|
;---------------------
|
|
|
|
headers = "?" header *( "&" header )
|
|
|
|
header = hname [ "=" hvalue ]
|
|
|
|
hname = 1*( hnv-unreserved / unreserved / escaped )
|
|
|
|
hvalue = *( hnv-unreserved / unreserved / escaped )
|
|
|
|
hnv-unreserved = "[" / "]" / "/" / "?" / ":" / "+" / "$"
|
|
|
|
|
|
|
|
;---------------------
|
|
|
|
; absoluteURI
|
|
|
|
;---------------------
|
|
|
|
absoluteURI = scheme ":" ( hier-part / opaque-part )
|
|
|
|
hier-part = ( net-path / abs-path ) [ "?" query ]
|
|
|
|
net-path = "//" authority [ abs-path ]
|
|
|
|
abs-path = "/" path-segments
|
|
|
|
query = *uric
|
|
|
|
opaque-part = uric-no-slash *uric
|
|
|
|
uric = reserved / unreserved / escaped
|
|
|
|
uric-no-slash = unreserved / escaped / ";" / "?" / ":" / "@" / "&" / "=" / "+" / "$" / ","
|
|
|
|
path-segments = segment *( "/" segment )
|
|
|
|
segment = *pchar *( ";" param )
|
|
|
|
param = *pchar
|
|
|
|
pchar = unreserved / escaped / ":" / "@" / "&" / "=" / "+" / "$" / ","
|
|
|
|
scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
|
|
|
|
authority = srvr / reg-name
|
|
|
|
srvr = [ [ userinfo "@" ] hostport ]
|
|
|
|
reg-name = 1*( unreserved / escaped / "$" / "," / ";" / ":" / "@" / "&" / "=" / "+" )
|
|
|
|
|
|
|
|
;---------------------
|
|
|
|
; telephone-URI
|
|
|
|
;---------------------
|
|
|
|
telephone-uri = "tel:" telephone-subscriber
|
|
|
|
telephone-subscriber = global-number / local-number
|
|
|
|
global-number = global-number-digits *par
|
|
|
|
local-number = local-number-digits *par context *par
|
|
|
|
|
|
|
|
;;;; par
|
|
|
|
par = parameter / extension / isdn-subaddress / rn / cic / npdi / enum-dip-indicator / trunk-group / trunk-context
|
|
|
|
|
|
|
|
;;;; context
|
|
|
|
context = ";phone-context=" descriptor
|
|
|
|
|
|
|
|
;;;; parameter
|
|
|
|
parameter = ";" pname [ "=" pvalue ]
|
|
|
|
paramchar = param-unreserved / unreserved / pct-encoded
|
|
|
|
pct-encoded = "%" HEXDIG HEXDIG
|
|
|
|
param-unreserved = "[" / "]" / "/" / ":" / "&" / "+" / "$"
|
|
|
|
|
|
|
|
;;;; extension
|
|
|
|
extension = ";ext=" 1*phonedigit
|
|
|
|
|
|
|
|
;;;; isdn-subaddress
|
|
|
|
isdn-subaddress = ";isub=" 1*uric
|
|
|
|
|
|
|
|
;;;; isub-encoding
|
|
|
|
isub-encoding = isub-encoding-tag "=" isub-encoding-value
|
|
|
|
isub-encoding-tag = "isub-encoding"
|
|
|
|
isub-encoding-value = "nsap-ia5" / "nsap-bcd" / "nsap" / token
|
|
|
|
|
|
|
|
;;;; Number Portability Parameters: rn, npdi, cic
|
|
|
|
rn = ";rn=" ( global-rn / local-rn )
|
|
|
|
cic = ";cic=" ( global-cic / local-cic )
|
|
|
|
npdi = ";npdi"
|
|
|
|
global-rn = not-defined
|
|
|
|
|
|
|
|
;;;; global-rn = global-hex-digits
|
|
|
|
local-rn = 1*hex-phonedigit rn-context
|
|
|
|
rn-context = ";rn-context=" rn-descriptor
|
|
|
|
rn-descriptor = domainname / global-hex-digits
|
|
|
|
global-hex-digits = "+" 1*3(DIGIT) *hex-phonedigit
|
|
|
|
hex-phonedigit = HEXDIG / visual-separator
|
|
|
|
global-cic = global-hex-digits
|
|
|
|
local-cic = 1*hex-phonedigit cic-context
|
|
|
|
cic-context = ";cic-context=" rn-descriptor
|
|
|
|
|
|
|
|
;;;; enum-dip-indicator
|
|
|
|
enum-dip-indicator = ";enumdi"
|
|
|
|
|
|
|
|
;;;; trunk-group
|
|
|
|
trunk-group = ";tgrp=" trunk-group-label
|
|
|
|
trunk-context = ";trunk-context=" descriptor
|
|
|
|
trunk-group-label = 1*( unreserved / escaped / trunk-group-unreserved )
|
|
|
|
trunk-group-unreserved = "/" / "&" / "+" / "$"
|
|
|
|
|
|
|
|
;;;; descriptor
|
|
|
|
descriptor = domainname / global-number-digits
|
|
|
|
|
|
|
|
;;;; global- & local-number-digits
|
|
|
|
global-number-digits = "+" *phonedigit DIGIT *phonedigit
|
|
|
|
local-number-digits = *phonedigit-hex ( HEXDIG / "*" / "#" ) *phonedigit-hex
|
|
|
|
phonedigit = DIGIT / [ visual-separator ]
|
|
|
|
phonedigit-hex = HEXDIG / "*" / "#" / [ visual-separator ]
|
|
|
|
visual-separator = "-" / "." / "(" / ")"
|
|
|
|
|
|
|
|
;;;; domainname
|
|
|
|
domainname = *( domainlabel "." ) toplabel [ "." ]
|
|
|
|
domainlabel = alphanum / alphanum *( alphanum / "-" ) alphanum
|
|
|
|
toplabel = ALPHA / ALPHA *( alphanum / "-" ) alphanum
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;
|
|
|
|
; RFC 3261 - SIP ABNF
|
|
|
|
;
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;;;; alphanum
|
|
|
|
alphanum = ALPHA / DIGIT
|
|
|
|
|
|
|
|
;;;; LHEX
|
|
|
|
LHEX = DIGIT / %x61-66 ; lowercase a-f
|
|
|
|
|
|
|
|
;;;; WS
|
|
|
|
LWS = [*WSP CRLF] 1*WSP ; linear whitespace
|
|
|
|
SWS = [LWS] ; sep whitespace
|
|
|
|
|
|
|
|
;;;; HCOLON
|
|
|
|
HCOLON = *( SP / HTAB ) ":" SWS
|
|
|
|
|
|
|
|
;;;; separators
|
|
|
|
separators = "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "\" / DQUOTE / "/" / "[" / "]" / "?" / "=" / "{" / "}" / SP / HTAB
|
|
|
|
|
|
|
|
;;;; SWS-based delimiters
|
|
|
|
STAR = SWS "*" SWS ; asterisk
|
|
|
|
SLASH = SWS "/" SWS ; slash
|
|
|
|
EQUAL = SWS "=" SWS ; equal
|
|
|
|
LPAREN = SWS "(" SWS ; left parenthesis
|
|
|
|
RPAREN = SWS ")" SWS ; right parenthesis
|
|
|
|
LAQUOT = SWS "<" ; left angle quote
|
|
|
|
RAQUOT = ">" SWS ; right angle quote
|
|
|
|
COMMA = SWS "," SWS ; comma
|
|
|
|
SEMI = SWS ";" SWS ; semicolon
|
|
|
|
COLON = SWS ":" SWS ; colon
|
|
|
|
LDQUOT = SWS DQUOTE ; open double quotation mark
|
|
|
|
RDQUOT = DQUOTE SWS ; close double quotation mark
|
|
|
|
|
|
|
|
;;;; token
|
|
|
|
token = 1*( alphanum / "-" / "." / "!" / "%" / "*" / "_" / "+" / "`" / "'" / "~" )
|
|
|
|
|
|
|
|
;;;; quoted-string
|
|
|
|
quoted-string = SWS DQUOTE *( qdtext / quoted-pair ) DQUOTE
|
|
|
|
qdtext = LWS / %x21 / %x23-5B / %x5D-7E / UTF8-NONASCII
|
|
|
|
quoted-pair = "\" ( %x00-09 / %x0B-0C / %x0E-7F )
|
|
|
|
|
|
|
|
;;;; comment
|
|
|
|
comment = LPAREN *( ctext / quoted-pair / comment-comment ) RPAREN
|
|
|
|
ctext = %x21-27 / %x2A-5B / %x5D-7E / UTF8-NONASCII / LWS
|
|
|
|
comment-comment = not-defined
|
|
|
|
|
|
|
|
;;;; word
|
|
|
|
word = 1*( alphanum / "-" / "." / "!" / "%" / "*" / "_" / "+" / "`" / "'" / "~" / "(" / ")" / "<" / ">" / ":" / "\" / DQUOTE / "/" / "[" / "]" / "?" / "{" / "}" )
|
|
|
|
|
|
|
|
;;;; text
|
|
|
|
TEXT-UTF8-TRIM = 1*TEXT-UTF8char *(*LWS TEXT-UTF8char)
|
|
|
|
TEXT-UTF8char = %x21-7E / UTF8-NONASCII
|
|
|
|
UTF8-NONASCII = %xC0-DF 1UTF8-CONT / %xE0-EF 2UTF8-CONT / %xF0-F7 3UTF8-CONT / %xF8-FB 4UTF8-CONT / %xFC-FD 5UTF8-CONT
|
|
|
|
UTF8-CONT = %x80-BF
|
|
|
|
|
|
|
|
;;;; escaped
|
|
|
|
escaped = "%" HEXDIG HEXDIG
|
|
|
|
|
|
|
|
;;;; mark
|
|
|
|
mark = "-" / "_" / "." / "!" / "~" / "*" / "'" / "(" / ")"
|
|
|
|
|
|
|
|
;;;; reserved / unreserved
|
|
|
|
reserved = ";" / "/" / "?" / ":" / "@" / "&" / "=" / "+" / "$" / ","
|
|
|
|
unreserved = alphanum / mark
|
|
|
|
|
|
|
|
;---------------------
|
|
|
|
; SIP MESSAGE
|
|
|
|
;---------------------
|
|
|
|
|
|
|
|
;;;; SIP-message
|
|
|
|
SIP-message = Request / Response
|
|
|
|
|
|
|
|
;;;; Request
|
|
|
|
Request = Request-Line *( message-header ) CRLF [ message-body ]
|
|
|
|
|
|
|
|
;;;; Response
|
|
|
|
Response = Status-Line *( message-header ) CRLF [ message-body ]
|
|
|
|
|
|
|
|
;;;; Request-Line
|
|
|
|
Request-Line = Method SP Request-URI SP SIP-Version CRLF
|
|
|
|
|
|
|
|
;;;; Status-Line
|
|
|
|
Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
|
|
|
|
|
|
|
|
;;;; Method
|
|
|
|
Method = INVITEm / ACKm / OPTIONSm / BYEm / CANCELm / REGISTERm / INFOm / PRACKm / SUBSCRIBEm / NOTIFYm / UPDATEm / MESSAGEm / REFERm / PUBLISHm / extension-method
|
|
|
|
|
|
|
|
INVITEm = %x49.4E.56.49.54.45 ; INVITE in caps [RFC3261]
|
|
|
|
ACKm = %x41.43.4B ; ACK in caps [RFC3261]
|
|
|
|
OPTIONSm = %x4F.50.54.49.4F.4E.53 ; OPTIONS in caps [RFC3261]
|
|
|
|
BYEm = %x42.59.45 ; BYE in caps [RFC3261]
|
|
|
|
CANCELm = %x43.41.4E.43.45.4C ; CANCEL in caps [RFC3261]
|
|
|
|
REGISTERm = %x52.45.47.49.53.54.45.52 ; REGISTER in caps [RFC3261]
|
|
|
|
INFOm = %x49.4E.46.4F ; INFO in caps [RFC2976]
|
|
|
|
PRACKm = %x50.52.41.43.4B ; PRACK in caps [RFC3262]
|
|
|
|
SUBSCRIBEm = %x53.55.42.53.43.52.49.42.45 ; SUBSCRIBE in caps [RFC3265]
|
|
|
|
NOTIFYm = %x4E.4F.54.49.46.59 ; NOTIFY in caps [RFC3265]
|
|
|
|
UPDATEm = %x55.50.44.41.54.45 ; UPDATE in caps [RFC3311]
|
|
|
|
MESSAGEm = %x4D.45.53.53.41.47.45 ; MESSAGE in caps [RFC3428]
|
|
|
|
REFERm = %x52.45.46.45.52 ; REFER in caps [RFC3515]
|
|
|
|
PUBLISHm = %x50.55.42.4C.49.53.48 ; PUBLISH in caps [RFC3903]
|
|
|
|
|
|
|
|
extension-method = token
|
|
|
|
|
|
|
|
;;;; Request-URI
|
|
|
|
Request-URI = SIP-URI / SIPS-URI / absoluteURI
|
|
|
|
|
|
|
|
;;;; SIP-Version
|
|
|
|
SIP-Version = "SIP" "/" 1*DIGIT "." 1*DIGIT
|
|
|
|
|
|
|
|
;;;; message-header
|
|
|
|
message-header = ( Accept / Accept-Contact / Accept-Encoding / Accept-Language / Accept-Resource-Priority / Alert-Info / Allow / Allow-Events / Authentication-Info / Authorization / Call-ID / Call-Info / Contact / Content-Disposition / Content-Encoding / Content-Language / Content-Length / Content-Type / CSeq / Date / Error-Info / Event / Expires / From / History-Info / Identity / Identity-Info / In-Reply-To / Join / Max-Forwards / MIME-Version / Min-Expires / Min-SE / Organization / Path / Priority / Privacy / Proxy-Authenticate / Proxy-Authorization / Proxy-Require / RAck / Reason / Record-Route / Refer-Sub / Refer-To / Referred-By / Reject-Contact / Replaces / Reply-To / Request-Disposition / Require / Resource-Priority / Retry-After / Route / RSeq / Security-Client / Security-Server / Security-Verify / Server / Service-Route / Session-Expires / SIP-ETag / SIP-If-Match / Subject / Subscription-State / Supported / Target-Dialog / Timestamp / To / Unsupported / User-Agent / Via / Warning / WWW-Authenticate / P-Access-Network-Info / P-Answer-State / P-Asserted-Identity / P-Associated-URI / P-Called-Party-ID / P-Charging-Function-Addresses / P-Charging-Vector / P-DCS-Billing-Info / P-DCS-LAES / P-DCS-OSPS / P-DCS-Redirect / P-DCS-Trace-Party-ID / P-Early-Media / P-Media-Authorization / P-Preferred-Identity / P-Profile-Key / P-User-Database / P-Visited-Network-ID / extension-header ) CRLF
|
|
|
|
|
|
|
|
extension-header = header-name HCOLON header-value
|
|
|
|
header-name = token
|
|
|
|
header-value = *( TEXT-UTF8char / UTF8-CONT / LWS )
|
|
|
|
|
|
|
|
;;;; message-body
|
|
|
|
message-body = *OCTET
|
|
|
|
|
|
|
|
;---------------------
|
|
|
|
; SIP Header Fields
|
|
|
|
;---------------------
|
|
|
|
;;;; Accept
|
|
|
|
Accept = "Accept" HCOLON [ accept-range *(COMMA accept-range) ]
|
|
|
|
accept-range = media-range *(SEMI accept-param)
|
|
|
|
media-range = ( "*/*" / ( m-type SLASH "*" ) / ( m-type SLASH m-subtype ) ) *( SEMI m-parameter )
|
|
|
|
|
|
|
|
;;;; Accept-Contact / a
|
|
|
|
Accept-Contact = ( "Accept-Contact" / "a" ) HCOLON ac-value *(COMMA ac-value)
|
|
|
|
ac-value = "*" *(SEMI ac-params)
|
|
|
|
ac-params = feature-param / req-param / explicit-param / generic-param
|
|
|
|
req-param = "require"
|
|
|
|
explicit-param = "explicit"
|
|
|
|
|
|
|
|
;;;; Accept-Encoding
|
|
|
|
Accept-Encoding = "Accept-Encoding" HCOLON [ encoding *(COMMA encoding) ]
|
|
|
|
encoding = codings *(SEMI accept-param)
|
|
|
|
codings = content-coding / "*"
|
|
|
|
|
|
|
|
;;;; Accept-Language
|
|
|
|
Accept-Language = "Accept-Language" HCOLON [ language *(COMMA language) ]
|
|
|
|
language = language-range *(SEMI accept-param)
|
|
|
|
language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) / "*" )
|
|
|
|
|
|
|
|
;;;; Accept-Resource-Priority
|
|
|
|
Accept-Resource-Priority = "Accept-Resource-Priority" HCOLON [r-value *(COMMA r-value)]
|
|
|
|
|
|
|
|
;;;; Alert-Info
|
|
|
|
Alert-Info = "Alert-Info" HCOLON alert-param *(COMMA alert-param)
|
|
|
|
alert-param = LAQUOT absoluteURI RAQUOT *( SEMI generic-param )
|
|
|
|
|
|
|
|
;;;; Allow
|
|
|
|
Allow = "Allow" HCOLON [Method *(COMMA Method)]
|
|
|
|
|
|
|
|
;;;; Allow-Events / u
|
|
|
|
Allow-Events = ( "Allow-Events" / "u" ) HCOLON event-type *(COMMA event-type)
|
|
|
|
|
|
|
|
;;;; Answer-Mode
|
|
|
|
Answer-Mode = "Answer-Mode" HCOLON answer-mode-value *(SEMI answer-mode-param)
|
|
|
|
answer-mode-value = "Manual" / "Auto" / token
|
|
|
|
answer-mode-param = "require" / generic-param
|
|
|
|
|
|
|
|
;;;; Authentication-Info
|
|
|
|
Authentication-Info = "Authentication-Info" HCOLON ainfo *(COMMA ainfo)
|
|
|
|
ainfo = nextnonce / message-qop / response-auth / cnonce / nonce-count
|
|
|
|
nextnonce = "nextnonce" EQUAL nonce-value
|
|
|
|
response-auth = "rspauth" EQUAL response-digest
|
|
|
|
response-digest = LDQUOT *LHEX RDQUOT
|
|
|
|
|
|
|
|
;;;; Authorization
|
|
|
|
Authorization = "Authorization" HCOLON credentials
|
|
|
|
credentials = ("Digest" LWS digest-response) / other-response
|
|
|
|
digest-response = dig-resp *(COMMA dig-resp)
|
|
|
|
dig-resp = username / realm / nonce / digest-uri / dresponse / algorithm / cnonce / opaque / message-qop / nonce-count / auth-param / auts
|
|
|
|
username = "username" EQUAL username-value
|
|
|
|
username-value = quoted-string
|
|
|
|
digest-uri = "uri" EQUAL LDQUOT digest-uri-value RDQUOT
|
|
|
|
digest-uri-value = auth-request-uri ; equal to request-uri as specified by HTTP/1.1
|
|
|
|
message-qop = "qop" EQUAL qop-value
|
|
|
|
cnonce = "cnonce" EQUAL cnonce-value
|
|
|
|
cnonce-value = nonce-value
|
|
|
|
nonce-count = "nc" EQUAL nc-value
|
|
|
|
nc-value = 8LHEX
|
|
|
|
dresponse = "response" EQUAL request-digest
|
|
|
|
request-digest = LDQUOT 32LHEX RDQUOT
|
|
|
|
auth-request-uri = not-defined
|
|
|
|
|
|
|
|
auth-param = auth-param-name EQUAL ( token / quoted-string )
|
|
|
|
auth-param-name = token
|
|
|
|
|
|
|
|
other-response = auth-scheme LWS auth-param *(COMMA auth-param)
|
|
|
|
auth-scheme = token
|
|
|
|
auts = "auts" EQUAL auts-param
|
|
|
|
auts-param = LDQUOT auts-value RDQUOT
|
|
|
|
auts-value = <base64 encoding of AUTS>
|
|
|
|
|
|
|
|
;;;; Call-ID / i
|
|
|
|
Call-ID = ( "Call-ID" / "i" ) HCOLON callid
|
|
|
|
|
|
|
|
;;;; Call-Info
|
|
|
|
Call-Info = "Call-Info" HCOLON info *(COMMA info)
|
|
|
|
info = LAQUOT absoluteURI RAQUOT *( SEMI info-param )
|
|
|
|
info-param = ( "purpose" EQUAL ( "icon" / "info" / "card" / "list-management" / token ) ) / generic-param
|
|
|
|
|
|
|
|
;;;; Contact / m
|
|
|
|
Contact = ( "Contact" / "m" ) HCOLON ( STAR / (contact-param *(COMMA contact-param)))
|
|
|
|
contact-param = (name-addr / addr-spec) *( SEMI contact-params)
|
|
|
|
contact-params = c-p-q / c-p-expires / feature-param / temp-gruu / pub-gruu / c-p-instance / contact-extension
|
|
|
|
c-p-q = "q" EQUAL qvalue
|
|
|
|
c-p-expires = "expires" EQUAL delta-seconds
|
|
|
|
feature-param = enc-feature-tag [ EQUAL LDQUOT (tag-value-list / string-value) RDQUOT ]
|
|
|
|
enc-feature-tag = base-tags / other-tags
|
|
|
|
base-tags = "audio" / "automata" / "class" / "duplex" / "data" / "control" / "mobility" / "description" / "events" / "priority" / "methods" / "schemes" / "application" / "video" / "language" / "type" / "isfocus" / "actor" / "text" / "extensions"
|
|
|
|
other-tags = "+" ftag-name
|
|
|
|
ftag-name = ALPHA *( ALPHA / DIGIT / "!" / "'" / "." / "-" / "%" )
|
|
|
|
tag-value-list = tag-value *("," tag-value)
|
|
|
|
tag-value = ["!"] (token-nobang / boolean / numeric)
|
|
|
|
token-nobang = 1*( alphanum / "-" / "." / "%" / "*" / "_" / "+" / "`" / "'" / "~" )
|
|
|
|
boolean = "TRUE" / "FALSE"
|
|
|
|
numeric = "#" numeric-relation number
|
|
|
|
numeric-relation = ">=" / "<=" / "=" / (number ":")
|
|
|
|
number = [ "+" / "-" ] 1*DIGIT ["." 0*DIGIT]
|
|
|
|
string-value = "<" *(qdtext-no-abkt / quoted-pair ) ">"
|
|
|
|
qdtext-no-abkt = LWS / %x21 / %x23-3B / %x3D / %x3F-5B / %x5D-7E / UTF8-NONASCII
|
|
|
|
temp-gruu = "temp-gruu" EQUAL LDQUOT *( qdtext / quoted-pair ) RDQUOT
|
|
|
|
pub-gruu = "pub-gruu" EQUAL LDQUOT *( qdtext / quoted-pair ) RDQUOT
|
|
|
|
c-p-instance = "+sip.instance" EQUAL LDQUOT "<" instance-val ">" RDQUOT
|
|
|
|
instance-val = *uric
|
|
|
|
contact-extension = generic-param
|
|
|
|
|
|
|
|
;;;; Content-Disposition
|
|
|
|
Content-Disposition = "Content-Disposition" HCOLON disp-type *( SEMI disp-param )
|
|
|
|
disp-type = "render" / "session" / "icon" / "alert" / "aib" / "early-session" / disp-extension-token
|
|
|
|
disp-param = handling-param / generic-param
|
|
|
|
handling-param = "handling" EQUAL ( "optional" / "required" / other-handling )
|
|
|
|
other-handling = token
|
|
|
|
disp-extension-token = token
|
|
|
|
|
|
|
|
;;;; Content-Encoding / e
|
|
|
|
Content-Encoding = ( "Content-Encoding" / "e" ) HCOLON content-coding *(COMMA content-coding)
|
|
|
|
content-coding = token
|
|
|
|
|
|
|
|
;;;; Content-Language
|
|
|
|
Content-Language = "Content-Language" HCOLON language-tag *(COMMA language-tag)
|
|
|
|
language-tag = primary-tag *( "-" subtag )
|
|
|
|
primary-tag = 1*8ALPHA
|
|
|
|
subtag = 1*8ALPHA
|
|
|
|
|
|
|
|
;;;; Content-Length / l
|
|
|
|
Content-Length = ( "Content-Length" / "l" ) HCOLON 1*DIGIT
|
|
|
|
|
|
|
|
;;;; Content-Type / c
|
|
|
|
Content-Type = ( "Content-Type" / "c" ) HCOLON media-type
|
|
|
|
media-type = m-type SLASH m-subtype *( SEMI m-parameter)
|
|
|
|
m-type = discrete-type / composite-type
|
|
|
|
discrete-type = "text" / "image" / "audio" / "video" / "application" / extension-token
|
|
|
|
composite-type = "message" / "multipart" / extension-token
|
|
|
|
extension-token = ietf-token / x-token
|
|
|
|
ietf-token = token
|
|
|
|
x-token = "x-" token
|
|
|
|
m-subtype = extension-token / iana-token
|
|
|
|
iana-token = token
|
|
|
|
m-parameter = m-attribute EQUAL m-value
|
|
|
|
m-attribute = token
|
|
|
|
m-value = token / quoted-string
|
|
|
|
|
|
|
|
;;;; CSeq
|
|
|
|
CSeq = "CSeq" HCOLON 1*DIGIT LWS Method
|
|
|
|
|
|
|
|
;;;; Date
|
|
|
|
Date = "Date" HCOLON SIP-date
|
|
|
|
SIP-date = rfc1123-date
|
|
|
|
rfc1123-date = wkday "," SP date1 SP time SP "GMT"
|
|
|
|
date1 = 2DIGIT SP month SP 4DIGIT
|
|
|
|
time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
|
|
|
|
wkday = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
|
|
|
|
month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
|
|
|
|
|
|
|
|
;;;; Error-Info
|
|
|
|
Error-Info = "Error-Info" HCOLON error-uri *(COMMA error-uri)
|
|
|
|
error-uri = LAQUOT absoluteURI RAQUOT *( SEMI generic-param )
|
|
|
|
|
|
|
|
;;;; Event / o
|
|
|
|
Event = ( "Event" / "o" ) HCOLON event-type *( SEMI event-param )
|
|
|
|
event-type = event-package *( "." event-template )
|
|
|
|
event-package = token-nodot
|
|
|
|
event-template = token-nodot
|
|
|
|
token-nodot = 1*( alphanum / "-" / "!" / "%" / "*" / "_" / "+" / "`" / "'" / "~" )
|
|
|
|
event-param = generic-param / ( "id" EQUAL token ) / call-ident / from-tag / to-tag / with-sessd
|
|
|
|
call-ident = "call-id" EQUAL ( token / DQUOTE callid DQUOTE )
|
|
|
|
with-sessd = "include-session-description"
|
|
|
|
|
|
|
|
;;;; Expires
|
|
|
|
Expires = "Expires" HCOLON delta-seconds
|
|
|
|
|
|
|
|
;;;; From / f
|
|
|
|
From = ( "From" / "f" ) HCOLON from-spec
|
|
|
|
from-spec = ( name-addr / addr-spec ) *( SEMI from-param )
|
|
|
|
from-param = tag-param / generic-param
|
|
|
|
tag-param = "tag" EQUAL token
|
|
|
|
|
|
|
|
;;;; History-Info
|
|
|
|
History-Info = "History-Info" HCOLON hi-entry *(COMMA hi-entry)
|
|
|
|
hi-entry = hi-targeted-to-uri *( SEMI hi-param )
|
|
|
|
hi-targeted-to-uri = name-addr
|
|
|
|
hi-param = hi-index / hi-extension
|
|
|
|
hi-index = "index" EQUAL 1*DIGIT *("." 1*DIGIT)
|
|
|
|
hi-extension = generic-param
|
|
|
|
|
|
|
|
;;;; Identity / y
|
|
|
|
Identity = "Identity" HCOLON signed-identity-digest
|
|
|
|
signed-identity-digest = LDQUOT 32LHEX RDQUOT
|
|
|
|
|
|
|
|
;;;; Identity-Info / n
|
|
|
|
Identity-Info = "Identity-Info" HCOLON ident-info *( SEMI ident-info-params )
|
|
|
|
ident-info = LAQUOT absoluteURI RAQUOT
|
|
|
|
ident-info-params = ident-info-alg / ident-info-extension
|
|
|
|
ident-info-alg = "alg" EQUAL token
|
|
|
|
ident-info-extension = generic-param
|
|
|
|
|
|
|
|
;;;; In-Reply-To
|
|
|
|
In-Reply-To = "In-Reply-To" HCOLON callid *(COMMA callid)
|
|
|
|
|
|
|
|
;;;; Join
|
|
|
|
Join = "Join" HCOLON callid *(SEMI join-param)
|
|
|
|
join-param = join-to-tag / join-from-tag / generic-param
|
|
|
|
join-to-tag = "to-tag" EQUAL token
|
|
|
|
join-from-tag = "from-tag" EQUAL token
|
|
|
|
|
|
|
|
;;;; Max-Breadth
|
|
|
|
Max-Breadth = "Max-Breadth" HCOLON 1*DIGIT
|
|
|
|
|
|
|
|
;;;; Max-Forwards
|
|
|
|
Max-Forwards = "Max-Forwards" HCOLON 1*DIGIT
|
|
|
|
|
|
|
|
;;;; MIME-Version
|
|
|
|
MIME-Version = "MIME-Version" HCOLON 1*DIGIT "." 1*DIGIT
|
|
|
|
|
|
|
|
;;;; Min-Expires
|
|
|
|
Min-Expires = "Min-Expires" HCOLON delta-seconds
|
|
|
|
|
|
|
|
;;;; Min-SE
|
|
|
|
Min-SE = "Min-SE" HCOLON delta-seconds *(SEMI generic-param)
|
|
|
|
|
|
|
|
;;;; Organization
|
|
|
|
Organization = "Organization" HCOLON [TEXT-UTF8-TRIM]
|
|
|
|
|
|
|
|
;;;; P-Access-Network-Info
|
|
|
|
P-Access-Network-Info = "P-Access-Network-Info" HCOLON access-net-spec
|
|
|
|
access-net-spec = access-type *( SEMI access-info )
|
|
|
|
access-type = "IEEE-802.11a" / "IEEE-802.11b" / "3GPP-GERAN" / "3GPP-UTRAN-FDD" / "3GPP-UTRAN-TDD" / "3GPP-CDMA2000" / token
|
|
|
|
access-info = cgi-3gpp / utran-cell-id-3gpp / extension-access-info
|
|
|
|
extension-access-info = gen-value
|
|
|
|
cgi-3gpp = "cgi-3gpp" EQUAL (token / quoted-string)
|
|
|
|
utran-cell-id-3gpp = "utran-cell-id-3gpp" EQUAL (token / quoted-string)
|
|
|
|
|
|
|
|
;;;; P-Answer-State
|
|
|
|
P-Answer-State = "P-Answer-State" HCOLON answer-type *(SEMI generic-param)
|
|
|
|
answer-type = "Confirmed" / "Unconfirmed" / token
|
|
|
|
|
|
|
|
;;; P-Asserted-Identity
|
|
|
|
P-Asserted-Identity = PAssertedID
|
|
|
|
PAssertedID = "P-Asserted-Identity" HCOLON PAssertedID-value *(COMMA PAssertedID-value)
|
|
|
|
PAssertedID-value = name-addr / addr-spec
|
|
|
|
|
|
|
|
;;;; P-Associated-URI
|
|
|
|
P-Associated-URI = "P-Associated-URI" HCOLON p-aso-uri-spec *(COMMA p-aso-uri-spec)
|
|
|
|
p-aso-uri-spec = name-addr *( SEMI ai-param )
|
|
|
|
ai-param = generic-param
|
|
|
|
|
|
|
|
;;;; P-Called-Party-ID
|
|
|
|
P-Called-Party-ID = "P-Called-Party-ID" HCOLON called-pty-id-spec
|
|
|
|
called-pty-id-spec = name-addr *( SEMI cpid-param )
|
|
|
|
cpid-param = generic-param
|
|
|
|
|
|
|
|
;;;; P-Charging-Function-Addresses
|
|
|
|
P-Charging-Function-Addresses = P-Charging-Addr
|
|
|
|
P-Charging-Addr = "P-Charging-Function-Addresses" HCOLON charge-addr-params *( SEMI charge-addr-params )
|
|
|
|
charge-addr-params = ccf / ecf / generic-param
|
|
|
|
ccf = "ccf" EQUAL gen-value
|
|
|
|
ecf = "ecf" EQUAL gen-value
|
|
|
|
|
|
|
|
;;;; P-Charging-Vector
|
|
|
|
P-Charging-Vector = "P-Charging-Vector" HCOLON icid-value *( SEMI charge-params )
|
|
|
|
charge-params = icid-gen-addr / orig-ioi / term-ioi / generic-param
|
|
|
|
icid-value = "icid-value" EQUAL gen-value
|
|
|
|
icid-gen-addr = "icid-generated-at" EQUAL host
|
|
|
|
orig-ioi = "orig-ioi" EQUAL gen-value
|
|
|
|
term-ioi = "term-ioi" EQUAL gen-value
|
|
|
|
|
|
|
|
;;;; P-DCS-Billing-Info
|
|
|
|
P-DCS-Billing-Info = "P-DCS-Billing-Info" HCOLON Billing-Correlation-ID "/" FEID *( SEMI Billing-Info-param )
|
|
|
|
Billing-Correlation-ID = 1*48(HEXDIG)
|
|
|
|
FEID = 1*16(HEXDIG) "@" host
|
|
|
|
Billing-Info-param = RKS-Group-ID-param / Charge-param / Calling-param / Called-param / Routing-param / Loc-Routing-param / JIP-param / generic-param
|
|
|
|
RKS-Group-ID-param = "rksgroup" EQUAL RKS-Group-ID
|
|
|
|
RKS-Group-ID = token
|
|
|
|
Charge-param = "charge" EQUAL Acct-Charge-URI
|
|
|
|
Acct-Charge-URI = LDQUOT addr-spec RDQUOT
|
|
|
|
Calling-param = "calling" EQUAL Acct-Calling-URI
|
|
|
|
Acct-Calling-URI = LDQUOT addr-spec RDQUOT
|
|
|
|
Called-param = "called" EQUAL Acct-Called-URI
|
|
|
|
Acct-Called-URI = LDQUOT addr-spec RDQUOT
|
|
|
|
Routing-param = "routing" EQUAL Acct-Routing-URI
|
|
|
|
Acct-Routing-URI = LDQUOT addr-spec RDQUOT
|
|
|
|
Loc-Routing-param = "locroute" EQUAL Acct-Loc-Routing-URI
|
|
|
|
Acct-Loc-Routing-URI = LDQUOT addr-spec RDQUOT
|
|
|
|
JIP-param = "jip" EQUAL jip
|
|
|
|
jip = LDQUOT 1*phonedigit-hex jip-context RDQUOT
|
|
|
|
jip-context = ";jip-context=" jip-descriptor
|
|
|
|
jip-descriptor = global-hex-digits
|
|
|
|
global-hex-digits = "+" 1*3(phonedigit) *phonedigit-hex
|
|
|
|
phonedigit = DIGIT / [ visual-separator ]
|
|
|
|
phonedigit-hex = HEXDIG / "*" / "#" / [ visual-separator ]
|
|
|
|
visual-separator = "-" / "." / "(" / ")"
|
|
|
|
|
|
|
|
;;;; P-DCS-LAES
|
|
|
|
P-DCS-LAES = "P-DCS-LAES" HCOLON Laes-sig *( SEMI Laes-param )
|
|
|
|
Laes-sig = hostport
|
|
|
|
Laes-param = Laes-content / Laes-cccid / Laes-bcid / generic-param
|
|
|
|
Laes-content = "content" EQUAL hostport
|
|
|
|
Laes-cccid = "cccid" EQUAL 1*8(HEXDIG)
|
|
|
|
Laes-bcid = "cccid" EQUAL 1*48(HEXDIG)
|
|
|
|
|
|
|
|
;;;; P-DCS-OSPS
|
|
|
|
P-DCS-OSPS = "P-DCS-OSPS" HCOLON OSPS-Tag
|
|
|
|
OSPS-Tag = "BLV" / "EI" / "RING" / token
|
|
|
|
|
|
|
|
;;;; P-DCS-Redirect
|
|
|
|
P-DCS-Redirect = "P-DCS-Redirect" HCOLON Called-ID *(SEMI redir-params)
|
|
|
|
Called-ID = LDQUOT addr-spec RDQUOT
|
|
|
|
redir-params = redir-uri-param / redir-count-param / generic-param
|
|
|
|
redir-uri-param = "redirector-uri" EQUAL Redirector
|
|
|
|
Redirector = LDQUOT addr-spec RDQUOT
|
|
|
|
redir-count-param = "count" EQUAL Redir-count
|
|
|
|
Redir-count = 1*DIGIT
|
|
|
|
|
|
|
|
;;;; P-DCS-Trace-Party-ID
|
|
|
|
P-DCS-Trace-Party-ID = "P-DCS-Trace-Party-ID" HCOLON name-addr *1(SEMI timestamp-param) *(SEMI trace-param)
|
|
|
|
timestamp-param = "timestamp=" 1*DIGIT ["." 1*DIGIT]
|
|
|
|
trace-param = generic-param
|
|
|
|
|
|
|
|
;;;; P-Early-Media
|
|
|
|
P-Early-Media = "P-Early-Media" HCOLON [ em-param *(COMMA em-param) ]
|
|
|
|
em-param = "sendrecv" / "sendonly" / "recvonly" / "inactive" / "gated" / "supported" / token
|
|
|
|
|
|
|
|
;;;; P-Media-Authorization
|
|
|
|
P-Media-Authorization = "P-Media-Authorization" HCOLON P-Media-Authorization-Token *(COMMA P-Media-Authorization-Token)
|
|
|
|
P-Media-Authorization-Token = 1*HEXDIG
|
|
|
|
|
|
|
|
;;;; P-Preferred-Identity
|
|
|
|
P-Preferred-Identity = PPreferredID
|
|
|
|
PPreferredID = "P-Preferred-Identity" HCOLON PPreferredID-value *(COMMA PPreferredID-value)
|
|
|
|
PPreferredID-value = name-addr / addr-spec
|
|
|
|
|
|
|
|
;;;; P-Profile-Key
|
|
|
|
P-Profile-Key = "P-Profile-Key" HCOLON (name-addr / addr-spec) *(SEMI generic-param)
|
|
|
|
|
|
|
|
;;;; P-Refused-URI-List
|
|
|
|
P-Refused-URI-List = "P-Refused-URI-List" HCOLON uri-list-entry *(COMMA uri-list-entry)
|
|
|
|
uri-list-entry = ( name-addr / addr-spec ) *(SEMI refused-param)
|
|
|
|
refused-param = members-param / generic-param
|
|
|
|
members-param = "members" EQUAL LDQUOT *( qdtext / quoted-pair ) RDQUOT
|
|
|
|
|
|
|
|
;;;; P-Served-User
|
|
|
|
P-Served-User = "P-Served-User" HCOLON PServedUser-value *(served-user-param)
|
|
|
|
served-user-param = sessioncase-param / registration-state-param / generic-param
|
|
|
|
PServedUser-value = name-addr / addr-spec
|
|
|
|
sessioncase-param = "sescase" EQUAL "orig" / "term"
|
|
|
|
registration-state-param = "regstate" EQUAL "unreg" / "reg"
|
|
|
|
|
|
|
|
;;;; P-User-Database
|
|
|
|
P-User-Database = "P-User-Database" HCOLON database *(SEMI generic-param)
|
|
|
|
database = LAQUOT DiameterURI RAQUOT
|
|
|
|
DiameterURI = not-defined
|
|
|
|
|
|
|
|
;;;; P-Visited-Network-ID
|
|
|
|
P-Visited-Network-ID = "P-Visited-Network-ID" HCOLON vnetwork-spec *(COMMA vnetwork-spec)
|
|
|
|
vnetwork-spec = (token / quoted-string) *( SEMI vnetwork-param )
|
|
|
|
vnetwork-param = generic-param
|
|
|
|
|
|
|
|
;;;; Path
|
|
|
|
Path = "Path" HCOLON path-value *(COMMA path-value)
|
|
|
|
path-value = name-addr *( SEMI rr-param )
|
|
|
|
|
|
|
|
;;;; Permission-Missing
|
|
|
|
Permission-Missing = "Permission-Missing" HCOLON per-miss-spec *(COMMA per-miss-spec)
|
|
|
|
per-miss-spec = ( name-addr / addr-spec ) *( SEMI generic-param )
|
|
|
|
|
|
|
|
;;;; Priority
|
|
|
|
Priority = "Priority" HCOLON priority-value
|
|
|
|
priority-value = "emergency" / "urgent" / "normal" / "non-urgent" / other-priority
|
|
|
|
other-priority = token
|
|
|
|
|
|
|
|
;;;; Privacy
|
|
|
|
Privacy = Privacy-hdr
|
|
|
|
Privacy-hdr = "Privacy" HCOLON priv-value *(";" priv-value)
|
|
|
|
priv-value = "header" / "session" / "user" / "none" / "critical" / "id" / "history" / token
|
|
|
|
|
|
|
|
;;;; Priv-Answer-Mode
|
|
|
|
Priv-Answer-Mode = "Priv-Answer-Mode" HCOLON answer-mode-value *(SEMI answer-mode-param)
|
|
|
|
|
|
|
|
;;;; Proxy-Authenticate
|
|
|
|
Proxy-Authenticate = "Proxy-Authenticate" HCOLON challenge
|
|
|
|
challenge = ("Digest" LWS digest-cln *(COMMA digest-cln)) / other-challenge
|
|
|
|
other-challenge = auth-scheme / auth-param *(COMMA auth-param)
|
|
|
|
digest-cln = realm / domain / nonce / opaque / stale / algorithm / qop-options / auth-param
|
|
|
|
realm = "realm" EQUAL realm-value
|
|
|
|
realm-value = quoted-string
|
|
|
|
domain = "domain" EQUAL LDQUOT URI *( 1*SP URI ) RDQUOT
|
|
|
|
URI = absoluteURI / abs-path
|
|
|
|
opaque = "opaque" EQUAL quoted-string
|
|
|
|
stale = "stale" EQUAL ( "true" / "false" )
|
|
|
|
qop-options = "qop" EQUAL LDQUOT qop-value *("," qop-value) RDQUOT
|
|
|
|
qop-value = "auth" / "auth-int" / token
|
|
|
|
|
|
|
|
;;;; Proxy-Authorization
|
|
|
|
Proxy-Authorization = "Proxy-Authorization" HCOLON credentials
|
|
|
|
|
|
|
|
|
|
|
|
;;;; Proxy-Require
|
|
|
|
Proxy-Require = "Proxy-Require" HCOLON option-tag *(COMMA option-tag)
|
|
|
|
|
|
|
|
;;;; RAck
|
|
|
|
RAck = "RAck" HCOLON response-num LWS CSeq-num LWS Method
|
|
|
|
response-num = 1*DIGIT
|
|
|
|
CSeq-num = 1*DIGIT
|
|
|
|
|
|
|
|
;;;; Reason
|
|
|
|
Reason = "Reason" HCOLON reason-value *(COMMA reason-value)
|
|
|
|
reason-value = protocol *(SEMI reason-params)
|
|
|
|
protocol = "SIP" / "Q.850" / "Preemption" / token
|
|
|
|
reason-params = protocol-cause / reason-text / reason-extension
|
|
|
|
protocol-cause = "cause" EQUAL "cause
|
|
|
|
cause = 1*DIGIT
|
|
|
|
reason-text = "text" EQUAL quoted-string
|
|
|
|
reason-extension = generic-param
|
|
|
|
protocol-cause = not-defined
|
|
|
|
|
|
|
|
;;;; Record-Route
|
|
|
|
Record-Route = "Record-Route" HCOLON rec-route *(COMMA rec-route)
|
|
|
|
rec-route = name-addr *( SEMI rr-param )
|
|
|
|
rr-param = generic-param
|
|
|
|
|
|
|
|
;;;; Refer-Sub
|
|
|
|
Refer-Sub = "Refer-Sub" HCOLON refer-sub-value *(SEMI exten)
|
|
|
|
refer-sub-value = "true" / "false"
|
|
|
|
exten = generic-param
|
|
|
|
|
|
|
|
;;;; Refer-To / r
|
|
|
|
Refer-To = ( "Refer-To" / "r" ) HCOLON ( name-addr / addr-spec ) *(SEMI refer-param)
|
|
|
|
refer-param = generic-param / feature-param
|
|
|
|
|
|
|
|
;;;; Referred-By / b
|
|
|
|
Referred-By = ( "Referred-By" / "b" ) HCOLON referrer-uri *( SEMI (referredby-id-param / generic-param) )
|
|
|
|
|
|
|
|
referrer-uri = ( name-addr / addr-spec )
|
|
|
|
referredby-id-param = "cid" EQUAL sip-clean-msg-id
|
|
|
|
sip-clean-msg-id = LDQUOT dot-atom "@" (dot-atom / host) RDQUOT
|
|
|
|
dot-atom = atom *( "." atom )
|
|
|
|
atom = 1*( alphanum / "-" / "!" / "%" / "*" / "_" / "+" / "'" / "`" / "~" )
|
|
|
|
|
|
|
|
;;;; Reject-Contact / j
|
|
|
|
Reject-Contact = ( "Reject-Contact" / "j" ) HCOLON rc-value *(COMMA rc-value)
|
|
|
|
rc-value = "*" *(SEMI rc-params)
|
|
|
|
rc-params = feature-param / generic-param
|
|
|
|
|
|
|
|
;;;; Replaces
|
|
|
|
Replaces = "Replaces" HCOLON callid *(SEMI replaces-param)
|
|
|
|
|
|
|
|
replaces-param = to-tag / from-tag / early-flag / generic-param
|
|
|
|
to-tag = "to-tag" EQUAL token
|
|
|
|
from-tag = "from-tag" EQUAL token
|
|
|
|
early-flag = "early-only"
|
|
|
|
|
|
|
|
;;;; Reply-To
|
|
|
|
Reply-To = "Reply-To" HCOLON rplyto-spec
|
|
|
|
|
|
|
|
rplyto-spec = ( name-addr / addr-spec ) *( SEMI rplyto-param )
|
|
|
|
rplyto-param = generic-param
|
|
|
|
|
|
|
|
;;;; Request-Disposition / d
|
|
|
|
Request-Disposition = ( "Request-Disposition" / "d" ) HCOLON directive *(COMMA directive)
|
|
|
|
directive = proxy-directive / cancel-directive / fork-directive / recurse-directive / parallel-directive / queue-directive
|
|
|
|
proxy-directive = "proxy" / "redirect"
|
|
|
|
cancel-directive = "cancel" / "no-cancel"
|
|
|
|
fork-directive = "fork" / "no-fork"
|
|
|
|
recurse-directive = "recurse" / "no-recurse"
|
|
|
|
parallel-directive = "parallel" / "sequential"
|
|
|
|
queue-directive = "queue" / "no-queue"
|
|
|
|
|
|
|
|
;;;; Require
|
|
|
|
Require = "Require" HCOLON option-tag *(COMMA option-tag)
|
|
|
|
|
|
|
|
;;;; Resource-Priority
|
|
|
|
Resource-Priority = "Resource-Priority" HCOLON r-value *(COMMA r-value)
|
|
|
|
r-value = namespace "." r-priority
|
|
|
|
namespace = token-nodot
|
|
|
|
r-priority = token-nodot
|
|
|
|
token-nodot = 1*( alphanum / "-" / "!" / "%" / "*" / "_" / "+" / "`" / "'" / "~" )
|
|
|
|
|
|
|
|
;;;; Retry-After RFC 3261 Up
|
|
|
|
Retry-After = "Retry-After" HCOLON delta-seconds [ comment ] *( SEMI retry-param )
|
|
|
|
retry-param = ("duration" EQUAL delta-seconds) / generic-param
|
|
|
|
|
|
|
|
;;;; Route
|
|
|
|
Route = "Route" HCOLON route-param *(COMMA route-param)
|
|
|
|
route-param = name-addr *( SEMI rr-param )
|
|
|
|
|
|
|
|
;;;; RSeq
|
|
|
|
RSeq = "RSeq" HCOLON response-num
|
|
|
|
|
|
|
|
;;;; Security-Client
|
|
|
|
Security-Client = "Security-Client" HCOLON sec-mechanism *(COMMA sec-mechanism)
|
|
|
|
sec-mechanism = mechanism-name *( SEMI mech-parameters )
|
|
|
|
mechanism-name = ( "digest" / "tls" / "ipsec-ike" / "ipsec-man" / token )
|
|
|
|
mech-parameters = ( preference / digest-algorithm / digest-qop / digest-verify / mech-extension )
|
|
|
|
preference = "q" EQUAL qvalue
|
|
|
|
digest-algorithm = "d-alg" EQUAL token
|
|
|
|
digest-qop = "d-qop" EQUAL token
|
|
|
|
digest-verify = "d-ver" EQUAL LDQUOT 32LHEX RDQUOT
|
|
|
|
mech-extension = generic-param
|
|
|
|
|
|
|
|
;;;; Security-Server
|
|
|
|
Security-Server = "Security-Server" HCOLON sec-mechanism *(COMMA sec-mechanism)
|
|
|
|
|
|
|
|
;;;; Security-Verify
|
|
|
|
Security-Verify = "Security-Verify" HCOLON sec-mechanism *(COMMA sec-mechanism)
|
|
|
|
|
|
|
|
;;;; Server
|
|
|
|
Server = "Server" HCOLON server-val *(LWS server-val)
|
|
|
|
server-val = product / comment
|
|
|
|
product = token [SLASH product-version]
|
|
|
|
product-version = token
|
|
|
|
|
|
|
|
;;;; Service-Route
|
|
|
|
Service-Route = "Service-Route" HCOLON sr-value *(COMMA sr-value)
|
|
|
|
sr-value = name-addr *( SEMI rr-param )
|
|
|
|
|
|
|
|
;;;; Session-Expires / x
|
|
|
|
Session-Expires = ( "Session-Expires" / "x" ) HCOLON delta-seconds *( SEMI (se-params )
|
|
|
|
se-params = refresher-param / generic-param
|
|
|
|
refresher-param = "refresher" EQUAL ("uas" / "uac")
|
|
|
|
|
|
|
|
;;;; SIP-ETag
|
|
|
|
SIP-ETag = "SIP-ETag" HCOLON entity-tag
|
|
|
|
entity-tag = token
|
|
|
|
|
|
|
|
;;;; SIP-If-Match
|
|
|
|
SIP-If-Match = "SIP-If-Match" HCOLON entity-tag
|
|
|
|
|
|
|
|
;;;; Subject / s
|
|
|
|
Subject = ( "Subject" / "s" ) HCOLON [TEXT-UTF8-TRIM]
|
|
|
|
|
|
|
|
;;;; Subscription-State
|
|
|
|
Subscription-State = ( "Subscription-State" / "o" ) HCOLON substate-value *( SEMI subexp-params )
|
|
|
|
substate-value = "active" / "pending" / "terminated" / extension-substate
|
|
|
|
extension-substate = token
|
|
|
|
subexp-params = ("reason" EQUAL event-reason-value) / ("expires" EQUAL delta-seconds) / ("retry-after" EQUAL delta-seconds) / generic-param
|
|
|
|
event-reason-value = "deactivated" / "probation" / "rejected" / "timeout" / "giveup" / "noresource" / event-reason-extension
|
|
|
|
event-reason-extension = token
|
|
|
|
|
|
|
|
;;;; Supported / k
|
|
|
|
Supported = ( "Supported" / "k" ) HCOLON [option-tag *(COMMA option-tag)]
|
|
|
|
|
|
|
|
;;;; Target-Dialog
|
|
|
|
Target-Dialog = "Target-Dialog" HCOLON callid *(SEMI td-param)
|
|
|
|
td-param = remote-param / local-param / generic-param
|
|
|
|
remote-param = "remote-tag" EQUAL token
|
|
|
|
local-param = "local-tag" EQUAL token
|
|
|
|
|
|
|
|
;;;; Timestamp
|
|
|
|
Timestamp = "Timestamp" HCOLON 1*(DIGIT) [ "." *(DIGIT) ] [ LWS delay ]
|
|
|
|
delay = *(DIGIT) [ "." *(DIGIT) ]
|
|
|
|
|
|
|
|
;;;; To / t
|
|
|
|
To = ( "To" / "t" ) HCOLON ( name-addr / addr-spec ) *( SEMI to-param )
|
|
|
|
to-param = tag-param / generic-param
|
|
|
|
|
|
|
|
;;;; Trigger-Consent
|
|
|
|
Trigger-Consent = "Trigger-Consent" HCOLON trigger-cons-spec *(COMMA trigger-cons-spec)
|
|
|
|
trigger-cons-spec = ( SIP-URI / SIPS-URI ) *( SEMI trigger-param )
|
|
|
|
trigger-param = target-uri / generic-param
|
|
|
|
target-uri = "target-uri" EQUAL LDQUOT *( qdtext / quoted-pair ) RDQUOT
|
|
|
|
|
|
|
|
;;;; Unsupported
|
|
|
|
Unsupported = "Unsupported" HCOLON option-tag *(COMMA option-tag)
|
|
|
|
|
|
|
|
;;;; User-Agent
|
|
|
|
User-Agent = "User-Agent" HCOLON server-val *(LWS server-val)
|
|
|
|
|
|
|
|
;;;; Via / v
|
|
|
|
Via = ( "Via" / "v" ) HCOLON via-parm *(COMMA via-parm)
|
|
|
|
via-parm = sent-protocol LWS sent-by *( SEMI via-params )
|
|
|
|
via-params = via-ttl / via-maddr / via-received / via-branch / via-compression / response-port / via-extension
|
|
|
|
via-ttl = "ttl" EQUAL ttl
|
|
|
|
via-maddr = "maddr" EQUAL host
|
|
|
|
via-received = "received" EQUAL (IPv4address / IPv6address)
|
|
|
|
via-branch = "branch" EQUAL token
|
|
|
|
via-compression = "comp" EQUAL ("sigcomp" / other-compression)
|
|
|
|
other-compression = token
|
|
|
|
response-port = "rport" [EQUAL 1*DIGIT]
|
|
|
|
via-extension = generic-param
|
|
|
|
sent-protocol = protocol-name SLASH protocol-version SLASH transport
|
|
|
|
protocol-name = "SIP" / token
|
|
|
|
protocol-version = token
|
|
|
|
transport = "UDP" / "TCP" / "TLS" / "SCTP" / "TLS-SCTP" / other-transport
|
|
|
|
sent-by = host [ COLON port ]
|
|
|
|
ttl = 1*3DIGIT
|
|
|
|
|
|
|
|
;;;; Warning
|
|
|
|
Warning = "Warning" HCOLON warning-value *(COMMA warning-value)
|
|
|
|
warning-value = warn-code SP warn-agent SP warn-text
|
|
|
|
warn-code = 3DIGIT
|
|
|
|
warn-agent = hostport / pseudonym
|
|
|
|
warn-text = quoted-string
|
|
|
|
pseudonym = token
|
|
|
|
|
|
|
|
;;;; WWW-Authenticate
|
|
|
|
WWW-Authenticate = "WWW-Authenticate" HCOLON challenge
|
|
|
|
|
|
|
|
;---------------------
|
|
|
|
; Response Codes
|
|
|
|
;---------------------
|
|
|
|
Status-Code = Informational / Success / Redirection / Client-Error / Server-Error / Global-Failure / extension-code
|
|
|
|
extension-code = 3DIGIT
|
|
|
|
Reason-Phrase = *( reserved / unreserved / escaped / UTF8-NONASCII / UTF8-CONT / SP / HTAB )
|
|
|
|
|
|
|
|
;;;; 1xx
|
|
|
|
Informational = "100" / "180" / "181" / "182" / "183"
|
|
|
|
|
|
|
|
;;;; 2xx
|
|
|
|
Success = "200" / "202"
|
|
|
|
|
|
|
|
;;;; 3xx
|
|
|
|
Redirection = "250" / "301" / "302" / "305" / "380"
|
|
|
|
|
|
|
|
;;;; 4xx
|
|
|
|
Client-Error = "400" / "401" / "402" / "403" / "404" / "405" / "406" / "407" / "408" / "410" / "412" / "413" / "414" / "415" / "416" / "417" / "420" / "421" / "422" / "423" / "428" / "429" / "433" / "436" / "440" / "437" / "438" / "470" / "480" / "481" / "482" / "483" / "484"/ "485"/ "486"/ "487" / "488"/ "489"/ "491"/ "493" / "494"
|
|
|
|
|
|
|
|
;;;; 5xx
|
|
|
|
Server-Error = "500" / "501" / "502" / "503" / "504" / "505" / "513" / "580"
|
|
|
|
|
|
|
|
;;;; 6xx
|
|
|
|
Global-Failure= "600" / "603" / "604" / "606"
|
|
|
|
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------------------------------------
|