(Logo Tech-invite)  

a Portal devoted to SIP and Security technologies

  (World Map)    
    Search Home Site Map Contact
 SIP/IMS Standardization
> IETF Standardization Process
> RFCs related to SIP (4 p.) o
> SIP-SIPPING-SIMPLE... I-Ds (22 p.) o
> Audio-Video Transport RFCs (2 p.)
> 3GPP Specifications (12 p.)
> OMA Specifications related to SIP
> TISPAN NGN Specifications (3 p.) o
> SIP Topics
> IMS Topics
 SIP/IMS Call Flows
> RFC3261's Example
> Basic -- RFC3665
> SIP PSTN -- RFC3666 (3 p.)
> SIP Service Examples (20 p.)
> IMS Signaling Flows (35 p.)
 SIP/IMS Architecture
> SIP Protocol Structure
> Dialogs & Routing
> UMTS Network Evolution
 Security
> PKIX-TLS-SMIME... Standards (20 p.) o
> Cryptography Basics
> ASN.1 for PKI Certificate & CRL Profile
> ASN.1 for CMS
> RFC3280's Certificate Examples (4)
> RFC4134's CMS-S/MIME Examples (14)
> RFC4474's SIP Authentication Service
> SSL/TLS Time-Diagrams
> IPSec Guides
 ABNF Grammars
> ABNF Notation & Rules
> URI Generic Syntax
> ABNF for SIP
> SIP Messages & URIs
> SIP Header Fields
> MIME Media Types
> ABNF for SDP
> ABNF for MSRP
> ABNF for MRCPv2
> ABNF for RTSP 2.0
> Internet Message Format
 DiffServ CoS Simulation
> IPVCoSS Simulator
> IP-VPN Case Study
  o (daily updated)

ABNF Grammar for MSRP
-- Message Session Relay Protocol

This page documents the ABNF (Augmented Backus-Naur Form) definitions for MSRP text messages, defined in [RFC 4975] and [RFC 4976].

Top Messages Headers URI Content Status Codes Common Rules

MSRP Messages

msrp-req-or-resp= msrp-request   /   msrp-response
msrp-request= req-start   headers   [content-stuff]   end-line
msrp-response= resp-start   headers   end-line
 
req-start= pMSRP   SP   transact-id   SP   method   CRLF
resp-start= pMSRP   SP   transact-id   SP   status-code   [SP comment]   CRLF
headers= To-Path   CRLF   From-Path   CRLF   1*( header CRLF )
end-line= "-------"   transact-id   continuation-flag   CRLF
 

(MSRP message examples)

transact-id= ident
comment= utf8text
continuation-flag= "+" / "$" / "#"
 
pMSRP= %x4D.53.52.50 ; MSRP in caps
 
method= mSEND
/ mREPORT
/ mAUTH
/ other-method
 
mSEND= %x53.45.4E.44 ; SEND in caps
mREPORT= %x52.45.50.4F.52.54 ; REPORT in caps
mAUTH= %x41.55.54.48 ; AUTH in caps
 
other-method= 1*UPALPHA
 
header= Message-ID
/ Success-Report
/ Failure-Report
/ Byte-Range
/ Status
/ Expires
/ Min-Expires
/ Max-Expires
/ Use-Path
/ WWW-Authenticate
/ Authorization
/ Authentication-Info
/ ext-header
 
ext-header= hname ":" SP hval CRLF
hname= ALPHA *token
hval= utf8text
 
Top Messages Headers URI Content Status Codes Common Rules

MSRP Headers

## To-Path ## From-Path ## Message-ID ## Success-Report ## Failure-Report ## Byte-Range ## Status ## Expires ## Min-Expires ## Max-Expires ## Use-Path ## WWW-Authenticate ## Authorization ## Authentication-Info ##
To-Path   Up Top
To-Path= "To-Path:" SP MSRP-URI *( SP MSRP-URI )
 
From-Path   Up Top
From-Path= "From-Path:" SP MSRP-URI *( SP MSRP-URI )
 
Message-ID   Up Top
Message-ID= "Message-ID:" SP ident
 
Success-Report   Up Top
Success-Report= "Success-Report:" ( "yes" / "no" )
 
Failure-Report   Up Top
Failure-Report= "Failure-Report:" ( "yes" / "no" / "partial" )
 
Byte-Range   Up Top
Byte-Range= "Byte-Range:" SP range-start "-" range-end "/" total
range-start= 1*DIGIT
range-end= 1*DIGIT / "*"
total= 1*DIGIT / "*"
 
Status   Up Top
Status= "Status:" SP namespace SP status-code [SP text-reason]
namespace= 3(DIGIT) ; "000" for all codes defined in RFC 4975
text-reason= utf8text
 
Expires   Up Top
Expires= "Expires:" SP 1*DIGIT
 
Min-Expires   Up Top
Min-Expires= "Min-Expires:" SP 1*DIGIT
 
Max-Expires   Up Top
Max-Expires= "Max-Expires:" SP 1*DIGIT
 
Use-Path   Up Top
Use-Path= "Use-Path:" SP MSRP-URI *(SP MSRP-URI)
 
WWW-Authenticate   Up Top
WWW-Authenticate= "WWW-Authenticate:" SP "Digest" SP digest-param *("," SP digest-param)
 
digest-param= ( realm / nonce /
[ opaque ] / [ stale ] / [ algorithm ] /
qop-options / [ auth-param ] )
 
realm= "realm=" realm-value
realm-value= quoted-string
 
nonce= "nonce=" nonce-value
nonce-value= quoted-string
 
opaque= "opaque=" quoted-string
 
