test.tck.msgflow.callflows.ProtocolObjects Maven / Gradle / Ivy
package test.tck.msgflow.callflows;
import gov.nist.javax.sip.stack.NioMessageProcessorFactory;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Properties;
import javax.sip.ObjectInUseException;
import javax.sip.SipException;
import javax.sip.SipFactory;
import javax.sip.SipProvider;
import javax.sip.SipStack;
import javax.sip.address.AddressFactory;
import javax.sip.header.HeaderFactory;
import javax.sip.message.MessageFactory;
import org.apache.log4j.Logger;
/**
* @author M. Ranganathan
*
*/
public class ProtocolObjects {
public static Logger logger = Logger.getLogger(ProtocolObjects.class);
public final AddressFactory addressFactory;
public final MessageFactory messageFactory;
public final HeaderFactory headerFactory;
public final SipStack sipStack;
public int logLevel = 32;
String logFileDirectory = "logs/";
public final String transport;
private boolean isStarted;
public boolean autoDialog;
public ProtocolObjects(String stackname, String pathname, String transport,
boolean autoDialog, boolean isBackToBackUserAgent, boolean isReentrant) {
this.autoDialog = autoDialog;
this.transport = transport;
SipFactory sipFactory = SipFactory.getInstance();
sipFactory.resetFactory();
sipFactory.setPathName(pathname);
Properties properties = new Properties();
properties.setProperty("javax.sip.STACK_NAME", stackname);
// The following properties are specific to nist-sip
// and are not necessarily part of any other jain-sip
// implementation.
properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", logFileDirectory
+ stackname + "debuglog.txt");
properties.setProperty("gov.nist.javax.sip.SERVER_LOG",
logFileDirectory + stackname + "log.txt");
properties.setProperty("javax.sip.AUTOMATIC_DIALOG_SUPPORT",
(autoDialog ? "on" : "off"));
// For the forked subscribe notify test
properties.setProperty("javax.sip.FORKABLE_EVENTS", "foo");
//For the TelUrlRouter test.
properties.setProperty("javax.sip.ROUTER_PATH", NonSipUriRouter.class.getName());
// Dont use the router for all requests.
properties.setProperty("javax.sip.USE_ROUTER_FOR_ALL_URIS", "false");
properties.setProperty("gov.nist.javax.sip.THREAD_POOL_SIZE", "1");
properties.setProperty("gov.nist.javax.sip.IS_BACK_TO_BACK_USER_AGENT", Boolean.toString(isBackToBackUserAgent));
properties.setProperty("gov.nist.javax.sip.DELIVER_RETRANSMITTED_ACK_TO_LISTENER", "true");
properties.setProperty("gov.nist.javax.sip.REENTRANT_LISTENER", "" + isReentrant);
if(System.getProperty("enableNIO") != null && System.getProperty("enableNIO").equalsIgnoreCase("true")) {
logger.info("\nNIO Enabled\n");
properties.setProperty("gov.nist.javax.sip.MESSAGE_PROCESSOR_FACTORY", NioMessageProcessorFactory.class.getName());
}
// Set to 0 in your production code for max speed.
// You need 16 for logging traces. 32 for debug + traces.
// Your code will limp at 32 but it is best for debugging.
properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", new Integer(
logLevel).toString());
try {
// Create SipStack object
sipStack = sipFactory.createSipStack(properties);
NonSipUriRouter router = (NonSipUriRouter) sipStack.getRouter();
router.setMyPort(5080);
System.out.println("createSipStack " + sipStack);
} catch (Exception e) {
// could not find
// gov.nist.jain.protocol.ip.sip.SipStackImpl
// in the classpath
e.printStackTrace();
System.err.println(e.getMessage());
throw new RuntimeException("Stack failed to initialize");
}
try {
headerFactory = sipFactory.createHeaderFactory();
addressFactory = sipFactory.createAddressFactory();
messageFactory = sipFactory.createMessageFactory();
} catch (SipException ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
public synchronized void destroy() {
HashSet hashSet = new HashSet();
for (Iterator it = sipStack.getSipProviders(); it.hasNext();) {
SipProvider sipProvider = (SipProvider) it.next();
hashSet.add(sipProvider);
}
for ( Iterator it = hashSet.iterator(); it.hasNext();) {
SipProvider sipProvider = (SipProvider) it.next();
for (int j = 0; j < 5; j++) {
try {
sipStack.deleteSipProvider(sipProvider);
} catch (ObjectInUseException ex) {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
}
}
}
sipStack.stop();
}
public void start() throws Exception {
if (this.isStarted)
return;
sipStack.start();
this.isStarted = true;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy