RestComm SIpServlet - Sip Servlet作为IMS网络中的应用服务器
我正在尝试使用RestComm SipServlet开发IMS应用服务器。 最初我的目标只是将AS插入到呼叫流程中而不做任何特殊的事情。 RestComm SIpServlet - Sip Servlet作为IMS网络中的应用服务器
应用程序服务器只是要做的事情,并转发初始邀请。 问题是,RestComm的sip堆栈不会将Invite addind中的Route从路由头中移除,因此邀请被路由到AS再次生成一个循环。 当我尝试编辑删除路由头的SipRequest时,由于我无法修改系统头的事实,AS以500回答。
下面的代码
@Override
protected final void doInvite(SipServletRequest request)
throws ServletException, IOException {
//DO STUFF
System.out.println("RECEIVED AN INVITE");
// These lines generate a 500
// request.removeHeader("route");
// request.removeHeader("route");
ProxyImpl p = (ProxyImpl) request.getProxy(true);
p.setRecordRoute(false);
p.setSupervised(true);
p.setParallel(true);
p.proxyTo(request.getRequestURI());
p.startProxy();
}
我要疯了的一个片段:/ 希望有人可以给我一些建议...
我也是新来呷Servlets,但是当我正在阅读文档时,我遇到了以下信息:
“路由修饰符,它由以下字符串之一组成:ROUTE,ROUTE_ BACK或NO_ROUTE。路线改性剂配合使用的路由信息,路由请求外部。”有关mobicents-dar.properties。
也许会有所帮助。
不太可能我仍然与原来的问题所困扰。我有一直在检查Bartek给我的提示,不幸的是文档非常差,可能我还没有完全理解它 无论如何我会分享操作dar属性文件的结果 定义取自SipServlet Specification v1.1
ROUTE修饰符表示临时t SipApplicationRouterInfo.getRoutes()返回有效的路由。由容器决定是外部还是内部路由返回。所有返回的路线必须是相同的类型,因此集装箱只能通过检查第一条路线来确定。
2017-10-10 15:55:01,372 ERROR [SipApplicationDispatcherImpl] (pool-AffinityJAIN-thread-1) Unexpected exception while processing request
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/TCP 10.39.117.121:50302;rport=50302;branch=z9hG4bKPj921L-Q-IghWuH.rSX.uNoNMh9T7gZilB;received=10.39.117.121
Via: SIP/2.0/TCP 10.39.117.93:6560;received=10.39.117.93;branch=z9hG4bK+aa78dad05a4a559d9e4635f37906172a1+sip+5+a64ded2b
Route: <sip:[email protected];lr>
Route: <sip:[email protected]:5054;lr;orig>
Record-Route: <sip:sprout.dev.mydomain.sys:5054;transport=TCP;lr;service=scscf;billing-role=charge-orig>
Record-Route: <sip:10.39.117.93:6560;lr>
From: "itsme" <sip:[email protected]>;tag=10.39.117.93+5+2cdeefc2+8fc7709c
To: <sip:[email protected]>
CSeq: 1 INVITE
Expires: 180
Call-Info: <sip:10.39.117.93:6560>;method="NOTIFY;Event=telephone-event;Duration=2000"
P-Charging-Function-Addresses: ccf=pri_ccf_address
Supported: outbound,path,replaces
P-Charging-Vector: icid-value="0be3bd9333dd5089baf80bf17225e3d6";orig-ioi=mydomain.net
Contact: <sip:[email protected]:46973;transport=tcp;rinstance=e637627c20b12d87;ob>;+sip.instance="<urn:uuid:968fdfa1-95d3-59cb-acb3-403d721daeee>"
P-Asserted-Identity: <sip:[email protected]>
Max-Forwards: 68
Call-ID: 0gQAAC8WAAACBAAALxYAAOYHyDdZmVO7ntMtj/[email protected]
Allow: SUBSCRIBE,NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS
User-Agent: X-Lite release 5.0.1 stamp 86895
P-Visited-Network-ID: perim.dev.ims.ext1.net
Accept: application/sdp,application/dtmf-relay
Session-Expires: 600
P-Served-User: <sip:[email protected]>;regstate=reg;sescase=orig
Content-Type: application/sdp
Content-Length: 281
v=0
o=- 14048926850737 14048926850737 IN IP4 10.39.117.93
s=-
c=IN IP4 10.39.117.93
t=0 0
m=audio 45234 RTP/AVP 120 0 101
a=sendrecv
a=rtpmap:120 opus/48000/2
a=rtpmap:101 telephone-event/8000
a=fmtp:120 useinbandfec=1; usedtx=1; maxaveragebitrate=64000
a=fmtp:101 0-15
org.mobicents.servlet.sip.core.DispatcherException: Impossible to parse the route returned by the application router into a compliant address
at org.mobicents.servlet.sip.core.dispatchers.InitialRequestDispatcher.checkRouteModifier(InitialRequestDispatcher.java:575)
at org.mobicents.servlet.sip.core.dispatchers.InitialRequestDispatcher.dispatchMessage(InitialRequestDispatcher.java:299)
at org.mobicents.servlet.sip.core.SipApplicationDispatcherImpl.processRequest(SipApplicationDispatcherImpl.java:927)
at gov.nist.javax.sip.EventScanner.deliverRequestEvent(EventScanner.java:250)
at gov.nist.javax.sip.EventScanner.deliverEvent(EventScanner.java:146)
at gov.nist.javax.sip.SipProviderImpl.handleEvent(SipProviderImpl.java:185)
at gov.nist.javax.sip.DialogFilter.processRequest(DialogFilter.java:1328)
at gov.nist.javax.sip.stack.SIPServerTransactionImpl.processRequest(SIPServerTransactionImpl.java:851)
at gov.nist.javax.sip.stack.ConnectionOrientedMessageChannel.processMessage(ConnectionOrientedMessageChannel.java:473)
at gov.nist.javax.sip.parser.NioPipelineParser$Dispatch.run(NioPipelineParser.java:132)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at gov.nist.javax.sip.MDCScheduledTHExecutor$MDCFuture.run(MDCScheduledTHExecutor.java:57)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.text.ParseException: :Bad address spec
at gov.nist.javax.sip.parser.Parser.createParseException(Parser.java:45)
at gov.nist.javax.sip.parser.AddressParser.address(AddressParser.java:120)
at gov.nist.javax.sip.parser.StringMsgParser.parseAddress(StringMsgParser.java:328)
at gov.nist.javax.sip.address.AddressFactoryImpl.createAddress(AddressFactoryImpl.java:124)
at org.mobicents.servlet.sip.core.dispatchers.InitialRequestDispatcher.checkRouteModifier(InitialRequestDispatcher.java:537)
... 17 more
我尝试使用路由字段指向IMS节点以转发回SIP消息。它可以工作,但我认为通过这种方式AS不会被添加到Record-Route头中,并且会导致循环。
ROUTE_BACK指示容器在推送从SipApplicationRouterInfo.getRoutes()获得的外部路由之前推送它自己的路由。 应用路由器行为
在这种情况下,我有以下错误,并且为答案有500
2017-10-10 15:52:57,276 ERROR [SipApplicationDispatcherImpl] (pool-AffinityJAIN-thread-14) Unexpected exception while processing request
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/TCP 10.39.117.121:43312;rport=43312;branch=z9hG4bKPj5IBDrImFUbO1J.J1LrwUcUQ-rsT28TRh;received=10.39.117.121
Via: SIP/2.0/TCP 10.39.117.93:6560;received=10.39.117.93;branch=z9hG4bK+84bf75e3c2c4ccae314be5e5849bd4961+sip+3+a64ded21
Route: <sip:[email protected];lr>
Route: <sip:odi_kMFF/[email protected]:5054;lr;orig>
Record-Route: <sip:sprout.dev.mydomain.sys:5054;transport=TCP;lr;service=scscf;billing-role=charge-orig>
Record-Route: <sip:10.39.117.93:6560;lr>
From: "Gennaro" <sip:[email protected]>;tag=10.39.117.93+3+7334eef2+84ee6a06
To: <sip:[email protected]>
CSeq: 1 INVITE
Expires: 180
Call-Info: <sip:10.39.117.93:6560>;method="NOTIFY;Event=telephone-event;Duration=2000"
P-Charging-Function-Addresses: ccf=pri_ccf_address
Supported: outbound,path,replaces
P-Charging-Vector: icid-value="4167d34dd3fb232bb1f5fcf458dc1a9e";orig-ioi=mydomain.net
Contact: <sip:[email protected]:46973;transport=tcp;rinstance=e637627c20b12d87;ob>;+sip.instance="<urn:uuid:968fdfa1-95d3-59cb-acb3-403d721daeee>"
P-Asserted-Identity: <sip:[email protected]>
Max-Forwards: 68
Call-ID: 0gQAAC8WAAACBAAALxYAAK2OW7qCKhw2LAbw9q+UyCfK2Js5PtCkUUpQsljED2+H/[email protected]
Allow: SUBSCRIBE,NOTIFY,INVITE,ACK,CANCEL,BYE,REFER,INFO,OPTIONS
User-Agent: X-Lite release 5.0.1 stamp 86895
P-Visited-Network-ID: perim.dev.ims.ext1.net
Accept: application/sdp,application/dtmf-relay
Session-Expires: 600
P-Served-User: <sip:[email protected]>;regstate=reg;sescase=orig
Content-Type: application/sdp
Content-Length: 281
v=0
o=- 76884298267467 76884298267467 IN IP4 10.39.117.93
s=-
c=IN IP4 10.39.117.93
t=0 0
m=audio 45230 RTP/AVP 120 0 101
a=sendrecv
a=rtpmap:120 opus/48000/2
a=rtpmap:101 telephone-event/8000
a=fmtp:120 useinbandfec=1; usedtx=1; maxaveragebitrate=64000
a=fmtp:101 0-15
java.lang.IllegalArgumentException: not allowed to set parameter, the URI is not modifiable
at org.mobicents.servlet.sip.address.SipURIImpl.setParameter(SipURIImpl.java:401)
at org.mobicents.servlet.sip.core.dispatchers.InitialRequestDispatcher.checkRouteModifier(InitialRequestDispatcher.java:591)
at org.mobicents.servlet.sip.core.dispatchers.InitialRequestDispatcher.dispatchMessage(InitialRequestDispatcher.java:299)
at org.mobicents.servlet.sip.core.SipApplicationDispatcherImpl.processRequest(SipApplicationDispatcherImpl.java:927)
at gov.nist.javax.sip.EventScanner.deliverRequestEvent(EventScanner.java:250)
at gov.nist.javax.sip.EventScanner.deliverEvent(EventScanner.java:146)
at gov.nist.javax.sip.SipProviderImpl.handleEvent(SipProviderImpl.java:185)
at gov.nist.javax.sip.DialogFilter.processRequest(DialogFilter.java:1328)
at gov.nist.javax.sip.stack.SIPServerTransactionImpl.processRequest(SIPServerTransactionImpl.java:851)
at gov.nist.javax.sip.stack.ConnectionOrientedMessageChannel.processMessage(ConnectionOrientedMessageChannel.java:473)
at gov.nist.javax.sip.parser.NioPipelineParser$Dispatch.run(NioPipelineParser.java:132)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at gov.nist.javax.sip.MDCScheduledTHExecutor$MDCFuture.run(MDCScheduledTHExecutor.java:57)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
NO_ROUTE表明,应用路由器不返回任何路线和SipApplicationRouterInfo.getRoutes()价值,如果有的话,应该被忽视。
在这种情况下,请求似乎停留在AS中,无法将请求转发到IMS节点。
希望能够解释这种情况。 谢谢
太长的评论。我提出了另一个答案。 –