Пользовательский порт SipProvider Jain SIP

На самом деле я разрабатываю SIP-приложение, используя Jain SIP, и я заметил с помощью WireShark, что на самом деле порт, который я хочу использовать в процессе инициализации объекта SipProvider, не используется для отправки запросов. Например :

public SipLayer (имя пользователя String, IP-адрес String, порт int) выдает PeerUnavailableException, TransportNotSupportedException, InvalidArgumentException, ObjectInUseException, TooManyListenersException {

    setUsername(username);
    sipFactory = SipFactory.getInstance();
    sipFactory.setPathName("gov.nist");
    Properties properties = new Properties();
    properties.setProperty("javax.sip.STACK_NAME", "MyApp");
    properties.setProperty("javax.sip.IP_ADDRESS", ip);

    properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "32");
    properties.setProperty("gov.nist.javax.sip.SERVER_LOG",
            "textclient.txt");
    properties.setProperty("gov.nist.javax.sip.DEBUG_LOG",
            "textclientdebug.log");

    sipStack = sipFactory.createSipStack(properties);
    headerFactory = sipFactory.createHeaderFactory();
    addressFactory = sipFactory.createAddressFactory();
    messageFactory = sipFactory.createMessageFactory();

    ListeningPoint tcp = sipStack.createListeningPoint(ip, port, "tcp");

    sipProvider = sipStack.createSipProvider(tcp);
    sipProvider.addSipListener(this);
}

Вот мой конструктор, в котором я инициализирую sipProvider. Я использую TCP и хочу использовать порт 5600. Итак, при отправке запроса без сохранения состояния я использую следующий код в своем методе:

sipProvider.sendRequest(request);

Делая захват, я заметил, что используемый TCP-порт — это не 5600, который я выбрал, а, например, что-то вроде 52065.

Может кто-нибудь, пожалуйста, скажите мне, как я могу заставить объект sipProvider использовать мой TCP-порт 5600, пожалуйста?

Спасибо за вашу помощь :)


person Ronnie Pottayya    schedule 17.07.2014    source источник


Ответы (1)


Это ограничение ОС/Java/TCP. Это возможно, но это не работает на большинстве машин, поэтому JAIN-SIP использует эфемерные порты, как и большинство других SIP-устройств. См. этот ответ https://serverfault.com/questions/326819/does-the-tcp-source-port-have-to-be-unique-per-host

person Vladimir Ralev    schedule 17.07.2014
comment
Что вы подразумеваете под ограничением TCP? Я имею в виду, что в Java я могу создать сокет TCP, указав свой InetAddress и номер порта. Этот сокет я могу связать с удаленным адресом вместе с удаленным портом, и нет проблем. Что ж, с Jain SIP это именно то, что я хочу, я хочу иметь возможность отправлять запросы и получать ответы на заданный порт. Предоставленный мной порт на самом деле используется и прослушивается, но при отправке запросов этот порт не будет использоваться :( Почему? И как я могу заставить sipProvider использовать только предоставленный мной порт, а не создавать другой? - person Ronnie Pottayya; 21.07.2014
comment
Проверьте ссылку, которую я дал выше. Если вы считаете, что это будет работать в вашей системе, вы можете попробовать изменить код. Он не работает на большинстве систем. Если последние версии Java/ОС не исправили это, то есть... - person Vladimir Ralev; 21.07.2014