Ошибка отправки SIP-запроса с использованием NIST JAIN SIP API - PullRequest
0 голосов
/ 06 апреля 2011

Я пытаюсь отправить запрос REGISTER SIP, используя реализацию NIST API JAIN SIP.

Сначала я даю объявления членов данных моего класса SipController:

private int port;
private long cseq = Math.abs(numberGenerator.nextInt());
private MessageFactory messageFactory;
private AddressFactory addressFactory;
private HeaderFactory headerFactory;
private SipStack sipStack;
private SipProvider sipProvider;

А вот код, который отправляет запрос:

public void register(String aor,String serverAddress) throws ParseException,InvalidArgumentException,SipException  
    {  
        Address addressOfRecordObj = addressFactory.createAddress(aor);  
        ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(1);  
        try  
        {  
            viaHeaders.add(headerFactory.createViaHeader(InetAddress.getLocalHost().getHostAddress(),port,"udp",getNewBranch()));  
        }  
        catch (UnknownHostException e)  
        {  
            e.printStackTrace();  
        }  
        Request request = messageFactory.createRequest(  
                ....addressFactory.createURI(serverAddress),  
                ...."REGISTER",sipProvider.getNewCallId(),  
                ....headerFactory.createCSeqHeader(cseq++,"REGISTER"),  
                ....headerFactory.createFromHeader(addressOfRecordObj,Integer.toString(Math.abs(numberGenerator.nextInt()))),  
                ....headerFactory.createToHeader(addressOfRecordObj,null),  
                ....viaHeaders,  
                ....headerFactory.createMaxForwardsHeader(70));  
        request.addHeader(headerFactory.createContactHeader(addressFactory.createAddress("sip:127.0.0.1:"+port)));  
        log(">> "+request);  
        sipProvider.sendRequest(request);  
}

Я вызываю этот метод, используя оператор

sipController.register("sip:user@domain.com","sip:127.0.0.1:5061");

Значение порта члена данных - 5060.

Я пытаюсь отправить запрос другому приложению, работающему на моем компьютере, которое прослушивает порт 5061. Это приложение - еще один экземпляр той же программы, с которой я отправляю запрос.

Когда я вызываю метод sendRequest () класса SipProvider, я получаю исключение javax.sip.SipException с сообщением «Возникла исключительная ситуация ввода-вывода при отправке запроса».Это исключение содержит java.net.BindException в качестве причины возникновения с сообщением «Невозможно назначить запрошенный адрес: отправка дейтаграммы не удалась».

Вот трассировка стека:

javax.sip.SipException: IO Exception occured while Sending Request
    at gov.nist.javax.sip.SipProviderImpl.sendRequest(SipProviderImpl.java:723)
    at siptest.SipController.register(SipController.java:133)
    at siptest.SipTestGuiFrontend$SendButtonListener.actionPerformed(SipTestGuiFrontend.java:213)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.net.BindException: Cannot assign requested address: Datagram send failed
    at java.net.PlainDatagramSocketImpl.send(Native Method)
    at java.net.DatagramSocket.send(Unknown Source)
    at gov.nist.javax.sip.stack.UDPMessageChannel.sendMessage(UDPMessageChannel.java:743)
    at gov.nist.javax.sip.stack.MessageChannel.sendMessage(MessageChannel.java:242)
    at gov.nist.javax.sip.SipProviderImpl.sendRequest(SipProviderImpl.java:712)
    ... 38 more

Любые идеи о том, чтоЯ делаю не так?

1 Ответ

0 голосов
/ 29 апреля 2011

Для справки, я решил эту проблему. Это было некоторое время назад, поэтому я точно не помню, что было не так, но, очевидно, я использовал неправильный файл .jar для реализации NIST.

...