Search in sources :

Example 1 with UserAgentHeader

use of javax.sip.header.UserAgentHeader 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 2 with UserAgentHeader

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

the class RegisterProcessing method register.

synchronized void register(String registrarAddress, int registrarPort, String registrarTransport, int expires) throws CommunicationsException {
    try {
        isUnregistering = false;
        // From
        FromHeader fromHeader = sipManCallback.getFromHeader(true);
        Address fromAddress = fromHeader.getAddress();
        sipManCallback.fireRegistering(fromAddress.toString());
        // Request URI
        SipURI requestURI = null;
        try {
            requestURI = sipManCallback.addressFactory.createSipURI(null, registrarAddress);
        } catch (ParseException ex) {
            throw new CommunicationsException("Bad registrar address:" + registrarAddress, ex);
        } catch (NullPointerException ex) {
            // Do not throw an exc, we should rather silently notify the
            // user
            // throw new CommunicationsException("A registrar address was
            // not specified!", ex);
            sipManCallback.fireUnregistered(fromAddress.getURI().toString() + " (registrar not specified)");
            return;
        }
        /*
            requestURI.setPort(registrarPort);
            try {
                requestURI.setTransportParam(registrarTransport);
            }
            catch (ParseException ex) {
                throw new CommunicationsException(registrarTransport
                        + " is not a valid transport!", ex);
            }
            */
        // Call ID Header
        CallIdHeader callIdHeader = sipManCallback.sipProvider.getNewCallId();
        // CSeq Header
        CSeqHeader cSeqHeader = null;
        try {
            cSeqHeader = sipManCallback.headerFactory.createCSeqHeader((long) 1, Request.REGISTER);
        } 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.REGISTER, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwardsHeader);
            request.setHeader(uaHeader);
        } catch (ParseException ex) {
            // throw was missing - reported by Eero Vaarnas
            throw new CommunicationsException("Could not create the register request!", ex);
        }
        // Expires Header
        ExpiresHeader expHeader = null;
        for (int retry = 0; retry < 2; retry++) {
            try {
                expHeader = sipManCallback.headerFactory.createExpiresHeader(expires);
            } catch (InvalidArgumentException ex) {
                if (retry == 0) {
                    expires = 3600;
                    continue;
                }
                throw new CommunicationsException("Invalid registrations expiration parameter - " + expires, ex);
            }
        }
        request.addHeader(expHeader);
        // Contact Header should contain IP - bug report - Eero Vaarnas
        ContactHeader contactHeader = sipManCallback.getRegistrationContactHeader();
        request.addHeader(contactHeader);
        AllowHeader allow = sipManCallback.headerFactory.createAllowHeader("INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO");
        request.addHeader(allow);
        // 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);
        }
        this.registerRequest = request;
    } catch (Exception e) {
        Log.error("register", e);
        sipManCallback.fireRegistrationFailed(registrarAddress == null ? "" : registrarAddress, RegistrationEvent.Type.TimeOut);
    }
}
Also used : MaxForwardsHeader(javax.sip.header.MaxForwardsHeader) Address(javax.sip.address.Address) ArrayList(java.util.ArrayList) SipURI(javax.sip.address.SipURI) InvalidArgumentException(javax.sip.InvalidArgumentException) UserAgentHeader(javax.sip.header.UserAgentHeader) ToHeader(javax.sip.header.ToHeader) CallIdHeader(javax.sip.header.CallIdHeader) ExpiresHeader(javax.sip.header.ExpiresHeader) ContactHeader(javax.sip.header.ContactHeader) FromHeader(javax.sip.header.FromHeader) ClientTransaction(javax.sip.ClientTransaction) Request(javax.sip.message.Request) 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) ViaHeader(javax.sip.header.ViaHeader) TransactionUnavailableException(javax.sip.TransactionUnavailableException) ParseException(java.text.ParseException) AllowHeader(javax.sip.header.AllowHeader)

Aggregations

ParseException (java.text.ParseException)2 ArrayList (java.util.ArrayList)2 ClientTransaction (javax.sip.ClientTransaction)2 InvalidArgumentException (javax.sip.InvalidArgumentException)2 SipException (javax.sip.SipException)2 TransactionUnavailableException (javax.sip.TransactionUnavailableException)2 Address (javax.sip.address.Address)2 SipURI (javax.sip.address.SipURI)2 AllowHeader (javax.sip.header.AllowHeader)2 CSeqHeader (javax.sip.header.CSeqHeader)2 CallIdHeader (javax.sip.header.CallIdHeader)2 ContactHeader (javax.sip.header.ContactHeader)2 ExpiresHeader (javax.sip.header.ExpiresHeader)2 FromHeader (javax.sip.header.FromHeader)2 MaxForwardsHeader (javax.sip.header.MaxForwardsHeader)2 ToHeader (javax.sip.header.ToHeader)2 UserAgentHeader (javax.sip.header.UserAgentHeader)2 ViaHeader (javax.sip.header.ViaHeader)2 Request (javax.sip.message.Request)2 SipSecurityException (net.java.sipmack.sip.security.SipSecurityException)2