Search in sources :

Example 21 with SipURI

use of javax.sip.address.SipURI in project load-balancer by RestComm.

the class TestSipListener method sendInDialogSipRequest.

/**
 * @param transport TODO
 * @param messageToSend
 * @throws SipException
 * @throws InvalidArgumentException
 * @throws ParseException
 */
public void sendInDialogSipRequest(String method, String content, String contentType, String subContentType, List<Header> headers, String transport) throws SipException, InvalidArgumentException, ParseException {
    Request message = dialog.createRequest(method);
    if (transport != null) {
        ((SipURI) message.getRequestURI()).setTransportParam(transport);
    }
    if (content != null) {
        ContentLengthHeader contentLengthHeader = protocolObjects.headerFactory.createContentLengthHeader(content.length());
        ContentTypeHeader contentTypeHeader = protocolObjects.headerFactory.createContentTypeHeader(contentType, subContentType);
        message.setContentLength(contentLengthHeader);
        message.setContent(content, contentTypeHeader);
    }
    if (headers != null) {
        for (Header header : headers) {
            message.addHeader(header);
        }
    }
    addSpecificHeaders(method, message);
    message.removeHeader(ViaHeader.NAME);
    ClientTransaction clientTransaction = sipProvider.getNewClientTransaction(message);
    if (method.equals("INVITE")) {
        inviteClientTid = clientTransaction;
    }
    dialog.sendRequest(clientTransaction);
}
Also used : ReasonHeader(javax.sip.header.ReasonHeader) RequireHeader(javax.sip.header.RequireHeader) SIPETagHeader(javax.sip.header.SIPETagHeader) ContactHeader(javax.sip.header.ContactHeader) ReferToHeader(javax.sip.header.ReferToHeader) ViaHeader(javax.sip.header.ViaHeader) SIPIfMatchHeader(javax.sip.header.SIPIfMatchHeader) AuthorizationHeader(javax.sip.header.AuthorizationHeader) CallIdHeader(javax.sip.header.CallIdHeader) ContentLengthHeader(javax.sip.header.ContentLengthHeader) ExtensionHeader(javax.sip.header.ExtensionHeader) ExpiresHeader(javax.sip.header.ExpiresHeader) Header(javax.sip.header.Header) ReplacesHeader(gov.nist.javax.sip.header.extensions.ReplacesHeader) CSeqHeader(javax.sip.header.CSeqHeader) ContentTypeHeader(javax.sip.header.ContentTypeHeader) JoinHeader(gov.nist.javax.sip.header.extensions.JoinHeader) MaxForwardsHeader(javax.sip.header.MaxForwardsHeader) ToHeader(javax.sip.header.ToHeader) RouteHeader(javax.sip.header.RouteHeader) ProxyAuthorizationHeader(javax.sip.header.ProxyAuthorizationHeader) SubscriptionStateHeader(javax.sip.header.SubscriptionStateHeader) EventHeader(javax.sip.header.EventHeader) FromHeader(javax.sip.header.FromHeader) ProxyAuthenticateHeader(javax.sip.header.ProxyAuthenticateHeader) RecordRouteHeader(javax.sip.header.RecordRouteHeader) ContentTypeHeader(javax.sip.header.ContentTypeHeader) ClientTransaction(javax.sip.ClientTransaction) Request(javax.sip.message.Request) ContentLengthHeader(javax.sip.header.ContentLengthHeader) SipURI(javax.sip.address.SipURI)

Example 22 with SipURI

use of javax.sip.address.SipURI in project load-balancer by RestComm.

the class TestSipListener method processResponse.

