forked from Mirrors/freeswitch
2ecac238f3
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3774 d0543943-73ff-0310-b7d9-9358b9ac24b2
537 lines
23 KiB
Plaintext
537 lines
23 KiB
Plaintext
/* SIP grammar from RFC3261
|
|
*
|
|
* alphanum = ALPHA / DIGIT
|
|
*
|
|
* reserved = ";" / "/" / "?" / ":" / "@" / "&" / "=" / "+"
|
|
* / "$" / ","
|
|
* unreserved = alphanum / mark
|
|
* mark = "-" / "_" / "." / "!" / "~" / "*" / "'"
|
|
* / "(" / ")"
|
|
* escaped = "%" HEXDIG HEXDIG
|
|
*
|
|
* LWS = [*WSP CRLF] 1*WSP ; linear whitespace
|
|
* SWS = [LWS] ; sep whitespace
|
|
*
|
|
* HCOLON = *( SP / HTAB ) ":" SWS
|
|
*
|
|
* 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
|
|
*
|
|
* LHEX = DIGIT / %x61-66 ;lowercase a-f
|
|
*
|
|
* token = 1*(alphanum / "-" / "." / "!" / "%" / "*"
|
|
* / "_" / "+" / "`" / "'" / "~" )
|
|
* separators = "(" / ")" / "<" / ">" / "@" /
|
|
* "," / ";" / ":" / "\" / DQUOTE /
|
|
* "/" / "[" / "]" / "?" / "=" /
|
|
* "{" / "}" / SP / HTAB
|
|
* word = 1*(alphanum / "-" / "." / "!" / "%" / "*" /
|
|
* "_" / "+" / "`" / "'" / "~" /
|
|
* "(" / ")" / "<" / ">" /
|
|
* ":" / "\" / DQUOTE /
|
|
* "/" / "[" / "]" / "?" /
|
|
* "{" / "}" )
|
|
*
|
|
* STAR = SWS "*" SWS ; asterisk
|
|
* SLASH = SWS "/" SWS ; slash
|
|
* EQUAL = SWS "=" SWS ; equal
|
|
* LPAREN = SWS "(" SWS ; left parenthesis
|
|
* RPAREN = SWS ")" SWS ; right parenthesis
|
|
* RAQUOT = ">" SWS ; right angle quote
|
|
* LAQUOT = SWS "<"; left 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
|
|
*
|
|
* comment = LPAREN *(ctext / quoted-pair / comment) RPAREN
|
|
* ctext = %x21-27 / %x2A-5B / %x5D-7E / UTF8-NONASCII
|
|
* / LWS
|
|
*
|
|
* 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)
|
|
*
|
|
* SIP-URI = "sip:" [ userinfo ] hostport
|
|
* uri-parameters [ headers ]
|
|
* SIPS-URI = "sips:" [ userinfo ] hostport
|
|
* uri-parameters [ headers ]
|
|
* userinfo = ( user / telephone-subscriber ) [ ":" password ] "@"
|
|
* user = 1*( unreserved / escaped / user-unreserved )
|
|
* user-unreserved = "&" / "=" / "+" / "$" / "," / ";" / "?" / "/"
|
|
* 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*4HEXDIG
|
|
* port = 1*DIGIT
|
|
*
|
|
* uri-parameters = *( ";" uri-parameter)
|
|
* uri-parameter = transport-param / user-param / method-param
|
|
* / ttl-param / maddr-param / lr-param / other-param
|
|
* transport-param = "transport="
|
|
* ( "udp" / "tcp" / "sctp" / "tls"
|
|
* / other-transport)
|
|
* other-transport = token
|
|
* user-param = "user=" ( "phone" / "ip" / other-user)
|
|
* other-user = token
|
|
* method-param = "method=" Method
|
|
* ttl-param = "ttl=" ttl
|
|
* maddr-param = "maddr=" host
|
|
* lr-param = "lr"
|
|
* other-param = pname [ "=" pvalue ]
|
|
* pname = 1*paramchar
|
|
* pvalue = 1*paramchar
|
|
* paramchar = param-unreserved / unreserved / escaped
|
|
* param-unreserved = "[" / "]" / "/" / ":" / "&" / "+" / "$"
|
|
*
|
|
* headers = "?" header *( "&" header )
|
|
* header = hname "=" hvalue
|
|
* hname = 1*( hnv-unreserved / unreserved / escaped )
|
|
* hvalue = *( hnv-unreserved / unreserved / escaped )
|
|
* hnv-unreserved = "[" / "]" / "/" / "?" / ":" / "+" / "$"
|
|
*
|
|
* SIP-message = Request / Response
|
|
* Request = Request-Line
|
|
* *( message-header )
|
|
* CRLF
|
|
* [ message-body ]
|
|
* Request-Line = Method SP Request-URI SP SIP-Version CRLF
|
|
* Request-URI = SIP-URI / SIPS-URI / absoluteURI
|
|
* absoluteURI = scheme ":" ( hier-part / opaque-part )
|
|
* hier-part = ( net-path / abs-path ) [ "?" query ]
|
|
* net-path = "//" authority [ abs-path ]
|
|
* abs-path = "/" path-segments
|
|
* 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 / "$" / ","
|
|
* / ";" / ":" / "@" / "&" / "=" / "+" )
|
|
* query = *uric
|
|
* SIP-Version = "SIP" "/" 1*DIGIT "." 1*DIGIT
|
|
*
|
|
* message-header = (Accept
|
|
* / Accept-Encoding
|
|
* / Accept-Language
|
|
* / Alert-Info
|
|
* / Allow
|
|
* / Authentication-Info
|
|
* / Authorization
|
|
* / Call-ID
|
|
* / Call-Info
|
|
* / Contact
|
|
* / Content-Disposition
|
|
* / Content-Encoding
|
|
* / Content-Language
|
|
* / Content-Length
|
|
* / Content-Type
|
|
* / CSeq
|
|
* / Date
|
|
* / Error-Info
|
|
* / Expires
|
|
* / From
|
|
* / In-Reply-To
|
|
* / Max-Forwards
|
|
* / MIME-Version
|
|
* / Min-Expires
|
|
* / Organization
|
|
* / Priority
|
|
* / Proxy-Authenticate
|
|
* / Proxy-Authorization
|
|
* / Proxy-Require
|
|
* / Record-Route
|
|
* / Reply-To
|
|
* / Require
|
|
* / Retry-After
|
|
* / Route
|
|
* / Server
|
|
* / Subject
|
|
* / Supported
|
|
* / Timestamp
|
|
* / To
|
|
* / Unsupported
|
|
* / User-Agent
|
|
* / Via
|
|
* / Warning
|
|
* / WWW-Authenticate
|
|
* / extension-header) CRLF
|
|
*
|
|
* INVITEm = %x49.4E.56.49.54.45 ; INVITE in caps
|
|
* ACKm = %x41.43.4B ; ACK in caps
|
|
* OPTIONSm = %x4F.50.54.49.4F.4E.53 ; OPTIONS in caps
|
|
* BYEm = %x42.59.45 ; BYE in caps
|
|
* CANCELm = %x43.41.4E.43.45.4C ; CANCEL in caps
|
|
* REGISTERm = %x52.45.47.49.53.54.45.52 ; REGISTER in caps
|
|
* Method = INVITEm / ACKm / OPTIONSm / BYEm
|
|
* / CANCELm / REGISTERm
|
|
* / extension-method
|
|
* extension-method = token
|
|
* Response = Status-Line
|
|
* *( message-header )
|
|
* CRLF
|
|
* [ message-body ]
|
|
*
|
|
* Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF
|
|
* Status-Code = Informational
|
|
* / Redirection
|
|
* / Success
|
|
* / Client-Error
|
|
* / Server-Error
|
|
* / Global-Failure
|
|
* / extension-code
|
|
* extension-code = 3DIGIT
|
|
* Reason-Phrase = *(reserved / unreserved / escaped
|
|
* / UTF8-NONASCII / UTF8-CONT / SP / HTAB)
|
|
*
|
|
* 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
|
|
* / "410" ; Gone
|
|
* / "413" ; Request Entity Too Large
|
|
* / "414" ; Request-URI Too Large
|
|
* / "415" ; Unsupported Media Type
|
|
* / "416" ; Unsupported URI Scheme
|
|
* / "420" ; Bad Extension
|
|
* / "421" ; Extension Required
|
|
* / "423" ; Interval Too Brief
|
|
* / "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 Terminated
|
|
* / "488" ; Not Acceptable Here
|
|
* / "491" ; Request Pending
|
|
* / "493" ; Undecipherable
|
|
*
|
|
* Server-Error = "500" ; Internal Server Error
|
|
* / "501" ; Not Implemented
|
|
* / "502" ; Bad Gateway
|
|
* / "503" ; Service Unavailable
|
|
* / "504" ; Server Time-out
|
|
* / "505" ; SIP Version not supported
|
|
* / "513" ; Message Too Large
|
|
*
|
|
* Global-Failure = "600" ; Busy Everywhere
|
|
* / "603" ; Decline
|
|
* / "604" ; Does not exist anywhere
|
|
* / "606" ; Not Acceptable
|
|
*
|
|
* Accept = "Accept" HCOLON
|
|
* [ accept-range *(COMMA accept-range) ]
|
|
* accept-range = media-range *(SEMI accept-param)
|
|
* ; Why not SLASH ? //PPe
|
|
* media-range = ( "*" "/" "*"
|
|
* / ( m-type SLASH "*" )
|
|
* / ( m-type SLASH m-subtype )
|
|
* ) *( SEMI m-parameter )
|
|
* accept-param = ("q" EQUAL qvalue) / generic-param
|
|
* qvalue = ( "0" [ "." 0*3DIGIT ] )
|
|
* / ( "1" [ "." 0*3("0") ] )
|
|
* generic-param = token [ EQUAL gen-value ]
|
|
* gen-value = token / host / quoted-string
|
|
*
|
|
* Accept-Encoding = "Accept-Encoding" HCOLON
|
|
* [ encoding *(COMMA encoding) ]
|
|
* encoding = codings *(SEMI accept-param)
|
|
* codings = content-coding / "*"
|
|
* content-coding = token
|
|
*
|
|
* Accept-Language = "Accept-Language" HCOLON
|
|
* [ language *(COMMA language) ]
|
|
* language = language-range *(SEMI accept-param)
|
|
* language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) / "*" )
|
|
*
|
|
* Alert-Info = "Alert-Info" HCOLON alert-param *(COMMA alert-param)
|
|
* alert-param = LAQUOT absoluteURI RAQUOT *( SEMI generic-param )
|
|
*
|
|
* Allow = "Allow" HCOLON [Method *(COMMA Method)]
|
|
*
|
|
* 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
|
|
* username = "username" EQUAL username-value
|
|
* username-value = quoted-string
|
|
* digest-uri = "uri" EQUAL LDQUOT digest-uri-value RDQUOT
|
|
* digest-uri-value = rquest-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-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
|
|
*
|
|
* 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
|
|
*
|
|
* Call-ID = ( "Call-ID" / "i" ) HCOLON callid
|
|
* callid = word [ "@" word ]
|
|
*
|
|
* Call-Info = "Call-Info" HCOLON info *(COMMA info)
|
|
* info = LAQUOT absoluteURI RAQUOT *( SEMI info-param)
|
|
* info-param = ( "purpose" EQUAL ( "icon" / "info"
|
|
* / "card" / token ) ) / generic-param
|
|
*
|
|
* Contact = ("Contact" / "m" ) HCOLON
|
|
* ( STAR / (contact-param *(COMMA contact-param)))
|
|
* contact-param = (name-addr / addr-spec) *(SEMI contact-params)
|
|
* name-addr = [ display-name ] LAQUOT addr-spec RAQUOT
|
|
* addr-spec = SIP-URI / SIPS-URI / absoluteURI
|
|
* display-name = *(token LWS)/ quoted-string
|
|
*
|
|
* contact-params = c-p-q / c-p-expires
|
|
* / contact-extension
|
|
* c-p-q = "q" EQUAL qvalue
|
|
* c-p-expires = "expires" EQUAL delta-seconds
|
|
* contact-extension = generic-param
|
|
* delta-seconds = 1*DIGIT
|
|
*
|
|
* Content-Disposition = "Content-Disposition" HCOLON
|
|
* disp-type *( SEMI disp-param )
|
|
* disp-type = "render" / "session" / "icon" / "alert"
|
|
* / 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 = ( "Content-Encoding" / "e" ) HCOLON
|
|
* content-coding *(COMMA content-coding)
|
|
*
|
|
* Content-Language = "Content-Language" HCOLON
|
|
* language-tag *(COMMA language-tag)
|
|
* language-tag = primary-tag *( "-" subtag )
|
|
* primary-tag = 1*8ALPHA
|
|
* subtag = 1*8ALPHA
|
|
*
|
|
* Content-Length = ( "Content-Length" / "l" ) HCOLON 1*DIGIT
|
|
* 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" HCOLON 1*DIGIT LWS Method
|
|
*
|
|
* Date = "Date" HCOLON SIP-date
|
|
* SIP-date = rfc1123-date
|
|
* rfc1123-date = wkday "," SP date1 SP time SP "GMT"
|
|
* date1 = 2DIGIT SP month SP 4DIGIT
|
|
* ; day month year (e.g., 02 Jun 1982)
|
|
* time = 2DIGIT ":" 2DIGIT ":" 2DIGIT
|
|
* ; 00:00:00 - 23:59:59
|
|
* 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" HCOLON error-uri *(COMMA error-uri)
|
|
* error-uri = LAQUOT absoluteURI RAQUOT *( SEMI generic-param )
|
|
*
|
|
* Expires = "Expires" HCOLON delta-seconds
|
|
* 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
|
|
*
|
|
* In-Reply-To = "In-Reply-To" HCOLON callid *(COMMA callid)
|
|
*
|
|
* Max-Forwards = "Max-Forwards" HCOLON 1*DIGIT
|
|
*
|
|
* MIME-Version = "MIME-Version" HCOLON 1*DIGIT "." 1*DIGIT
|
|
*
|
|
* Min-Expires = "Min-Expires" HCOLON delta-seconds
|
|
*
|
|
* Organization = "Organization" HCOLON [TEXT-UTF8-TRIM]
|
|
*
|
|
* Priority = "Priority" HCOLON priority-value
|
|
* priority-value = "emergency" / "urgent" / "normal"
|
|
* / "non-urgent" / other-priority
|
|
* other-priority = token
|
|
*
|
|
* Proxy-Authenticate = "Proxy-Authenticate" HCOLON challenge
|
|
* challenge = ("Digest" LWS digest-cln *(COMMA digest-cln))
|
|
* / other-challenge
|
|
* other-challenge = auth-scheme LWS 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
|
|
* nonce = "nonce" EQUAL nonce-value
|
|
* nonce-value = quoted-string
|
|
* opaque = "opaque" EQUAL quoted-string
|
|
* stale = "stale" EQUAL ( "true" / "false" )
|
|
* algorithm = "algorithm" EQUAL ( "MD5" / "MD5-sess"
|
|
* / token )
|
|
* qop-options = "qop" EQUAL LDQUOT qop-value
|
|
* *("," qop-value) RDQUOT
|
|
* qop-value = "auth" / "auth-int" / token
|
|
*
|
|
* Proxy-Authorization = "Proxy-Authorization" HCOLON credentials
|
|
*
|
|
* Proxy-Require = "Proxy-Require" HCOLON option-tag
|
|
* *(COMMA option-tag)
|
|
* option-tag = token
|
|
*
|
|
* Record-Route = "Record-Route" HCOLON rec-route *(COMMA rec-route)
|
|
* rec-route = name-addr *( SEMI rr-param )
|
|
* rr-param = generic-param
|
|
*
|
|
* Reply-To = "Reply-To" HCOLON rplyto-spec
|
|
* rplyto-spec = ( name-addr / addr-spec )
|
|
* *( SEMI rplyto-param )
|
|
* rplyto-param = generic-param
|
|
* Require = "Require" HCOLON option-tag *(COMMA option-tag)
|
|
*
|
|
* Retry-After = "Retry-After" HCOLON delta-seconds
|
|
* [ comment ] *( SEMI retry-param )
|
|
*
|
|
* retry-param = ("duration" EQUAL delta-seconds)
|
|
* / generic-param
|
|
*
|
|
* Route = "Route" HCOLON route-param *(COMMA route-param)
|
|
* route-param = name-addr *( SEMI rr-param )
|
|
*
|
|
* Server = "Server" HCOLON server-val *(LWS server-val)
|
|
* server-val = product / comment
|
|
* product = token [SLASH product-version]
|
|
* product-version = token
|
|
*
|
|
* Subject = ( "Subject" / "s" ) HCOLON [TEXT-UTF8-TRIM]
|
|
*
|
|
* Supported = ( "Supported" / "k" ) HCOLON
|
|
* [option-tag *(COMMA option-tag)]
|
|
*
|
|
* Timestamp = "Timestamp" HCOLON 1*(DIGIT)
|
|
* [ "." *(DIGIT) ] [ LWS delay ]
|
|
* delay = *(DIGIT) [ "." *(DIGIT) ]
|
|
*
|
|
* To = ( "To" / "t" ) HCOLON ( name-addr
|
|
* / addr-spec ) *( SEMI to-param )
|
|
* to-param = tag-param / generic-param
|
|
*
|
|
* Unsupported = "Unsupported" HCOLON option-tag *(COMMA option-tag)
|
|
* User-Agent = "User-Agent" HCOLON server-val *(LWS server-val)
|
|
*
|
|
* 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-extension
|
|
* via-ttl = "ttl" EQUAL ttl
|
|
* via-maddr = "maddr" EQUAL host
|
|
* via-received = "received" EQUAL (IPv4address / IPv6address)
|
|
* via-branch = "branch" EQUAL token
|
|
* 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"
|
|
* / other-transport
|
|
* sent-by = host [ COLON port ]
|
|
* ttl = 1*3DIGIT ; 0 to 255
|
|
*
|
|
* 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
|
|
* ; the name or pseudonym of the server adding
|
|
* ; the Warning header, for use in debugging
|
|
* warn-text = quoted-string
|
|
* pseudonym = token
|
|
*
|
|
* WWW-Authenticate = "WWW-Authenticate" HCOLON challenge
|
|
*
|
|
* extension-header = header-name HCOLON header-value
|
|
* header-name = token
|
|
* header-value = *(TEXT-UTF8char / UTF8-CONT / LWS)
|
|
* message-body = *OCTET
|
|
*/ |