stale= "stale=" ( "true" / "false" )
 
algorithm= "algorithm=" ( "MD5" / token )
 
qop-options= "qop=" QUOTE qop-list QUOTE
qop-list= qop-value *( "," qop-value )
qop-value= "auth" / token
 
auth-param= token "=" ( token / quoted-string )
 
Authorization   Up Top
Authorization= "Authorization:" SP credentials
 
credentials= "Digest" SP digest-response *( "," SP digest-response)
 
digest-response= ( username / realm / nonce
/ response / [ algorithm ] / cnonce
/ [ opaque ] / message-qop
/ [ nonce-count ] / [ auth-param ] )
 
username= "username=" username-value
username-value= quoted-string
 
response= "response=" request-digest
request-digest= QUOTE 32LHEX QUOTE
 
cnonce= "cnonce=" cnonce-value
cnonce-value= nonce-value
 
message-qop= "qop=" qop-value
 
nonce-count= "nc=" nc-value
nc-value= 8LHEX
 
Authentication-Info   Up Top
Authentication-Info= "Authentication-Info:" SP ainfo *("," ainfo)
 
ainfo= nextnonce / message-qop
/ response-auth / cnonce
/ nonce-count
 
nextnonce= "nextnonce=" nonce-value
 
response-auth= "rspauth=" response-digest
response-digest= QUOTE *LHEX QUOTE
 
Top Messages Headers URI Content Status Codes Common Rules

MSRP Request Message Content

content-stuff= *(Other-Mime-header CRLF) Content-Type 2CRLF data CRLF
 
Content-Type= "Content-Type:" SP media-type
media-type= type "/" subtype *( ";" gen-param )
type= token
subtype= token
 
gen-param= pname [ "=" pval ]
pname= token
pval= token / quoted-string
 
data= *OCTET
 
Other-Mime-header= (Content-ID
/ Content-Description
/ Content-Disposition
/ MIME-extension-field)

; Content-ID, and Content-Description are defined in RFC 2045
; Content-Disposition is defined in RFC 2183

 
Content-ID= "Content-ID:" msg-id
 
Content-Description= "Content-Description:" *text
 
Content-Disposition= "Content-Disposition:" disposition-type *(";" disposition-parm)
 
disposition-type= "inline"
/ "attachment"
/ extension-token
; values are not case-sensitive
extension-token= ietf-token / x-token
ietf-token= <An extension token defined by a standards-track RFC and registered with IANA>
x-token= <The two characters "X-" or "x-" followed, with no intervening white space, by any token>
 
disposition-parm= filename-parm
/ creation-date-parm
/ modification-date-parm
/ read-date-parm
/ size-parm
/ parameter
 
filename-parm= "filename=" value
creation-date-parm= "creation-date=" quoted-date-time
modification-date-parm= "modification-date=" quoted-date-time
read-date-parm= "read-date=" quoted-date-time
size-parm= "size=" 1*DIGIT
parameter= attribute "=" value
attribute= token
; Matching of attributes
; is ALWAYS case-insensitive
value= token / quoted-string
token= 1* <any (US-ASCII) CHAR except SPACE, CTLs, or tspecials>
tspecials= "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "\" / <"> / "/" / "[" / "]" / "?" / "="
; Must be in quoted-string,
; to use within parameter values
quoted-date-time= quoted-string
; contents MUST be an RFC 822 'date-time'
; numeric timezones (+HHMM or -HHMM) MUST be used

 
MIME-extension-field= <Any RFC 822 header field which begins with the string "Content-">
; MIME-extension-field indicates additional MIME extension
; header fields as described in RFC 2045

 
Top Messages Headers URI Content Status Codes Common Rules

MSRP URI

MSRP-URI= msrp-scheme "://" authority ["/" session-id] ";" transport *( ";" URI-parameter)
msrp-scheme= "msrp" / "msrps"
session-id= 1*( unreserved / "+" / "=" / "/" )
transport= "tcp" / 1*ALPHANUM
URI-parameter= token ["=" token]
 
Top Messages Headers URI Content Status Codes Common Rules

MSRP Status Codes

status-code= 3DIGIT
  ; 200 Success
  ; 400 Unintelligible
  ; 401 Unauthorized
  ; 403 Action-not-allowed
  ; 408 Transaction-did-not-complete-in-allotted-time
  ; 413 Stop-sending-message
  ; 415 MIME-not-understood
  ; 423 Parameter-out-of-bounds
  ; 481 Session-does-not-exist
  ; 501 Request-method-not-understood
  ; 506 Session-already-in-use
 
Top Messages Headers URI Content Status Codes Common Rules

MSRP Common Rules

ident= ALPHANUM 3*31ident-char
ident-char= ALPHANUM / "." / "-" / "+" / "%" / "="
 
utf8text= *(HTAB / %x20-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
 
token= 1*(%x21 / %x23-27 / %x2A-2B / %x2D-2E
/ %x30-39 / %x41-5A / %x5E-7E)
; token is compared case-insensitive

 
quoted-string= DQUOTE *(qdtext / qd-esc) DQUOTE
qdtext= SP / HTAB / %x21 / %x23-5B / %x5D-7E / UTF8-NONASCII
qd-esc= (BACKSLASH BACKSLASH) / (BACKSLASH DQUOTE)
BACKSLASH= "\"
UPALPHA= %x41-5A
ALPHANUM= ALPHA / DIGIT
 
QUOTE= %x22
 
LHEX= DIGIT / %x61-66 ; lowercase a-f
 
  
Last update: February 2, 2008 
  
(to top) © 2005-2008 Joël Repiquet, All Rights Reserved.