Как обнаружить ошибку соединения SCTP

Я использую мобильную реализацию CAP для создания приложения CAP для зарядки CAMEL; мое приложение работает нормально, и я могу отправлять и получать сообщения между 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();

1 ответ

Решение

"CapDialog.send();" Код не возвращает ошибку, даже если какая-либо ссылка SS7 не работает.

Если у вас есть доступ к стеку SCTP, вы можете проверить, установлено или нет соединение SCTP: Association association = ...; association.isConnected();

Другие вопросы по тегам