Restcomm sip-сервлеты не пересылают запрос INVITE
Я пытаюсь сделать простое приложение B2BUA, используя sip-сервлеты Mobicents/Restcomm. Сначала он должен получить сообщение INVITE, изменить R-URI и отправить новый запрос - в основном переадресация вызова.
Проблема, с которой я столкнулся, заключается в том, что при использовании URI с именем домена вместо IP я получаю следующую ошибку:
Unexpected exception while processing message INVITE sip:dispatcher@kam.ims SIP/2.0
...........
org.mobicents.servlet.sip.core.DispatcherException: An unexpected IO exception occured while routing the following initial request INVITE sip:dispatcher@kam.ims SIP/2.0
at org.mobicents.servlet.sip.core.dispatchers.InitialRequestDispatcher$InitialDispatchTask.dispatch(InitialRequestDispatcher.java:753) [sip-servlets-impl-3.1.633.jar:3.1.633]
at org.mobicents.servlet.sip.core.dispatchers.DispatchTask.dispatchAndHandleExceptions(DispatchTask.java:58) [sip-servlets-impl-3.1.633.jar:3.1.633]
at org.mobicents.servlet.sip.core.dispatchers.InitialRequestDispatcher.dispatchInsideContainer(InitialRequestDispatcher.java:451) [sip-servlets-impl-3.1.633.jar:3.1.633]
at org.mobicents.servlet.sip.core.dispatchers.InitialRequestDispatcher.dispatchMessage(InitialRequestDispatcher.java:306) [sip-servlets-impl-3.1.633.jar:3.1.633]
at org.mobicents.servlet.sip.core.SipApplicationDispatcherImpl.processRequest(SipApplicationDispatcherImpl.java:841) [sip-servlets-impl-3.1.633.jar:3.1.633]
at gov.nist.javax.sip.EventScanner.deliverEvent(EventScanner.java:230) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.SipProviderImpl.handleEvent(SipProviderImpl.java:185) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.DialogFilter.processRequest(DialogFilter.java:1324) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.stack.SIPServerTransactionImpl.processRequest(SIPServerTransactionImpl.java:807) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.stack.UDPMessageChannel.processMessage(UDPMessageChannel.java:560) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.stack.UDPMessageChannel.processIncomingDataPacket(UDPMessageChannel.java:512) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.stack.UDPMessageChannel.run(UDPMessageChannel.java:317) [jain-sip-ri-1.2.242.jar:1.2.242]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_95]
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) [rt.jar:1.7.0_95]
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:744) [rt.jar:1.7.0_95]
at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:117) [rt.jar:1.7.0_95]
at gov.nist.javax.sip.stack.NioTcpMessageProcessor.initiateConnection(NioTcpMessageProcessor.java:96) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.stack.NioTcpMessageProcessor.blockingConnect(NioTcpMessageProcessor.java:109) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.stack.NIOHandler.createOrReuseSocket(NIOHandler.java:408) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.stack.NioTcpMessageChannel.<init>(NioTcpMessageChannel.java:192) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.stack.NioTcpMessageProcessor.createMessageChannel(NioTcpMessageProcessor.java:394) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.stack.SIPTransactionStack.createMessageChannel(SIPTransactionStack.java:1716) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.SipProviderImpl.createClientTransaction(SipProviderImpl.java:389) [jain-sip-ri-1.2.242.jar:1.2.242]
at gov.nist.javax.sip.SipProviderImpl.getNewClientTransaction(SipProviderImpl.java:455) [jain-sip-ri-1.2.242.jar:1.2.242]
at org.mobicents.servlet.sip.message.SipServletRequestImpl.send(SipServletRequestImpl.java:1213) [sip-servlets-impl-3.1.633.jar:3.1.633]
at org.mobicents.servlet.sip.message.SipServletRequestImpl.send(SipServletRequestImpl.java:1009) [sip-servlets-impl-3.1.633.jar:3.1.633]
at com.mycompany.app.FunctionalAddressingServlet.doInvite(FunctionalAddressingServlet.java:100)
at javax.servlet.sip.SipServlet.doRequest(SipServlet.java:231) [sip-servlets-spec-3.1.633.jar:3.1.633]
at javax.servlet.sip.SipServlet.service(SipServlet.java:328) [sip-servlets-spec-3.1.633.jar:3.1.633]
at org.mobicents.servlet.sip.core.dispatchers.MessageDispatcher.callServlet(MessageDispatcher.java:369) [sip-servlets-impl-3.1.633.jar:3.1.633]
at org.mobicents.servlet.sip.core.dispatchers.InitialRequestDispatcher$InitialDispatchTask.dispatch(InitialRequestDispatcher.java:746) [sip-servlets-impl-3.1.633.jar:3.1.633]
... 12 more
это doInvite()
protected void doInvite(SipServletRequest request) throws ServletException, IOException {
B2buaHelper b2buaHelper = request.getB2buaHelper();
SipSession session = request.getSession();
Map<String, List<String>> headerMap = new HashMap<String, List<String>>();
SipFactory sipFactory = (SipFactory) getServletContext().getAttribute(SIP_FACTORY);
SipURI destination = (SipURI) sipFactory.createURI("sip:bob@kam.ims");
SipServletRequest forkedRequest = b2buaHelper.createRequest(request, true, headerMap);
forkedRequest.setRequestURI(destination);
forkedRequest.getSession().setAttribute("originalRequest", request);
forkedRequest.send();
}
Может быть, приложение не может разрешить доменное имя? Если да, есть ли какая-то конкретная конфигурация, которая должна быть выполнена в JBOSS?
Любая подсказка будет оценена, спасибо заранее!
РЕДАКТИРОВАТЬ:
После увеличения уровня регистрации gov.nist до INFO это можно увидеть:
18:52:07,921 INFO [gov.nist.javax.sip.stack.NIOHandler] (Mobicents-SIP-Servlets-UDPMessageChannelThread-4) Problem connecting /10.0.0.102 5061 /10.0.0.102
18:52:07,922 INFO [gov.nist.javax.sip.stack.NIOHandler] (Mobicents-SIP-Servlets-UDPMessageChannelThread-4) Problem OpeningConn: inAddr 10.0.0.102 port = 5061 retry false
Я не понимаю сейчас, откуда взяли 5061. Источник запроса:
18:52:07,946 INFO [gov.nist.javax.sip.stack.UDPMessageChannel] (Mobicents-SIP-Servlets-UDPMessageChannelThread-5) Setting SIPMessage peerPacketSource to: /10.0.0.102:5060
И ответ должен быть отправлен обратно в тот же порт.
Заголовок контакта в INVITE содержит udp в качестве транспортного протокола:
Contact: <sip:alice@10.0.0.100:54479;transport=udp>;+g.oma.sip-im