SIP-URL = "sip:" [ userinfo "@" ] hostport url-parameters [ headers ] userinfo = [ user | telephone-subscriber ] [ ":" password ] user = *( unreserved | escaped | "&" | "=" | "+" | "$" | "," | ";" | "?" | "/" ) telephone-subscriber = password = *( unreserved | escaped | "&" | "=" | "+" | "$" | "," ) 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*4HEX port = 1*DIGIT url-parameters = *( ";" url-parameter ) url-parameter = transport-param | user-param | method-param | ttl-param | maddr-param | other-param transport-param = "transport=" ( "udp" | "tcp" | "sctp" | "tls" | other-transport ) other-transport = token ttl-param = "ttl=" ttl ttl = 1*3DIGIT ; 0 to 255 maddr-param = "maddr=" host user-param = "user=" ( "phone" | "ip" | other-user ) other-user = token method-param = "method=" Method tag-param = "tag=" token other-param = pname [ "=" pvalue ] pname = 1*paramchar pvalue = 1*paramchar paramchar = param-reserved | unreserved | escaped param-reserved = "[" | "]" | "/" | "?" | ":" | "&" | "+" | "$" headers = "?" header *( "&" header ) header = hname "=" hvalue hname = 1*( hnv-unreserved | unreserved | escaped ) hvalue = *( hnv-unreserved | unreserved | escaped ) hnv-unreserved = "[" | "]" | "/" | "?" | ":" | "+" | "$" absoluteURI = SIP-message = Request | Response generic-message = start-line *message-header CRLF [ message-body ] start-line = Request-Line | ;Section 4.1 Status-Line ;Section 5.1 message-header = ( general-header | request-header | response-header | entity-header ) message-body = general-header = Accept ; Section 6.6 | Accept-Encoding ; Section 6.7 | Accept-Language ; Section 6.8 | Call-ID ; Section 6.12 | Call-Info ; Section 6.13 | Contact ; Section 6.14 | CSeq ; Section 6.20 | Date ; Section 6.21 | Encryption ; Section 6.22 | From ; Section 6.24 | MIME-Version ; Section 6.28 | Organization ; Section 6.29 | Record-Route ; Section 6.34 | Require ; Section 6.35 | Supported ; Section 6.41 | Timestamp ; Section 6.42 | To ; Section 6.43 | User-Agent ; Section 6.45 | Via ; Section 6.46 entity-header = Allow ; Section 6.10 | Content-Disposition ; Section 6.15 | Content-Encoding ; Section 6.16 | Content-Language ; Section 6.17 | Content-Length ; Section 6.18 | Content-Type ; Section 6.19 | Expires ; Section 6.23 request-header = Alert-Info ; Section 6.9 | Authorization ; Section 6.11 | Hide ; Section 6.25 | In-Reply-To ; Section 6.26 | Max-Forwards ; Section 6.27 | Priority ; Section 6.30 | Proxy-Authorization ; Section 6.32 | Proxy-Require ; Section 6.33 | Route ; Section 6.38 | Response-Key ; Section 6.36 | Subject ; Section 6.40 response-header = Proxy-Authenticate ; Section 6.31 | Retry-After ; Section 6.37 | Server ; Section 6.39 | Unsupported ; Section 6.44 | Warning ; Section 6.47 | WWW-Authenticate ; Section 6.48 Request = Request-Line ; Section 4.1 *( general-header | request-header | entity-header ) CRLF [ message-body ] ; Section 8 Request-Line = Method SP Request-URI SP SIP-Version CRLF Request-URI = SIP-URL | absoluteURI Method = "INVITE" | "ACK" | "OPTIONS" | "BYE" | "CANCEL" | "REGISTER" | extension-method extension-method = token SIP-Version = "SIP/2.0" option-tag = token Response = Status-Line ; Section 5.1 *( general-header | response-header | entity-header ) CRLF [ message-body ] ; Section 8 Status-Line = SIP-version SP Status-Code SP Reason-Phrase CRLF Status-Code = Informational ;Fig. 4 | Success ;Fig. 4 | Redirection ;Fig. 5 | Client-Error ;Fig. 6 | Server-Error ;Fig. 7 | Global-Failure ;Fig. 8 | extension-code extension-code = 3DIGIT Reason-Phrase = * Informational = "100" ; Trying | "180" ; Ringing | "181" ; Call Is Being Forwarded | "182" ; Queued | "183" ; Session Progress Success = "200" ; OK Redirection = "300" ; Multiple Choices | "301" ; Moved Permanently | "302" ; Moved Temporarily | "305" ; Use Proxy | "380" ; Alternative Service Client-Error = "400" ; Bad Request | "401" ; Unauthorized | "402" ; Payment Required | "403" ; Forbidden | "404" ; Not Found | "405" ; Method Not Allowed | "406" ; Not Acceptable | "407" ; Proxy Authentication Required | "408" ; Request Timeout | "409" ; Conflict | "410" ; Gone | "411" ; Length Required | "413" ; Request Entity Too Large | "414" ; Request-URI Too Large | "415" ; Unsupported Media Type | "420" ; Bad Extension | "480" ; Temporarily not available | "481" ; Call Leg/Transaction Does Not Exist | "482" ; Loop Detected | "483" ; Too Many Hops | "484" ; Address Incomplete | "485" ; Ambiguous | "486" ; Busy Here | "487" ; Request Cancelled | "488" ; Not Acceptable Here Server-Error = "500" ; Internal Server Error | "501" ; Not Implemented | "502" ; Bad Gateway | "503" ; Service Unavailable | "504" ; Gateway Time-out | "505" ; SIP Version not supported Global-Failure = "600" ; Busy Everywhere | "603" ; Decline | "604" ; Does not exist anywhere | "606" ; Not Acceptable message-header = field-name ":" [ field-value ] CRLF field-name = token field-value = *( field-content | LWS ) field-content = < the OCTETs making up the field-value and consisting of either *TEXT-UTF8 or combinations of token, separators, and quoted-string> Accept = Accept-Encoding = Accept-Language = Alert-Info = "Alert-Info" ":" # ( "<" URI ">" *( ";" generic-param )) Allow = "Allow" ":" 1#Method callid = token [ "@" token ] Call-ID = ( "Call-ID" | "i" ) ":" callid Call-Info = "Call-Info" ":" # ( "<" URI ">" *( ";" info-param ) ) info-param = "purpose" "=" ( "icon" | "info" | "card" | token ) | generic-param Contact = ( "Contact" | "m" ) ":" ("*" | (1# (( name-addr | addr-spec ) *( ";" contact-params ) ))) name-addr = [ display-name ] "<" addr-spec ">" addr-spec = SIP-URL | URI display-name = *token | quoted-string contact-params = "q" "=" qvalue | "action" "=" "proxy" | "redirect" | "expires" "=" delta-seconds | DQUOTE SIP-date DQUOTE | contact-extension qvalue = delta-seconds = contact-extension = generic-param Content-Disposition = "Content-Disposition" ":" disposition-type *( ";" disposition-param ) disposition-type = "render" | "session" | "icon" | "alert" | disp-extension-token disposition-param = "handling" "=" ( "optional" | "required" | other-handling ) | generic-param other-handling = token disp-extension-token = token Content-Encoding = ( "Content-Encoding" | "e" ) ":" 1#content-coding content-coding = Content-Language = Content-Length = ( "Content-Length" | "l" ) ":" 1*DIGIT Content-Type = ( "Content-Type" | "c" ) ":" media-type media-type = CSeq = "CSeq" ":" 1*DIGIT Method Date = "Date" ":" SIP-date SIP-date = rfc1123-date rfc1123-date = Encryption = "Encryption" ":" encryption-scheme 1*SP #encryption-params encryption-scheme = token encryption-params = generic-param generic-param = token [ "=" ( token | quoted-string ) ] Expires = "Expires" ":" ( SIP-date | delta-seconds ) From = ( "From" | "f" ) ":" ( name-addr | addr-spec ) *( ";" from-param ) from-param = tag-param | generic-param Hide = "Hide" ":" ( "route" | "hop" | other-hide ) other-hide = token In-Reply-To = "In-Reply-To" ":" 1# callid Max-Forwards = "Max-Forwards" ":" 1*DIGIT MIME-Version = Organization = "Organization" ":" TEXT-UTF8-TRIM Priority = "Priority" ":" priority-value priority-value = "emergency" | "urgent" | "normal" | "non-urgent" | other-priority other-priority = token Proxy-Authenticate = Proxy-Authorization = Proxy-Require = "Proxy-Require" ":" 1#option-tag Record-Route = "Record-Route" ":" 1# ( name-addr *( ";" rr-param )) rr-param = generic-param Require = "Require" ":" 1#option-tag Response-Key = "Response-Key" ":" key-scheme 1*SP #key-param key-scheme = token key-param = generic-param Retry-After = "Retry-After" ":" ( SIP-date | delta-seconds ) [ comment ] *( ";" retry-param ) retry-param = "duration" "=" delta-seconds | generic-param Route = "Route" ":" 1# ( name-addr *( ";" rr-param )) Server = Subject = ( "Subject" | "s" ) ":" TEXT-UTF8-TRIM Supported = ( "Supported" | "k" ) ":" 1#option-tag Timestamp = "Timestamp" ":" *(DIGIT) [ "." *(DIGIT) ] [ delay ] delay = *(DIGIT) [ "." *(DIGIT) ] To = ( "To" | "t" ) ":" ( name-addr | addr-spec ) *( ";" to-param ) to-param = tag-param | generic-param Unsupported = "Unsupported" ":" 1#option-tag User-Agent = Via = ( "Via" | "v") ":" 1#( sent-protocol sent-by *( ";" via-params ) [ comment ] ) via-params = via-hidden | via-ttl | via-maddr | via-received | via-branch | via-extension via-hidden = "hidden" via-ttl = "ttl" "=" ttl via-maddr = "maddr" "=" maddr via-received = "received" "=" host via-branch = "branch" "=" token via-extension = generic-param sent-protocol = protocol-name "/" protocol-version "/" transport protocol-name = "SIP" | token protocol-version = token transport = "UDP" | "TCP" | token sent-by = ( host [ ":" port ] ) | ( concealed-host ) concealed-host = token Warning = "Warning" ":" 1#warning-value warning-value = warn-code SP warn-agent SP warn-text warn-code = 3DIGIT warn-agent = ( host [ ":" port ] ) | pseudonym ; the name or pseudonym of the server adding ; the Warning header, for use in debugging pseudonym = warn-text = quoted-string URI = SIP-URL digest-uri-value = Request-URI ; as defined in Section 4.3 WWW-Authenticate = "WWW-Authenticate" ":" "pgp" pgp-challenge pgp-challenge = # pgp-params pgp-params = realm | pgp-version | pgp-micalgorithm | pgp-pubalgorithm | nonce realm = "realm" "=" realm-value realm-value = quoted-string pgp-version = "version" "=" DQUOTE digit *( "." digit ) *alpha DQUOTE pgp-micalgorithm = "algorithm" "=" ( "md5" | "sha1" | token | "ripemd160" | "MD2" | "TIGER192" | "HAVAL-5-160") pgp-pubalgorithm = "pubkey" "=" ( "rsa" | "rsa-encrypt" | "rsa-sign" | "elgamal" | "dsa" | token ) nonce = "nonce" "=" nonce-value nonce-value = quoted-string Authorization = "Authorization" ":" "pgp" # pgp-response pgp-response = realm | pgp-version | pgp-signature | signed-by | nonce pgp-signature = "signature" "=" quoted-string signed-by = "signed-by" "=" DQUOTE URI DQUOTE Encryption = "Encryption" ":" "pgp" pgp-eparams pgp-eparams = 1# ( pgp-version | pgp-encoding ) pgp-encoding = "encoding" "=" "ascii" | token Response-Key = "Response-Key" ":" "pgp" pgp-ekparams pgp-ekparams = 1# ( pgp-version | pgp-encoding | pgp-key) pgp-key = "key" "=" quoted-string OCTET = %x00-ff ; any 8-bit sequence of data CHAR = %x00-7f ; any US-ASCII character (octets 0 - 127) upalpha = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" lowalpha = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" alpha = lowalpha | upalpha DIGIT = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" alphanum = alpha | DIGIT CTL = %x00-1f | %x7f ; (octets 0 -- 31) and DEL (127) CR = %d13 ; US-ASCII CR, carriage return character LF = %d10 ; US-ASCII LF, line feed character SP = %d32 ; US-ASCII SP, space character HT = %d09 ; US-ASCII HT, horizontal tab character CRLF = CR LF ; typically the end of a line unreserved = alphanum | mark mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" escaped = "%" hex hex LWS = *( SP | HT ) [CRLF] 1*( SP | HT ) ; linear whitespace TEXT-UTF8 = *(TEXT-UTF8char | LWS) TEXT-UTF8-TRIM = *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 HEX = "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT token = 1*(alphanum | "-" | "." | "!" | "%" | "*" | "_" | "+" | "`" | "'" | "~" ) separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | DQUOTE | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT comment = "(" *(ctext | quoted-pair | comment) ")" ctext = < any TEXT-UTF8 excluding "(" and ")"> quoted-string = ( DQUOTE *(qdtext | quoted-pair ) DQUOTE ) qdtext = LWS | %x21 | %x23-5b | %x5d-7e | UTF8-NONASCII quoted-pair = " \ " CHAR DQUOTE =