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.
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 | Provides additional information about the caller or callee. |
Contact | message. | contact | org.restlet.ext.sip.data.ContactInfo | Provides a URI and additional parameters whose meaning depends on the type of request or response it is in. |
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. |