/** * Inherited from TransactionClientListener. When an TransactionClientListener goes into the * "Terminated" state, receiving a 2xx response * * <p>If called for a INVITE transaction, it updates the dialog information, moves to D_CALL * state, add a listener to the SipProvider, creates a new AckTransactionClient(ack,this), and * fires <i>onSuccessResponse(this,code,body,msg)</i>. * * <p>If called for a BYE transaction, it moves to D_CLOSE state, removes the listener from * SipProvider, and fires <i>onClose(this,msg)</i>. */ public void onTransSuccessResponse(TransactionClient tc, Message msg) { printLog("inside onTransSuccessResponse(tc,msg)", LogLevel.LOW); if (tc.getTransactionMethod().equals(SipMethods.INVITE)) { if (!verifyStatus(statusIs(D_INVITING) || statusIs(D_ReINVITING))) return; StatusLine statusline = msg.getStatusLine(); int code = statusline.getCode(); if (!verifyThat( code >= 200 && code < 300 && msg.getTransactionMethod().equals(SipMethods.INVITE), "2xx for invite was expected")) return; boolean re_inviting = statusIs(D_ReINVITING); changeStatus(D_CALL); update(Dialog.UAC, msg); if (invite_offer) { // invite_req=MessageFactory.createRequest(SipMethods.ACK,dialog_state,sdp.toString()); // ack=MessageFactory.createRequest(this,SipMethods.ACK,null); ack_req = MessageFactory.create2xxAckRequest(this, null); AckTransactionClient ack_tc = new AckTransactionClient(sip_provider, ack_req, null); ack_tc.request(); } if (!re_inviting) { listener.onDlgInviteSuccessResponse(this, code, statusline.getReason(), msg.getBody(), msg); listener.onDlgCall(this); } else listener.onDlgReInviteSuccessResponse( this, code, statusline.getReason(), msg.getBody(), msg); } else if (tc.getTransactionMethod().equals(SipMethods.BYE)) { if (!verifyStatus(statusIs(D_BYEING))) return; StatusLine statusline = msg.getStatusLine(); int code = statusline.getCode(); verifyThat(code >= 200 && code < 300, "2xx for bye was expected"); changeStatus(D_CLOSE); listener.onDlgByeSuccessResponse(this, code, statusline.getReason(), msg); listener.onDlgClose(this); } }
/** Sends the ack when offer/answer is in 2xx/ack */ public void ackWithAnswer(String contact, String session_descriptor) { if (contact != null) setLocalContact(new NameAddress(contact)); Message ack = MessageFactory.create2xxAckRequest(this, session_descriptor); ackWithAnswer(ack); }