0

我正在使用 mobicents CAP 实现为 CAMEL 充电构建 CAP 应用程序;我的应用程序运行良好,我可以在 SSF 和 SCF 之间发送和接收消息。我正在寻找的是:如何检测客户端和服务器之间的 SCTP 链接已断开?因为当我故意停止服务器并保持客户端运行时,发送时CAPDialog不会引发任何错误。

当我停止服务器时,在控制台上我看到以下异常:

2015-04-14 13:15:29,669 [Thread-0 ] ERROR org.mobicents.protocols.sctp.SelectorThread - Exception while finishing connection for Association=clientAsscoiation
java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
    at org.mobicents.protocols.sctp.SelectorThread.finishConnectionTcp(SelectorThread.java:407)
    at org.mobicents.protocols.sctp.SelectorThread.finishConnection(SelectorThread.java:368)
    at org.mobicents.protocols.sctp.SelectorThread.run(SelectorThread.java:151)
    at java.lang.Thread.run(Unknown Source)

在此期间,如果我尝试发送一个 CAPDialog,例如发送一个 oAnswer 事件,它简单地不会告诉请求是否成功(在我的情况下,理想情况下应该返回失败)

OAnswerSpecificInfo oAnswerSpecificInfo = this.getCapProvider().getCAPParameterFactory().createOAnswerSpecificInfo(null,
                    false, false, null, null, null);
ReceivingSideID legID = this.getCapProvider().getCAPParameterFactory().createReceivingSideID(LegType.leg2);
MiscCallInfo miscCallInfo = this.getCapProvider().getINAPParameterFactory().createMiscCallInfo(MiscCallInfoMessageType.notification, null);
EventSpecificInformationBCSM eventSpecificInformationBCSM = this.getCapProvider()
                    .getCAPParameterFactory()
                    .createEventSpecificInformationBCSM(oAnswerSpecificInfo);

 CAPDialogCircuitSwitchedCall capDialog = (CAPDialogCircuitSwitchedCall) getCapProvider().getCAPDialog(localDialogId);

 capDialog.addEventReportBCSMRequest(EventTypeBCSM.oAnswer, eventSpecificInformationBCSM, legID, miscCallInfo, null);
 capDialog.setUserObject(getParamAsString("referenceId"));
 capDialog.setReturnMessageOnError(true);
 capDialog.send();
4

1 回答 1

1

"capDialog.send();" code does not return back an error even when any underlying SS7 link is down.

If you have access to SCTP stack you can check if SCTP connection is up or down: Association association = ...; association.isConnected();

于 2015-04-15T13:02:22.553 回答