Name

SIP — supports the SIP Publish and Subscribe capability as described in the [RFC3903 - Session Initiation Protocol (SIP) Extension for Event]

Overview

The SIP component in Apache Camel is a communication component, based on the Jain SIP implementation (available under the JCP license).

Session Initiation Protocol (SIP) is an IETF-defined signaling protocol, widely used for controlling multimedia communication sessions such as voice and video calls over Internet Protocol (IP).The SIP protocol is an Application Layer protocol designed to be independent of the underlying transport layer; it can run on Transmission Control Protocol (TCP), User Datagram Protocol (UDP) or Stream Control Transmission Protocol (SCTP).

The Jain SIP implementation supports TCP and UDP only.

The Apache Camel SIP component only supports the SIP Publish and Subscribe capability as described in the RFC3903 - Session Initiation Protocol (SIP) Extension for Event

This component supports both producer and consumer endpoints.

Apache Camel SIP Producers (Event Publishers) and SIP Consumers (Event Subscribers) communicate event & state information to each other using an intermediary entity called a SIP Presence Agent (a stateful brokering entity).

URI format

The URI scheme for a SIP endpoint is as follows:

sip://username@host:port[?options]
sips://username@host:port[?options]

Dependencies

For SIP based communication, a SIP Stack with a listener must be instantiated on both the SIP Producer and Consumer (using separate ports if using localhost). This is necessary in order to support the handshakes & acknowledgements exchanged between the SIP Stacks during communication.

Maven users will need to add the dependency shown in Example 14, “SIP dependency” to their pom.xml to use this component.

Example 14. SIP dependency

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-sip</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

Options

Table 38, “SIP Options” lists the options for a SIP endpoint.

Table 38. SIP Options

Name Default Value Description
stackName NAME_NOT_SET Name of the SIP Stack instance associated with an SIP Endpoint.
transport tcp Setting for choice of transport potocol. Valid choices are "tcp" or "udp".
fromUser   Username of the message originator. Mandatory setting unless a registry based custom FromHeader is specified.
fromHost   Hostname of the message originator. Mandatory setting unless a registry based FromHeader is specified
fromPort   Port of the message originator. Mandatory setting unless a registry based FromHeader is specified
toUser   Username of the message receiver. Mandatory setting unless a registry based custom ToHeader is specified.
toHost   Hostname of the message receiver. Mandatory setting unless a registry based ToHeader is specified
toPort   Portname of the message receiver. Mandatory setting unless a registry based ToHeader is specified
maxforwards 0 the number of intermediaries that may forward the message to the message receiver. Optional setting. May alternatively be set using as registry based MaxForwardsHeader
eventId   Setting for a String based event Id. Mandatory setting unless a registry based FromHeader is specified
eventHeaderName   Setting for a String based event Id. Mandatory setting unless a registry based FromHeader is specified
maxMessageSize 1048576 Setting for maximum allowed Message size in bytes.
cacheConnections false Should connections be cached by the SipStack to reduce cost of connection creation. This is useful if the connection is used for long running conversations.
consumer false This setting is used to determine whether the kind of header (FromHeader,ToHeader etc) that needs to be created for this endpoint
automaticDialogSupport off Setting to specify whether every communication should be associated with a dialog.
contentType text Setting for contentType can be set to any valid MimeType.
contentSubType xml Setting for contentSubType can be set to any valid MimeSubType.
receiveTimeoutMillis 10000 Setting for specifying amount of time to wait for a Response and/or Acknowledgement can be received from another SIP stack
useRouterForAllUris false This setting is used when requests are sent to the Presence Agent via a proxy.
msgExpiration 3600 The amount of time a message received at an endpoint is considered valid
presenceAgent false This setting is used to distingish between a Presence Agent & a consumer. This is due to the fact that the SIP Camel component ships with a basic Presence Agent (for testing purposes only). Consumers have to set this flag to true.

Registry based options

SIP requires a number of headers to be sent/received as part of a request. These SIP header can be enlisted in the Registry, such as in the Spring XML file.

Table 39, “SIP registry based options” describes the values.

Table 39. SIP registry based options

Name Description
fromHeader a custom Header object containing message originator settings. Must implement the type javax.sip.header.FromHeader
toHeader a custom Header object containing message receiver settings. Must implement the type javax.sip.header.ToHeader
viaHeaders List of custom Header objects of the type javax.sip.header.ViaHeader. Each ViaHeader containing a proxy address for request forwarding. (Note this header is automatically updated by each proxy when the request arrives at its listener)
contentTypeHeader a custom Header object containing message content details. Must implement the type javax.sip.header.ContentTypeHeader
callIdHeader a custom Header object containing call details. Must implement the type javax.sip.header.CallIdHeader
maxForwardsHeader a custom Header object containing details on maximum proxy forwards. This header places a limit on the viaHeaders possible. Must implement the type javax.sip.header.MaxForwardsHeader
eventHeader a custom Header object containing event details. Must implement the type javax.sip.header.EventHeader
contactHeader an optional custom Header object containing verbose contact details (email, phone number etc). Must implement the type javax.sip.header.ContactHeader
expiresHeader a custom Header object containing message expiration details. Must implement the type javax.sip.header.ExpiresHeader
extensionHeader a custom Header object containing user/application specific details. Must implement the type javax.sip.header.ExtensionHeader