SIP extension

Introduction

This extension provides support for the Session Initiation Protocol, largely used for voice over IP (VoIP). It ships both client and server SIP connectors over TCP, reusing the 90% of the logic used by the new NIO/HTTP internal connector, providing excellent scalability and performance.

For now, you can get more details on the Restlet/SIP specifications page.

Features

  • SIP transport over TCP
  • All SIP headers, including "Via", map to a Java API
  • All base SIP methods supported
  • Extension INFO, REGISTER, SUBSCRIBE, NOTIFY, PUBLISH and REFER methods supported
  • OPTIONS method supported : useful for integration purposes as most gateways require it for redundancy

Mapping SIP headers

The complete list of SIP headers is available at the IANA site.

SIP header Restlet property name Restlet property class Description
Accept request.clientInfo.acceptedMediaTypes org.restlet.data.Preference<MediaType> Identical to HTTP with the exception that if no header field is present, the server should assume a default value of "application/sdp".
Accept-Encoding request.clientInfo. acceptedEncodings Identical to HTTP.
Accept-Language request.clientInfo. acceptedLanguages Identical to HTTP.
Alert-Info message.alertInfo org.restlet.ext.sip.data.Address Specifies an alternative ring tone to the UAS or alternative ringback tone to the UAC.
Allow response.allowedMethods Identical to HTTP.
Allow-Events message.allowedEventTypes org.restlet.ext.sip.data.EventType Includes a list of tokens which indicates the event packages supported. See RFC 3265.
Authentication-Info response.authenticationInfo Identical to HTTP.
Authorization request.challengeResponse Identical to HTTP.
Call-ID message.callId String Uniquely identifies a particular invitation or all registrations of a particular client.
Call-Info message. calleeInfo or callerInfo List of org.restlet.ext.sip.data.Address
Contact message. contact org.restlet.ext.sip.data.ContactInfo
Content-Disposition entity.disposition Similar to HTTP with no disposition types defined.
Content-Encoding entity.encodings Identical to HTTP.
Content-Language entity.languages Identical to HTTP.
Content-Length entity.size Identical to HTTP.
Content-Type entity.mediaType and entity.characterSet Identical to HTTP.
CSeq message.callSequence org.restlet.ext.sip.data.CallSequence Serves to order transactions within a dialog, to provide a means to uniquely identify transactions, and to differentiate between new requests and request retransmissions.
Date message.date Similar to HTTP with restriction on the date format supported.
Error-Info response.errorInfo org.restlet.ext.sip.data.Address Provides a pointer to additional information about the error status response.
Event message.event org.restlet.ext.sip.data.Event Describes an event notification. See RFC 3265.
Expires entity.expirationDate Similar to HTTP but with SIP specificities.
From request.clientInfo.from org.restlet.ext.sip.data.Address Similar to HTTP but with a more specific format.
In-Reply-To request.inReplyTo List<org.restlet.ext.sip.data.CallId> Enumerates the Call-IDs that this call references or returns.
Max-Forwards Support for proxies planned for later Identical to HTTP.
Min-Expires response.minExpires Conveys the minimum refresh interval supported for soft-state element managed by that server.
MIME-Version message.mimeVersion Indicates what version of the MIME protocol was used to construct the message.
Organization message.organization Conveys the name of the organization to which the SIP element issuing the request or response belongs.
Priority request.priority org.restlet.ext.sip.data.Priority Indicates the urgency of the request as perceived by the client.
Proxy-Authenticate response.proxyChallengeRequests Identical to HTTP.
Proxy-Authorization request.proxyChallengeResponse Identical to HTTP.
Proxy-Require message.proxyRequire List<org.restlet.ext.sip.data.OptionTag> Used to indicate proxy-sensitive features that must be supported by the proxy.
RAck ? Supports reliability of provisional responses. Mentionned in RFC 3262.
Record-Route message.recordedRoutes List<org.restlet.ext.sip.data.Address> Inserted by proxies in a request to force future requests in the dialog to be routed through the proxy.
Refer-To request.refertTo org.restlet.ext.sip.data.Address Provides a URL to reference. See RFC 3515.
Reply-To message.replyTo org.restlet.ext.sip.data.Address Contains a logical return URI that may be different from the From header field. 
Require request.requires List<org.restlet.ext.sip.data.OptionTag> Used by UACs to tell UASs about options that the UAC expects the UAS to support in order to process the request.
Retry-After response.sipRetryAfter List<org.restlet.ext.sip.data.Availability> Identical to HTTP.
Route request.routes List<org.restlet.ext.sip.data.Address> Used to force routing for a request through the listed set of proxies.
Rseq response Transmit provisional responses reliably. Mentionned in RFC 3262
Server response.serverInfo.agent Identical to HTTP.
SIP-ETag response.sipTag org.restlet.data.Tag See RFC 3903
SIP-If-Match request.conditions.sipIfMatch org.restlet.data.Tag See RFC 3903
Subject request.subject Provides a summary or indicates the nature of the call, allowing call filtering without having to parse the session description.
Subscription-State request.subscriptionState org.restlet.ext.sip.data.SubscriptionState Provides the state of a subscription. See RFC 3265.
Supported message.supported List<org.restlet.ext.sip.data.OptionTag> Enumerates all the extensions supported by the UAC or UAS.
Timestamp message.timestamp Describes when the UAC sent the request to the UAS.
To message.to org.restlet.ext.sip.data.Address Specifies the logical recipient of the request.
Unsupported message.unsupported List<org.restlet.ext.sip.data.OptionTag> Lists the features not supported by the UAS.
User-Agent request.clientInfo.agent Identical to HTTP.
Via message.recipientsInfo Identical to HTTP.
Warning message.warnings Identical to HTTP.
WWW-Authenticate response.challengeRequests Identical to HTTP.