Search in sources :

Example 21 with Address

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

the class Shootist method sendInitialInvite.

public void sendInitialInvite() {
    try {
        if (!started)
            start();
        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 = addressFactory.createSipURI(fromName, fromSipAddress);
        Address fromNameAddress = addressFactory.createAddress(fromAddress);
        fromNameAddress.setDisplayName(fromDisplayName);
        FromHeader fromHeader = headerFactory.createFromHeader(fromNameAddress, "12345");
        // create To Header
        SipURI toAddress = addressFactory.createSipURI(toUser, toSipAddress);
        Address toNameAddress = addressFactory.createAddress(toAddress);
        toNameAddress.setDisplayName(toDisplayName);
        ToHeader toHeader = headerFactory.createToHeader(toNameAddress, null);
        // create Request URI
        SipURI requestURI = addressFactory.createSipURI(toUser, peerHostPort);
        // Create ViaHeaders
        ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
        String ipAddress = udpListeningPoint.getIPAddress();
        ViaHeader viaHeader = headerFactory.createViaHeader(ipAddress, sipProvider.getListeningPoint(transport).getPort(), transport, null);
        // add via headers
        viaHeaders.add(viaHeader);
        // Create ContentTypeHeader
        ContentTypeHeader contentTypeHeader = headerFactory.createContentTypeHeader("application", "sdp");
        // Create a new CallId header
        CallIdHeader callIdHeader = sipProvider.getNewCallId();
        // Create a new Cseq header
        CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(1L, Request.INVITE);
        // Create a new MaxForwardsHeader
        MaxForwardsHeader maxForwards = headerFactory.createMaxForwardsHeader(70);
        // Create the request.
        Request request = messageFactory.createRequest(requestURI, Request.INVITE, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards);
        // Create contact headers
        String host = "127.0.0.1";
        SipURI contactUrl = addressFactory.createSipURI(fromName, host);
        contactUrl.setPort(udpListeningPoint.getPort());
        contactUrl.setLrParam();
        // Create the contact name address.
        SipURI contactURI = addressFactory.createSipURI(fromName, host);
        contactURI.setPort(sipProvider.getListeningPoint(transport).getPort());
        Address contactAddress = addressFactory.createAddress(contactURI);
        // Add the contact address.
        contactAddress.setDisplayName(fromName);
        contactHeader = headerFactory.createContactHeader(contactAddress);
        request.addHeader(contactHeader);
        // You can add extension headers of your own making
        // to the outgoing SIP request.
        // Add the extension header.
        Header extensionHeader = headerFactory.createHeader("My-Header", "my header value");
        request.addHeader(extensionHeader);
        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);
        // You can add as many extension headers as you
        // want.
        extensionHeader = headerFactory.createHeader("My-Other-Header", "my new header value ");
        request.addHeader(extensionHeader);
        Header callInfoHeader = headerFactory.createHeader("Call-Info", "<http://www.antd.nist.gov>");
        request.addHeader(callInfoHeader);
        // Create the client transaction.
        inviteTid = sipProvider.getNewClientTransaction(request);
        // send the request out.
        inviteTid.sendRequest();
        dialog = inviteTid.getDialog();
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
        ex.printStackTrace();
        fail("Unxpected exception ");
    }
}
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) TransactionAlreadyExistsException(javax.sip.TransactionAlreadyExistsException) InvalidArgumentException(javax.sip.InvalidArgumentException) ParseException(java.text.ParseException) PeerUnavailableException(javax.sip.PeerUnavailableException) SipException(javax.sip.SipException) TransactionUnavailableException(javax.sip.TransactionUnavailableException) CSeqHeader(javax.sip.header.CSeqHeader) CSeqHeader(javax.sip.header.CSeqHeader) ContentTypeHeader(javax.sip.header.ContentTypeHeader) MaxForwardsHeader(javax.sip.header.MaxForwardsHeader) ContactHeader(javax.sip.header.ContactHeader) ToHeader(javax.sip.header.ToHeader) FromHeader(javax.sip.header.FromHeader) ViaHeader(javax.sip.header.ViaHeader) CallIdHeader(javax.sip.header.CallIdHeader) Header(javax.sip.header.Header) ViaHeader(javax.sip.header.ViaHeader) ToHeader(javax.sip.header.ToHeader) CallIdHeader(javax.sip.header.CallIdHeader)

Example 22 with Address

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

the class SIPBalancerForwarder method createRecordRouteHeaders.

