jain sip registration:如何在计算MD5挑战后重新发送注册请求

时间:2014-04-27 07:41:28

标签: java sip jain-sip

我正在尝试使用JAIN-SIP对SIP服务器进行身份验证。我使用以下代码:

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());

        /*call function to calculate MD5 challege and to recreate the challenge request here */
    }

    public void processTimeout(TimeoutEvent timeoutEvent) {
    }

    public void processIOException(IOExceptionEvent exceptionEvent) {
    }

    public void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) {
    }

    public void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) {
    }
}

现在我发送了请求,然后使用processResponse(ResponseEvent responseEvent)进行回复。我还有一个类来计算MD5挑战并重新创建请求数据包,包括我在processResponse()函数内调用的授权标题。

如何将此质询请求再次发送到服务器?即使我发送了它,我如何处理回复,因为已经使用了processResponse()回调?

0 个答案:

没有答案