Search code examples
javasipjain-sip

jain sip processResponse() not getting invoked


Im trying to send SIP register request using JAIN SIP API. I've implemented javax.sip.SipListener in the class and my program successfully sends the request and even i get a 401 unauthorized response from the sip server. I have verified this using wireshark. But processResponse() is not getting called. I used a System.out.Println("response received") inside processResponse() to verify that whether its getting called and its not. Can anyone help me out why this is happening. I've burned my head a lot and not able to figure out. I've pasted my code below.

public class CoreEngine implements javax.sip.SipListener{

//public localip=Inet4Address.getLocalHost().getHostAddress();
SipFactory sipFactory = null;
SipStack sipStack = null;
Properties properties;
HeaderFactory headerFactory;
AddressFactory addressFactory;
MessageFactory messageFactory; 
SipProvider sipProvider ;
ListeningPoint lp;
ContactHeader contactHeader;
ClientTransaction inviteTid;

public void init() throws Exception {

    sipFactory = SipFactory.getInstance();
    sipFactory.setPathName("gov.nist");
     properties = new Properties();
    properties.setProperty("javax.sip.STACK_NAME", "Sip_Test");
    // Create SipStack object
    sipStack = sipFactory.createSipStack(properties);
     headerFactory = sipFactory.createHeaderFactory();
     addressFactory = sipFactory.createAddressFactory();
    messageFactory = sipFactory.createMessageFactory();
    lp = sipStack.createListeningPoint("192.168.0.205",
              5060, ListeningPoint.UDP);
    sipProvider = sipStack.createSipProvider(lp);


}

public void register() throws Exception {
    String fromName = "223344";
    String fromSipAddress = "173.194.117.84";

    String toSipAddress = "173.194.117.84";
    String toUser = "223344";
    SipURI fromAddress = addressFactory.createSipURI(fromName,
            fromSipAddress);
    System.out.println("sipuri fromaddress"+fromAddress);

    Address fromNameAddress = addressFactory.createAddress(fromAddress);
    FromHeader fromHeader = headerFactory.createFromHeader(
              fromNameAddress, null);
    SipURI toAddress = addressFactory
              .createSipURI(toUser, toSipAddress);
    Address toNameAddress = addressFactory.createAddress(toAddress);
    ToHeader toHeader = headerFactory.createToHeader(toNameAddress,
              null);

    URI requestURI = addressFactory.createURI(
              "sip:" + "173.194.117.84");
    List<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
    String ipAddress = lp.getIPAddress();
    ViaHeader viaHeader = headerFactory.createViaHeader(ipAddress,
              lp.getPort(),
              lp.getTransport(), null);

    viaHeaders.add(viaHeader);

    CallIdHeader callIdHeader = sipProvider.getNewCallId();

    CSeqHeader cSeqHeader = headerFactory.createCSeqHeader(1L,
              Request.REGISTER);

    MaxForwardsHeader maxForwards = headerFactory
              .createMaxForwardsHeader(70);

    Request request = messageFactory.createRequest(requestURI,
              Request.REGISTER, callIdHeader, cSeqHeader, fromHeader,
              toHeader, viaHeaders, maxForwards);



    SipURI contactURI = addressFactory.createSipURI(fromName, "173.194.117.84");
    contactURI.setPort(sipProvider.getListeningPoint(lp.getTransport())
              .getPort());
    Address contactAddress = addressFactory.createAddress(contactURI);

    contactHeader = headerFactory.createContactHeader(contactAddress);
    request.addHeader(contactHeader);

    Header extensionHeader = headerFactory.createHeader("Expires",
         "120");
    request.addHeader(extensionHeader);
    System.out.println("request is"+ request);
    inviteTid = sipProvider.getNewClientTransaction(request);
    inviteTid.sendRequest();

}



public void processRequest(RequestEvent requestEvent) {


}

public void processResponse(ResponseEvent responseEvent) {
    System.out.println("Response received");
    System.out.println("response event"+ responseEvent.getResponse().getStatusCode());
}

public void processTimeout(TimeoutEvent timeoutEvent) {

}

public void processIOException(IOExceptionEvent exceptionEvent) {

}

public void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) {

}

public void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) {

}

}


Solution

  • Do you have addSipListener() somewhere like this?

    sipProvider.addSipListener(listener);

    That's what makes the callbacks work. In you case the listener is the CoreEngine instance since it implements the callback interface.