Re: [reSIProcate] meet an error when a DUM as an UAS processing an INVITE message with current SVN revision 9100
I have found the fix for this. change the following line in
InviteSession::getOfferAnswer(msg) calls:
-------------
return std::auto_ptr<Contents>(Helper::getSdp(msg.getContents())); // line 2736
-------------
to:
-------------
auto_ptr<SdpContents> temp = Helper::getSdp(msg.getContents());
return temp;
-------------
please verify if my fix is correct, thanks!
On Fri, Apr 15, 2011 at 5:33 PM, Allen Guan <allenguan@xxxxxxxxx> wrote:
> Hi, all,
>
> I am using visual studio 2003 to build a very simple SIP server for
> testing with current SVN revision 9100. I added SipStack with an
> instance of DUM as its UA, this dum set an instance of
> InviteSessionHandler with some log lines in it, nothing more. when
> this DUM instance tries to process an INVITE message, it causes an
> error and the call stack looks as the following:
> ---------------------
>>
>> MediaServer.exe!std::auto_ptr<resip::SdpContents>::operator<resip::Contents>
>> std::auto_ptr_ref<resip::Contents>() Line 452 + 0x6 C++
>
> MediaServer.exe!std::auto_ptr<resip::SdpContents>::operator<resip::Contents>
> std::auto_ptr_ref<resip::Contents>() Line 454 + 0xc C++
>
> MediaServer.exe!std::auto_ptr<resip::SdpContents>::operator<resip::Contents>
> std::auto_ptr_ref<resip::Contents>() Line 454 + 0xc C++
>
> MediaServer.exe!std::auto_ptr<resip::SdpContents>::operator<resip::Contents>
> std::auto_ptr_ref<resip::Contents>() Line 454 + 0xc C++
>
> MediaServer.exe!std::auto_ptr<resip::SdpContents>::operator<resip::Contents>
> std::auto_ptr_ref<resip::Contents>() Line 454 + 0xc C++
> ..........................
> ---------------------
>
> When I dig into it step by step, I notice the error caused by the
> following line in ServerInviteSession::dispatchStart():
> ---------------
> std::auto_ptr<Contents> offerAnswer =
> InviteSession::getOfferAnswer(msg); // line 729
> ---------------
>
> this InviteSession::getOfferAnswer(msg) calls:
> -------------
> return std::auto_ptr<Contents>(Helper::getSdp(msg.getContents())); // line
> 2736
> -------------
>
> when this InviteSession::getOfferAnswer(msg) returns, the error
> happens. looks like it's caused by class type conversion?
>
> the following the more deep call stack for your reference.
> ----------------------------------
>> MediaServer.exe!resip::Helper::getSdp(resip::Contents *
>> tree=0x01ad54f8) Line 2143 C++
> MediaServer.exe!resip::InviteSession::getOfferAnswer(const
> resip::SipMessage & msg={...}) Line 2736 + 0x12 C++
> MediaServer.exe!resip::ServerInviteSession::dispatchStart(const
> resip::SipMessage & msg={...}) Line 729 + 0x10 C++
> MediaServer.exe!resip::ServerInviteSession::dispatch(const
> resip::SipMessage & msg={...}) Line 642 C++
> MediaServer.exe!resip::Dialog::dispatch(const resip::SipMessage &
> msg={...}) Line 428 C++
> MediaServer.exe!resip::DialogSet::dispatch(const resip::SipMessage &
> msg={...}) Line 893 C++
> MediaServer.exe!resip::DialogUsageManager::processRequest(const
> resip::SipMessage & request={...}) Line 2073 + 0xf C++
>
> MediaServer.exe!resip::DialogUsageManager::incomingProcess(std::auto_ptr<resip::Message>
> msg={...}) Line 1617 C++
>
> MediaServer.exe!resip::DialogUsageManager::internalProcess(std::auto_ptr<resip::Message>
> msg={...}) Line 1447 C++
> MediaServer.exe!resip::DumThread::thread() Line 26 C++
> MediaServer.exe!threadIfThreadWrapper(void * threadParm=0x01aa03c8)
> Line 51 + 0xd C++
> msvcr71d.dll!_threadstartex(void * ptd=0x01aa0910) Line 241 + 0xd
> C
> kernel32.dll!7c80b729()
> -------------------------------------
>
> Could someone please take a look at this? thanks!
>
> -Allen
>