private void createRecordRouteHeaders(ArrayList<ListeningPoint> listeningPoints, RecordRouteHeader[] activeHeaders) throws ParseException {
    for (ListeningPoint listeningPoint : listeningPoints) {
        SipURI internalLocalUri = balancerRunner.balancerContext.addressFactory.createSipURI(null, listeningPoint.getIPAddress());
        internalLocalUri.setPort(listeningPoint.getPort());
        internalLocalUri.setTransportParam(listeningPoint.getTransport());
        // See RFC 3261 19.1.1 for lr parameter
        internalLocalUri.setLrParam();
        Address internalLocalAddress = balancerRunner.balancerContext.addressFactory.createAddress(internalLocalUri);
        internalLocalAddress.setURI(internalLocalUri);
        if (logger.isDebugEnabled()) {
            logger.debug("adding internal Record Router Header :" + internalLocalAddress);
        }
        activeHeaders[getIndexByTransport(listeningPoint.getTransport())] = balancerRunner.balancerContext.headerFactory.createRecordRouteHeader(internalLocalAddress);
    }
}
Also used : InetAddress(java.net.InetAddress) HeaderAddress(javax.sip.header.HeaderAddress) Address(javax.sip.address.Address) ListeningPoint(javax.sip.ListeningPoint) SipURI(javax.sip.address.SipURI)

Example 23 with Address

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

the class TestSipListener method processSubscribe.

/**
 * Process the invite request.
 */
public void processSubscribe(RequestEvent requestEvent, ServerTransaction serverTransaction) {
    SipProvider sipProvider = (SipProvider) requestEvent.getSource();
    Request request = requestEvent.getRequest();
    try {
        logger.info("notifier: got an Subscribe sending OK");
        logger.info("notifier:  " + request);
        logger.info("notifier : dialog = " + requestEvent.getDialog());
        EventHeader eventHeader = (EventHeader) request.getHeader(EventHeader.NAME);
        // this.gotSubscribeRequest = true;
        // Always create a ServerTransaction, best as early as possible in the code
        Response response = null;
        ServerTransaction st = requestEvent.getServerTransaction();
        if (st == null) {
            st = sipProvider.getNewServerTransaction(request);
        }
        // Check if it is an initial SUBSCRIBE or a refresh / unsubscribe
        boolean isInitial = requestEvent.getDialog() == null;
        if (isInitial) {
            // JvB: need random tags to test forking
            String toTag = Integer.toHexString((int) (Math.random() * Integer.MAX_VALUE));
            response = protocolObjects.messageFactory.createResponse(202, request);
            ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME);
            // Sanity check: to header should not ahve a tag. Else the dialog
            // should have matched
            // Application is supposed to set.
            toHeader.setTag(toTag);
            this.dialog = st.getDialog();
            // subscribe dialogs do not terminate on bye.
            this.dialog.terminateOnBye(false);
        } else {
            response = protocolObjects.messageFactory.createResponse(202, request);
            this.dialog = st.getDialog();
            // subscribe dialogs do not terminate on bye.
            this.dialog.terminateOnBye(false);
        }
        // Both 2xx response to SUBSCRIBE and NOTIFY need a Contact
        Address address = null;
        if (!isIpv6)
            address = protocolObjects.addressFactory.createAddress("Notifier <sip:127.0.0.1>");
        else
            address = protocolObjects.addressFactory.createAddress("Notifier <sip:[::1]>");
        ((SipURI) address.getURI()).setPort(sipProvider.getListeningPoint(ListeningPoint.UDP).getPort());
        ContactHeader contactHeader = protocolObjects.headerFactory.createContactHeader(address);
        response.addHeader(contactHeader);
        // Expires header is mandatory in 2xx responses to SUBSCRIBE
        ExpiresHeader expires = (ExpiresHeader) request.getHeader(ExpiresHeader.NAME);
        if (expires == null) {
            // rather short
            expires = protocolObjects.headerFactory.createExpiresHeader(30);
        }
        response.addHeader(expires);
        /*
			 * JvB: The SUBSCRIBE MUST be answered first. See RFC3265 3.1.6.2: 
			 * "[...] a NOTIFY message is always sent immediately after any 200-
			 * class response to a SUBSCRIBE request"
			 * 
			 *  Do this before creating the NOTIFY request below
			 */
        st.sendResponse(response);
        /*
			 * NOTIFY requests MUST contain a "Subscription-State" header with a
			 * value of "active", "pending", or "terminated". The "active" value
			 * indicates that the subscription has been accepted and has been
			 * authorized (in most cases; see section 5.2.). The "pending" value
			 * indicates that the subscription has been received, but that
			 * policy information is insufficient to accept or deny the
			 * subscription at this time. The "terminated" value indicates that
			 * the subscription is not active.
			 */
        if (sendNotify) {
            Request notifyRequest = dialog.createRequest("NOTIFY");
            // Mark the contact header, to check that the remote contact is updated
            // ((SipURI)contactHeader.getAddress().getURI()).setParameter("id","not");
            // Initial state is pending, second time we assume terminated (Expires==0)
            SubscriptionStateHeader sstate = protocolObjects.headerFactory.createSubscriptionStateHeader(expires.getExpires() != 0 ? SubscriptionStateHeader.PENDING : SubscriptionStateHeader.TERMINATED);
            allSubscriptionStates.add(sstate.getState().toLowerCase());
            // Need a reason for terminated
            if (sstate.getState().equalsIgnoreCase("terminated")) {
                sstate.setReasonCode("deactivated");
            }
            notifyRequest.addHeader(sstate);
            notifyRequest.setHeader(eventHeader);
            notifyRequest.setHeader(contactHeader);
            // notifyRequest.setHeader(routeHeader);
            ClientTransaction ct = sipProvider.getNewClientTransaction(notifyRequest);
            if (sstate.getState().equals(SubscriptionStateHeader.TERMINATED)) {
                Thread.sleep(timeToWaitBetweenSubsNotify);
            }
            // Let the other side know that the tx is pending acceptance
            // 
            dialog.sendRequest(ct);
            logger.info("NOTIFY Branch ID " + ((ViaHeader) request.getHeader(ViaHeader.NAME)).getParameter("branch"));
            logger.info("Dialog " + dialog);
            logger.info("Dialog state after pending NOTIFY: " + dialog.getState());
            if (expires.getExpires() != 0) {
                Thread myEventSource = new Thread(new MyEventSource(this, eventHeader));
                myEventSource.start();
            }
        }
    } catch (Throwable ex) {
        logger.info(ex.getMessage(), ex);
    }
}
Also used : ContactHeader(javax.sip.header.ContactHeader) Address(javax.sip.address.Address) SubscriptionStateHeader(javax.sip.header.SubscriptionStateHeader) ClientTransaction(javax.sip.ClientTransaction) Request(javax.sip.message.Request) EventHeader(javax.sip.header.EventHeader) SipURI(javax.sip.address.SipURI) Response(javax.sip.message.Response) ViaHeader(javax.sip.header.ViaHeader) ReferToHeader(javax.sip.header.ReferToHeader) ToHeader(javax.sip.header.ToHeader) ExpiresHeader(javax.sip.header.ExpiresHeader) ServerTransaction(javax.sip.ServerTransaction) SipProvider(javax.sip.SipProvider)

