Question

I'm currently using Jain Sip on Android and I'm trying to get a SIP registration working.

I can put the registration SIP message together ok but after sending the message it seems to just get sent back to my application and my applications processRequest() method is run.

Here is the code I'm using :

 public void init(TextView tv) throws Exception {
    SipFactory sipFactory = null;
    sipStack = null;
    sipFactory = SipFactory.getInstance();
    sipFactory.setPathName("gov.nist");
    Properties properties = new Properties();
    properties.setProperty("javax.sip.OUTBOUND_PROXY", getLocalIpAddress()+":8002" + "/"
            + ListeningPoint.UDP);
    properties.setProperty("javax.sip.STACK_NAME", "Sip Test");
    // Create SipStack object
    sipStack = sipFactory.createSipStack(properties);
    tv.setText("sipStack = " + sipStack);
    headerFactory = sipFactory.createHeaderFactory();
    addressFactory = sipFactory.createAddressFactory();
    messageFactory = sipFactory.createMessageFactory();
    lp = sipStack.createListeningPoint(getLocalIpAddress(),
            8002, ListeningPoint.UDP);


    sipProvider = sipStack.createSipProvider(lp);
    sipOnOffFlag = true;
    tv.append("\n jain sip stack started on " + getLocalIpAddress() + ":" + myPort + "/" + ListeningPoint.UDP);
    sipProvider.addSipListener(this);   


    String fromName = "019078020";
    String fromSipAddress = "216.234.148.28";
    String fromDisplayName = "Donal";

    String toSipAddress = "216.234.148.28";
    String toUser = "16784732970";
    String toDisplayName = "Server";

    // create >From Header
    SipURI fromAddress = addressFactory.createSipURI(fromName,
            getLocalIpAddress());

    Address fromNameAddress = addressFactory.createAddress(fromAddress);
    fromNameAddress.setDisplayName(fromDisplayName);
    FromHeader fromHeader = headerFactory.createFromHeader(
            fromNameAddress, null);

    // 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,
            "216.234.148.28");

    // Create ViaHeaders

    List<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
    String ipAddress = lp.getIPAddress();
    ViaHeader viaHeader = headerFactory.createViaHeader(ipAddress,
            lp.getPort(),
            lp.getTransport(), 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.REGISTER);

    // Create a new MaxForwardsHeader
    MaxForwardsHeader maxForwards = headerFactory
            .createMaxForwardsHeader(70);

    // Create the request.
    Request request = messageFactory.createRequest(requestURI,
            Request.REGISTER, callIdHeader, cSeqHeader, fromHeader,
            toHeader, viaHeaders, maxForwards);
    // Create contact headers

    SipURI contactUrl = addressFactory.createSipURI(fromName, getLocalIpAddress());
    contactUrl.setPort(8002);
    contactUrl.setLrParam();

    // Create the contact name address.
    SipURI contactURI = addressFactory.createSipURI(fromName, getLocalIpAddress());
    contactURI.setPort(sipProvider.getListeningPoint(lp.getTransport())
            .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("Expires",
        "0");
    request.addHeader(extensionHeader);


    Log.d("SIP", "" + request.toString());
    // Create the client transaction.
    registerTid = sipProvider.getNewClientTransaction(request);

    // send the request out.
    registerTid.sendRequest();

    dialog = registerTid.getDialog();
}

So the message gets built ok but when sendRequest() is run it doesn't appear to get sent to the server but rather back to my application and the applications processRequest method is run.

Should I be doing something extra with inviteTid or the dialog?

Do I need to create a socket or something to sent the request out?

Was it helpful?

Solution

Using this code

// create Request URI
SipURI requestURI = addressFactory.createSipURI(toUser,
        "216.234.148.28");

Your SIP message URI will look like

REGISTER sip:216.234.148.28 SIP/2.0

Now "216.234.148.28" is the destination IP address (where your request will be sent).

From the lines

String fromName = "019078020";
String fromSipAddress = "216.234.148.28";
String fromDisplayName = "Donal";

It looks like "216.234.148.28" is your ip address. So you are source and target both. Try to get pcap of your system or print this value.

OTHER TIPS

It might occur due to your request URI. Your request URI has the same value as your from URI. May be the IP address you stated is your local address. Try to provide a remote IP address which is listening to SIP on port 5060.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top