In computer networking, the Message Session Relay Protocol is a protocol for
transmitting a series of related instant messages in the context of a
communications session. An application instantiates the session with the
Session Description Protocol over Session Initiation Protocol or other
rendezvous methods. The MSRP protocol is defined in RFC
4975. MSRP messages can also be transmitted by using intermediaries
peers, by using the relay extensions defined in RFC 4976.
MSRP is used in the RCS context, especially for the instant messaging,
file transfer and photo sharing features.
Protocol design MSRP has similar syntax as other IETF
text based protocol such as SIP, HTTP and RTSP. Each message is either a
request or a response, uses URIs, a message contains headers and a body that
can carry any type of data, including binary information. Unlike SIP, MSRP is
much simpler. The first 2 headers must be To-Path and From-Path and the last
must be Content-Type, this significantly reduces the complexity of parsers.
Messages must also end with 7 dash characters, followed by a transaction
identifier which appears in the first line, these are followed by a
continuation flag, which is a single character and end of line. This last
line at the end of messages makes it rather simple to find and detect the
message boundaries. MSRP is not defined for connection-less protocols, such as
UDP, thus one be certain that a response to a request would arrive on the same
connection. MSRP also relies on a reliable transport layer, that is,
guarantees delivery and maintains the order of the messages, which further
simplifies the protocol design. An MSRP URI has a scheme, authority, as
defined by RFC 3986, which holds the IP/domain name and possibly the port, an
optional session identifier, the transport and additional optional
parameters. For example: atlanta.example.com:7654/jshA7weztas;tcp
msrp is the scheme atlanta.example.com:7654 is the
authority jshA7weztas is the session identifier
tcp is the transport Usage in SIP
MSRP can be used within a SIP session: to do instant messaging in a one-to-one
or one-to-many mode to do an attachment file transfer
to do some photo sharing based on prior exchange of capabilities between the
user endpoints MSRP session is set up through SIP's
offer-answer model. The SDP m-line media type is message and the proto is either
TCP/MSRP for MSRP over TCP and TCPMSRP for MSRP over secure TLS. Furthermore,
the MSRP URI is specified in a path attribute.
A full SDP example, as provided by the RFC:
v=0 o=alice 2890844526 2890844527 IN IP4
alice.example.com s= -
c=IN IP4 alice.example.com t=0 0
m=message 7394 TCP/MSRP * a=accept-types:text/plain
rp:alice.example.com:7394/2s93i9ek2a;tcp The fact that MSRP contains the address
and port and at the same time the c-line holds the address and m-line contain the
port is a cause for ambiguity. Generally, other media types use the
c-line and m-line to describe the address, but the MSRP RFC 4975 states
this information is actually specified by the MSRP path. This may cause some
devices to improperly set up the session, in particular, a B2BUA may
require to alter the path per each MSRP message between the different devices.
To overcome this, RFC 6714 "CEMA for MSRP" changes the way CEMA-aware
devices use SDP, which makes CEMA-aware MSRP B2BUA implementations much simpler
and more efficient. Implementations
A generic and open source peer library is implemented in the following
programming languages: = Libraries =
Java's MSRP Peer library, which sprung the following ports:
C#/.Net version Java ME
Python MSRPlib = Clients =
Blink is a cross platform SIP client with MSRP protocol support.
= Servers = MSRP relay has an open source
implementation written in Python, here. MSRP switch has an open source
implementation written in Python, here. References
See also SIMPLE
Session Initiation Protocol IP Multimedia Subsystem
Rich Communication Suite