public void processResponse(ResponseEvent responseReceivedEvent) {
    if (abortProcessing) {
        logger.error("Processing aborted");
        return;
    }
    Response response = (Response) responseReceivedEvent.getResponse();
    System.out.println("Process response : " + response);
    eventListener.uacAfterResponse(response.getStatusCode(), appServer);
    if (response.getStatusCode() == 491)
        numberOf491s++;
    RecordRouteHeader recordRouteHeader = (RecordRouteHeader) response.getHeader(RecordRouteHeader.NAME);
    ContactHeader contactHeader = (ContactHeader) response.getHeader(ContactHeader.NAME);
    if (contactHeader != null && "0.0.0.0".equals(((SipURI) contactHeader.getAddress().getURI()).getHost())) {
        abortProcessing = true;
        throw new IllegalArgumentException("we received a contact header with 0.0.0.0 in a response !");
    }
    if (response.getStatusCode() >= 400 && response.getStatusCode() < 999) {
        this.serverErrorReceived = true;
    }
    if (response.getStatusCode() == 503) {
        this.serviceUnavailableReceived = true;
    }
    if (response.toString().toLowerCase().contains("info")) {
        lastInfoResponseTime = System.currentTimeMillis();
    }
    ClientTransaction tid = responseReceivedEvent.getClientTransaction();
    CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
    logger.info("Response received : Status Code = " + response.getStatusCode() + " " + cseq);
    // not dropping in PRACK case on REINVITE the ClientTx can be null it seems
    if (tid == null && !prackSent) {
        if (countRetrans) {
            nbRetrans++;
        }
        logger.info("Stray response -- dropping ");
        return;
    }
    if (tid != null) {
        logger.info("transaction state is " + tid.getState());
        logger.info("Dialog = " + tid.getDialog());
        if (tid.getDialog() != null) {
            logger.info("Dialog State is " + tid.getDialog().getState());
        }
    }
    try {
        if (response.getStatusCode() > 100 && response.getStatusCode() < 200) {
            informationalResponse = response;
        }
        if (response.getStatusCode() >= 200 && response.getStatusCode() < 700) {
            logger.info("final response received : status code " + response.getStatusCode());
            finalResponseReceived = true;
            setFinalResponseStatus(response.getStatusCode());
            setFinalResponse(response);
        }
        if (response.getStatusCode() == Response.OK) {
            if (cseq.getMethod().equals(Request.INVITE) && sendAck) {
                inviteOkResponse = response;
                @SuppressWarnings("deprecation") Request ackRequest = responseReceivedEvent.getClientTransaction().createAck();
                if (useToURIasRequestUri) {
                    ackRequest.setRequestURI(requestURI);
                }
                if (timeToWaitBeforeAck > 0) {
                    Thread.sleep(timeToWaitBeforeAck);
                }
                if (!sendSubsequentRequestsThroughSipProvider && tid.getDialog() != null) {
                    tid.getDialog().sendAck(ackRequest);
                } else {
                    sipProvider.sendRequest(ackRequest);
                }
                ackSent = true;
                // If the caller is supposed to send the bye
                if (sendReinvite && !reinviteSent) {
                    List<Header> headers = new ArrayList<Header>();
                    Header reinviteHeader = protocolObjects.headerFactory.createHeader("ReInvite", "true");
                    headers.add(reinviteHeader);
                    if (prackSent) {
                        headers.add(protocolObjects.headerFactory.createHeader(RequireHeader.NAME, "100rel"));
                    }
                    sendInDialogSipRequest("INVITE", null, null, null, headers, null);
                    reinviteSent = true;
                    return;
                }
                if (sendBye) {
                    // Thread.sleep(30000);
                    sendBye();
                }
                if (sendByeAfterTerminatingNotify) {
                    tid.getDialog().terminateOnBye(false);
                }
            } else if (cseq.getMethod().equals(Request.BYE)) {
                okToByeReceived = true;
            } else if (cseq.getMethod().equals(Request.CANCEL)) {
                this.cancelOkReceived = true;
            // if (tid.getDialog().getState() == DialogState.CONFIRMED) {
            // // oops cancel went in too late. Need to hang up the
            // // dialog.
            // logger.info("Sending BYE -- cancel went in too late !!");
            // Request byeRequest = dialog.createRequest(Request.BYE);
            // ClientTransaction ct = sipProvider
            // .getNewClientTransaction(byeRequest);
            // tid.getDialog().sendRequest(ct);
            // }
            } else if (cseq.getMethod().equals(Request.PUBLISH)) {
                SIPETagHeader sipTagHeader = (SIPETagHeader) response.getHeader(SIPETag.NAME);
                sipETag = sipTagHeader.getETag();
            } else if (cseq.getMethod().equals(Request.PRACK)) {
                okToPrackReceived = true;
            }
        } else if (response.getStatusCode() == Response.MOVED_TEMPORARILY) {
            // Dialog dies as soon as you get an error response.
            if (cseq.getMethod().equals(Request.INVITE)) {
                // lookup the contact header
                ContactHeader contHdr = (ContactHeader) response.getHeader(ContactHeader.NAME);
                // we can re-use the from header
                FromHeader from = ((FromHeader) response.getHeader(FromHeader.NAME));
                // we use the to-address, but without the tag
                ToHeader to = (ToHeader) (response.getHeader(ToHeader.NAME)).clone();
                to.removeParameter("tag");
                // the call-id can be re-used
                CallIdHeader callID = ((CallIdHeader) response.getHeader(CallIdHeader.NAME));
                // we take the next cseq
                long seqNo = (((CSeqHeader) response.getHeader(CSeqHeader.NAME)).getSeqNumber());
                logger.info("seqNo = " + seqNo);
                CSeqHeader cseqNew = protocolObjects.headerFactory.createCSeqHeader(++seqNo, "INVITE");
                // Create ViaHeaders (either use tcp or udp)
                ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
                ViaHeader viaHeader = null;
                if (!isIpv6)
                    viaHeader = protocolObjects.headerFactory.createViaHeader("127.0.0.1", sipProvider.getListeningPoint(protocolObjects.transport).getPort(), protocolObjects.transport, null);
                else
                    viaHeader = protocolObjects.headerFactory.createViaHeader("::1", sipProvider.getListeningPoint(protocolObjects.transport).getPort(), protocolObjects.transport, null);
                // add via headers
                viaHeaders.add(viaHeader);
                // create max forwards
                MaxForwardsHeader maxForwardsHeader = protocolObjects.headerFactory.createMaxForwardsHeader(10);
                // create invite Request
                SipURI newUri = (SipURI) this.requestURI.clone();
                newUri.setParameter("redirection", "true");
                requestURI = newUri;
                Request invRequest = protocolObjects.messageFactory.createRequest(newUri, "INVITE", callID, cseqNew, from, to, viaHeaders, maxForwardsHeader);
                // we set the Request URI to the address given
                SipURI contactURI = protocolObjects.addressFactory.createSipURI(null, this.listeningPoint.getIPAddress());
                contactURI.setPort(this.listeningPoint.getPort());
                contactURI.setTransportParam(protocolObjects.transport);
                Address address = protocolObjects.addressFactory.createAddress(contactURI);
                ContactHeader contact = protocolObjects.headerFactory.createContactHeader(address);
                invRequest.addHeader(contact);
                // the contacat header in the response contains where to redirect
                // the request to -- which in this case happens to be back to the
                // same location.
                ContactHeader chdr = (ContactHeader) response.getHeader(ContactHeader.NAME);
                SipURI sipUri = (SipURI) chdr.getAddress().getURI();
                // sipUri.setLrParam();
                RouteHeader routeHeader = protocolObjects.headerFactory.createRouteHeader(chdr.getAddress());
                invRequest.addHeader(routeHeader);
                invRequest.setRequestURI(sipUri);
                logger.info("Sending INVITE to " + contHdr.getAddress().getURI().toString());
                inviteClientTid = sipProvider.getNewClientTransaction(invRequest);
                logger.info("New TID = " + inviteClientTid);
                inviteClientTid.sendRequest();
                logger.info("sendReqeust succeeded " + inviteClientTid);
                Dialog dialog = inviteClientTid.getDialog();
                this.dialogCount++;
                this.dialog = dialog;
            }
        } else if (response.getStatusCode() == Response.REQUEST_TERMINATED) {
            if (cseq.getMethod().equals(Request.INVITE)) {
                this.requestTerminatedReceived = true;
            }
        } else if (response.getStatusCode() == Response.RINGING && sendUpdateOn180) {
            Request updateRequest = dialog.createRequest(Request.UPDATE);
            ClientTransaction ct = sipProvider.getNewClientTransaction(updateRequest);
            dialog.sendRequest(ct);
        } else if (response.getStatusCode() > Response.TRYING && response.getStatusCode() < Response.OK) {
            RequireHeader requireHeader = (RequireHeader) response.getHeader(RequireHeader.NAME);
            if (requireHeader != null && "100rel".equalsIgnoreCase(requireHeader.getOptionTag().trim())) {
                Request prack = dialog.createPrack(response);
                ClientTransaction ct = sipProvider.getNewClientTransaction(prack);
                dialog.sendRequest(ct);
                prackSent = true;
            }
        }
    /**
     * end of modified code
     */
    } catch (Exception ex) {
        logger.error("An unexpected exception occured while processing the response", ex);
    }
}
Also used : MaxForwardsHeader(javax.sip.header.MaxForwardsHeader) ContactHeader(javax.sip.header.ContactHeader) RouteHeader(javax.sip.header.RouteHeader) RecordRouteHeader(javax.sip.header.RecordRouteHeader) Address(javax.sip.address.Address) FromHeader(javax.sip.header.FromHeader) ClientTransaction(javax.sip.ClientTransaction) Request(javax.sip.message.Request) ArrayList(java.util.ArrayList) RecordRouteHeader(javax.sip.header.RecordRouteHeader) RequireHeader(javax.sip.header.RequireHeader) SipURI(javax.sip.address.SipURI) InvalidArgumentException(javax.sip.InvalidArgumentException) ParseException(java.text.ParseException) SipException(javax.sip.SipException) TransactionDoesNotExistException(javax.sip.TransactionDoesNotExistException) TransactionUnavailableException(javax.sip.TransactionUnavailableException) Response(javax.sip.message.Response) CSeqHeader(javax.sip.header.CSeqHeader) ReasonHeader(javax.sip.header.ReasonHeader) RequireHeader(javax.sip.header.RequireHeader) SIPETagHeader(javax.sip.header.SIPETagHeader) ContactHeader(javax.sip.header.ContactHeader) ReferToHeader(javax.sip.header.ReferToHeader) ViaHeader(javax.sip.header.ViaHeader) SIPIfMatchHeader(javax.sip.header.SIPIfMatchHeader) AuthorizationHeader(javax.sip.header.AuthorizationHeader) CallIdHeader(javax.sip.header.CallIdHeader) ContentLengthHeader(javax.sip.header.ContentLengthHeader) ExtensionHeader(javax.sip.header.ExtensionHeader) ExpiresHeader(javax.sip.header.ExpiresHeader) Header(javax.sip.header.Header) ReplacesHeader(gov.nist.javax.sip.header.extensions.ReplacesHeader) CSeqHeader(javax.sip.header.CSeqHeader) ContentTypeHeader(javax.sip.header.ContentTypeHeader) JoinHeader(gov.nist.javax.sip.header.extensions.JoinHeader) MaxForwardsHeader(javax.sip.header.MaxForwardsHeader) ToHeader(javax.sip.header.ToHeader) RouteHeader(javax.sip.header.RouteHeader) ProxyAuthorizationHeader(javax.sip.header.ProxyAuthorizationHeader) SubscriptionStateHeader(javax.sip.header.SubscriptionStateHeader) EventHeader(javax.sip.header.EventHeader) FromHeader(javax.sip.header.FromHeader) ProxyAuthenticateHeader(javax.sip.header.ProxyAuthenticateHeader) RecordRouteHeader(javax.sip.header.RecordRouteHeader) SIPETagHeader(javax.sip.header.SIPETagHeader) ViaHeader(javax.sip.header.ViaHeader) Dialog(javax.sip.Dialog) ReferToHeader(javax.sip.header.ReferToHeader) ToHeader(javax.sip.header.ToHeader) CallIdHeader(javax.sip.header.CallIdHeader)

