}
close(true, true);
if(sipStack instanceof SipStackImpl) {
for (Iterator<SipProviderImpl> it = ((SipStackImpl)sipStack).getSipProviders(); it.hasNext();) {
SipProviderImpl nextProvider = (SipProviderImpl) it.next();
SipListener sipListener= nextProvider.getSipListener();
ListeningPoint[] listeningPoints = nextProvider.getListeningPoints();
for(ListeningPoint listeningPoint : listeningPoints) {
if(sipListener!= null && sipListener instanceof SipListenerExt
// making sure that we don't notify each listening point but only the one on which the timeout happened
&& listeningPoint.getIPAddress().equalsIgnoreCase(myAddress) && listeningPoint.getPort() == myPort &&
listeningPoint.getTransport().equalsIgnoreCase(getTransport())) {
((SipListenerExt)sipListener).processIOException(new IOExceptionEventExt(nextProvider, Reason.KeepAliveTimeout, myAddress, myPort,
peerAddress.getHostAddress(), peerPort, getTransport()));
}
}
}
} else {
SipListener sipListener = sipStack.getSipListener();
if(sipListener instanceof SipListenerExt) {
((SipListenerExt)sipListener).processIOException(new IOExceptionEventExt(this, Reason.KeepAliveTimeout, myAddress, myPort,
peerAddress.getHostAddress(), peerPort, getTransport()));
}
}