Search in sources :

Example 11 with ContactHeader

use of javax.sip.header.ContactHeader in project Spark by igniterealtime.

the class RegisterProcessing method subscribe.

/**
 * Synchronize because of timer tasks
 *
 * @throws CommunicationsException
 */
synchronized void subscribe(String registrarAddress, int registrarPort, String registrarTransport) throws CommunicationsException {
    FromHeader fromHeader = sipManCallback.getFromHeader(true);
    Address fromAddress = fromHeader.getAddress();
    // Request URI
    URI requestURI = null;
    try {
        requestURI = sipManCallback.addressFactory.createSipURI(sipManCallback.getCurrentUsername(), registrarAddress);
    } catch (ParseException e) {
        Log.error(e);
    }
    // Call ID Header
    CallIdHeader callIdHeader = sipManCallback.sipProvider.getNewCallId();
    // CSeq Header
    CSeqHeader cSeqHeader = null;
    try {
        cSeqHeader = sipManCallback.headerFactory.createCSeqHeader((long) 1, Request.SUBSCRIBE);
    } catch (ParseException ex) {
        // Should never happen
        Log.error("register", ex);
    } catch (InvalidArgumentException ex) {
        // Should never happen
        Log.error("register", ex);
    }
    // To Header
    ToHeader toHeader = null;
    try {
        toHeader = sipManCallback.headerFactory.createToHeader(fromAddress, null);
    } catch (ParseException ex) {
        // throw was missing - reported by Eero Vaarnas
        throw new CommunicationsException("Could not create a To header " + "for address:" + fromHeader.getAddress(), ex);
    }
    // User Agent Header
    UserAgentHeader uaHeader = null;
    ArrayList<String> userAgentList = new ArrayList<String>();
    userAgentList.add(SoftPhoneManager.userAgent);
    try {
        uaHeader = sipManCallback.headerFactory.createUserAgentHeader(userAgentList);
    } catch (ParseException ex) {
        // throw was missing - reported by Eero Vaarnas
        throw new CommunicationsException("Could not create a To header " + "for address:" + fromHeader.getAddress(), ex);
    }
    // Via Headers
    ArrayList<ViaHeader> viaHeaders = sipManCallback.getLocalViaHeaders();
    // MaxForwardsHeader
    MaxForwardsHeader maxForwardsHeader = sipManCallback.getMaxForwardsHeader();
    // Request
    Request request = null;
    try {
        request = sipManCallback.messageFactory.createRequest(requestURI, Request.SUBSCRIBE, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwardsHeader);
        request.setHeader(uaHeader);
    } catch (ParseException ex) {
        throw new CommunicationsException("Could not create the register request!", ex);
    }
    // Expires Header
    ExpiresHeader expHeader = null;
    try {
        expHeader = sipManCallback.headerFactory.createExpiresHeader(3000);
    } catch (InvalidArgumentException ex) {
    }
    request.addHeader(expHeader);
    try {
        EventHeader event = sipManCallback.headerFactory.createEventHeader("message-summary");
        request.addHeader(event);
    } catch (ParseException e) {
        Log.error(e);
    }
    // Contact Header should contain IP - bug report - Eero Vaarnas
    ContactHeader contactHeader = sipManCallback.getRegistrationContactHeader();
    request.addHeader(contactHeader);
    AllowHeader allow = null;
    try {
        allow = sipManCallback.headerFactory.createAllowHeader("INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO");
        request.addHeader(allow);
    } catch (ParseException e) {
        Log.error(e);
    }
    // Transaction
    ClientTransaction regTrans = null;
    try {
        regTrans = sipManCallback.sipProvider.getNewClientTransaction(request);
    } catch (TransactionUnavailableException ex) {
        throw new CommunicationsException("Could not create a register transaction!\n" + "Check that the Registrar address is correct!");
    }
    try {
        regTrans.sendRequest();
    }// we sometimes get a null pointer exception here so catch them all
     catch (Exception ex) {
        // throw was missing - reported by Eero Vaarnas
        throw new CommunicationsException("Could not send out the register request!", ex);
    }
}
Also used : MaxForwardsHeader(javax.sip.header.MaxForwardsHeader) ContactHeader(javax.sip.header.ContactHeader) Address(javax.sip.address.Address) FromHeader(javax.sip.header.FromHeader) ClientTransaction(javax.sip.ClientTransaction) ArrayList(java.util.ArrayList) Request(javax.sip.message.Request) EventHeader(javax.sip.header.EventHeader) URI(javax.sip.address.URI) SipURI(javax.sip.address.SipURI) SipSecurityException(net.java.sipmack.sip.security.SipSecurityException) InvalidArgumentException(javax.sip.InvalidArgumentException) ParseException(java.text.ParseException) SipException(javax.sip.SipException) TransactionUnavailableException(javax.sip.TransactionUnavailableException) CSeqHeader(javax.sip.header.CSeqHeader) InvalidArgumentException(javax.sip.InvalidArgumentException) UserAgentHeader(javax.sip.header.UserAgentHeader) ViaHeader(javax.sip.header.ViaHeader) ToHeader(javax.sip.header.ToHeader) CallIdHeader(javax.sip.header.CallIdHeader) TransactionUnavailableException(javax.sip.TransactionUnavailableException) ParseException(java.text.ParseException) ExpiresHeader(javax.sip.header.ExpiresHeader) AllowHeader(javax.sip.header.AllowHeader)

