package org.red5.app.sip.registration;
import java.util.Date;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
import org.zoolu.sip.transaction.TransactionClient;
public class Request implements Delayed {
static final int REDIAL_PERIOD_IN_SECONDS = 10;
private long endOfDelay;
private boolean initialTransmission = true;
private final TransactionClient transaction;
private final Date requestTime;
public Request(TransactionClient transaction) {
this.transaction = transaction;
this.requestTime = new Date();
}
public long getDelay(TimeUnit timeUnit) {
if (initialTransmission)
return 0;
return timeUnit.convert(endOfDelay - System.currentTimeMillis(),
TimeUnit.MILLISECONDS);
}
public int compareTo(Delayed delayed) {
Request request = (Request)delayed;
if (this.endOfDelay < request.endOfDelay)
return -1;
if (this.endOfDelay > request.endOfDelay)
return 1;
return this.requestTime.compareTo(request.requestTime);
}
public void setToResend() {
initialTransmission = false;
endOfDelay = System.currentTimeMillis() + REDIAL_PERIOD_IN_SECONDS
* 1000L;
}
public TransactionClient getTransactionClient() {
return transaction;
}
}