Re: [reSIProcate-users] Added message body and headers not included during re-subscription
Hi,
Further to the email discussion. In my case, after creating the initial
SUBSCRIBE request, the application will add a few customized headers to
the SUBSCRIBE message. If the server responds a 408, 413, 480, 486, 500,
503, 600 or 603 error with a Retry-After header, I plan to return (-1)
in the function onRequestRetry() and I'll retry the new subscription in
my application.
However, in the case of a 481 response received, where can I add the
customized headers? Will the stack invokes the method onReadyToSend()?
Can I do it there? Is there a way to indicate to the stack not to
resubscribe when the 481 response is received? In this way, I can do the
resubscription in the application.
Thank you.
Regards,
Kok Meng
-----Original Message-----
From: slgodin@xxxxxxxxx [mailto:slgodin@xxxxxxxxx] On Behalf Of Scott
Godin
Sent: Wednesday, December 17, 2008 5:56 AM
To: Wong Kok Meng-a17866
Cc: resiprocate-users@xxxxxxxxxxxxxxx
Subject: Re: [reSIProcate-users] Added message body and headers not
included during re-subscription
>From examing the code it seems that the message body should be
preserved for refreshes, however if any of the following occur, then
it seems that a completely new subscription is created where any
custom changes to the original Subscribe message will not be preserved
(see occurances of mDum.makeSubscription in ClientSubscription.cxx:
1. a 481 response is received
2. a 408, 413, 480, 486, 500, 503, 600 or 603 error is received with a
Retry-After header.
In your code, make sure you are modifying the SipMessage pointed to by
the SharedPtr returned from the mDum.makeSubscription call (as you are
in the sample code you included).
Also a slightly cleaner/safer way of adding the message body would be
something like:
Data xmlBodyData = .....;
Mime type("text", "xml");
OctetContents contents(xmlBodyData, type);
msg->addContents(&contents);
Scott
On Mon, Dec 15, 2008 at 2:57 AM, Wong Kok Meng-a17866
<kokmeng.wong@xxxxxxxxxxxx> wrote:
> Hi,
>
> I create a SUBSCRIBE message using
DialogUsageManager::makeSubscription(). I
> add a message body and a couple message headers to the SUBSCRIBE
message. I
> then use DialogUsageManager::send() to send out the SUBSCRIBE message.
It
> looks good for the first SUBSCRIBE message. When the subscription
expiry
> timer expires, it does a refresh subscription. However, in the
re-SUBSCRIBE
> message, I don't see the message body and message headers that are
added by
> me. My code looks something like this:
>
> // create SUBSCRIBE message
> SharedPtr<SipMessage> msg;
> msg = Dum.makeSubscription(targetUri, event.c_str());
>
> // add message body and headers
> std:string body = "<some values>";
> msg->header(h_ContentType).type() = "text";
> msg->header(h_ContentType).subtype() = "xml";
> char *buf = new char[body.size() + 1];
> msg->addBuffer(buf);
> strcpy(buf, body.c_str());
> msg->setBody(buf, body.size());
>
> // send SUBSCRIBE messge
> Dum.send(msg);
>
> The way I use to overcome this problem is to re-include the message
body and
> header in the function ClientSubscriptionHandler::onReadyToSend(). Are
there
> other recommended ways?
>
> Thank you.
>
> Regards,
> Kok Meng
>
> _______________________________________________
> resiprocate-users mailing list
> resiprocate-users@xxxxxxxxxxxxxxx
> List Archive: http://list.resiprocate.org/archive/resiprocate-users/
>