Example 12 with ContactHeader

use of javax.sip.header.ContactHeader in project Spark by igniterealtime.

the class SipManager method processRequest.

// error occurred
// ============================= SIP LISTENER METHODS ==============================
public void processRequest(RequestEvent requestReceivedEvent) {
    Log.debug(requestReceivedEvent.getRequest().toString());
    ServerTransaction serverTransaction = requestReceivedEvent.getServerTransaction();
    Request request = requestReceivedEvent.getRequest();
    if (serverTransaction == null) {
        try {
            serverTransaction = sipProvider.getNewServerTransaction(request);
        } catch (TransactionAlreadyExistsException ex) {
            return;
        } catch (TransactionUnavailableException ex) {
            return;
        }
    }
    Dialog dialog = serverTransaction.getDialog();
    if (request.getMethod().equals(Request.NOTIFY)) {
        Response ok = null;
        try {
            ok = messageFactory.createResponse(Response.OK, request);
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
        ContactHeader contactHeader = null;
        try {
            contactHeader = getContactHeader();
            ok.addHeader(contactHeader);
            attachToTag(ok, dialog);
            System.err.println(ok.toString());
            serverTransaction.sendResponse(ok);
        } catch (CommunicationsException e) {
            e.printStackTrace();
        } catch (InvalidArgumentException e) {
            e.printStackTrace();
        } catch (SipException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        fireMessageReceived(request);
        return;
    }
    // TODO REMOVE
    @SuppressWarnings("unused") Request requestClone = (Request) request.clone();
    // INVITE
    if (request.getMethod().equals(Request.INVITE)) {
        if (serverTransaction.getDialog().getState() == null) {
            callProcessing.processInvite(serverTransaction, request);
        } else {
            callProcessing.processReInvite(serverTransaction, request);
        }
    } else // ACK
    if (request.getMethod().equals(Request.ACK)) {
        if (serverTransaction != null && serverTransaction.getDialog().getFirstTransaction().getRequest().getMethod().equals(Request.INVITE)) {
            callProcessing.processAck(serverTransaction, request);
        } else {
        // just ignore
        }
    } else // BYE
    if (request.getMethod().equals(Request.BYE)) {
        if (dialog.getFirstTransaction().getRequest().getMethod().equals(Request.INVITE) || dialog.getFirstTransaction().getRequest().getMethod().equals(Request.REFER)) {
            callProcessing.processBye(serverTransaction, request);
        }
    } else // CANCEL
    if (request.getMethod().equals(Request.CANCEL)) {
        if (dialog.getFirstTransaction().getRequest().getMethod().equals(Request.INVITE)) {
            callProcessing.processCancel(serverTransaction, request);
        } else {
            sendNotImplemented(serverTransaction, request);
            fireUnknownMessageReceived(requestReceivedEvent.getRequest());
        }
    } else // REFER
    if (request.getMethod().equals(Request.REFER)) {
        transferProcessing.processRefer(serverTransaction, request);
    } else if (request.getMethod().equals(Request.INFO)) {
        /**
         * @todo add proper request handling
         */
        fireMessageReceived(request);
    } else if (request.getMethod().equals(Request.MESSAGE)) {
        messageProcessing.processMessageRequest(serverTransaction, request);
        fireMessageReceived(request);
    } else if (request.getMethod().equals(Request.OPTIONS)) {
        /**
         * @todo add proper request handling
         */
        sendNotImplemented(serverTransaction, request);
        fireUnknownMessageReceived(requestReceivedEvent.getRequest());
    } else if (request.getMethod().equals(Request.PRACK)) {
        /**
         * @todo add proper request handling
         */
        sendNotImplemented(serverTransaction, request);
        fireUnknownMessageReceived(requestReceivedEvent.getRequest());
    } else if (request.getMethod().equals(Request.REGISTER)) {
        /**
         * @todo add proper request handling
         */
        sendNotImplemented(serverTransaction, request);
        fireUnknownMessageReceived(requestReceivedEvent.getRequest());
    } else if (request.getMethod().equals(Request.SUBSCRIBE)) {
    } else if (request.getMethod().equals(Request.UPDATE)) {
        /**
         * @todo add proper request handling
         */
        sendNotImplemented(serverTransaction, request);
        fireUnknownMessageReceived(requestReceivedEvent.getRequest());
    } else if (request.getMethod().equals(Request.INFO)) {
        sendNotImplemented(serverTransaction, request);
        fireUnknownMessageReceived(requestReceivedEvent.getRequest());
    } else {
        // We couldn't recognise the message
        sendNotImplemented(serverTransaction, request);
        fireUnknownMessageReceived(requestReceivedEvent.getRequest());
    }
}
Also used : ContactHeader(javax.sip.header.ContactHeader) Request(javax.sip.message.Request) InvalidArgumentException(javax.sip.InvalidArgumentException) ParseException(java.text.ParseException) TransportNotSupportedException(javax.sip.TransportNotSupportedException) ObjectInUseException(javax.sip.ObjectInUseException) TransactionAlreadyExistsException(javax.sip.TransactionAlreadyExistsException) PeerUnavailableException(javax.sip.PeerUnavailableException) TooManyListenersException(java.util.TooManyListenersException) SipException(javax.sip.SipException) TransactionUnavailableException(javax.sip.TransactionUnavailableException) Response(javax.sip.message.Response) InvalidArgumentException(javax.sip.InvalidArgumentException) Dialog(javax.sip.Dialog) TransactionAlreadyExistsException(javax.sip.TransactionAlreadyExistsException) TransactionUnavailableException(javax.sip.TransactionUnavailableException) ParseException(java.text.ParseException) ServerTransaction(javax.sip.ServerTransaction) SipException(javax.sip.SipException)

Example 13 with ContactHeader

use of javax.sip.header.ContactHeader in project Spark by igniterealtime.

the class CallProcessing method sayOK.

// busy here
// ------------------ say ok
public void sayOK(int callID, String sdpContent) throws CommunicationsException {
    Call call = callDispatcher.getCall(callID);
    if (call == null) {
        throw new CommunicationsException("Failed to find call with id=" + callID);
    }
    if (!call.isIncoming())
        return;
    Dialog dialog = call.getDialog();
    if (dialog == null) {
        call.setState(Call.DISCONNECTED);
        throw new CommunicationsException("Failed to extract call's associated dialog! Ending Call!");
    }
    Transaction transaction = dialog.getFirstTransaction();
    if (transaction == null || !dialog.isServer()) {
        call.setState(Call.DISCONNECTED);
        throw new CommunicationsException("Failed to extract a ServerTransaction " + "from the call's associated dialog!");
    }
    ServerTransaction serverTransaction = (ServerTransaction) transaction;
    Response ok = null;
    try {
        ok = sipManCallback.messageFactory.createResponse(Response.OK, dialog.getFirstTransaction().getRequest());
        sipManCallback.attachToTag(ok, dialog);
    } catch (ParseException ex) {
        call.setState(Call.DISCONNECTED);
        throw new CommunicationsException("Failed to construct an OK response to an INVITE request", ex);
    }
    // Content
    ContentTypeHeader contentTypeHeader = null;
    try {
        // content type should be application/sdp (not applications)
        // reported by Oleg Shevchenko (Miratech)
        contentTypeHeader = sipManCallback.headerFactory.createContentTypeHeader("application", "sdp");
    } catch (ParseException ex) {
        // Shouldn't happen
        call.setState(Call.DISCONNECTED);
        throw new CommunicationsException("Failed to create a content type header for the OK request", ex);
    }
    try {
        ok.setContent(sdpContent, contentTypeHeader);
    } catch (NullPointerException ex) {
        call.setState(Call.DISCONNECTED);
        throw new CommunicationsException("No sdp data was provided for the ok response to an INVITE request!", ex);
    } catch (ParseException ex) {
        call.setState(Call.DISCONNECTED);
        throw new CommunicationsException("Failed to parse sdp data while creating invite request!", ex);
    }
    // and should probably be removed
    if (((ToHeader) ok.getHeader(ToHeader.NAME)).getTag() == null) {
        try {
            ((ToHeader) ok.getHeader(ToHeader.NAME)).setTag(Integer.toString(dialog.hashCode()));
        } catch (ParseException ex) {
            call.setState(Call.DISCONNECTED);
            throw new CommunicationsException("Unable to set to tag", ex);
        }
    }
    ContactHeader contactHeader = sipManCallback.getContactHeader();
    ok.addHeader(contactHeader);
    try {
        serverTransaction.sendResponse(ok);
    } catch (SipException ex) {
        call.setState(Call.DISCONNECTED);
        throw new CommunicationsException("Failed to send an OK response to an INVITE request", ex);
    } catch (InvalidArgumentException e) {
        call.setState(Call.DISCONNECTED);
        sipManCallback.fireCommunicationsError(new CommunicationsException("Failed to send a NOT_FOUND response to an INVITE request!", e));
    }
}
Also used : ContactHeader(javax.sip.header.ContactHeader) ContentTypeHeader(javax.sip.header.ContentTypeHeader) Response(javax.sip.message.Response) InvalidArgumentException(javax.sip.InvalidArgumentException) ServerTransaction(javax.sip.ServerTransaction) Transaction(javax.sip.Transaction) ClientTransaction(javax.sip.ClientTransaction) Dialog(javax.sip.Dialog) ToHeader(javax.sip.header.ToHeader) ParseException(java.text.ParseException) ServerTransaction(javax.sip.ServerTransaction) SipException(javax.sip.SipException)

Example 14 with ContactHeader

use of javax.sip.header.ContactHeader in project jain-sip.ha by RestComm.

the class SIPDialogCacheData method updateDialogMetaData.

/**
 * Update the haSipDialog passed in param with the dialogMetaData and app meta data
 * @param dialogMetaData
 * @param dialogAppData
 * @param haSipDialog
 * @throws ParseException
 * @throws PeerUnavailableException
 */
private void updateDialogMetaData(Map<String, Object> dialogMetaData, Object dialogAppData, HASipDialog haSipDialog, boolean recreation) throws ParseException, PeerUnavailableException {
    haSipDialog.setMetaDataToReplicate(dialogMetaData, recreation);
    haSipDialog.setApplicationDataToReplicate(dialogAppData);
    final String contactStringified = (String) dialogMetaData.get(AbstractHASipDialog.CONTACT_HEADER);
    if (clusteredlogger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
        clusteredlogger.logDebug("contactStringified " + contactStringified);
    }
    if (contactStringified != null) {
        Address contactAddress = SipFactory.getInstance().createAddressFactory().createAddress(contactStringified);
        ContactHeader contactHeader = SipFactory.getInstance().createHeaderFactory().createContactHeader(contactAddress);
        if (clusteredlogger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
            clusteredlogger.logDebug("contactHeader " + contactHeader);
            clusteredlogger.logDebug("contactURI " + contactHeader.getAddress().getURI());
        }
        haSipDialog.setContactHeader(contactHeader);
    }
}
Also used : ContactHeader(javax.sip.header.ContactHeader) Address(javax.sip.address.Address)

Example 15 with ContactHeader

use of javax.sip.header.ContactHeader in project jain-sip.ha by RestComm.

the class SIPDialogCacheData method updateDialogMetaData.

/**
 * Update the haSipDialog passed in param with the dialogMetaData and app meta data
 * @param dialogMetaData
 * @param dialogAppData
 * @param haSipDialog
 * @throws ParseException
 * @throws PeerUnavailableException
 */
private void updateDialogMetaData(Map<String, Object> dialogMetaData, Object dialogAppData, HASipDialog haSipDialog, boolean recreation) throws ParseException, PeerUnavailableException {
    haSipDialog.setMetaDataToReplicate(dialogMetaData, recreation);
    haSipDialog.setApplicationDataToReplicate(dialogAppData);
    final String contactStringified = (String) dialogMetaData.get(AbstractHASipDialog.CONTACT_HEADER);
    if (clusteredlogger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
        clusteredlogger.logDebug("contactStringified " + contactStringified);
    }
    if (contactStringified != null) {
        Address contactAddress = SipFactory.getInstance().createAddressFactory().createAddress(contactStringified);
        ContactHeader contactHeader = SipFactory.getInstance().createHeaderFactory().createContactHeader(contactAddress);
        if (clusteredlogger.isLoggingEnabled(StackLogger.TRACE_DEBUG)) {
            clusteredlogger.logDebug("contactHeader " + contactHeader);
            clusteredlogger.logDebug("contactURI " + contactHeader.getAddress().getURI());
        }
        haSipDialog.setContactHeader(contactHeader);
    }
}
Also used : ContactHeader(javax.sip.header.ContactHeader) Address(javax.sip.address.Address)

Aggregations

ContactHeader (javax.sip.header.ContactHeader)30 ParseException (java.text.ParseException)20 SipURI (javax.sip.address.SipURI)19 InvalidArgumentException (javax.sip.InvalidArgumentException)18 SipException (javax.sip.SipException)18 Request (javax.sip.message.Request)18 Address (javax.sip.address.Address)17 ToHeader (javax.sip.header.ToHeader)16 ViaHeader (javax.sip.header.ViaHeader)16 FromHeader (javax.sip.header.FromHeader)15 CallIdHeader (javax.sip.header.CallIdHeader)13 MaxForwardsHeader (javax.sip.header.MaxForwardsHeader)13 Response (javax.sip.message.Response)12 TransactionUnavailableException (javax.sip.TransactionUnavailableException)11 CSeqHeader (javax.sip.header.CSeqHeader)11 ClientTransaction (javax.sip.ClientTransaction)10 ContentTypeHeader (javax.sip.header.ContentTypeHeader)9 ExpiresHeader (javax.sip.header.ExpiresHeader)9 Header (javax.sip.header.Header)9 ArrayList (java.util.ArrayList)8