/** Process the invite request. */ public void processInvite(RequestEvent requestEvent, ServerTransaction serverTransaction) { SipProvider sipProvider = (SipProvider) requestEvent.getSource(); Request request = requestEvent.getRequest(); try { System.out.println("shootme: got an Invite sending Trying"); // System.out.println("shootme: " + request); Response response = messageFactory.createResponse(Response.TRYING, request); ServerTransaction st = requestEvent.getServerTransaction(); if (st == null) { st = sipProvider.getNewServerTransaction(request); } dialog = st.getDialog(); st.sendResponse(response); this.okResponse = messageFactory.createResponse(Response.BUSY_HERE, request); ToHeader toHeader = (ToHeader) okResponse.getHeader(ToHeader.NAME); toHeader.setTag("4321"); // Application is supposed to set. this.inviteTid = st; // Defer sending the OK to simulate the phone ringing. this.inviteRequest = request; new Timer().schedule(new MyTimerTask(this), 100); } catch (Exception ex) { ex.printStackTrace(); System.exit(0); } }
/** Process the invite request. */ public void processInvite(RequestEvent requestEvent, ServerTransaction serverTransaction) { SipProvider sipProvider = (SipProvider) requestEvent.getSource(); Request request = requestEvent.getRequest(); try { System.out.println("shootme: got an Invite sending Trying"); // System.out.println("shootme: " + request); Response response = messageFactory.createResponse(Response.RINGING, request); ServerTransaction st = requestEvent.getServerTransaction(); if (st == null) { st = sipProvider.getNewServerTransaction(request); } dialog = st.getDialog(); st.sendResponse(response); this.okResponse = messageFactory.createResponse(Response.OK, request); Address address = addressFactory.createAddress("Shootme <sip:" + myAddress + ":" + myPort + ">"); ContactHeader contactHeader = headerFactory.createContactHeader(address); response.addHeader(contactHeader); ToHeader toHeader = (ToHeader) okResponse.getHeader(ToHeader.NAME); toHeader.setTag("4321"); // Application is supposed to set. okResponse.addHeader(contactHeader); this.inviteTid = st; // Defer sending the OK to simulate the phone ringing. // Answered in 1 second ( this guy is fast at taking calls) this.inviteRequest = request; new Timer().schedule(new MyTimerTask(this), 1000); } catch (Exception ex) { ex.printStackTrace(); System.exit(0); } }
private FromHeader getFromHeader() throws IOException { if (fromHeader != null) { return fromHeader; } try { SipURI fromURI = (SipURI) addressFactory.createURI("sip:" + proxyCredentials.getUserName() + "@" + registrar); fromURI.setTransportParam(sipProvider.getListeningPoint().getTransport()); fromURI.setPort(sipProvider.getListeningPoint().getPort()); Address fromAddress = addressFactory.createAddress(fromURI); fromAddress.setDisplayName(proxyCredentials.getUserDisplay()); fromHeader = headerFactory.createFromHeader(fromAddress, Integer.toString(hashCode())); } catch (ParseException e) { throw new IOException( "A ParseException occurred while creating From Header! " + e.getMessage()); } return fromHeader; }
public void setUp() { try { this.transport = "udp"; super.setUp(); shootist = new Shootist(getRiProtocolObjects()); SipProvider shootistProvider = shootist.createSipProvider(); providerTable.put(shootistProvider, shootist); shootme = new Shootme(getTiProtocolObjects()); SipProvider shootmeProvider = shootme.createSipProvider(); providerTable.put(shootmeProvider, shootme); shootistProvider.addSipListener(this); shootmeProvider.addSipListener(this); ((SipStackImpl) getTiProtocolObjects().sipStack).setIsBackToBackUserAgent(false); ((SipStackImpl) getRiProtocolObjects().sipStack).setIsBackToBackUserAgent(false); getRiProtocolObjects().start(); if (getTiProtocolObjects() != getRiProtocolObjects()) getTiProtocolObjects().start(); } catch (Exception ex) { ex.printStackTrace(); fail("unexpected exception "); } }
/** Process the invite request. */ public void processInvite(RequestEvent requestEvent, ServerTransaction serverTransaction) { try { // System.out.println("ProcessInvite"); Request request = requestEvent.getRequest(); SipProvider sipProvider = (SipProvider) requestEvent.getSource(); // Note you need to create the Server Transaction // before the listener returns but you can delay sending the response ServerTransaction st = sipProvider.getNewServerTransaction(request); if (transactionIDs.containsKey(st.getBranchId())) { System.out.println( "OOOPS -- seen this guy before!! This must be a late guy " + st.getBranchId() + " st = " + transactionIDs.get(st.getBranchId())); return; } else { transactionIDs.put(st.getBranchId(), st); } TTask ttask = new TTask(requestEvent, st); int ttime; if ((numInvite % 4) == 0) ttime = 5000; else if ((numInvite % 4) == 1) ttime = 1000; else ttime = 300; numInvite++; new Timer().schedule(ttask, ttime); } catch (Exception ex) { ex.printStackTrace(); } }
public void sendBye(String localSipURL, String remoteSipURL, ChatSession chatSession) { // Send a Bye only if there were exchanged messages!!! if (chatSession.isEstablishedSession()) { try { logger.debug("Sending a BYE in progress to " + remoteSipURL); SipProvider sipProvider = imUA.getSipProvider(); javax.sip.Dialog dialog = chatSession.getDialog(); Request request = dialog.createRequest(Request.BYE); // ProxyAuthorization header if not null: ProxyAuthorizationHeader proxyAuthHeader = imUA.getProxyAuthorizationHeader(); if (proxyAuthHeader != null) request.setHeader(proxyAuthHeader); ClientTransaction clientTransaction = sipProvider.getNewClientTransaction(request); dialog.sendRequest(clientTransaction); logger.debug("BYE sent:\n" + request); } catch (Exception ex) { ex.printStackTrace(); } } else { logger.debug("BYE not sent because of no exchanged messages!!!"); } }
/** Process the ACK request. Send the bye and complete the call flow. */ public void processAck(RequestEvent requestEvent, ServerTransaction serverTransaction) { SipProvider sipProvider = (SipProvider) requestEvent.getSource(); try { // System.out.println("*** shootme: got an ACK " // + requestEvent.getRequest()); if (serverTransaction == null) { System.out.println("null server transaction -- ignoring the ACK!"); return; } Dialog dialog = serverTransaction.getDialog(); this.createdCount++; System.out.println( "Dialog Created = " + dialog.getDialogId() + " createdCount " + this.createdCount + " Dialog State = " + dialog.getState()); if (this.dialogIds.contains(dialog.getDialogId())) { System.out.println("OOPS ! I already saw " + dialog.getDialogId()); } else { this.dialogIds.add(dialog.getDialogId()); } Request byeRequest = dialog.createRequest(Request.BYE); ClientTransaction tr = sipProvider.getNewClientTransaction(byeRequest); // System.out.println("shootme: got an ACK -- sending bye! "); dialog.sendRequest(tr); } catch (Exception ex) { ex.printStackTrace(); System.exit(0); } }
/** * Stop the proxy, this method has to be called after the start method throws Exception that which * can be caught by the upper application */ public void stop() throws Exception { if (sipStack == null) return; this.presenceServer.stop(); Iterator sipProviders = sipStack.getSipProviders(); if (sipProviders != null) { while (sipProviders.hasNext()) { SipProvider sp = (SipProvider) sipProviders.next(); sp.removeSipListener(this); sipStack.deleteSipProvider(sp); sipProviders = sipStack.getSipProviders(); System.out.println("One sip Provider removed!"); } } else { ProxyDebug.println("WARNING, STOP_PROXY, The proxy " + " has no sip Provider to remove!"); } Iterator listeningPoints = sipStack.getListeningPoints(); if (listeningPoints != null) { while (listeningPoints.hasNext()) { ListeningPoint lp = (ListeningPoint) listeningPoints.next(); sipStack.deleteListeningPoint(lp); listeningPoints = sipStack.getListeningPoints(); System.out.println("One listening point removed!"); } } else { ProxyDebug.println("WARNING, STOP_PROXY, The proxy " + " has no listening points to remove!"); } registrar.clean(); }
/** Exit the proxy, throws Exception that which can be caught by the upper application */ public void exit() throws Exception { Iterator sipProviders = sipStack.getSipProviders(); if (sipProviders != null) { while (sipProviders.hasNext()) { SipProvider sp = (SipProvider) sipProviders.next(); sp.removeSipListener(this); sipStack.deleteSipProvider(sp); sipProviders = sipStack.getSipProviders(); System.out.println("One sip Provider removed!"); } } else { ProxyDebug.println("WARNING, STOP_PROXY, The proxy " + " has no sip Provider to remove!"); } Iterator listeningPoints = sipStack.getListeningPoints(); if (listeningPoints != null) { while (listeningPoints.hasNext()) { ListeningPoint lp = (ListeningPoint) listeningPoints.next(); sipStack.deleteListeningPoint(lp); listeningPoints = sipStack.getListeningPoints(); System.out.println("One listening point removed!"); } } else { ProxyDebug.println("WARNING, STOP_PROXY, The proxy " + " has no listening points to remove!"); } ProxyDebug.println("Proxy exit........................."); configuration.listeningPoints.clear(); registrar.clean(); }
/** Process the invite request. */ public void processInvite(RequestEvent requestEvent, ServerTransaction serverTransaction) { SipProvider sipProvider = (SipProvider) requestEvent.getSource(); Request request = requestEvent.getRequest(); try { System.out.println("b2bua: got an Invite sending Trying"); ServerTransaction st = requestEvent.getServerTransaction(); if (st == null) { st = sipProvider.getNewServerTransaction(request); } Dialog dialog = st.getDialog(); ToHeader to = (ToHeader) request.getHeader(ToHeader.NAME); SipURI toUri = (SipURI) to.getAddress().getURI(); SipURI target = registrar.get(toUri.getUser()); if (target == null) { System.out.println("User " + toUri + " is not registered."); throw new RuntimeException("User not registered " + toUri); } else { ClientTransaction otherLeg = call(target); otherLeg.setApplicationData(st); st.setApplicationData(otherLeg); dialog.setApplicationData(otherLeg.getDialog()); otherLeg.getDialog().setApplicationData(dialog); } } catch (Exception ex) { ex.printStackTrace(); System.exit(0); } }
/** * Non Regression test for http://code.google.com/p/mobicents/issues/detail?id=1837 ACK was * received by JAIN-SIP but was not routed to application */ public void testCallForwardingCallerReInviteAckRaceInfo() throws Exception { sender = new TestSipListener(5080, 5070, senderProtocolObjects, false); SipProvider senderProvider = sender.createProvider(); receiver = new TestSipListener(5090, 5070, receiverProtocolObjects, false); receiver.setDisableSequenceNumberValidation(true); SipProvider receiverProvider = receiver.createProvider(); receiverProvider.addSipListener(receiver); senderProvider.addSipListener(sender); senderProtocolObjects.start(); receiverProtocolObjects.start(); String fromName = "forward-pending-sender"; String fromSipAddress = "sip-servlets.com"; SipURI fromAddress = senderProtocolObjects.addressFactory.createSipURI(fromName, fromSipAddress); String toSipAddress = "sip-servlets.com"; String toUser = "******"; SipURI toAddress = senderProtocolObjects.addressFactory.createSipURI(toUser, toSipAddress); sender.setTimeToWaitBeforeAck(9000); sender.sendSipRequest("INVITE", fromAddress, toAddress, null, null, false); Thread.sleep(8000); receiver.sendInDialogSipRequest("UPDATE", null, null, null, null, null); Thread.sleep(TIMEOUT); assertTrue(receiver.isAckReceived()); }
public void processCancel(RequestEvent requestEvent, ServerTransaction serverTransactionId) { Request request = requestEvent.getRequest(); SipProvider sipProvider = (SipProvider) requestEvent.getSource(); try { logger.info("shootme: got a cancel. "); // Because this is not an In-dialog request, you will get a null server Tx id here. if (serverTransactionId == null) { serverTransactionId = sipProvider.getNewServerTransaction(request); } Response response = protocolObjects.messageFactory.createResponse(200, request); serverTransactionId.sendResponse(response); String serverTxId = ((ViaHeader) response.getHeader(ViaHeader.NAME)).getBranch(); ServerTransaction serverTx = (ServerTransaction) this.serverTxTable.get(serverTxId); if (serverTx != null && (serverTx.getState().equals(TransactionState.TRYING) || serverTx.getState().equals(TransactionState.PROCEEDING))) { Request originalRequest = serverTx.getRequest(); Response resp = protocolObjects.messageFactory.createResponse( Response.REQUEST_TERMINATED, originalRequest); serverTx.sendResponse(resp); } } catch (Exception ex) { ex.printStackTrace(); System.exit(0); } }
private void sendInviteOK(RequestEvent requestEvent, ServerTransaction inviteTid) { try { logger.info("sendInviteOK: " + inviteTid); if (inviteTid.getState() != TransactionState.COMPLETED) { logger.info("shootme: Dialog state before OK: " + inviteTid.getDialog().getState()); SipProvider sipProvider = (SipProvider) requestEvent.getSource(); Request request = requestEvent.getRequest(); Response okResponse = protocolObjects.messageFactory.createResponse(Response.OK, request); ListeningPoint lp = sipProvider.getListeningPoint(protocolObjects.transport); int myPort = lp.getPort(); Address address = protocolObjects.addressFactory.createAddress( "Shootme <sip:" + myAddress + ":" + myPort + ">"); ContactHeader contactHeader = protocolObjects.headerFactory.createContactHeader(address); okResponse.addHeader(contactHeader); inviteTid.sendResponse(okResponse); logger.info("shootme: Dialog state after OK: " + inviteTid.getDialog().getState()); TestHarness.assertEquals(DialogState.CONFIRMED, inviteTid.getDialog().getState()); } else { logger.info("semdInviteOK: inviteTid = " + inviteTid + " state = " + inviteTid.getState()); } } catch (Exception ex) { ex.printStackTrace(); } }
/** Process the invite request. */ public void processInvite(RequestEvent requestEvent, ServerTransaction serverTransaction) { SipProvider sipProvider = (SipProvider) requestEvent.getSource(); Request request = requestEvent.getRequest(); try { System.out.println("cutme: got an Invite sending Trying"); // System.out.println("cutme: " + request); Response response = messageFactory.createResponse(Response.RINGING, request); String toTag = Integer.toString((int) (Math.random() * 10000000)); ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME); toHeader.setTag(toTag); // Application is supposed to set. ServerTransaction st = requestEvent.getServerTransaction(); if (st == null) { st = sipProvider.getNewServerTransaction(request); } inviteTid = st; inviteRequest = request; dialog = st.getDialog(); // inviteRequest = request; if (timeToWaitBeforeAnswer > 0) { Thread.sleep(timeToWaitBeforeAnswer); } st.sendResponse(response); // If we dont send final response this will receive cancel. } catch (Exception ex) { ex.printStackTrace(); System.exit(0); } }
public void init() { this.dialogIds = new HashSet(); this.transactionIDs = new HashMap(); SipFactory sipFactory = null; sipStack = null; sipFactory = SipFactory.getInstance(); sipFactory.setPathName("gov.nist"); Properties properties = new Properties(); properties.setProperty("javax.sip.STACK_NAME", "shootme"); // 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", "32"); properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "shootmedebuglog.txt"); properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "shootmelog.txt"); // Guard against starvation. properties.setProperty("gov.nist.javax.sip.READ_TIMEOUT", "1000"); // properties.setProperty("gov.nist.javax.sip.MAX_MESSAGE_SIZE", // "4096"); properties.setProperty("gov.nist.javax.sip.CACHE_SERVER_CONNECTIONS", "false"); try { // Create SipStack object sipStack = sipFactory.createSipStack(properties); System.out.println("sipStack = " + sipStack); } catch (PeerUnavailableException e) { // could not find // gov.nist.jain.protocol.ip.sip.SipStackImpl // in the classpath e.printStackTrace(); System.err.println(e.getMessage()); if (e.getCause() != null) e.getCause().printStackTrace(); System.exit(0); } try { headerFactory = sipFactory.createHeaderFactory(); addressFactory = sipFactory.createAddressFactory(); messageFactory = sipFactory.createMessageFactory(); ListeningPoint lp = sipStack.createListeningPoint(myAddress, 5070, "udp"); ListeningPoint lp1 = sipStack.createListeningPoint(myAddress, 5070, "tcp"); Shootme listener = this; SipProvider sipProvider = sipStack.createSipProvider(lp); System.out.println("udp provider " + sipProvider); sipProvider.addSipListener(listener); sipProvider = sipStack.createSipProvider(lp1); System.out.println("tcp provider " + sipProvider); sipProvider.addSipListener(listener); } catch (Exception ex) { System.out.println(ex.getMessage()); ex.printStackTrace(); usage(); } }
/** Process the invite request. */ public void processInvite(RequestEvent requestEvent, ServerTransaction serverTransaction) { SipProvider sipProvider = (SipProvider) requestEvent.getSource(); Request request = requestEvent.getRequest(); try { logger.info("shootme: got an Invite sending Trying"); // logger.info("shootme: " + request); ServerTransaction st = requestEvent.getServerTransaction(); if (st == null) { logger.info("null server tx -- getting a new one"); st = sipProvider.getNewServerTransaction(request); } logger.info("getNewServerTransaction : " + st); String txId = ((ViaHeader) request.getHeader(ViaHeader.NAME)).getBranch(); this.serverTxTable.put(txId, st); // Create the 100 Trying response. Response response = protocolObjects.messageFactory.createResponse(Response.TRYING, request); ListeningPoint lp = sipProvider.getListeningPoint(protocolObjects.transport); int myPort = lp.getPort(); Address address = protocolObjects.addressFactory.createAddress( "Shootme <sip:" + myAddress + ":" + myPort + ">"); // Add a random sleep to stagger the two OK's for the benifit of implementations // that may not be too good about handling re-entrancy. int timeToSleep = (int) (Math.random() * 1000); Thread.sleep(timeToSleep); st.sendResponse(response); Response ringingResponse = protocolObjects.messageFactory.createResponse(Response.RINGING, request); ContactHeader contactHeader = protocolObjects.headerFactory.createContactHeader(address); response.addHeader(contactHeader); ToHeader toHeader = (ToHeader) ringingResponse.getHeader(ToHeader.NAME); String toTag = actAsNonRFC3261UAS ? null : new Integer((int) (Math.random() * 10000)).toString(); if (!actAsNonRFC3261UAS) toHeader.setTag(toTag); // Application is supposed to set. ringingResponse.addHeader(contactHeader); st.sendResponse(ringingResponse); Dialog dialog = st.getDialog(); dialog.setApplicationData(st); this.inviteSeen = true; new Timer().schedule(new MyTimerTask(requestEvent, st /*,toTag*/), 1000); } catch (Exception ex) { ex.printStackTrace(); System.exit(0); } }
/** * Non Regression test for http://code.google.com/p/mobicents/issues/detail?id=2230 BYE is routed * to unexpected IP */ public void testCallForwardingCallerSendBye408onReinviteUPDATENewThread() throws Exception { sender = new TestSipListener(5080, 5070, senderProtocolObjects, false); SipProvider senderProvider = sender.createProvider(); receiver = new TestSipListener(5090, 5070, receiverProtocolObjects, false); SipProvider receiverProvider = receiver.createProvider(); receiverProvider.addSipListener(receiver); senderProvider.addSipListener(sender); senderProtocolObjects.start(); receiverProtocolObjects.start(); String fromName = "forward-sender-408-new-thread"; String fromSipAddress = "sip-servlets.com"; SipURI fromAddress = senderProtocolObjects.addressFactory.createSipURI(fromName, fromSipAddress); String toSipAddress = "sip-servlets.com"; String toUser = "******"; SipURI toAddress = senderProtocolObjects.addressFactory.createSipURI(toUser, toSipAddress); sender.sendSipRequest("INVITE", fromAddress, toAddress, null, null, false); Thread.sleep(TIMEOUT); assertTrue(receiver.isInviteReceived()); assertTrue(receiver.isAckReceived()); MaxForwardsHeader maxForwardsHeader = (MaxForwardsHeader) receiver.getInviteRequest().getHeader(MaxForwardsHeader.NAME); assertNotNull(maxForwardsHeader); receiver.setProvisionalResponsesToSend(new ArrayList<Integer>()); receiver.setFinalResponseToSend(Response.REQUEST_TIMEOUT); Header methodHeader = receiverProtocolObjects.headerFactory.createHeader("Method", "UPDATE"); List<Header> headers = new ArrayList<Header>(); headers.add(methodHeader); sender.sendInDialogSipRequest("INVITE", null, null, null, headers, null); Thread.sleep(TIMEOUT); assertTrue(receiver.isInviteReceived()); assertTrue(receiver.isAckReceived()); receiver.sendInDialogSipRequest("UPDATE", null, null, null, null, null); Thread.sleep(TIMEOUT); assertTrue(receiver.isInviteReceived()); assertTrue(receiver.isAckReceived()); sender.sendInDialogSipRequest("BYE", null, null, null, null, null); Thread.sleep(TIMEOUT); assertTrue(sender.getOkToByeReceived()); Iterator<String> allMessagesIterator = sender.getAllMessagesContent().iterator(); while (allMessagesIterator.hasNext()) { String message = (String) allMessagesIterator.next(); logger.info(message); } assertTrue(sender.getAllMessagesContent().contains("IllegalStateException")); }
/** * Safely returns the transaction from the event if already exists. If not a new transaction is * created. * * @param event the request event * @return the server transaction * @throws javax.sip.TransactionAlreadyExistsException if transaction exists * @throws javax.sip.TransactionUnavailableException if unavailable */ public static ServerTransaction getOrCreateServerTransaction(RequestEvent event) throws TransactionAlreadyExistsException, TransactionUnavailableException { ServerTransaction serverTransaction = event.getServerTransaction(); if (serverTransaction == null) { SipProvider jainSipProvider = (SipProvider) event.getSource(); serverTransaction = jainSipProvider.getNewServerTransaction(event.getRequest()); } return serverTransaction; }
/** Process the ACK request. Send the bye and complete the call flow. */ public void processAck(RequestEvent requestEvent, ServerTransaction serverTransaction) { try { System.out.println("shootme: got an ACK! "); System.out.println("Dialog State = " + dialog.getState()); SipProvider provider = (SipProvider) requestEvent.getSource(); if (!callerSendsBye) { Request byeRequest = dialog.createRequest(Request.BYE); ClientTransaction ct = provider.getNewClientTransaction(byeRequest); dialog.sendRequest(ct); } } catch (Exception ex) { ex.printStackTrace(); } }
public void processResponse(ResponseEvent responseEvent) { try { Response response = responseEvent.getResponse(); SipProvider sender = null; // Topmost via header is me. As it is reposne to external reqeust response.removeFirst(ViaHeader.NAME); sender = this.sipProvider; sender.sendResponse(response); } catch (Exception ex) { ex.printStackTrace(); } }
public void init() { SipFactory sipFactory = null; sipStack = null; sipFactory = SipFactory.getInstance(); sipFactory.setPathName("gov.nist"); Properties properties = new Properties(); properties.setProperty("javax.sip.STACK_NAME", "shootme"); // 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", "32"); properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "shootmedebug.txt"); properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "shootmelog.txt"); if (System.getProperty("enableNIO") != null && System.getProperty("enableNIO").equalsIgnoreCase("true")) { properties.setProperty( "gov.nist.javax.sip.MESSAGE_PROCESSOR_FACTORY", NioMessageProcessorFactory.class.getName()); } try { // Create SipStack object sipStack = sipFactory.createSipStack(properties); System.out.println("sipStack = " + sipStack); } catch (PeerUnavailableException e) { // could not find // gov.nist.jain.protocol.ip.sip.SipStackImpl // in the classpath e.printStackTrace(); System.err.println(e.getMessage()); if (e.getCause() != null) e.getCause().printStackTrace(); System.exit(0); } try { headerFactory = sipFactory.createHeaderFactory(); addressFactory = sipFactory.createAddressFactory(); messageFactory = sipFactory.createMessageFactory(); ListeningPoint lp = sipStack.createListeningPoint("127.0.0.1", myPort, "udp"); Shootme listener = this; SipProvider sipProvider = sipStack.createSipProvider(lp); System.out.println("udp provider " + sipProvider); sipProvider.addSipListener(listener); } catch (Exception ex) { ex.printStackTrace(); fail("Unexpected exception"); } }
public void init(String transport) { if (transport == null) { transport = ListeningPoint.UDP; } SipFactory sipFactory = null; sipStack = null; sipFactory = SipFactory.getInstance(); sipFactory.setPathName("gov.nist"); Properties properties = new Properties(); properties.setProperty("javax.sip.STACK_NAME", "cutme"); // 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", "32"); properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "logs/cutmedebug.txt"); properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "logs/cutmelog.xml"); try { // Create SipStack object sipStack = sipFactory.createSipStack(properties); System.out.println("sipStack = " + sipStack); } catch (PeerUnavailableException e) { // could not find // gov.nist.jain.protocol.ip.sip.SipStackImpl // in the classpath e.printStackTrace(); System.err.println(e.getMessage()); if (e.getCause() != null) e.getCause().printStackTrace(); System.exit(0); } try { messageFactory = sipFactory.createMessageFactory(); ListeningPoint lp = sipStack.createListeningPoint( "" + System.getProperty("org.mobicents.testsuite.testhostaddr") + "", myPort, transport); Cutme listener = this; SipProvider sipProvider = sipStack.createSipProvider(lp); System.out.println("udp provider " + sipProvider); sipProvider.addSipListener(listener); } catch (Exception ex) { System.out.println(ex.getMessage()); ex.printStackTrace(); } }
public void init() throws Exception { SipFactory sipFactory = null; sipStack = null; sipFactory = SipFactory.getInstance(); sipFactory.setPathName("gov.nist"); Properties properties = new Properties(); properties.setProperty("javax.sip.IP_ADDRESS", myIP); properties.setProperty("javax.sip.OUTBOUND_PROXY", peerIP + ":" + peerPort + "/udp"); properties.setProperty("javax.sip.STACK_NAME", "conferencemonitor"); properties.setProperty("javax.sip.RETRANSMISSION_FILTER", "on"); // properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "conferencemonitordebug.txt"); // properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "conferencemonitorlog.txt"); properties.setProperty("gov.nist.javax.sip.CACHE_CLIENT_CONNECTIONS", "false"); // 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", "32"); // Create SipStack object sipStack = sipFactory.createSipStack(properties); headerFactory = sipFactory.createHeaderFactory(); addressFactory = sipFactory.createAddressFactory(); messageFactory = sipFactory.createMessageFactory(); ListeningPoint udpListeningPoint = sipStack.createListeningPoint(myPort, "udp"); sipProvider = sipStack.createSipProvider(udpListeningPoint); sipProvider.addSipListener(this); if (logger.isDebugEnabled()) logger.debug("init() " + sipProvider); }
private ArrayList getLocalViaHeaders() throws IOException { /* * We can't keep a cached copy because the callers * of this method change the viaHeaders. In particular * a branch may be added which causes INVITES to fail. */ if (viaHeaders != null) { return viaHeaders; } ListeningPoint lp = sipProvider.getListeningPoint(); viaHeaders = new ArrayList(); try { String addr = lp.getIPAddress(); ViaHeader viaHeader = headerFactory.createViaHeader(addr, lp.getPort(), lp.getTransport(), null); viaHeader.setRPort(); viaHeaders.add(viaHeader); return viaHeaders; } catch (ParseException e) { throw new IOException( "A ParseException occurred while creating Via Headers! " + e.getMessage()); } catch (InvalidArgumentException e) { throw new IOException( "Unable to create a via header for port " + lp.getPort() + " " + e.getMessage()); } }
public void start() throws IllegalStateException { SipFactory sipFactory = null; sipStack = null; Properties properties = new Properties(); properties.setProperty("javax.sip.RETRANSMISSION_FILTER", "true"); properties.setProperty("javax.sip.STACK_NAME", "StatelessForwarder"); properties.setProperty("javax.sip.AUTOMATIC_DIALOG_SUPPORT", "off"); // 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", "32"); properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "./logs/statelessforwarderdebug.txt"); properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "./logs/statelessforwarderlog.xml"); try { // Create SipStack object sipFactory = SipFactory.getInstance(); sipFactory.setPathName("gov.nist"); sipStack = sipFactory.createSipStack(properties); headerFactory = sipFactory.createHeaderFactory(); addressFactory = sipFactory.createAddressFactory(); messageFactory = sipFactory.createMessageFactory(); ListeningPoint lp = sipStack.createListeningPoint(myHost, myPort, ListeningPoint.UDP); sipProvider = sipStack.createSipProvider(lp); sipProvider.addSipListener(this); sipStack.start(); } catch (Exception ex) { throw new IllegalStateException( "Cant create sip objects and lps due to[" + ex.getMessage() + "]", ex); } }
public void testCallForwardingCallerSendBye() throws Exception { sender = new TestSipListener(5080, 5070, senderProtocolObjects, false); SipProvider senderProvider = sender.createProvider(); receiver = new TestSipListener(5090, 5070, receiverProtocolObjects, false); receiver.setSendReinvite(true); SipProvider receiverProvider = receiver.createProvider(); receiverProvider.addSipListener(receiver); senderProvider.addSipListener(sender); senderProtocolObjects.start(); receiverProtocolObjects.start(); String fromName = "forward-sender"; String fromSipAddress = "sip-servlets.com"; SipURI fromAddress = senderProtocolObjects.addressFactory.createSipURI(fromName, fromSipAddress); String toSipAddress = "sip-servlets.com"; String toUser = "******"; SipURI toAddress = senderProtocolObjects.addressFactory.createSipURI(toUser, toSipAddress); sender.sendSipRequest("INVITE", fromAddress, toAddress, null, null, false); Thread.sleep(TIMEOUT); assertTrue(sender.isInviteReceived()); assertTrue(sender.isAckReceived()); assertNotNull(sender.getInviteRequest().getHeader("ReInvite")); MaxForwardsHeader maxForwardsHeader = (MaxForwardsHeader) receiver.getInviteRequest().getHeader(MaxForwardsHeader.NAME); assertNotNull(maxForwardsHeader); // Non Regression test for http://code.google.com/p/mobicents/issues/detail?id=1490 // B2buaHelper.createRequest does not decrement Max-forwards assertEquals(69, maxForwardsHeader.getMaxForwards()); sender.sendInDialogSipRequest("BYE", null, null, null, null, null); Thread.sleep(TIMEOUT); assertTrue(receiver.getByeReceived()); assertTrue(sender.getOkToByeReceived()); assertEquals(1, sender.bindings); // http://code.google.com/p/mobicents/issues/detail?id=2100 maxForwardsHeader = (MaxForwardsHeader) receiver.getByeRequestReceived().getHeader(MaxForwardsHeader.NAME); assertNotNull(maxForwardsHeader); // Non Regression test for http://code.google.com/p/mobicents/issues/detail?id=1490 // B2buaHelper.createRequest does not decrement Max-forwards assertEquals(69, maxForwardsHeader.getMaxForwards()); }
public void setOff(SipStack mySipStack) { /// System.out.println("=> BUNDLE: br.ufes.inf.ngn.televoto.client.logic | CLASS: LogicListener // | METOD: setOff ");//By Ju try { mySipProvider.removeSipListener(this); mySipProvider.removeListeningPoint(myListeningPoint); mySipStack.deleteListeningPoint(myListeningPoint); mySipStack.deleteSipProvider(mySipProvider); myListeningPoint = null; mySipProvider = null; mySipStack = null; // myRingTool=null; myTimer.cancel(); System.out.println("Finalizado..."); } catch (Exception e) { } }
/** * Sends <tt>messageRequest</tt> to the specified destination and logs <tt>messageContent</tt> for * later use. * * @param messageRequest the <tt>SipRequest</tt> that we are about to send. * @param to the Contact that we are sending <tt>messageRequest</tt> to. * @param messageContent the SC <tt>Message</tt> that was used to create the <tt>Request</tt> . * @throws TransactionUnavailableException if we fail creating the transaction required to send * <tt>messageRequest</tt>. * @throws SipException if we fail sending <tt>messageRequest</tt>. */ void sendMessageRequest(Request messageRequest, Contact to, Message messageContent) throws TransactionUnavailableException, SipException { // Transaction ClientTransaction messageTransaction; SipProvider jainSipProvider = this.sipProvider.getDefaultJainSipProvider(); messageTransaction = jainSipProvider.getNewClientTransaction(messageRequest); // send the message messageTransaction.sendRequest(); // we register the reference to this message to retrieve it when // we'll receive the response message String key = ((CallIdHeader) messageRequest.getHeader(CallIdHeader.NAME)).getCallId(); this.sentMsg.put(key, messageContent); }
/** * Non Regression test for http://code.google.com/p/mobicents/issues/detail?id=1445 "Bad Request * Method. CANCEL" during sending CANCEL to re-INVITE */ public void testCallForwardingCallerReInviteCancel() throws Exception { sender = new TestSipListener(5080, 5070, senderProtocolObjects, false); SipProvider senderProvider = sender.createProvider(); receiver = new TestSipListener(5090, 5070, receiverProtocolObjects, false); SipProvider receiverProvider = receiver.createProvider(); receiverProvider.addSipListener(receiver); senderProvider.addSipListener(sender); senderProtocolObjects.start(); receiverProtocolObjects.start(); String fromName = "forward-sender"; String fromSipAddress = "sip-servlets.com"; SipURI fromAddress = senderProtocolObjects.addressFactory.createSipURI(fromName, fromSipAddress); String toSipAddress = "sip-servlets.com"; String toUser = "******"; SipURI toAddress = senderProtocolObjects.addressFactory.createSipURI(toUser, toSipAddress); sender.sendSipRequest("INVITE", fromAddress, toAddress, null, null, false); Thread.sleep(TIMEOUT); assertTrue(sender.isAckSent()); receiver.setWaitForCancel(true); sender.sendInDialogSipRequest("INVITE", null, null, null, null, null); Thread.sleep(500); sender.sendCancel(); Thread.sleep(TIMEOUT); assertTrue(sender.isCancelOkReceived()); assertTrue(sender.isRequestTerminatedReceived()); assertTrue(receiver.isCancelReceived()); sender.setCancelOkReceived(false); sender.setRequestTerminatedReceived(false); receiver.setCancelReceived(false); sender.sendInDialogSipRequest("INVITE", null, null, null, null, null); Thread.sleep(500); sender.sendCancel(); Thread.sleep(TIMEOUT); assertTrue(sender.isCancelOkReceived()); assertTrue(sender.isRequestTerminatedReceived()); assertTrue(receiver.isCancelReceived()); }
private void shutDown() { try { try { Thread.sleep(2000); } catch (InterruptedException e) { } System.out.println("nulling reference"); sipStack.deleteListeningPoint(tcpListeningPoint); sipStack.deleteListeningPoint(udpListeningPoint); // This will close down the stack and exit all threads tcpProvider.removeSipListener(this); udpProvider.removeSipListener(this); while (true) { try { sipStack.deleteSipProvider(udpProvider); sipStack.deleteSipProvider(tcpProvider); break; } catch (ObjectInUseException ex) { try { Thread.sleep(2000); } catch (InterruptedException e) { continue; } } } sipStack = null; tcpProvider = null; udpProvider = null; this.contactHeader = null; addressFactory = null; headerFactory = null; messageFactory = null; this.udpListeningPoint = null; this.tcpListeningPoint = null; this.reInviteCount = 0; System.gc(); // Redo this from the start. if (counter < 10) this.init(); else counter++; } catch (Exception ex) { ex.printStackTrace(); } }