Example 23 with SipURI

use of javax.sip.address.SipURI in project load-balancer by RestComm.

the class TestSipListener method createInvite.

public Request createInvite(String callId, long cseq) throws ParseException, InvalidArgumentException {
    String fromName = "BigGuy";
    String fromSipAddress = "here.com";
    String fromDisplayName = "The Master Blaster";
    String toSipAddress = "there.com";
    String toUser = "LittleGuy";
    String toDisplayName = "The Little Blister";
    // create >From Header
    SipURI fromAddress = protocolObjects.addressFactory.createSipURI(fromName, fromSipAddress);
    Address fromNameAddress = protocolObjects.addressFactory.createAddress(fromAddress);
    fromNameAddress.setDisplayName(fromDisplayName);
    FromHeader fromHeader = protocolObjects.headerFactory.createFromHeader(fromNameAddress, "12345");
    // create To Header
    SipURI toAddress = protocolObjects.addressFactory.createSipURI(toUser, toSipAddress);
    Address toNameAddress = protocolObjects.addressFactory.createAddress(toAddress);
    toNameAddress.setDisplayName(toDisplayName);
    ToHeader toHeader = protocolObjects.headerFactory.createToHeader(toNameAddress, null);
    // create Request URI
    SipURI requestURI = protocolObjects.addressFactory.createSipURI(toUser, peerHostPort);
    // Create ViaHeaders
    ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
    ViaHeader viaHeader = null;
    if (!isIpv6)
        viaHeader = protocolObjects.headerFactory.createViaHeader("127.0.0.1", listeningPoint.getPort(), listeningPoint.getTransport(), null);
    else
        viaHeader = protocolObjects.headerFactory.createViaHeader("::1", listeningPoint.getPort(), listeningPoint.getTransport(), null);
    // add via headers
    viaHeaders.add(viaHeader);
    // Create ContentTypeHeader
    ContentTypeHeader contentTypeHeader = protocolObjects.headerFactory.createContentTypeHeader("application", "sdp");
    // Create a new CallId header
    CallIdHeader callIdHeader;
    callIdHeader = sipProvider.getNewCallId();
    if (callId.trim().length() > 0)
        callIdHeader.setCallId(callId);
    // Create a new Cseq header
    CSeqHeader cSeqHeader = protocolObjects.headerFactory.createCSeqHeader(cseq, Request.INVITE);
    // Create a new MaxForwardsHeader
    MaxForwardsHeader maxForwards = protocolObjects.headerFactory.createMaxForwardsHeader(70);
    // Create the request.
    Request request = protocolObjects.messageFactory.createRequest(requestURI, Request.INVITE, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards);
    // Create contact headers
    String host = null;
    if (!isIpv6)
        host = "127.0.0.1";
    else
        host = "::1";
    SipURI contactUrl = protocolObjects.addressFactory.createSipURI(fromName, host);
    contactUrl.setPort(listeningPoint.getPort());
    // Create the contact name address.
    SipURI contactURI = protocolObjects.addressFactory.createSipURI(fromName, host);
    contactURI.setPort(listeningPoint.getPort());
    Address contactAddress = protocolObjects.addressFactory.createAddress(contactURI);
    // Add the contact address.
    contactAddress.setDisplayName(fromName);
    contactHeader = protocolObjects.headerFactory.createContactHeader(contactAddress);
    request.addHeader(contactHeader);
    String sdpData = "v=0\r\n" + "o=4855 13760799956958020 13760799956958020" + " IN IP4  129.6.55.78\r\n" + "s=mysession session\r\n" + "p=+46 8 52018010\r\n" + "c=IN IP4  129.6.55.78\r\n" + "t=0 0\r\n" + "m=audio 6022 RTP/AVP 0 4 18\r\n" + "a=rtpmap:0 PCMU/8000\r\n" + "a=rtpmap:4 G723/8000\r\n" + "a=rtpmap:18 G729A/8000\r\n" + "a=ptime:20\r\n";
    byte[] contents = sdpData.getBytes();
    request.setContent(contents, contentTypeHeader);
    Header callInfoHeader = protocolObjects.headerFactory.createHeader("Call-Info", "<http://www.antd.nist.gov>");
    request.addHeader(callInfoHeader);
    return request;
}
Also used : MaxForwardsHeader(javax.sip.header.MaxForwardsHeader) Address(javax.sip.address.Address) FromHeader(javax.sip.header.FromHeader) ContentTypeHeader(javax.sip.header.ContentTypeHeader) ArrayList(java.util.ArrayList) Request(javax.sip.message.Request) SipURI(javax.sip.address.SipURI) CSeqHeader(javax.sip.header.CSeqHeader) ReasonHeader(javax.sip.header.ReasonHeader) RequireHeader(javax.sip.header.RequireHeader) SIPETagHeader(javax.sip.header.SIPETagHeader) ContactHeader(javax.sip.header.ContactHeader) ReferToHeader(javax.sip.header.ReferToHeader) ViaHeader(javax.sip.header.ViaHeader) SIPIfMatchHeader(javax.sip.header.SIPIfMatchHeader) AuthorizationHeader(javax.sip.header.AuthorizationHeader) CallIdHeader(javax.sip.header.CallIdHeader) ContentLengthHeader(javax.sip.header.ContentLengthHeader) ExtensionHeader(javax.sip.header.ExtensionHeader) ExpiresHeader(javax.sip.header.ExpiresHeader) Header(javax.sip.header.Header) ReplacesHeader(gov.nist.javax.sip.header.extensions.ReplacesHeader) CSeqHeader(javax.sip.header.CSeqHeader) ContentTypeHeader(javax.sip.header.ContentTypeHeader) JoinHeader(gov.nist.javax.sip.header.extensions.JoinHeader) MaxForwardsHeader(javax.sip.header.MaxForwardsHeader) ToHeader(javax.sip.header.ToHeader) RouteHeader(javax.sip.header.RouteHeader) ProxyAuthorizationHeader(javax.sip.header.ProxyAuthorizationHeader) SubscriptionStateHeader(javax.sip.header.SubscriptionStateHeader) EventHeader(javax.sip.header.EventHeader) FromHeader(javax.sip.header.FromHeader) ProxyAuthenticateHeader(javax.sip.header.ProxyAuthenticateHeader) RecordRouteHeader(javax.sip.header.RecordRouteHeader) ViaHeader(javax.sip.header.ViaHeader) ReferToHeader(javax.sip.header.ReferToHeader) ToHeader(javax.sip.header.ToHeader) CallIdHeader(javax.sip.header.CallIdHeader)

