2017-10-06 156 views
1

我正在嘗試使用RestComm SipServlet開發IMS應用服務器。 最初我的目標只是將AS插入到呼叫流程中而不做任何特殊的事情。 enter image description hereRestComm 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(); 

}

我要瘋了的一個片段:/ 希望有人可以給我一些建議...

回答

0

我也是新來呷Servlets,但是當我正在閱讀文檔時,我遇到了以下信息:

「路由修飾符,它由以下字符串之一組成:ROUTE,ROUTE_ BACK或NO_ROUTE。路線改性劑配合使用的路由信息​​,路由請求外部。」有關mobicents-dar.properties。

也許會有所幫助。

+0

太長的評論。我提出了另一個答案。 –

0

不太可能我仍然與原來的問題所困擾。我有一直在檢查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節點。

希望能夠解釋這種情況。 謝謝