Re: [reSIProcate-users] Added message body and headers not included during re-subscription
Looking at the code (ClientSubscription line 148) it seems there is no
way to intercept the new Subscription message that is formed when a
481 is received. onReadyToSend is not called in this case, since the
send is taking place outside of the dialog usage. You would need to
modify the dum code directly in order to handle this case. It seems
to me that some cleanup on ClientSubscription DUM code is in order, to
make handling your situation easier.
Scott
On Sun, Jan 4, 2009 at 8:48 PM, Wong Kok Meng-a17866
<kokmeng.wong@xxxxxxxxxxxx> wrote:
> 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/
>>
> _______________________________________________
> resiprocate-users mailing list
> resiprocate-users@xxxxxxxxxxxxxxx
> List Archive: http://list.resiprocate.org/archive/resiprocate-users/
>