Example 24 with SipURI

use of javax.sip.address.SipURI in project load-balancer by RestComm.

the class HeaderConsistentHashAlgorithmTest method testOKRingingLandOnDifferentNode.

@Test
public void testOKRingingLandOnDifferentNode() throws Exception {
    EventListener failureEventListener = new EventListener() {

        @Override
        public void uasAfterResponse(int statusCode, AppServer source) {
        }

        @Override
        public void uasAfterRequestReceived(String method, AppServer source) {
        // TODO Auto-generated method stub
        }

        @Override
        public void uacAfterRequestSent(String method, AppServer source) {
        // TODO Auto-generated method stub
        }

        @Override
        public void uacAfterResponse(int statusCode, AppServer source) {
            if (statusCode == 180) {
                ringingAppServer = source;
                // source.sendCleanShutdownToBalancers();
                source.stop();
            } else {
                okAppServer = source;
            }
        }
    };
    for (AppServer as : servers) as.setEventListener(failureEventListener);
    shootist.callerSendsBye = true;
    String fromName = "sender";
    String fromHost = "sip-servlets.com";
    SipURI fromAddress = servers[0].protocolObjects.addressFactory.createSipURI(fromName, fromHost);
    String toUser = "replaces";
    String toHost = "sip-servlets.com";
    SipURI toAddress = servers[0].protocolObjects.addressFactory.createSipURI(toUser, toHost);
    SipURI ruri = servers[0].protocolObjects.addressFactory.createSipURI("usera", "127.0.0.1:5033");
    ruri.setLrParam();
    SipURI route = servers[0].protocolObjects.addressFactory.createSipURI("lbint", "127.0.0.1:5065");
    route.setParameter("node_host", "127.0.0.1");
    route.setParameter("node_port", "4060");
    route.setLrParam();
    shootist.start();
    // servers[0].sipListener.sendSipRequest("INVITE", fromAddress, toAddress, null, null, false);
    servers[0].sipListener.sendSipRequest("INVITE", fromAddress, toAddress, null, route, false, null, null, ruri);
    Thread.sleep(20000);
    assertTrue(shootist.inviteRequest.getHeader(RecordRouteHeader.NAME).toString().contains("node_host"));
    assertNotSame(ringingAppServer, okAppServer);
    assertNotNull(ringingAppServer);
    assertNotNull(okAppServer);
}
Also used : AppServer(org.mobicents.tools.sip.balancer.AppServer) EventListener(org.mobicents.tools.sip.balancer.EventListener) SipURI(javax.sip.address.SipURI) Test(org.junit.Test)

