Как обнаружить ошибку соединения 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();