}
public void processResponse(ResponseEvent responseReceivedEvent) {
logger.info("Got a response");
Response response = (Response) responseReceivedEvent.getResponse();
ClientTransaction tid = responseReceivedEvent.getClientTransaction();
CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
logger.info("Response received : Status Code = "
+ response.getStatusCode() + " " + cseq);
if (cseq.getMethod() == Request.PRACK) {
prackConfirmed = true;
}
if (tid == null) {
logger.info("Stray response -- dropping ");
return;
}
logger.info("transaction state is " + tid.getState());
logger.info("Dialog = " + tid.getDialog());
logger.info("Dialog State is " + tid.getDialog().getState());
SipProvider provider = (SipProvider) responseReceivedEvent.getSource();
dialog = tid.getDialog();
try {
if (response.getStatusCode() == Response.OK) {
if (cseq.getMethod().equals(Request.INVITE)) {
Request ackRequest = dialog.createAck(((CSeqHeader) response.getHeader(CSeqHeader.NAME)).getSeqNumber());
logger.info("Sending ACK");
dialog.sendAck(ackRequest);
}
} else if ( response.getStatusCode() == Shootme.PRACK_CODE) {
prackTriggerReceived = true;
RequireHeader requireHeader = (RequireHeader) response.getHeader(RequireHeader.NAME);
if ( requireHeader.getOptionTag().equalsIgnoreCase("100rel")) {
Dialog dialog = tid.getDialog();
Request prackRequest = dialog.createPrack(response);
// create Request URI
SipURI requestURI = addressFactory.createSipURI(toUser,
"127.0.0.1:" + Shootme.myPort);
prackRequest.setRequestURI(requestURI);
ClientTransaction ct = provider.getNewClientTransaction(prackRequest);
Thread.sleep(2000);
dialog.sendRequest(ct);
}
}
} catch (Exception ex) {