javax.servlet.sip
Interface SipServletResponse

All Superinterfaces:
javax.servlet.ServletResponse, SipServletMessage

public interface SipServletResponse
extends javax.servlet.ServletResponse, SipServletMessage

Represents SIP responses. Instances of this class are passed to servlets when the container receives incoming SIP responses and also, servlets acting as UA servers or proxies generates SIP responses of their own by creating SipServletResponses.

SIP responses has a three-digit status code that indicates the outcome of the corresponding request. Responses with a status code in the range of 100-199 (1xx's) are called provisional or informational and indicate progress in processing of the request. Any response with a status code of 200 or higher is a final response. A UA server may send only one final response per request but this may be preceeded by any number of provisional responses.

2xx responses indicate a successful outcome while 3xx-6xx indicate a variety of non-success conditions.

The summary of status codes is [RFC 3261]:


Field Summary
static int SC_ACCEPTED
          Status code (202) indicating that the request has been accepted for processing, but the processing has not been completed.
static int SC_ADDRESS_INCOMPLETE
          Status code (484) indicating that the server received a request with a To (Section 6.37) address or Request-URI that was incomplete.
static int SC_ALTERNATIVE_SERVICE
          Status code (380) indicating alternative service.
static int SC_AMBIGUOUS
          Status code (485) indicating that the callee address provided in the request was ambiguous.
static int SC_BAD_EXTENSION
          Status code (420) indicating that the server did not understand the protocol extension specified in a Require (Section 6.30) header field.
static int SC_BAD_GATEWAY
          Status code (502) indicating that the server, while acting as a gateway or proxy, received an invalid response from the downstream server it accessed in attempting to fulfill the request.
static int SC_BAD_REQUEST
          Status code (400) indicating Bad Request.
static int SC_BUSY_EVERYWHERE
          Status code (600) indicating that the callee's end system was contacted successfully but the callee is busy and does not wish to take the call at this time.
static int SC_BUSY_HERE
          Status code (486) indicating that the callee's end system was contacted successfully but the callee is curently not willing or able to take additional call.
static int SC_CALL_BEING_FORWARDED
          Status code (181) indicating the call is being forwarded.
static int SC_CALL_LEG_DONE
          Status code (481) indicating Call Leg/Transaction does not exist.
static int SC_CALL_QUEUED
          Status code (182) indicating the call is queued.
static int SC_DECLINE
          Status code (603) indicating that the callee's machine was successfully contacted but the user explicily does not wish to or cannot participate.
static int SC_DOES_NOT_EXIT_ANYWHERE
          Status code (604) indicating that the server has authoritative information that the user indicated in the To request field does not exist anywhere.
static int SC_EXTENSION_REQUIRED
          Status code (421) indicating that the UAS needs a particular extension to process the request, but this extension is not listed in a Supported header field in the request.
static int SC_FORBIDDEN
          Status code (403) indicating that the caller is forbidden to make such requests.
static int SC_GONE
          Status code (410) indicating that the requested resource is no longer available at the server an no forwarding address is known.
static int SC_INTERVAL_TOO_BRIEF
          Status code (423) indicating that the server is rejecting the request because the expiration time of the resource refreshed by the request is too short.
static int SC_LOOP_DETECTED
          Status code (482) indicating that the server received a request with a Via (Section 6.40) path containing itself.
static int SC_MESSAGE_TOO_LARGE
          Status code (513) indicating that the server was unable to process the request since the message length exceeded its capabilities.
static int SC_METHOD_NOT_ALLOWED
          Status code (405) indicating that the method specified in the Request-Line is not allowed for the address identified byt the Request-URI.
static int SC_MOVED_PERMANENTLY
          Status code (301) indicating that the callee has moved permanantly.
static int SC_MOVED_TEMPORARILY
          Status code (302) indicating that the callee has moved temporarily.
static int SC_MULTIPLE_CHOICES
          Status code (300) indicating Multiple Choices.
static int SC_NOT_ACCEPTABLE
          Status code (406) indicating the the resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request.
static int SC_NOT_ACCEPTABLE_ANYWHERE
          Status code (606) indicating that the user's agent was contacted successfully but some aspects of the session description such as the requested media, bandwidth, or addressing style were not acceptable.
static int SC_NOT_ACCEPTABLE_HERE
          Status code (488) indicating that the response has the same meaning as 606 (Not Acceptable), but only applies to the specific resource addressed by the Request-URI and the request may succeed elsewhere.
static int SC_NOT_FOUND
          Status code (404) indicating that the server had definitive information that the user does not exist at the domain specified in the Request-URI.
static int SC_NOT_IMPLEMENTED
          Status code (501) indicating that the server does not support the functionality required to fulfill the request.
static int SC_OK
          Status code (200) indicating the request succeeded normally.
static int SC_PAYMENT_REQUIRED
          Status code (402) indicating that the caller needs to make a payment.
static int SC_PROXY_AUTHENTICATION_REQUIRED
          Status code (407) indicating that the client MUST first authenticate itself with the proxy.
static int SC_REQUEST_ENTITY_TOO_LARGE
          Status code (413) indicating that the server si refusing to process a request becaus the request entity is larger than the server is willing or able to process.
static int SC_REQUEST_PENDING
          Status code (491) indicating that the request was received by a UAS that had a pending request within the same dialog.
static int SC_REQUEST_TERMINATED
          Status code (487) indicating that the request was terminated by a BYE or CANCEL request.
static int SC_REQUEST_TIMEOUT
          Status code (408) indicating that the server could not produce a response, e.g., a user location, within the time indicated in the Expires request-header field.
static int SC_REQUEST_URI_TOO_LONG
          Status code (414) indicating that the server if refusing to service the request because the Request-URI is longer than the server is willing to interpret.
static int SC_RINGING
          Status code (180) indicating the server has located the callee, and callee user agent is Ringing the callee.
static int SC_SERVER_INTERNAL_ERROR
          Status code (500) indicating that the server encountered an unexpected condition that prevented it from fulfilling the request.
static int SC_SERVER_TIMEOUT
          Status code (504) indicating that the server did not receive a timely response from an external server it accessed in attempting to process the request.
static int SC_SERVICE_UNAVAILABLE
          Status code (503) indicating that the server is currently unable to handle the request due to a temporary overloading or maintenance of the server.
static int SC_SESSION_PROGRESS
          Status code (183) carries miscellaneous call progress information.
static int SC_TEMPORARLY_UNAVAILABLE
          Status code (480) indicating that the callee's end system was contacted successfully but the callee is currently unavailable (e.g., not logged in or logged in such a manner as to preclude communication with the callee).
static int SC_TOO_MANY_HOPS
          Status code (483) indicating that the server received a request that contains more Via entries (hops) (Section 6.40) than allowed by the Max-Forwards (Section 6.23) header field.
static int SC_TRYING
          Status code (100) indicating the server is trying to locate the callee.
static int SC_UNAUTHORIZED
          Status code (401) indicating that the caller is unauthorized to make this request.
static int SC_UNDECIPHERABLE
          Status code (493) indicating that the request was received by a UAS that contained an encrypted MIME body for which the recipient does not possess or will not provide an appropriate decryption key.
static int SC_UNSUPPORTED_MEDIA_TYPE
          Status code (415) indicating that the server is refusing to service the request because the message body of the request is in a format not supported by the requested resource for the requested method.
static int SC_UNSUPPORTED_URI_SCHEME
          Status code (416) indicating that the server cannot process the request because the scheme of the URI in the Request-URI is unknown to the server.
static int SC_USE_PROXY
          Status code (305) indicating that he call can be better handled by the specified proxy server.
static int SC_VERSION_NOT_SUPPORTED
          Status code (505) indicating that the server does not support, the SIP protocol version that was used in the request message.
 
Method Summary
 SipServletRequest createAck()
          Returns an ACK request object corresponding to this response.
 javax.servlet.ServletOutputStream getOutputStream()
          Always returns null.
 Proxy getProxy()
          Returns the Proxy object associated with the transaction of this SIP response object.
 java.lang.String getReasonPhrase()
          Returns the reason phrase for this response object.
 SipServletRequest getRequest()
          Returns the request associated with this response.
 int getStatus()
          Returns the status code of this response object.
 java.io.PrintWriter getWriter()
          Always returns null.
 void send()
          Causes this response to be sent.
 void sendReliably()
          Requests that this response be sent reliably using the 100rel extension defined in RFC 3262.
 void setStatus(int statusCode)
          Sets the status code of this response object.
 void setStatus(int statusCode, java.lang.String reasonPhrase)
          Sets the status code and reason phrase of this response object.
 
Methods inherited from interface javax.servlet.ServletResponse
flushBuffer, getBufferSize, getCharacterEncoding, getLocale, isCommitted, reset, resetBuffer, setBufferSize, setContentLength, setContentType, setLocale
 
Methods inherited from interface javax.servlet.sip.SipServletMessage
addAcceptLanguage, addAddressHeader, addHeader, getAcceptLanguage, getAcceptLanguages, getAddressHeader, getAddressHeaders, getApplicationSession, getApplicationSession, getAttribute, getAttributeNames, getCallId, getCharacterEncoding, getContent, getContentLanguage, getContentLength, getContentType, getExpires, getFrom, getHeader, getHeaderNames, getHeaders, getLocalAddr, getLocalPort, getMethod, getProtocol, getRawContent, getRemoteAddr, getRemotePort, getRemoteUser, getSession, getSession, getTo, getTransport, getUserPrincipal, isCommitted, isSecure, isUserInRole, removeHeader, setAcceptLanguage, setAddressHeader, setAttribute, setCharacterEncoding, setContent, setContentLanguage, setContentLength, setContentType, setExpires, setHeader
 

Field Detail

SC_TRYING

public static final int SC_TRYING
Status code (100) indicating the server is trying to locate the callee.

SC_RINGING

public static final int SC_RINGING
Status code (180) indicating the server has located the callee, and callee user agent is Ringing the callee.

SC_CALL_BEING_FORWARDED

public static final int SC_CALL_BEING_FORWARDED
Status code (181) indicating the call is being forwarded.

SC_CALL_QUEUED

public static final int SC_CALL_QUEUED
Status code (182) indicating the call is queued.

SC_SESSION_PROGRESS

public static final int SC_SESSION_PROGRESS
Status code (183) carries miscellaneous call progress information. The Reason-Phrase may convey more details about the call progress.

SC_OK

public static final int SC_OK
Status code (200) indicating the request succeeded normally.

SC_ACCEPTED

public static final int SC_ACCEPTED
Status code (202) indicating that the request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this.

SC_MULTIPLE_CHOICES

public static final int SC_MULTIPLE_CHOICES
Status code (300) indicating Multiple Choices. i.e., user may be reached at multiple locations.

SC_MOVED_PERMANENTLY

public static final int SC_MOVED_PERMANENTLY
Status code (301) indicating that the callee has moved permanantly.

SC_MOVED_TEMPORARILY

public static final int SC_MOVED_TEMPORARILY
Status code (302) indicating that the callee has moved temporarily.

SC_USE_PROXY

public static final int SC_USE_PROXY
Status code (305) indicating that he call can be better handled by the specified proxy server.

SC_ALTERNATIVE_SERVICE

public static final int SC_ALTERNATIVE_SERVICE
Status code (380) indicating alternative service.

SC_BAD_REQUEST

public static final int SC_BAD_REQUEST
Status code (400) indicating Bad Request.

SC_UNAUTHORIZED

public static final int SC_UNAUTHORIZED
Status code (401) indicating that the caller is unauthorized to make this request.

SC_PAYMENT_REQUIRED

public static final int SC_PAYMENT_REQUIRED
Status code (402) indicating that the caller needs to make a payment.

SC_FORBIDDEN

public static final int SC_FORBIDDEN
Status code (403) indicating that the caller is forbidden to make such requests.

SC_NOT_FOUND

public static final int SC_NOT_FOUND
Status code (404) indicating that the server had definitive information that the user does not exist at the domain specified in the Request-URI. This status is also returned if the domain in the Request-URI does not match any of the domains handled by the recipent of the request.

SC_METHOD_NOT_ALLOWED

public static final int SC_METHOD_NOT_ALLOWED
Status code (405) indicating that the method specified in the Request-Line is not allowed for the address identified byt the Request-URI. The response MUST include an Allow header field containing a list of valid methods for the indicated address.

SC_NOT_ACCEPTABLE

public static final int SC_NOT_ACCEPTABLE
Status code (406) indicating the the resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request.

SC_PROXY_AUTHENTICATION_REQUIRED

public static final int SC_PROXY_AUTHENTICATION_REQUIRED
Status code (407) indicating that the client MUST first authenticate itself with the proxy. The proxy MUST return a Proxy-Authenticate header field (section 6.26) containing a challenge applicable to the proxy for the requested resource. The client MAY repeat the request with a suitable Proxy-Authorization header field (section 6.27). SIP access authorization is explained in section 13.2 and 14.

This status code is used for applications where access to the communication channel (e.g., a telephony gateway) rather than the callee requires authentication.


SC_REQUEST_TIMEOUT

public static final int SC_REQUEST_TIMEOUT
Status code (408) indicating that the server could not produce a response, e.g., a user location, within the time indicated in the Expires request-header field. The client MAY repeat the request without modifications at any later time.

SC_GONE

public static final int SC_GONE
Status code (410) indicating that the requested resource is no longer available at the server an no forwarding address is known. This condition is expected to be considered permanent. If the server does not know, or has no facility to determine, whether or not the codition is permanent, the status code 404 (Not Found) SHOULD be used instead.

SC_REQUEST_ENTITY_TOO_LARGE

public static final int SC_REQUEST_ENTITY_TOO_LARGE
Status code (413) indicating that the server si refusing to process a request becaus the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.

If the condition is temporary, teh server SHOULD include a Retry-After header field to indicate that it is temporary and after what time the client MAY try again.


SC_REQUEST_URI_TOO_LONG

public static final int SC_REQUEST_URI_TOO_LONG
Status code (414) indicating that the server if refusing to service the request because the Request-URI is longer than the server is willing to interpret.

SC_UNSUPPORTED_MEDIA_TYPE

public static final int SC_UNSUPPORTED_MEDIA_TYPE
Status code (415) indicating that the server is refusing to service the request because the message body of the request is in a format not supported by the requested resource for the requested method. The server SHOULD return a list of acceptable formats using the Accept, Accept-Encoding and Accept-Language header fields.

SC_UNSUPPORTED_URI_SCHEME

public static final int SC_UNSUPPORTED_URI_SCHEME
Status code (416) indicating that the server cannot process the request because the scheme of the URI in the Request-URI is unknown to the server.

SC_BAD_EXTENSION

public static final int SC_BAD_EXTENSION
Status code (420) indicating that the server did not understand the protocol extension specified in a Require (Section 6.30) header field.

SC_EXTENSION_REQUIRED

public static final int SC_EXTENSION_REQUIRED
Status code (421) indicating that the UAS needs a particular extension to process the request, but this extension is not listed in a Supported header field in the request.

SC_INTERVAL_TOO_BRIEF

public static final int SC_INTERVAL_TOO_BRIEF
Status code (423) indicating that the server is rejecting the request because the expiration time of the resource refreshed by the request is too short.

SC_TEMPORARLY_UNAVAILABLE

public static final int SC_TEMPORARLY_UNAVAILABLE
Status code (480) indicating that the callee's end system was contacted successfully but the callee is currently unavailable (e.g., not logged in or logged in such a manner as to preclude communication with the callee). The response MAY indicate a better time to call in the Retry-After header. The user could also be available elsewhere (unbeknownst to this host), thus, this response does not terminate any searches. The reason phrase SHOULD be setable by the user agent. Status 486 (Busy Here) MAY be used to more precisely indicate a particular reason for the call failure.

This status is also returned by a redirect server that recognizes the user identified by the Request-URI, but does not currently have a valide forwarding location for that user.


SC_CALL_LEG_DONE

public static final int SC_CALL_LEG_DONE
Status code (481) indicating Call Leg/Transaction does not exist.

This status is returned under two conditions: The server received a BYE request that does not match any existing call leg or the server received a CANCEL request that does not match any existing transaction. (A server simply discards an ACK referring to an unknown transaction.)


SC_LOOP_DETECTED

public static final int SC_LOOP_DETECTED
Status code (482) indicating that the server received a request with a Via (Section 6.40) path containing itself.

SC_TOO_MANY_HOPS

public static final int SC_TOO_MANY_HOPS
Status code (483) indicating that the server received a request that contains more Via entries (hops) (Section 6.40) than allowed by the Max-Forwards (Section 6.23) header field.

SC_ADDRESS_INCOMPLETE

public static final int SC_ADDRESS_INCOMPLETE
Status code (484) indicating that the server received a request with a To (Section 6.37) address or Request-URI that was incomplete. Additional information SHOULD be provided.

Note: This status code allows overlapped dialing. With overlapped dialing, the client does not know the length of the dialing string. It sends strings of increasing lengths, prompting the user for more input, until it no longer receives a 484 status response.


SC_AMBIGUOUS

public static final int SC_AMBIGUOUS
Status code (485) indicating that the callee address provided in the request was ambiguous. The response MAY contain a listing of possible unambiguous addresses in Contact headers.

Revealing alternatives can infringe on privacy concerns of the user or the organization. It MUST be possible to configure a server to respond with status 404 (Not Found) or to suppress the listing of possible choices if the request with the URL lee@example.com.

 485 Ambiguous SIP/2.0
 Contact: Carol Lee <sip:carol.lee@example.com>
 Contact: Ping Lee <sip:p.lee@example.com>
 Contact: Lee M. Foote <sip:lee.foote@example.com>
 

Some email and voice mail systems provide this functionality. A status code separate from 3xx is used since the semantics are different: for 300, it is assumed that the same person or sevice will be reached by the choices provided. While an automated choice or sequential search makes sense for a 3xx response, user intervention is required for a 485 response.


SC_BUSY_HERE

public static final int SC_BUSY_HERE
Status code (486) indicating that the callee's end system was contacted successfully but the callee is curently not willing or able to take additional call.

SC_REQUEST_TERMINATED

public static final int SC_REQUEST_TERMINATED
Status code (487) indicating that the request was terminated by a BYE or CANCEL request.

SC_NOT_ACCEPTABLE_HERE

public static final int SC_NOT_ACCEPTABLE_HERE
Status code (488) indicating that the response has the same meaning as 606 (Not Acceptable), but only applies to the specific resource addressed by the Request-URI and the request may succeed elsewhere.

SC_REQUEST_PENDING

public static final int SC_REQUEST_PENDING
Status code (491) indicating that the request was received by a UAS that had a pending request within the same dialog.

SC_UNDECIPHERABLE

public static final int SC_UNDECIPHERABLE
Status code (493) indicating that the request was received by a UAS that contained an encrypted MIME body for which the recipient does not possess or will not provide an appropriate decryption key.

SC_SERVER_INTERNAL_ERROR

public static final int SC_SERVER_INTERNAL_ERROR
Status code (500) indicating that the server encountered an unexpected condition that prevented it from fulfilling the request.

SC_NOT_IMPLEMENTED

public static final int SC_NOT_IMPLEMENTED
Status code (501) indicating that the server does not support the functionality required to fulfill the request.

SC_BAD_GATEWAY

public static final int SC_BAD_GATEWAY
Status code (502) indicating that the server, while acting as a gateway or proxy, received an invalid response from the downstream server it accessed in attempting to fulfill the request.

SC_SERVICE_UNAVAILABLE

public static final int SC_SERVICE_UNAVAILABLE
Status code (503) indicating that the server is currently unable to handle the request due to a temporary overloading or maintenance of the server.

SC_SERVER_TIMEOUT

public static final int SC_SERVER_TIMEOUT
Status code (504) indicating that the server did not receive a timely response from an external server it accessed in attempting to process the request.

SC_VERSION_NOT_SUPPORTED

public static final int SC_VERSION_NOT_SUPPORTED
Status code (505) indicating that the server does not support, the SIP protocol version that was used in the request message.

SC_MESSAGE_TOO_LARGE

public static final int SC_MESSAGE_TOO_LARGE
Status code (513) indicating that the server was unable to process the request since the message length exceeded its capabilities.

SC_BUSY_EVERYWHERE

public static final int SC_BUSY_EVERYWHERE
Status code (600) indicating that the callee's end system was contacted successfully but the callee is busy and does not wish to take the call at this time.

SC_DECLINE

public static final int SC_DECLINE
Status code (603) indicating that the callee's machine was successfully contacted but the user explicily does not wish to or cannot participate. The response MAY indicate a better time to call in the Retry-After header.

SC_DOES_NOT_EXIT_ANYWHERE

public static final int SC_DOES_NOT_EXIT_ANYWHERE
Status code (604) indicating that the server has authoritative information that the user indicated in the To request field does not exist anywhere. Searching for the user elsewhere will not yield an results.

SC_NOT_ACCEPTABLE_ANYWHERE

public static final int SC_NOT_ACCEPTABLE_ANYWHERE
Status code (606) indicating that the user's agent was contacted successfully but some aspects of the session description such as the requested media, bandwidth, or addressing style were not acceptable.
Method Detail

getRequest

public SipServletRequest getRequest()
Returns the request associated with this response. For responses received for proxied requests, this method returns a request object that represents the request as it was sent downstream.

Proxying applications can use the request URI obtained from the request object to correlate an incoming response to one of the several destinations it has been proxied to.

Returns:
request for which this response was generated

getStatus

public int getStatus()
Returns the status code of this response object.

The Status-Code is a 3-digit integer result code that indicates the outcome of the attempt to understand and satisfy the request.

Returns:
status code of this response

setStatus

public void setStatus(int statusCode)
Sets the status code of this response object.
Parameters:
statusCode - status code of this response

setStatus

public void setStatus(int statusCode,
                      java.lang.String reasonPhrase)
Sets the status code and reason phrase of this response object.
Parameters:
statusCode - status code of this response
reasonPhrase - short textual description of the status code

getReasonPhrase

public java.lang.String getReasonPhrase()
Returns the reason phrase for this response object.
Returns:
reason phrase for this response

getOutputStream

public javax.servlet.ServletOutputStream getOutputStream()
                                                  throws java.io.IOException
Always returns null. SIP is not a content transfer protocol and having stream based content accessors is of little utility.

Message content can be set using the SipServletMessage.setContent(java.lang.Object, java.lang.String) method.

Specified by:
getOutputStream in interface javax.servlet.ServletResponse
Returns:
null

getWriter

public java.io.PrintWriter getWriter()
                              throws java.io.IOException
Always returns null. SIP is not a content transfer protocol and having stream based content accessors is of little utility.

Message content can be set using the SipServletMessage.setContent(java.lang.Object, java.lang.String) method.

Specified by:
getWriter in interface javax.servlet.ServletResponse
Returns:
null

getProxy

public Proxy getProxy()
Returns the Proxy object associated with the transaction of this SIP response object. Such a Proxy object exists if this is a response for a previously proxied request. Otherwise, a Proxy object does not exist, and null is returned.

Note that the container must return the same Proxy instance whenever a servlet invokes getProxy on messages belonging to the same transaction. In particular, a response to a proxied request is associated with the same Proxy object as is the original request.

Returns:
the Proxy object associated with this response's transaction, or null if this response was not received for a previously proxied request

sendReliably

public void sendReliably()
                  throws Rel100Exception
Requests that this response be sent reliably using the 100rel extension defined in RFC 3262. This method must only be invoked for 1xx response other than 100, and only if the UAC indicated support for the 100rel extension in the request and the container supports it.

Applications can test whether the container supports the 100rel extension by checking whether an attribute with name "javax.servlet.sip.100rel" exists in the ServletContext and has a value which equals Boolean.TRUE.

Throws:
Rel100Exception - if one of the conditions for using the 100rel extension is not satisfied.
See Also:
RFC 3262, Reliability of Provisional Responses in the Session Initiation Protocol (SIP)

send

public void send()
          throws java.io.IOException
Causes this response to be sent. This is used by servlets acting as UASs to send provisional and final responses, and by proxies when generating provisional responses.
Specified by:
send in interface SipServletMessage
Throws:
java.io.IOException - if a transport error occurs when trying to send this response
java.lang.IllegalStateException - if this response was received from downstream or if it has already been sent

createAck

public SipServletRequest createAck()
Returns an ACK request object corresponding to this response. This method is used by servlets acting as UACs in order to acknowledge 2xx final responses to INVITE requests.

Please note that applications do not generate ACKs for non-2xx responses, as this is done by the container itself.

Returns:
ACK request corresponding to this response
Throws:
java.lang.IllegalStateException - if the transaction state is such that it doesn't allow an ACK to be sent now, e.g. if the original request was not an INVITE, if this response is provisional only, or if an ACK has already been generated


SIP Servlet API 1.0