|
|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|