[reSIProcate] How do I end a call at the client after the call is completed.
Hi,
I've been able to establish a sucessful Invite, but now I want to end the call.
I have a "Hangup" button, and when Pressed, I want to reverse the action
that Invite does.
Here are the parameters I have....
myUAC = new InviteClient;
Where...
class InviteClient : public InviteSessionHandler, public OutOfDialogHandler
< I have all my handlers defined here - which are callbacks from
resip >
clientDum = new DialogUsageManager(*stack);
Now, I need to clear down the call after making it. How do I do that?
I need to somehow get a ClientInviteSessionHandle, and send it an
"end()" message.
Or do I somehow have to get a "InviteSessionHandle" and send it an
"end()" message.
Which one is it? Or am I way off the beaten path.
I have no clue how to get these handles because they are not passed in
as
arguments in the onxxxxxxx callbacks... For instance...
virtual void onNewSession(ServerInviteSessionHandle sis,
InviteSession::OfferAnswerType oat, const SipMessage& msg);
The SERVER passes in the "ServerInviteSessionHandle" as you see above...
But the CLIENT....
virtual void onNewSession(ClientInviteSessionHandle,
InviteSession::OfferAnswerType oat, const SipMessage& msg);
does not pass in the handle...!!!
I tried this...
virtual void onNewSession(ClientInviteSessionHandle cis,
InviteSession::OfferAnswerType oat, const SipMessage& msg);
Where I added "cis" above, then in the body of the callback, I set an
instance variable
Like this...
mySessHandle = sis;
Then, I added a "getSessHandle()" method to return "mySessHandle" like
this... So in my
"End call" code, I tried this...
theSessHandl = myUAC->getSessHandle();
theSessHand->end(); <--- but this crashed of course.
IE:
myUAC - my subclass of InviteSessionHandler and OutOfDialogHandler, and
contains my handlers
clientDum - A pointer to my DialogUsageManager.
The full definition of the InviteClient is...
class InviteClient : public InviteSessionHandler, public
OutOfDialogHandler {
public:
bool connected;
ClientRegistrationHandle registerHandle;
// More instance variables
bool done;
SdpContents* sdp;
HeaderFieldValue* hfv;
Data* txt;
time_t* pHangupAt;
const SipMessage& reqresponse;
// remote IP and Port of client when Invite was sucessful
// is set in "onConnected".
u_int16_t port;
char *ip;
InviteClient(); // removes const Data& n
virtual ~InviteClient(); // Don't need the Virtual part
// My own methods
virtual void SetStartTime(time_t* pH);
virtual void SetDelegate(SipBridge *theBridge);
virtual void Create_sdp(char *myDestURI);
ServerInviteSessionHandle GetSessionHandle();
// Only interested in the Client methods.
virtual void onNewSession(ClientInviteSessionHandle,
InviteSession::OfferAnswerType oat, const SipMessage& msg);
virtual void onProvisional(ClientInviteSessionHandle, const
SipMessage& msg);
virtual void onConnected(ClientInviteSessionHandle, const
SipMessage& msg);
virtual void onOfferRejected(InviteSessionHandle, const
SipMessage& msg);
virtual void onStaleCallTimeout(ClientInviteSessionHandle);
virtual void onRedirected(ClientInviteSessionHandle, const
SipMessage& msg);
virtual void onEarlyMedia(ClientInviteSessionHandle, const
SipMessage& msg, const SdpContents& sdp);
virtual void onForkDestroyed(ClientInviteSessionHandle);
virtual void onTerminated(InviteSessionHandle,
InviteSessionHandler::TerminatedReason reason, const SipMessage* msg);
virtual void onAnswer(InviteSessionHandle, const SipMessage& msg,
const SdpContents& sdp);
virtual void onOffer(InviteSessionHandle is, const SipMessage&
msg, const SdpContents& sdp);
virtual void onOfferRequired(InviteSessionHandle, const
SipMessage& msg);
virtual void onInfo(InviteSessionHandle, const SipMessage& msg);
virtual void onInfoSuccess(InviteSessionHandle, const SipMessage&
msg);
virtual void onInfoFailure(InviteSessionHandle, const SipMessage&
msg);
virtual void onRefer(InviteSessionHandle,
ServerSubscriptionHandle, const SipMessage& msg);
virtual void onReferRejected(InviteSessionHandle, const
SipMessage& msg);
virtual void onReferAccepted(InviteSessionHandle,
ClientSubscriptionHandle, const SipMessage& msg);
// Server - we use this for incoming calls
virtual void onNewSession(ServerInviteSessionHandle sis,
InviteSession::OfferAnswerType oat, const SipMessage& msg);
virtual void onFailure(ClientInviteSessionHandle, const
SipMessage& msg);
virtual void onConnected(InviteSessionHandle, const SipMessage&
msg);
// Out-of-Dialog Callbacks
virtual void onSuccess(ClientOutOfDialogReqHandle, const
SipMessage& successResponse);
virtual void onFailure(ClientOutOfDialogReqHandle, const
SipMessage& errorResponse);
virtual void onReceivedRequest(ServerOutOfDialogReqHandle ood,
const SipMessage& request);
private:
ServerInviteSessionHandle mSis;
};