Example 24 with Address

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

the class TestSipListener method processInvite.

/**
 * Process the invite request.
 */
public void processInvite(RequestEvent requestEvent, ServerTransaction serverTransaction) {
    inviteReceived = true;
    SipProvider sipProvider = (SipProvider) requestEvent.getSource();
    Request request = requestEvent.getRequest();
    inviteRequest = request;
    logger.info("shootme: got an Invite " + request);
    try {
        ServerTransaction st = requestEvent.getServerTransaction();
        if (st == null) {
            st = sipProvider.getNewServerTransaction(request);
        }
        inviteServerTid = st;
        Dialog dialog = st.getDialog();
        if (request.getHeader(JoinHeader.NAME) != null) {
            setJoinRequestReceived(true);
            this.joinDialog = dialog;
        } else if (request.getHeader(ReplacesHeader.NAME) != null) {
            setReplacesRequestReceived(true);
            this.replacesDialog = dialog;
        } else {
            this.dialogCount++;
            this.dialog = dialog;
        }
        logger.info("Shootme: dialog = " + dialog);
        this.inviteRequest = request;
        boolean sendReliably = false;
        RequireHeader requireHeader = (RequireHeader) request.getHeader(RequireHeader.NAME);
        if (requireHeader != null && "100rel".equalsIgnoreCase(requireHeader.getOptionTag().trim())) {
            sendReliably = true;
        }
        if (respondWithError == null)
            for (int provisionalResponseToSend : provisionalResponsesToSend) {
                Thread.sleep(getTimeToWaitBetweenProvisionnalResponse());
                Response response = protocolObjects.messageFactory.createResponse(provisionalResponseToSend, request);
                if (provisionalResponseToSend >= Response.TRYING && provisionalResponseToSend < Response.OK) {
                    ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME);
                    if (provisionalResponseToSend != Response.TRYING && toHeader.getTag() == null) {
                        // Application is supposed to set.
                        toHeader.setTag(TO_TAG);
                    }
                    if (sendReliably && provisionalResponseToSend != Response.TRYING) {
                        requireHeader = protocolObjects.headerFactory.createRequireHeader("100rel");
                        response.addHeader(requireHeader);
                        Header rseqHeader = protocolObjects.headerFactory.createRSeqHeader(rseqNumber.getAndIncrement());
                        response.addHeader(rseqHeader);
                        dialog.sendReliableProvisionalResponse(response);
                    } else {
                        st.sendResponse(response);
                        eventListener.uasAfterResponse(response.getStatusCode(), appServer);
                    }
                }
            }
        if (respondWithError != null && !sendReliably) {
            Response response = protocolObjects.messageFactory.createResponse(respondWithError, request);
            response.setReasonPhrase("Unable to setup media services");
            st.sendResponse(response);
            eventListener.uasAfterResponse(response.getStatusCode(), appServer);
            return;
        }
        ContactHeader contactHeader = (ContactHeader) request.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 an INVITE !");
        }
        if (!waitForCancel) {
            Address address = null;
            if (!isIpv6)
                address = protocolObjects.addressFactory.createAddress("Shootme <sip:127.0.0.1:" + myPort + ";transport=" + protocolObjects.transport + ">");
            else
                address = protocolObjects.addressFactory.createAddress("Shootme <sip:[::1]:" + myPort + ";transport=" + protocolObjects.transport + ">");
            contactHeader = protocolObjects.headerFactory.createContactHeader(address);
            setFinalResponse(protocolObjects.messageFactory.createResponse(finalResponseToSend, request));
            if (testAckViaParam) {
                ViaHeader viaHeader = (ViaHeader) getFinalResponse().getHeader(ViaHeader.NAME);
                viaHeader.setParameter("testAckViaParam", "true");
            }
            ToHeader toHeader = (ToHeader) getFinalResponse().getHeader(ToHeader.NAME);
            if (toHeader.getTag() == null) {
                // Application is supposed to set.
                toHeader.setTag(TO_TAG);
            }
            getFinalResponse().addHeader(contactHeader);
            if (!sendReliably) {
                Thread.sleep(2000);
                st.sendResponse(getFinalResponse());
                eventListener.uasAfterResponse(getFinalResponse().getStatusCode(), appServer);
            }
        } else {
            logger.info("Waiting for CANCEL, stopping the INVITE processing ");
            return;
        }
        if (("join").equalsIgnoreCase(((SipUri) request.getRequestURI()).getUser())) {
            sendJoinMessage = true;
        }
        if (("replaces").equalsIgnoreCase(((SipUri) request.getRequestURI()).getUser())) {
            sendReplacesMessage = true;
        }
    } catch (Exception ex) {
        logger.error("unexpected exception", ex);
        throw new RuntimeException(ex);
    }
}
Also used : ContactHeader(javax.sip.header.ContactHeader) Address(javax.sip.address.Address) Request(javax.sip.message.Request) 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) 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) Dialog(javax.sip.Dialog) ReferToHeader(javax.sip.header.ReferToHeader) ToHeader(javax.sip.header.ToHeader) ServerTransaction(javax.sip.ServerTransaction) SipProvider(javax.sip.SipProvider)

Aggregations

Address (javax.sip.address.Address)24 SipURI (javax.sip.address.SipURI)22 Request (javax.sip.message.Request)12 ParseException (java.text.ParseException)11 ContactHeader (javax.sip.header.ContactHeader)9 FromHeader (javax.sip.header.FromHeader)9 SipException (javax.sip.SipException)8 ToHeader (javax.sip.header.ToHeader)8 ViaHeader (javax.sip.header.ViaHeader)8 InvalidArgumentException (javax.sip.InvalidArgumentException)7 CSeqHeader (javax.sip.header.CSeqHeader)7 CallIdHeader (javax.sip.header.CallIdHeader)7 MaxForwardsHeader (javax.sip.header.MaxForwardsHeader)7 SubscriptionStateHeader (javax.sip.header.SubscriptionStateHeader)7 InetAddress (java.net.InetAddress)6 ArrayList (java.util.ArrayList)6 ContentTypeHeader (javax.sip.header.ContentTypeHeader)6 Header (javax.sip.header.Header)6 EventHeader (javax.sip.header.EventHeader)5 ExpiresHeader (javax.sip.header.ExpiresHeader)5