Example 25 with SipURI

use of javax.sip.address.SipURI in project load-balancer by RestComm.

the class BTBUATest method testBackToBackUserAgent.

// test back to back use agent
@Test
public void testBackToBackUserAgent() throws Exception {
    boolean wasRinging = false;
    boolean wasOk = false;
    boolean wasInvite = false;
    boolean wasAck = false;
    boolean wasBye = false;
    shootist2.start();
    shootist1.start();
    shootist1.callerSendsBye = true;
    SipURI route = shootist1.addressFactory.createSipURI("lbint", "127.0.0.1:5060");
    route.setLrParam();
    shootist1.sendInitial(Request.INVITE, shootist1.headerFactory.createRouteHeader(shootist1.addressFactory.createAddress(route)));
    Thread.sleep(9000);
    shootist1.sendBye();
    Thread.sleep(2000);
    for (Response res : shootist1.responses) {
        if (res.getStatusCode() == Response.RINGING)
            wasRinging = true;
        if (res.getStatusCode() == Response.OK)
            wasOk = true;
    }
    for (Request req : shootist2.requests) {
        if (req.getMethod().equals(Request.INVITE))
            wasInvite = true;
        if (req.getMethod().equals(Request.ACK))
            wasAck = true;
        if (req.getMethod().equals(Request.BYE))
            wasBye = true;
    }
    assertEquals(3, shootist2.requests.size());
    assertTrue(wasOk);
    assertTrue(wasRinging);
    assertTrue(wasInvite);
    assertTrue(wasAck);
    assertTrue(wasBye);
}
Also used : Response(javax.sip.message.Response) Request(javax.sip.message.Request) SipURI(javax.sip.address.SipURI) Test(org.junit.Test)

Aggregations

SipURI (javax.sip.address.SipURI)70 ParseException (java.text.ParseException)27 Request (javax.sip.message.Request)24 Address (javax.sip.address.Address)22 InvalidArgumentException (javax.sip.InvalidArgumentException)20 ViaHeader (javax.sip.header.ViaHeader)20 SipException (javax.sip.SipException)19 ToHeader (javax.sip.header.ToHeader)18 ContactHeader (javax.sip.header.ContactHeader)17 FromHeader (javax.sip.header.FromHeader)17 Test (org.junit.Test)17 RouteHeader (javax.sip.header.RouteHeader)16 AppServer (org.mobicents.tools.sip.balancer.AppServer)16 EventListener (org.mobicents.tools.sip.balancer.EventListener)16 CSeqHeader (javax.sip.header.CSeqHeader)13 CallIdHeader (javax.sip.header.CallIdHeader)13 Header (javax.sip.header.Header)13 MaxForwardsHeader (javax.sip.header.MaxForwardsHeader)13 RecordRouteHeader (javax.sip.header.RecordRouteHeader)13 URI (javax.sip.address.URI)11