1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/* 2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Conditions Of Use 3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This software was developed by employees of the National Institute of 5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Standards and Technology (NIST), an agency of the Federal Government. 6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Pursuant to title 15 Untied States Code Section 105, works of NIST 7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * employees are not subject to copyright protection in the United States 8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * and are considered to be in the public domain. As a result, a formal 9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * license is not needed to use the software. 10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This software is provided by NIST as a service and is expressly 12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED 13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF 14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT 15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * AND DATA ACCURACY. NIST does not warrant or make any representations 16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * regarding the use of the software or the results thereof, including but 17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * not limited to the correctness, accuracy, reliability or usefulness of 18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the software. 19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Permission to use this software is contingent upon your acceptance 21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * of the terms of this agreement 22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * . 24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/******************************************************************************* 27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Product of NIST/ITL Advanced Networking Technologies Division (ANTD). * 28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *******************************************************************************/ 29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.message; 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.text.ParseException; 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.header.*; 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.LinkedList; 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.List; 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.*; 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.message.*; 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.address.*; 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.parser.*; 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/** 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Message Factory implementation 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2 $Revision: 1.23 $ $Date: 2009/09/08 01:58:40 $ 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @since 1.1 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan <br/> 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author Olivier Deruelle <br/> 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang@SuppressWarnings("unchecked") 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class MessageFactoryImpl implements MessageFactory, MessageFactoryExt { 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private boolean testing = false; 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private boolean strict = true; 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private static String defaultContentEncodingCharset = "UTF-8"; 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /* 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * The UserAgent header to include for all requests created from this message factory. 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private static UserAgentHeader userAgent; 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /* 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * The Server header to include 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private static ServerHeader server; 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setStrict(boolean strict) { 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.strict = strict; 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This is for testing -- allows you to generate invalid requests 81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setTest(boolean flag) { 83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.testing = flag; 84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new instance of MessageFactoryImpl 88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public MessageFactoryImpl() { 90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Request message of type specified by the method paramater, 94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * containing the URI of the Request, the mandatory headers of the message 95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * with a body in the form of a Java object and the body content type. 96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param requestURI - 98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new URI object of the requestURI value of this Message. 99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param method - 100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new string of the method value of this Message. 101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callId - 102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CallIdHeader object of the callId value of this 103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Message. 104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param cSeq - 105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CSeqHeader object of the cSeq value of this Message. 106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param from - 107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new FromHeader object of the from value of this Message. 108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param to - 109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ToHeader object of the to value of this Message. 110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param via - 111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new List object of the ViaHeaders of this Message. 112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param content - 113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new Object of the body content value of this Message. 114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param contentType - 115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ContentTypeHeader object of the content type value of 116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * this Message. 117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the method or the body. 120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Request createRequest(javax.sip.address.URI requestURI, 122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String method, CallIdHeader callId, CSeqHeader cSeq, 123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang FromHeader from, ToHeader to, List via, 124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MaxForwardsHeader maxForwards, ContentTypeHeader contentType, 125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Object content) throws ParseException { 126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (requestURI == null || method == null || callId == null 127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || cSeq == null || from == null || to == null || via == null 128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || maxForwards == null || content == null 129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || contentType == null) 130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException("Null parameters"); 131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPRequest sipRequest = new SIPRequest(); 133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setRequestURI(requestURI); 134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setMethod(method); 135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setCallId(callId); 136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setCSeq(cSeq); 137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setFrom(from); 138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setTo(to); 139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setVia(via); 140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setMaxForwards(maxForwards); 141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setContent(content, contentType); 142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if ( userAgent != null ) { 143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setHeader(userAgent); 144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipRequest; 147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Request message of type specified by the method paramater, 151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * containing the URI of the Request, the mandatory headers of the message 152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * with a body in the form of a byte array and body content type. 153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param requestURI - 155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new URI object of the requestURI value of this Message. 156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param method - 157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new string of the method value of this Message. 158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callId - 159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CallIdHeader object of the callId value of this 160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Message. 161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param cSeq - 162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CSeqHeader object of the cSeq value of this Message. 163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param from - 164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new FromHeader object of the from value of this Message. 165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param to - 166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ToHeader object of the to value of this Message. 167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param via - 168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new List object of the ViaHeaders of this Message. 169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param content - 170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new byte array of the body content value of this Message. 171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param contentType - 172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ContentTypeHeader object of the content type value of 173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * this Message. 174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the method or the body. 177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Request createRequest(URI requestURI, String method, 179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang CallIdHeader callId, CSeqHeader cSeq, FromHeader from, ToHeader to, 180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang List via, MaxForwardsHeader maxForwards, byte[] content, 181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentTypeHeader contentType) throws ParseException { 182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (requestURI == null || method == null || callId == null 183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || cSeq == null || from == null || to == null || via == null 184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || maxForwards == null || content == null 185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || contentType == null) 186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new ParseException( 187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "JAIN-SIP Exception, some parameters are missing" 188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + ", unable to create the request", 0); 189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPRequest sipRequest = new SIPRequest(); 191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setRequestURI(requestURI); 192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setMethod(method); 193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setCallId(callId); 194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setCSeq(cSeq); 195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setFrom(from); 196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setTo(to); 197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setVia(via); 198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setMaxForwards(maxForwards); 199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setHeader((ContentType) contentType); 200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setMessageContent(content); 201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if ( userAgent != null ) { 202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setHeader(userAgent); 203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipRequest; 205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Request message of type specified by the method paramater, 209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * containing the URI of the Request, the mandatory headers of the message. 210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This new Request does not contain a body. 211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param requestURI - 213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new URI object of the requestURI value of this Message. 214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param method - 215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new string of the method value of this Message. 216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callId - 217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CallIdHeader object of the callId value of this 218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Message. 219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param cSeq - 220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CSeqHeader object of the cSeq value of this Message. 221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param from - 222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new FromHeader object of the from value of this Message. 223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param to - 224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ToHeader object of the to value of this Message. 225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param via - 226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new List object of the ViaHeaders of this Message. 227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the method. 230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Request createRequest(URI requestURI, String method, 232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang CallIdHeader callId, CSeqHeader cSeq, FromHeader from, ToHeader to, 233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang List via, MaxForwardsHeader maxForwards) throws ParseException { 234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (requestURI == null || method == null || callId == null 235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || cSeq == null || from == null || to == null || via == null 236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || maxForwards == null) 237600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new ParseException( 238600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "JAIN-SIP Exception, some parameters are missing" 239600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + ", unable to create the request", 0); 240600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 241600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPRequest sipRequest = new SIPRequest(); 242600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setRequestURI(requestURI); 243600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setMethod(method); 244600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setCallId(callId); 245600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setCSeq(cSeq); 246600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setFrom(from); 247600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setTo(to); 248600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setVia(via); 249600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setMaxForwards(maxForwards); 250600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (userAgent != null) { 251600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setHeader(userAgent); 252600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 253600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 254600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipRequest; 255600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 256600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 257600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Standard Response Creation methods 258600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 259600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 260600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Response message of type specified by the statusCode 261600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * paramater, containing the mandatory headers of the message with a body in 262600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the form of a Java object and the body content type. 263600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 264600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param statusCode - 265600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new integer of the statusCode value of this Message. 266600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callId - 267600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CallIdHeader object of the callId value of this 268600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Message. 269600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param cSeq - 270600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CSeqHeader object of the cSeq value of this Message. 271600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param from - 272600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new FromHeader object of the from value of this Message. 273600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param to - 274600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ToHeader object of the to value of this Message. 275600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param via - 276600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new List object of the ViaHeaders of this Message. 277600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param content - 278600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new Object of the body content value of this Message. 279600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param contentType - 280600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ContentTypeHeader object of the content type value of 281600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * this Message. 282600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 283600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 284600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the statusCode or the body. 285600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 286600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Response createResponse(int statusCode, CallIdHeader callId, 287600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang CSeqHeader cSeq, FromHeader from, ToHeader to, List via, 288600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MaxForwardsHeader maxForwards, Object content, 289600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentTypeHeader contentType) throws ParseException { 290600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (callId == null || cSeq == null || from == null || to == null 291600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || via == null || maxForwards == null || content == null 292600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || contentType == null) 293600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException(" unable to create the response"); 294600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 295600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPResponse sipResponse = new SIPResponse(); 296600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang StatusLine statusLine = new StatusLine(); 297600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang statusLine.setStatusCode(statusCode); 298600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String reasonPhrase = SIPResponse.getReasonPhrase(statusCode); 299600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang //if (reasonPhrase == null) 300600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // throw new ParseException(statusCode + " Unkown ", 0); 301600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang statusLine.setReasonPhrase(reasonPhrase); 302600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setStatusLine(statusLine); 303600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setCallId(callId); 304600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setCSeq(cSeq); 305600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setFrom(from); 306600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setTo(to); 307600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setVia(via); 308600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setMaxForwards(maxForwards); 309600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setContent(content, contentType); 310600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (userAgent != null) { 311600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setHeader(userAgent); 312600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 313600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipResponse; 314600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 315600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 316600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 317600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Response message of type specified by the statusCode 318600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * paramater, containing the mandatory headers of the message with a body in 319600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the form of a byte array and the body content type. 320600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 321600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param statusCode - 322600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new integer of the statusCode value of this Message. 323600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callId - 324600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CallIdHeader object of the callId value of this 325600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Message. 326600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param cSeq - 327600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CSeqHeader object of the cSeq value of this Message. 328600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param from - 329600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new FromHeader object of the from value of this Message. 330600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param to - 331600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ToHeader object of the to value of this Message. 332600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param via - 333600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new List object of the ViaHeaders of this Message. 334600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param content - 335600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new byte array of the body content value of this Message. 336600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param contentType - 337600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ContentTypeHeader object of the content type value of 338600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * this Message. 339600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 340600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 341600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the statusCode or the body. 342600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 343600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Response createResponse(int statusCode, CallIdHeader callId, 344600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang CSeqHeader cSeq, FromHeader from, ToHeader to, List via, 345600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MaxForwardsHeader maxForwards, byte[] content, 346600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentTypeHeader contentType) throws ParseException { 347600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (callId == null || cSeq == null || from == null || to == null 348600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || via == null || maxForwards == null || content == null 349600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || contentType == null) 350600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException("Null params "); 351600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 352600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPResponse sipResponse = new SIPResponse(); 353600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setStatusCode(statusCode); 354600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setCallId(callId); 355600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setCSeq(cSeq); 356600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setFrom(from); 357600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setTo(to); 358600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setVia(via); 359600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setMaxForwards(maxForwards); 360600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setHeader((ContentType) contentType); 361600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setMessageContent(content); 362600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (userAgent != null) { 363600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setHeader(userAgent); 364600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 365600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipResponse; 366600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 367600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 368600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 369600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Response message of type specified by the statusCode 370600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * paramater, containing the mandatory headers of the message. This new 371600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Response does not contain a body. 372600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 373600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param statusCode - 374600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new integer of the statusCode value of this Message. 375600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callId - 376600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CallIdHeader object of the callId value of this 377600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Message. 378600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param cSeq - 379600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CSeqHeader object of the cSeq value of this Message. 380600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param from - 381600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new FromHeader object of the from value of this Message. 382600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param to - 383600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ToHeader object of the to value of this Message. 384600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param via - 385600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new List object of the ViaHeaders of this Message. 386600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 387600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 388600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the statusCode. 389600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 390600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Response createResponse(int statusCode, CallIdHeader callId, 391600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang CSeqHeader cSeq, FromHeader from, ToHeader to, List via, 392600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MaxForwardsHeader maxForwards) throws ParseException { 393600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (callId == null || cSeq == null || from == null || to == null 394600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || via == null || maxForwards == null) 395600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new ParseException( 396600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "JAIN-SIP Exception, some parameters are missing" 397600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + ", unable to create the response", 0); 398600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 399600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPResponse sipResponse = new SIPResponse(); 400600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setStatusCode(statusCode); 401600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setCallId(callId); 402600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setCSeq(cSeq); 403600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setFrom(from); 404600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setTo(to); 405600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setVia(via); 406600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setMaxForwards(maxForwards); 407600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (userAgent != null) { 408600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setHeader(userAgent); 409600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 410600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipResponse; 411600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 412600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 413600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Response Creation methods based on a Request 414600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 415600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 416600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Response message of type specified by the statusCode 417600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * paramater, based on a specific Request with a new body in the form of a 418600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Java object and the body content type. 419600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 420600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param statusCode - 421600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new integer of the statusCode value of this Message. 422600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param request - 423600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the received Reqest object upon which to base the Response. 424600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param content - 425600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new Object of the body content value of this Message. 426600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param contentType - 427600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ContentTypeHeader object of the content type value of 428600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * this Message. 429600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 430600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 431600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the statusCode or the body. 432600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 433600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Response createResponse(int statusCode, Request request, 434600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentTypeHeader contentType, Object content) 435600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throws ParseException { 436600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (request == null || content == null || contentType == null) 437600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException("null parameters"); 438600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 439600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPRequest sipRequest = (SIPRequest) request; 440600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPResponse sipResponse = sipRequest.createResponse(statusCode); 441600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setContent(content, contentType); 442600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (server != null) { 443600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setHeader(server); 444600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 445600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipResponse; 446600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 447600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 448600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 449600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Response message of type specified by the statusCode 450600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * paramater, based on a specific Request with a new body in the form of a 451600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * byte array and the body content type. 452600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 453600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param statusCode - 454600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new integer of the statusCode value of this Message. 455600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param request - 456600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the received Reqest object upon which to base the Response. 457600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param content - 458600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new byte array of the body content value of this Message. 459600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param contentType - 460600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ContentTypeHeader object of the content type value of 461600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * this Message. 462600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 463600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 464600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the statusCode or the body. 465600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 466600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Response createResponse(int statusCode, Request request, 467600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentTypeHeader contentType, byte[] content) 468600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throws ParseException { 469600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (request == null || content == null || contentType == null) 470600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException("null Parameters"); 471600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 472600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPRequest sipRequest = (SIPRequest) request; 473600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPResponse sipResponse = sipRequest.createResponse(statusCode); 474600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setHeader((ContentType) contentType); 475600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setMessageContent(content); 476600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (server != null) { 477600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setHeader(server); 478600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 479600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipResponse; 480600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 481600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 482600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 483600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Response message of type specified by the statusCode 484600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * paramater, based on a specific Request message. This new Response does 485600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * not contain a body. 486600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 487600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param statusCode - 488600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new integer of the statusCode value of this Message. 489600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param request - 490600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the received Reqest object upon which to base the Response. 491600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 492600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 493600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the statusCode. 494600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 495600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Response createResponse(int statusCode, Request request) 496600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throws ParseException { 497600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (request == null) 498600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException("null parameters"); 499600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 500600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // if (LogWriter.needsLogging) 501600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // LogWriter.logMessage("createResponse " + request); 502600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 503600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPRequest sipRequest = (SIPRequest) request; 504600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPResponse sipResponse = sipRequest.createResponse(statusCode); 505600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Remove the content from the message (Bug report from 506600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Antonis Karydas. 507600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.removeContent(); 508600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.removeHeader(ContentTypeHeader.NAME); 509600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (server != null) { 510600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setHeader(server); 511600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 512600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipResponse; 513600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 514600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 515600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 516600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Request message of type specified by the method paramater, 517600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * containing the URI of the Request, the mandatory headers of the message 518600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * with a body in the form of a byte array and body content type. 519600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 520600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param requestURI - 521600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new URI object of the requestURI value of this Message. 522600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param method - 523600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new string of the method value of this Message. 524600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callId - 525600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CallIdHeader object of the callId value of this 526600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Message. 527600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param cSeq - 528600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CSeqHeader object of the cSeq value of this Message. 529600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param from - 530600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new FromHeader object of the from value of this Message. 531600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param to - 532600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ToHeader object of the to value of this Message. 533600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param via - 534600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new List object of the ViaHeaders of this Message. 535600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param contentType - 536600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ContentTypeHeader object of the content type value of 537600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * this Message. 538600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param content - 539600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new byte array of the body content value of this Message. 540600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 541600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 542600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the method or the body. 543600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 544600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Request createRequest(javax.sip.address.URI requestURI, 545600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String method, CallIdHeader callId, CSeqHeader cSeq, 546600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang FromHeader from, ToHeader to, List via, 547600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MaxForwardsHeader maxForwards, ContentTypeHeader contentType, 548600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang byte[] content) throws ParseException { 549600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (requestURI == null || method == null || callId == null 550600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || cSeq == null || from == null || to == null || via == null 551600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || maxForwards == null || content == null 552600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || contentType == null) 553600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException("missing parameters"); 554600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 555600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPRequest sipRequest = new SIPRequest(); 556600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setRequestURI(requestURI); 557600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setMethod(method); 558600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setCallId(callId); 559600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setCSeq(cSeq); 560600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setFrom(from); 561600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setTo(to); 562600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setVia(via); 563600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setMaxForwards(maxForwards); 564600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setContent(content, contentType); 565600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (userAgent != null) { 566600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipRequest.setHeader(userAgent); 567600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 568600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipRequest; 569600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 570600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 571600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 572600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Response message of type specified by the statusCode 573600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * paramater, containing the mandatory headers of the message with a body in 574600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the form of a Java object and the body content type. 575600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 576600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param statusCode 577600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new integer of the statusCode value of this Message. 578600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callId 579600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CallIdHeader object of the callId value of this 580600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Message. 581600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param cSeq 582600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CSeqHeader object of the cSeq value of this Message. 583600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param from 584600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new FromHeader object of the from value of this Message. 585600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param to 586600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ToHeader object of the to value of this Message. 587600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param via 588600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new List object of the ViaHeaders of this Message. 589600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param contentType 590600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ContentTypeHeader object of the content type value of 591600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * this Message. 592600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param content 593600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new Object of the body content value of this Message. 594600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 595600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 596600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the statusCode or the body. 597600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 598600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Response createResponse(int statusCode, CallIdHeader callId, 599600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang CSeqHeader cSeq, FromHeader from, ToHeader to, List via, 600600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MaxForwardsHeader maxForwards, ContentTypeHeader contentType, 601600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Object content) throws ParseException { 602600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (callId == null || cSeq == null || from == null || to == null 603600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || via == null || maxForwards == null || content == null 604600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || contentType == null) 605600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException("missing parameters"); 606600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPResponse sipResponse = new SIPResponse(); 607600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang StatusLine statusLine = new StatusLine(); 608600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang statusLine.setStatusCode(statusCode); 609600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String reason = SIPResponse.getReasonPhrase(statusCode); 610600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (reason == null) 611600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new ParseException(statusCode + " Unknown", 0); 612600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang statusLine.setReasonPhrase(reason); 613600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setStatusLine(statusLine); 614600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setCallId(callId); 615600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setCSeq(cSeq); 616600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setFrom(from); 617600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setTo(to); 618600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setVia(via); 619600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setContent(content, contentType); 620600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if ( userAgent != null) { 621600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setHeader(userAgent); 622600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 623600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipResponse; 624600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 625600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 626600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 627600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 628600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates a new Response message of type specified by the statusCode 629600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * paramater, containing the mandatory headers of the message with a body in 630600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the form of a byte array and the body content type. 631600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 632600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param statusCode 633600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new integer of the statusCode value of this Message. 634600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callId 635600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CallIdHeader object of the callId value of this 636600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Message. 637600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param cSeq 638600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new CSeqHeader object of the cSeq value of this Message. 639600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param from 640600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new FromHeader object of the from value of this Message. 641600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param to 642600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ToHeader object of the to value of this Message. 643600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param via 644600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new List object of the ViaHeaders of this Message. 645600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param contentType 646600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new ContentTypeHeader object of the content type value of 647600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * this Message. 648600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param content 649600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the new byte array of the body content value of this Message. 650600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException 651600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * which signals that an error has been reached unexpectedly 652600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * while parsing the statusCode or the body. 653600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 654600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Response createResponse(int statusCode, CallIdHeader callId, 655600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang CSeqHeader cSeq, FromHeader from, ToHeader to, List via, 656600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MaxForwardsHeader maxForwards, ContentTypeHeader contentType, 657600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang byte[] content) throws ParseException { 658600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (callId == null || cSeq == null || from == null || to == null 659600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || via == null || maxForwards == null || content == null 660600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || contentType == null) 661600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new NullPointerException("missing parameters"); 662600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPResponse sipResponse = new SIPResponse(); 663600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang StatusLine statusLine = new StatusLine(); 664600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang statusLine.setStatusCode(statusCode); 665600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String reason = SIPResponse.getReasonPhrase(statusCode); 666600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (reason == null) 667600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new ParseException(statusCode + " : Unknown", 0); 668600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang statusLine.setReasonPhrase(reason); 669600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setStatusLine(statusLine); 670600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setCallId(callId); 671600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setCSeq(cSeq); 672600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setFrom(from); 673600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setTo(to); 674600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setVia(via); 675600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setContent(content, contentType); 676600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if ( userAgent != null) { 677600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipResponse.setHeader(userAgent); 678600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 679600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return sipResponse; 680600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 681600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 682600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 683600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Create a request from a string. Conveniance method for UACs that want to 684600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * create an outgoing request from a string. Only the headers of the request 685600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * should be included in the String that is supplied to this method. 686600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 687600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param requestString -- 688600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * string from which to create the message null string returns an 689600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * empty message. 690600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 691600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public javax.sip.message.Request createRequest(String requestString) 692600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throws java.text.ParseException { 693600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (requestString == null || requestString.equals("")) { 694600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPRequest retval = new SIPRequest(); 695600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang retval.setNullRequest(); 696600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return retval; 697600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 698600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 699600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang StringMsgParser smp = new StringMsgParser(); 700600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang smp.setStrict(this.strict); 701600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 702600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /* 703600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This allows you to catch parse exceptions and create invalid messages 704600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * if you want. 705600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 706600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ParseExceptionListener parseExceptionListener = new ParseExceptionListener() { 707600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 708600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void handleException(ParseException ex, 709600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPMessage sipMessage, Class headerClass, 710600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String headerText, String messageText) 711600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throws ParseException { 712600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Rethrow the error for the essential headers. Otherwise bad 713600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // headers are simply 714600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // recorded in the message. 715600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (testing) { 716600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (headerClass == From.class || headerClass == To.class 717600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || headerClass == CallID.class 718600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || headerClass == MaxForwards.class 719600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || headerClass == Via.class 720600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || headerClass == RequestLine.class 721600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || headerClass == StatusLine.class 722600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang || headerClass == CSeq.class) 723600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw ex; 724600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 725600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang sipMessage.addUnparsed(headerText); 726600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 727600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 728600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 729600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 730600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang }; 731600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 732600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (this.testing) 733600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang smp.setParseExceptionListener(parseExceptionListener); 734600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 735600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPMessage sipMessage = smp.parseSIPMessage(requestString); 736600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 737600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (!(sipMessage instanceof SIPRequest)) 738600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new ParseException(requestString, 0); 739600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 740600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return (SIPRequest) sipMessage; 741600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 742600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 743600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 744600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Create a response from a string 745600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 746600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param responseString -- 747600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * string from which to create the message null string returns an 748600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * empty message. 749600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 750600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 751600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Response createResponse(String responseString) 752600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throws java.text.ParseException { 753600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (responseString == null) 754600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return new SIPResponse(); 755600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 756600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang StringMsgParser smp = new StringMsgParser(); 757600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 758600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SIPMessage sipMessage = smp.parseSIPMessage(responseString); 759600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 760600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (!(sipMessage instanceof SIPResponse)) 761600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new ParseException(responseString, 0); 762600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 763600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return (SIPResponse) sipMessage; 764600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 765600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 766600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 767600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the common UserAgent header for all requests created from this message factory. 768600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This header is applied to all Messages created from this Factory object except those 769600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * that take String for an argument and create Message from the given String. 770600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 771600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param userAgent -- the user agent header to set. 772600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 773600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @since 2.0 774600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 775600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 776600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setDefaultUserAgentHeader(UserAgentHeader userAgent) { 777600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MessageFactoryImpl.userAgent = userAgent; 778600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 779600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 780600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 781600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the common Server header for all responses created from this message factory. 782600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This header is applied to all Messages created from this Factory object except those 783600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * that take String for an argument and create Message from the given String. 784600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 785600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param userAgent -- the user agent header to set. 786600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 787600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @since 2.0 788600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 789600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 790600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setDefaultServerHeader(ServerHeader server) { 791600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MessageFactoryImpl.server = server; 792600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 793600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 794600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Get the default common UserAgentHeader. 795600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 796600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return the user agent header. 797600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 798600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @since 2.0 799600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 800600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static UserAgentHeader getDefaultUserAgentHeader() { 801600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return userAgent; 802600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 803600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 804600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 805600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 806600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Get the default common server header. 807600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 808600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return the server header. 809600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 810600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static ServerHeader getDefaultServerHeader() { 811600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return server; 812600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 813600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 814600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 815600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 816600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set default charset used for encoding String content. 817600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param charset 818600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 819600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setDefaultContentEncodingCharset(String charset) throws NullPointerException, 820600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang IllegalArgumentException { 821600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (charset == null ) throw new NullPointerException ("Null argument!"); 822600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MessageFactoryImpl.defaultContentEncodingCharset = charset; 823600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 824600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 825600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 826600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static String getDefaultContentEncodingCharset() { 827600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return MessageFactoryImpl.defaultContentEncodingCharset; 828600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 829600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 830600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 831600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public MultipartMimeContent createMultipartMimeContent(ContentTypeHeader multipartMimeCth, 832600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String[] contentType, 833600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String[] contentSubtype, 834600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String[] contentBody) { 835600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String boundary = multipartMimeCth.getParameter("boundary"); 836600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MultipartMimeContentImpl retval = new MultipartMimeContentImpl(multipartMimeCth); 837600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang for (int i = 0 ; i < contentType.length; i++ ) { 838600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentTypeHeader cth = new ContentType(contentType[i],contentSubtype[i]); 839600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentImpl contentImpl = new ContentImpl(contentBody[i],boundary); 840600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang contentImpl.setContentTypeHeader(cth); 841600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang retval.add(contentImpl); 842600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 843600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return retval; 844600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 845600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 846600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 847600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 848600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 849600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang} 850