< Previous by Date Date Index Next by Date >
< Previous in Thread Thread Index Next in Thread >

Re: [reSIProcate] multipart/alternative content-type


Hi,
Sometime ago I asked how to parse a message with content-type multipart/alternative to get the two SDPs. Now I would like some help to build a multipart/alternative message. This is how I build a message with a single SDP:

 

Data* txt = new Data(sdpString.c_str());

HeaderFieldValue* hfv = new HeaderFieldValue(txt->data(), (unsigned int) txt->size());

Mime type("application", "sdp");

SdpContents sdp((const HeaderFieldValue&) *hfv, (const Mime&) type);

 

I know there is a MultipartAlternativeContents but I don’t know how to use it, specially what would be the HeaderFieldValue that I would pass in the constructor. Is it possible to build such message using Parts() from two SdpContents? Any help is appreciated. Thanks,

 

Diego

 

From: Diego Carvalho Domingos
Sent: terça-feira, 17 de maio de 2016 13:19
To: 'Scott Godin' <sgodin@xxxxxxxxxxxxxxx>
Cc: resiprocate-devel@xxxxxxxxxxxxxxx
Subject: RE: [reSIProcate] multipart/alternative content-type

 

This is exactly what I wanted. Thank you very much. Regards,
Diego

 

From: slgodin@xxxxxxxxx [mailto:slgodin@xxxxxxxxx] On Behalf Of Scott Godin
Sent: terça-feira, 17 de maio de 2016 12:12
To: Diego Carvalho Domingos <
ddomingos@xxxxxxxxxxxxxxx>
Cc:
resiprocate-devel@xxxxxxxxxxxxxxx
Subject: Re: [reSIProcate] multipart/alternative content-type

 

There is a setting on the InviteSessionHandler constructor that will tell DUM to provide you with the entire body back instead of just Sdp bodies.  Check out the following comment in InviteSessionHandler.hxx

 

/** 

    Base class for class InviteSessionHandler.  The application must override this class

    and provide an imlementation of the handlers below.  The class must then be set as

    an invite session handler on dum (DialogUsageManager::setInviteSessionHandler()).

 

    If you wish to handle invite session offer/answers using generic contents instead of

    SDP, then construct this class with a bool argument of true, and be sure to add 

    implementations of all of the handlers below that take a Contents parameter type

    (ie. onEarlyMedia, onOffer, onAnswer, and onRemoteAnswerChanged).  Overriding these 

    methods will cause their SdpContent counterparts to not be called.  You can then provide 

    a basic empty body implementation of these SdpContent versions of the callbacks.

 

    Example handler for generic (non-sdp only) invite sessions:

    class MyInviteSessionHandler : public InviteSessionHandler

    {

       MyInviteSessionHandler() : InviteSessionHandler(true) {};

       ...

       virtual void onOffer(InviteSessionHandle, const SipMessage& msg, const SdpContents&)

       {}  // No body required

       virtual void onOffer(InviteSessionHandle, const SipMessage& msg, const Contents&)

       {

          // Add handler body here

       }

       ...

    };

*/

 

Scott

 

On Tue, May 17, 2016 at 10:02 AM, Diego Carvalho Domingos <ddomingos@xxxxxxxxxxxxxxx> wrote:

Thanks for answering, Scott
But where I would get the whole multipart contents from?
Like I said, I’m using the getContents method from the SipMessage class, and this is returning a SdpContents already (otherwise the dynamic_cast would fail), not a MultipartAlternativeContents.
Regards,

 

Diego

 

From: slgodin@xxxxxxxxx [mailto:slgodin@xxxxxxxxx] On Behalf Of Scott Godin
Sent: segunda-feira, 16 de maio de 2016 15:18
To: Diego Carvalho Domingos <ddomingos@xxxxxxxxxxxxxxx>
Cc: resiprocate-devel@xxxxxxxxxxxxxxx
Subject: Re: [reSIProcate] multipart/alternative content-type

 

There is a great helper method for this.  Check out resip/Helper.hxx/cxx and the getSdp method.  If it doesn't do exactly what you want, it's a great starting ground for whatever you need.

 

Scott

 

On Thu, May 12, 2016 at 2:11 PM, Diego Carvalho Domingos <ddomingos@xxxxxxxxxxxxxxx> wrote:

Hi all,

How do I access multiple SDP’s of an INVITE which the content-type is multipart/alternative? In my case the INVITE contains two SDP’s and for some reason, the way I get the SDP is getting the second one. For instance, in the onNewSession method:
onNewSession(ClientInviteSessionHandle, InviteSession::OfferAnswerType oat, const SipMessage& msg)
I do:
SdpContents* contents = dynamic_cast<SdpContents*>(msg.getContents());

Why this is getting me the second one? How do I access the first one? I saw that there is a subclass of Contents called MultipartAlternativeContents but I don’t think this is the one returned by getContents because if so the dynamic_cast would fail.

I appreciate any help. Thanks in advance.


_______________________________________________
resiprocate-devel mailing list
resiprocate-devel@xxxxxxxxxxxxxxx
https://list.resiprocate.org/mailman/listinfo/resiprocate-devel