Adds check for the peer state before sending ringing responses to received invite.

fix-message-formatting 5234
hristoterezov 12 years ago
parent a25ca23a2c
commit 4d2003a420

@ -447,41 +447,29 @@ public CallPeerSipImpl processInvite(SipProvider jainSipProvider,
{
if (logger.isTraceEnabled())
logger.trace("will send ringing response: ");
response = messageFactory.createResponse(Response.RINGING, invite);
serverTran.sendResponse(response);
if(serverTran instanceof SIPTransaction
&& !((SIPTransaction)serverTran).isReliable()
&& peer.getState().equals(CallPeerState.INCOMING_CALL))
if(peer.getState().equals(CallPeerState.INCOMING_CALL))
{
final Timer timer = new Timer();
CallPeerAdapter stateListener = new CallPeerAdapter()
response = messageFactory.createResponse(Response.RINGING, invite);
serverTran.sendResponse(response);
if(serverTran instanceof SIPTransaction
&& !((SIPTransaction)serverTran).isReliable())
{
@Override
public void peerStateChanged(CallPeerChangeEvent evt)
final Timer timer = new Timer();
int interval = retransmitsRingingInterval;
int delay = 0;
for(int i = 0; i < MAX_RETRANSMISSIONS; i++)
{
if(!evt.getNewValue()
.equals(CallPeerState.INCOMING_CALL))
{
timer.cancel();
peer.removeCallPeerListener(this);
}
delay += interval;
timer.schedule(new RingingResponseTask(response,
serverTran, peer, timer), delay);
interval *= 2;
}
};
int interval = retransmitsRingingInterval;
int delay = 0;
for(int i = 0; i < MAX_RETRANSMISSIONS; i++)
{
delay += interval;
timer.schedule(new RingingResponseTask(response,
serverTran, peer, timer, stateListener), delay);
interval *= 2;
}
peer.addCallPeerListener(stateListener);
if (logger.isDebugEnabled())
logger.debug("sent a ringing response: " + response);
}
if (logger.isDebugEnabled())
logger.debug("sent a ringing response: " + response);
}
catch (Exception ex)
{
@ -595,11 +583,6 @@ private class RingingResponseTask
*/
private final Timer timer;
/**
* Listener for the state of the peer.
*/
private CallPeerAdapter stateListener;
/**
* Create ringing response task.
* @param response the response.
@ -609,13 +592,12 @@ private class RingingResponseTask
* @param stateListener the state listener.
*/
RingingResponseTask(Response response, ServerTransaction serverTran,
CallPeerSipImpl peer, Timer timer, CallPeerAdapter stateListener)
CallPeerSipImpl peer, Timer timer)
{
this.response = response;
this.serverTran = serverTran;
this.peer = peer;
this.timer = timer;
this.stateListener = stateListener;
}
/**
@ -626,12 +608,19 @@ public void run()
{
try
{
serverTran.sendResponse(response);
if(!peer.getState().equals(
CallPeerState.INCOMING_CALL))
{
timer.cancel();
}
else
{
serverTran.sendResponse(response);
}
}
catch (Exception ex)
{
timer.cancel();
peer.removeCallPeerListener(stateListener);
}
}
}

Loading…
Cancel
Save