summaryrefslogtreecommitdiffstats
path: root/java/gov/nist/javax/sip/message/MessageFactoryImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/gov/nist/javax/sip/message/MessageFactoryImpl.java')
-rw-r--r--java/gov/nist/javax/sip/message/MessageFactoryImpl.java849
1 files changed, 849 insertions, 0 deletions
diff --git a/java/gov/nist/javax/sip/message/MessageFactoryImpl.java b/java/gov/nist/javax/sip/message/MessageFactoryImpl.java
new file mode 100644
index 0000000..5045cf6
--- /dev/null
+++ b/java/gov/nist/javax/sip/message/MessageFactoryImpl.java
@@ -0,0 +1,849 @@
+/*
+ * Conditions Of Use
+ *
+ * This software was developed by employees of the National Institute of
+ * Standards and Technology (NIST), an agency of the Federal Government.
+ * Pursuant to title 15 Untied States Code Section 105, works of NIST
+ * employees are not subject to copyright protection in the United States
+ * and are considered to be in the public domain. As a result, a formal
+ * license is not needed to use the software.
+ *
+ * This software is provided by NIST as a service and is expressly
+ * provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
+ * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
+ * AND DATA ACCURACY. NIST does not warrant or make any representations
+ * regarding the use of the software or the results thereof, including but
+ * not limited to the correctness, accuracy, reliability or usefulness of
+ * the software.
+ *
+ * Permission to use this software is contingent upon your acceptance
+ * of the terms of this agreement
+ *
+ * .
+ *
+ */
+/*******************************************************************************
+ * Product of NIST/ITL Advanced Networking Technologies Division (ANTD). *
+ *******************************************************************************/
+package gov.nist.javax.sip.message;
+
+import java.text.ParseException;
+import javax.sip.header.*;
+
+import java.util.LinkedList;
+import java.util.List;
+import gov.nist.javax.sip.header.*;
+
+import javax.sip.message.*;
+import javax.sip.address.*;
+import gov.nist.javax.sip.parser.*;
+
+/**
+ * Message Factory implementation
+ *
+ * @version 1.2 $Revision: 1.23 $ $Date: 2009/09/08 01:58:40 $
+ * @since 1.1
+ *
+ * @author M. Ranganathan <br/>
+ * @author Olivier Deruelle <br/>
+ *
+ */
+@SuppressWarnings("unchecked")
+public class MessageFactoryImpl implements MessageFactory, MessageFactoryExt {
+
+ private boolean testing = false;
+
+ private boolean strict = true;
+
+ private static String defaultContentEncodingCharset = "UTF-8";
+
+
+ /*
+ * The UserAgent header to include for all requests created from this message factory.
+ */
+ private static UserAgentHeader userAgent;
+
+ /*
+ * The Server header to include
+ */
+ private static ServerHeader server;
+
+
+ public void setStrict(boolean strict) {
+ this.strict = strict;
+ }
+
+
+
+ /**
+ * This is for testing -- allows you to generate invalid requests
+ */
+ public void setTest(boolean flag) {
+ this.testing = flag;
+ }
+
+ /**
+ * Creates a new instance of MessageFactoryImpl
+ */
+ public MessageFactoryImpl() {
+ }
+
+ /**
+ * Creates a new Request message of type specified by the method paramater,
+ * containing the URI of the Request, the mandatory headers of the message
+ * with a body in the form of a Java object and the body content type.
+ *
+ * @param requestURI -
+ * the new URI object of the requestURI value of this Message.
+ * @param method -
+ * the new string of the method value of this Message.
+ * @param callId -
+ * the new CallIdHeader object of the callId value of this
+ * Message.
+ * @param cSeq -
+ * the new CSeqHeader object of the cSeq value of this Message.
+ * @param from -
+ * the new FromHeader object of the from value of this Message.
+ * @param to -
+ * the new ToHeader object of the to value of this Message.
+ * @param via -
+ * the new List object of the ViaHeaders of this Message.
+ * @param content -
+ * the new Object of the body content value of this Message.
+ * @param contentType -
+ * the new ContentTypeHeader object of the content type value of
+ * this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the method or the body.
+ */
+ public Request createRequest(javax.sip.address.URI requestURI,
+ String method, CallIdHeader callId, CSeqHeader cSeq,
+ FromHeader from, ToHeader to, List via,
+ MaxForwardsHeader maxForwards, ContentTypeHeader contentType,
+ Object content) throws ParseException {
+ if (requestURI == null || method == null || callId == null
+ || cSeq == null || from == null || to == null || via == null
+ || maxForwards == null || content == null
+ || contentType == null)
+ throw new NullPointerException("Null parameters");
+
+ SIPRequest sipRequest = new SIPRequest();
+ sipRequest.setRequestURI(requestURI);
+ sipRequest.setMethod(method);
+ sipRequest.setCallId(callId);
+ sipRequest.setCSeq(cSeq);
+ sipRequest.setFrom(from);
+ sipRequest.setTo(to);
+ sipRequest.setVia(via);
+ sipRequest.setMaxForwards(maxForwards);
+ sipRequest.setContent(content, contentType);
+ if ( userAgent != null ) {
+ sipRequest.setHeader(userAgent);
+ }
+
+ return sipRequest;
+ }
+
+ /**
+ * Creates a new Request message of type specified by the method paramater,
+ * containing the URI of the Request, the mandatory headers of the message
+ * with a body in the form of a byte array and body content type.
+ *
+ * @param requestURI -
+ * the new URI object of the requestURI value of this Message.
+ * @param method -
+ * the new string of the method value of this Message.
+ * @param callId -
+ * the new CallIdHeader object of the callId value of this
+ * Message.
+ * @param cSeq -
+ * the new CSeqHeader object of the cSeq value of this Message.
+ * @param from -
+ * the new FromHeader object of the from value of this Message.
+ * @param to -
+ * the new ToHeader object of the to value of this Message.
+ * @param via -
+ * the new List object of the ViaHeaders of this Message.
+ * @param content -
+ * the new byte array of the body content value of this Message.
+ * @param contentType -
+ * the new ContentTypeHeader object of the content type value of
+ * this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the method or the body.
+ */
+ public Request createRequest(URI requestURI, String method,
+ CallIdHeader callId, CSeqHeader cSeq, FromHeader from, ToHeader to,
+ List via, MaxForwardsHeader maxForwards, byte[] content,
+ ContentTypeHeader contentType) throws ParseException {
+ if (requestURI == null || method == null || callId == null
+ || cSeq == null || from == null || to == null || via == null
+ || maxForwards == null || content == null
+ || contentType == null)
+ throw new ParseException(
+ "JAIN-SIP Exception, some parameters are missing"
+ + ", unable to create the request", 0);
+
+ SIPRequest sipRequest = new SIPRequest();
+ sipRequest.setRequestURI(requestURI);
+ sipRequest.setMethod(method);
+ sipRequest.setCallId(callId);
+ sipRequest.setCSeq(cSeq);
+ sipRequest.setFrom(from);
+ sipRequest.setTo(to);
+ sipRequest.setVia(via);
+ sipRequest.setMaxForwards(maxForwards);
+ sipRequest.setHeader((ContentType) contentType);
+ sipRequest.setMessageContent(content);
+ if ( userAgent != null ) {
+ sipRequest.setHeader(userAgent);
+ }
+ return sipRequest;
+ }
+
+ /**
+ * Creates a new Request message of type specified by the method paramater,
+ * containing the URI of the Request, the mandatory headers of the message.
+ * This new Request does not contain a body.
+ *
+ * @param requestURI -
+ * the new URI object of the requestURI value of this Message.
+ * @param method -
+ * the new string of the method value of this Message.
+ * @param callId -
+ * the new CallIdHeader object of the callId value of this
+ * Message.
+ * @param cSeq -
+ * the new CSeqHeader object of the cSeq value of this Message.
+ * @param from -
+ * the new FromHeader object of the from value of this Message.
+ * @param to -
+ * the new ToHeader object of the to value of this Message.
+ * @param via -
+ * the new List object of the ViaHeaders of this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the method.
+ */
+ public Request createRequest(URI requestURI, String method,
+ CallIdHeader callId, CSeqHeader cSeq, FromHeader from, ToHeader to,
+ List via, MaxForwardsHeader maxForwards) throws ParseException {
+ if (requestURI == null || method == null || callId == null
+ || cSeq == null || from == null || to == null || via == null
+ || maxForwards == null)
+ throw new ParseException(
+ "JAIN-SIP Exception, some parameters are missing"
+ + ", unable to create the request", 0);
+
+ SIPRequest sipRequest = new SIPRequest();
+ sipRequest.setRequestURI(requestURI);
+ sipRequest.setMethod(method);
+ sipRequest.setCallId(callId);
+ sipRequest.setCSeq(cSeq);
+ sipRequest.setFrom(from);
+ sipRequest.setTo(to);
+ sipRequest.setVia(via);
+ sipRequest.setMaxForwards(maxForwards);
+ if (userAgent != null) {
+ sipRequest.setHeader(userAgent);
+ }
+
+ return sipRequest;
+ }
+
+ // Standard Response Creation methods
+
+ /**
+ * Creates a new Response message of type specified by the statusCode
+ * paramater, containing the mandatory headers of the message with a body in
+ * the form of a Java object and the body content type.
+ *
+ * @param statusCode -
+ * the new integer of the statusCode value of this Message.
+ * @param callId -
+ * the new CallIdHeader object of the callId value of this
+ * Message.
+ * @param cSeq -
+ * the new CSeqHeader object of the cSeq value of this Message.
+ * @param from -
+ * the new FromHeader object of the from value of this Message.
+ * @param to -
+ * the new ToHeader object of the to value of this Message.
+ * @param via -
+ * the new List object of the ViaHeaders of this Message.
+ * @param content -
+ * the new Object of the body content value of this Message.
+ * @param contentType -
+ * the new ContentTypeHeader object of the content type value of
+ * this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the statusCode or the body.
+ */
+ public Response createResponse(int statusCode, CallIdHeader callId,
+ CSeqHeader cSeq, FromHeader from, ToHeader to, List via,
+ MaxForwardsHeader maxForwards, Object content,
+ ContentTypeHeader contentType) throws ParseException {
+ if (callId == null || cSeq == null || from == null || to == null
+ || via == null || maxForwards == null || content == null
+ || contentType == null)
+ throw new NullPointerException(" unable to create the response");
+
+ SIPResponse sipResponse = new SIPResponse();
+ StatusLine statusLine = new StatusLine();
+ statusLine.setStatusCode(statusCode);
+ String reasonPhrase = SIPResponse.getReasonPhrase(statusCode);
+ //if (reasonPhrase == null)
+ // throw new ParseException(statusCode + " Unkown ", 0);
+ statusLine.setReasonPhrase(reasonPhrase);
+ sipResponse.setStatusLine(statusLine);
+ sipResponse.setCallId(callId);
+ sipResponse.setCSeq(cSeq);
+ sipResponse.setFrom(from);
+ sipResponse.setTo(to);
+ sipResponse.setVia(via);
+ sipResponse.setMaxForwards(maxForwards);
+ sipResponse.setContent(content, contentType);
+ if (userAgent != null) {
+ sipResponse.setHeader(userAgent);
+ }
+ return sipResponse;
+ }
+
+ /**
+ * Creates a new Response message of type specified by the statusCode
+ * paramater, containing the mandatory headers of the message with a body in
+ * the form of a byte array and the body content type.
+ *
+ * @param statusCode -
+ * the new integer of the statusCode value of this Message.
+ * @param callId -
+ * the new CallIdHeader object of the callId value of this
+ * Message.
+ * @param cSeq -
+ * the new CSeqHeader object of the cSeq value of this Message.
+ * @param from -
+ * the new FromHeader object of the from value of this Message.
+ * @param to -
+ * the new ToHeader object of the to value of this Message.
+ * @param via -
+ * the new List object of the ViaHeaders of this Message.
+ * @param content -
+ * the new byte array of the body content value of this Message.
+ * @param contentType -
+ * the new ContentTypeHeader object of the content type value of
+ * this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the statusCode or the body.
+ */
+ public Response createResponse(int statusCode, CallIdHeader callId,
+ CSeqHeader cSeq, FromHeader from, ToHeader to, List via,
+ MaxForwardsHeader maxForwards, byte[] content,
+ ContentTypeHeader contentType) throws ParseException {
+ if (callId == null || cSeq == null || from == null || to == null
+ || via == null || maxForwards == null || content == null
+ || contentType == null)
+ throw new NullPointerException("Null params ");
+
+ SIPResponse sipResponse = new SIPResponse();
+ sipResponse.setStatusCode(statusCode);
+ sipResponse.setCallId(callId);
+ sipResponse.setCSeq(cSeq);
+ sipResponse.setFrom(from);
+ sipResponse.setTo(to);
+ sipResponse.setVia(via);
+ sipResponse.setMaxForwards(maxForwards);
+ sipResponse.setHeader((ContentType) contentType);
+ sipResponse.setMessageContent(content);
+ if (userAgent != null) {
+ sipResponse.setHeader(userAgent);
+ }
+ return sipResponse;
+ }
+
+ /**
+ * Creates a new Response message of type specified by the statusCode
+ * paramater, containing the mandatory headers of the message. This new
+ * Response does not contain a body.
+ *
+ * @param statusCode -
+ * the new integer of the statusCode value of this Message.
+ * @param callId -
+ * the new CallIdHeader object of the callId value of this
+ * Message.
+ * @param cSeq -
+ * the new CSeqHeader object of the cSeq value of this Message.
+ * @param from -
+ * the new FromHeader object of the from value of this Message.
+ * @param to -
+ * the new ToHeader object of the to value of this Message.
+ * @param via -
+ * the new List object of the ViaHeaders of this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the statusCode.
+ */
+ public Response createResponse(int statusCode, CallIdHeader callId,
+ CSeqHeader cSeq, FromHeader from, ToHeader to, List via,
+ MaxForwardsHeader maxForwards) throws ParseException {
+ if (callId == null || cSeq == null || from == null || to == null
+ || via == null || maxForwards == null)
+ throw new ParseException(
+ "JAIN-SIP Exception, some parameters are missing"
+ + ", unable to create the response", 0);
+
+ SIPResponse sipResponse = new SIPResponse();
+ sipResponse.setStatusCode(statusCode);
+ sipResponse.setCallId(callId);
+ sipResponse.setCSeq(cSeq);
+ sipResponse.setFrom(from);
+ sipResponse.setTo(to);
+ sipResponse.setVia(via);
+ sipResponse.setMaxForwards(maxForwards);
+ if (userAgent != null) {
+ sipResponse.setHeader(userAgent);
+ }
+ return sipResponse;
+ }
+
+ // Response Creation methods based on a Request
+
+ /**
+ * Creates a new Response message of type specified by the statusCode
+ * paramater, based on a specific Request with a new body in the form of a
+ * Java object and the body content type.
+ *
+ * @param statusCode -
+ * the new integer of the statusCode value of this Message.
+ * @param request -
+ * the received Reqest object upon which to base the Response.
+ * @param content -
+ * the new Object of the body content value of this Message.
+ * @param contentType -
+ * the new ContentTypeHeader object of the content type value of
+ * this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the statusCode or the body.
+ */
+ public Response createResponse(int statusCode, Request request,
+ ContentTypeHeader contentType, Object content)
+ throws ParseException {
+ if (request == null || content == null || contentType == null)
+ throw new NullPointerException("null parameters");
+
+ SIPRequest sipRequest = (SIPRequest) request;
+ SIPResponse sipResponse = sipRequest.createResponse(statusCode);
+ sipResponse.setContent(content, contentType);
+ if (server != null) {
+ sipResponse.setHeader(server);
+ }
+ return sipResponse;
+ }
+
+ /**
+ * Creates a new Response message of type specified by the statusCode
+ * paramater, based on a specific Request with a new body in the form of a
+ * byte array and the body content type.
+ *
+ * @param statusCode -
+ * the new integer of the statusCode value of this Message.
+ * @param request -
+ * the received Reqest object upon which to base the Response.
+ * @param content -
+ * the new byte array of the body content value of this Message.
+ * @param contentType -
+ * the new ContentTypeHeader object of the content type value of
+ * this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the statusCode or the body.
+ */
+ public Response createResponse(int statusCode, Request request,
+ ContentTypeHeader contentType, byte[] content)
+ throws ParseException {
+ if (request == null || content == null || contentType == null)
+ throw new NullPointerException("null Parameters");
+
+ SIPRequest sipRequest = (SIPRequest) request;
+ SIPResponse sipResponse = sipRequest.createResponse(statusCode);
+ sipResponse.setHeader((ContentType) contentType);
+ sipResponse.setMessageContent(content);
+ if (server != null) {
+ sipResponse.setHeader(server);
+ }
+ return sipResponse;
+ }
+
+ /**
+ * Creates a new Response message of type specified by the statusCode
+ * paramater, based on a specific Request message. This new Response does
+ * not contain a body.
+ *
+ * @param statusCode -
+ * the new integer of the statusCode value of this Message.
+ * @param request -
+ * the received Reqest object upon which to base the Response.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the statusCode.
+ */
+ public Response createResponse(int statusCode, Request request)
+ throws ParseException {
+ if (request == null)
+ throw new NullPointerException("null parameters");
+
+ // if (LogWriter.needsLogging)
+ // LogWriter.logMessage("createResponse " + request);
+
+ SIPRequest sipRequest = (SIPRequest) request;
+ SIPResponse sipResponse = sipRequest.createResponse(statusCode);
+ // Remove the content from the message (Bug report from
+ // Antonis Karydas.
+ sipResponse.removeContent();
+ sipResponse.removeHeader(ContentTypeHeader.NAME);
+ if (server != null) {
+ sipResponse.setHeader(server);
+ }
+ return sipResponse;
+ }
+
+ /**
+ * Creates a new Request message of type specified by the method paramater,
+ * containing the URI of the Request, the mandatory headers of the message
+ * with a body in the form of a byte array and body content type.
+ *
+ * @param requestURI -
+ * the new URI object of the requestURI value of this Message.
+ * @param method -
+ * the new string of the method value of this Message.
+ * @param callId -
+ * the new CallIdHeader object of the callId value of this
+ * Message.
+ * @param cSeq -
+ * the new CSeqHeader object of the cSeq value of this Message.
+ * @param from -
+ * the new FromHeader object of the from value of this Message.
+ * @param to -
+ * the new ToHeader object of the to value of this Message.
+ * @param via -
+ * the new List object of the ViaHeaders of this Message.
+ * @param contentType -
+ * the new ContentTypeHeader object of the content type value of
+ * this Message.
+ * @param content -
+ * the new byte array of the body content value of this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the method or the body.
+ */
+ public Request createRequest(javax.sip.address.URI requestURI,
+ String method, CallIdHeader callId, CSeqHeader cSeq,
+ FromHeader from, ToHeader to, List via,
+ MaxForwardsHeader maxForwards, ContentTypeHeader contentType,
+ byte[] content) throws ParseException {
+ if (requestURI == null || method == null || callId == null
+ || cSeq == null || from == null || to == null || via == null
+ || maxForwards == null || content == null
+ || contentType == null)
+ throw new NullPointerException("missing parameters");
+
+ SIPRequest sipRequest = new SIPRequest();
+ sipRequest.setRequestURI(requestURI);
+ sipRequest.setMethod(method);
+ sipRequest.setCallId(callId);
+ sipRequest.setCSeq(cSeq);
+ sipRequest.setFrom(from);
+ sipRequest.setTo(to);
+ sipRequest.setVia(via);
+ sipRequest.setMaxForwards(maxForwards);
+ sipRequest.setContent(content, contentType);
+ if (userAgent != null) {
+ sipRequest.setHeader(userAgent);
+ }
+ return sipRequest;
+ }
+
+ /**
+ * Creates a new Response message of type specified by the statusCode
+ * paramater, containing the mandatory headers of the message with a body in
+ * the form of a Java object and the body content type.
+ *
+ * @param statusCode
+ * the new integer of the statusCode value of this Message.
+ * @param callId
+ * the new CallIdHeader object of the callId value of this
+ * Message.
+ * @param cSeq
+ * the new CSeqHeader object of the cSeq value of this Message.
+ * @param from
+ * the new FromHeader object of the from value of this Message.
+ * @param to
+ * the new ToHeader object of the to value of this Message.
+ * @param via
+ * the new List object of the ViaHeaders of this Message.
+ * @param contentType
+ * the new ContentTypeHeader object of the content type value of
+ * this Message.
+ * @param content
+ * the new Object of the body content value of this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the statusCode or the body.
+ */
+ public Response createResponse(int statusCode, CallIdHeader callId,
+ CSeqHeader cSeq, FromHeader from, ToHeader to, List via,
+ MaxForwardsHeader maxForwards, ContentTypeHeader contentType,
+ Object content) throws ParseException {
+ if (callId == null || cSeq == null || from == null || to == null
+ || via == null || maxForwards == null || content == null
+ || contentType == null)
+ throw new NullPointerException("missing parameters");
+ SIPResponse sipResponse = new SIPResponse();
+ StatusLine statusLine = new StatusLine();
+ statusLine.setStatusCode(statusCode);
+ String reason = SIPResponse.getReasonPhrase(statusCode);
+ if (reason == null)
+ throw new ParseException(statusCode + " Unknown", 0);
+ statusLine.setReasonPhrase(reason);
+ sipResponse.setStatusLine(statusLine);
+ sipResponse.setCallId(callId);
+ sipResponse.setCSeq(cSeq);
+ sipResponse.setFrom(from);
+ sipResponse.setTo(to);
+ sipResponse.setVia(via);
+ sipResponse.setContent(content, contentType);
+ if ( userAgent != null) {
+ sipResponse.setHeader(userAgent);
+ }
+ return sipResponse;
+
+ }
+
+ /**
+ * Creates a new Response message of type specified by the statusCode
+ * paramater, containing the mandatory headers of the message with a body in
+ * the form of a byte array and the body content type.
+ *
+ * @param statusCode
+ * the new integer of the statusCode value of this Message.
+ * @param callId
+ * the new CallIdHeader object of the callId value of this
+ * Message.
+ * @param cSeq
+ * the new CSeqHeader object of the cSeq value of this Message.
+ * @param from
+ * the new FromHeader object of the from value of this Message.
+ * @param to
+ * the new ToHeader object of the to value of this Message.
+ * @param via
+ * the new List object of the ViaHeaders of this Message.
+ * @param contentType
+ * the new ContentTypeHeader object of the content type value of
+ * this Message.
+ * @param content
+ * the new byte array of the body content value of this Message.
+ * @throws ParseException
+ * which signals that an error has been reached unexpectedly
+ * while parsing the statusCode or the body.
+ */
+ public Response createResponse(int statusCode, CallIdHeader callId,
+ CSeqHeader cSeq, FromHeader from, ToHeader to, List via,
+ MaxForwardsHeader maxForwards, ContentTypeHeader contentType,
+ byte[] content) throws ParseException {
+ if (callId == null || cSeq == null || from == null || to == null
+ || via == null || maxForwards == null || content == null
+ || contentType == null)
+ throw new NullPointerException("missing parameters");
+ SIPResponse sipResponse = new SIPResponse();
+ StatusLine statusLine = new StatusLine();
+ statusLine.setStatusCode(statusCode);
+ String reason = SIPResponse.getReasonPhrase(statusCode);
+ if (reason == null)
+ throw new ParseException(statusCode + " : Unknown", 0);
+ statusLine.setReasonPhrase(reason);
+ sipResponse.setStatusLine(statusLine);
+ sipResponse.setCallId(callId);
+ sipResponse.setCSeq(cSeq);
+ sipResponse.setFrom(from);
+ sipResponse.setTo(to);
+ sipResponse.setVia(via);
+ sipResponse.setContent(content, contentType);
+ if ( userAgent != null) {
+ sipResponse.setHeader(userAgent);
+ }
+ return sipResponse;
+ }
+
+ /**
+ * Create a request from a string. Conveniance method for UACs that want to
+ * create an outgoing request from a string. Only the headers of the request
+ * should be included in the String that is supplied to this method.
+ *
+ * @param requestString --
+ * string from which to create the message null string returns an
+ * empty message.
+ */
+ public javax.sip.message.Request createRequest(String requestString)
+ throws java.text.ParseException {
+ if (requestString == null || requestString.equals("")) {
+ SIPRequest retval = new SIPRequest();
+ retval.setNullRequest();
+ return retval;
+ }
+
+ StringMsgParser smp = new StringMsgParser();
+ smp.setStrict(this.strict);
+
+ /*
+ * This allows you to catch parse exceptions and create invalid messages
+ * if you want.
+ */
+ ParseExceptionListener parseExceptionListener = new ParseExceptionListener() {
+
+ public void handleException(ParseException ex,
+ SIPMessage sipMessage, Class headerClass,
+ String headerText, String messageText)
+ throws ParseException {
+ // Rethrow the error for the essential headers. Otherwise bad
+ // headers are simply
+ // recorded in the message.
+ if (testing) {
+ if (headerClass == From.class || headerClass == To.class
+ || headerClass == CallID.class
+ || headerClass == MaxForwards.class
+ || headerClass == Via.class
+ || headerClass == RequestLine.class
+ || headerClass == StatusLine.class
+ || headerClass == CSeq.class)
+ throw ex;
+
+ sipMessage.addUnparsed(headerText);
+ }
+
+ }
+
+ };
+
+ if (this.testing)
+ smp.setParseExceptionListener(parseExceptionListener);
+
+ SIPMessage sipMessage = smp.parseSIPMessage(requestString);
+
+ if (!(sipMessage instanceof SIPRequest))
+ throw new ParseException(requestString, 0);
+
+ return (SIPRequest) sipMessage;
+ }
+
+ /**
+ * Create a response from a string
+ *
+ * @param responseString --
+ * string from which to create the message null string returns an
+ * empty message.
+ *
+ */
+ public Response createResponse(String responseString)
+ throws java.text.ParseException {
+ if (responseString == null)
+ return new SIPResponse();
+
+ StringMsgParser smp = new StringMsgParser();
+
+ SIPMessage sipMessage = smp.parseSIPMessage(responseString);
+
+ if (!(sipMessage instanceof SIPResponse))
+ throw new ParseException(responseString, 0);
+
+ return (SIPResponse) sipMessage;
+ }
+
+ /**
+ * Set the common UserAgent header for all requests created from this message factory.
+ * This header is applied to all Messages created from this Factory object except those
+ * that take String for an argument and create Message from the given String.
+ *
+ * @param userAgent -- the user agent header to set.
+ *
+ * @since 2.0
+ */
+
+ public void setDefaultUserAgentHeader(UserAgentHeader userAgent) {
+ MessageFactoryImpl.userAgent = userAgent;
+ }
+
+ /**
+ * Set the common Server header for all responses created from this message factory.
+ * This header is applied to all Messages created from this Factory object except those
+ * that take String for an argument and create Message from the given String.
+ *
+ * @param userAgent -- the user agent header to set.
+ *
+ * @since 2.0
+ */
+
+ public void setDefaultServerHeader(ServerHeader server) {
+ MessageFactoryImpl.server = server;
+ }
+ /**
+ * Get the default common UserAgentHeader.
+ *
+ * @return the user agent header.
+ *
+ * @since 2.0
+ */
+ public static UserAgentHeader getDefaultUserAgentHeader() {
+ return userAgent;
+ }
+
+
+ /**
+ * Get the default common server header.
+ *
+ * @return the server header.
+ */
+ public static ServerHeader getDefaultServerHeader() {
+ return server;
+ }
+
+
+ /**
+ * Set default charset used for encoding String content.
+ * @param charset
+ */
+ public void setDefaultContentEncodingCharset(String charset) throws NullPointerException,
+ IllegalArgumentException {
+ if (charset == null ) throw new NullPointerException ("Null argument!");
+ MessageFactoryImpl.defaultContentEncodingCharset = charset;
+
+ }
+
+ public static String getDefaultContentEncodingCharset() {
+ return MessageFactoryImpl.defaultContentEncodingCharset;
+ }
+
+
+ public MultipartMimeContent createMultipartMimeContent(ContentTypeHeader multipartMimeCth,
+ String[] contentType,
+ String[] contentSubtype,
+ String[] contentBody) {
+ String boundary = multipartMimeCth.getParameter("boundary");
+ MultipartMimeContentImpl retval = new MultipartMimeContentImpl(multipartMimeCth);
+ for (int i = 0 ; i < contentType.length; i++ ) {
+ ContentTypeHeader cth = new ContentType(contentType[i],contentSubtype[i]);
+ ContentImpl contentImpl = new ContentImpl(contentBody[i],boundary);
+ contentImpl.setContentTypeHeader(cth);
+ retval.add(contentImpl);
+ }
+ return retval;
+ }
+
+
+
+
+}