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

Re: [reSIProcate-users] Help - Facing problem to send sip message towards proxy


Hi Scott,

 

I tried to send and receive messages using single stack. I’m able to receive messages from stack. But when I’m trying to initiate new INVITE request, I’m getting below error and my application is crashing,

 

ERR | 20170719-141343.157 |  | RESIP | 140643582072576 | DataParameter.cxx:91 | Accessing defaulted DataParameter: 'tag'

B2BServer: DataParameter.cxx:93: virtual std::ostream& resip::DataParameter::encode(std::ostream&) const: Assertion `!mValue.empty()' failed.

ORA-24550: signal received: [si_signo=6] [si_errno=0] [si_code=-6] [si_int=0] [si_ptr=(nil)] [si_addr=0x1f400003d46]

 

I have separate function (fnG_encodeSipPBMsgToSIPStackMessage) to encode sip message, here is the SIP message from my application logs which is generated using makeRequest,

 

INVITE sip:1.1.5695103.en-fe@10.10.30.111:5060 SIP/2.0

Via: SIP/2.0/UDP 192.168.2.106:2271;branch=z9hG4bK5615554850bd4935;received=192.168.2.106;rport=0

Max-Forwards: 70

Route: <sip:10.10.30.113:30029>

Contact: <sip:SonetelPBX@49.57.50.46:30029>

To: <sip:1.1.5695103.en-fe@10.10.30.111:5060>

From: "sai_live_fname_2"<sip:sai_live_fname_2@xxxxxxxxxx:5060>;tag=8b7d7e2c

Call-ID: NXp-UyYakfdU4k1ufJyZtA..

CSeq: 1 INVITE

P-Charging-Vector: icid-value=1522390983

Content-Length: 0

 

For new INVITE request, we should not send tag as per RFC. If we are voiding that and send tag for NameAddr type headers with some dummy value, then the request is reaching to proxy. Here is the SIP message for that,

 

INVITE sip:1.1.5695103.en-fe@10.10.30.111:5060 SIP/2.0.

Via: SIP/2.0/UDP 192.168.2.152:30029;branch=z9hG4bKc041.32500907.0.

Via: SIP/2.0/UDP 192.168.2.106:2271;branch=z9hG4bK-524287-1---e93b397d27f01217;rport=2271;received=10.10.30.111.

Max-Forwards: 30.

Route: <sip:10.10.30.113:30029>.

Contact: <sip:SonetelPBX@49.57.50.46:30029>;tag=tag.

To: <sip:1.1.5695103.en-fe@10.10.30.111:5060>;tag=tag.

From: "sai_live_fname_2"<sip:sai_live_fname_2@xxxxxxxxxx:5060>;tag=1b45d73e.

Call-ID: eY-W-3RpyV_JOvtcXaOnTw...

CSeq: 1 INVITE.

P-Charging-Vector: icid-value=769118466.

Content-Length: 0

 

I’m attaching source code and output in separate files. Please suggest me if I’m doing anything wrong.

 

 

Thanks & Regards,

LavanyaKumar S

+91 9603323366

 

From: slgodin@xxxxxxxxx [mailto:slgodin@xxxxxxxxx] On Behalf Of Scott Godin
Sent: Wednesday, July 12, 2017 09:33 PM
To: LavanyaKumar <lavanyakumar.s@xxxxxxxxxxx>
Cc: resiprocate-users@xxxxxxxxxxxxxxx; resiprocate-devel@xxxxxxxxxxxxxxx
Subject: Re: [reSIProcate-users] Help - Facing problem to send sip message towards proxy

 

 

 

On Wed, Jul 12, 2017 at 9:30 AM, LavanyaKumar <lavanyakumar.s@xxxxxxxxxxx> wrote:

Hi Scott,

 

Hope you are doing good.

 

Thanks for your previous suggestion. I’m facing another issue while enhancing my application.

 

I have tried to integrate StackThread class in my application by referring stack/test/testStack hxx and cxx files with some minor configuration changes in transport ports. I have taken two SipStack pointers each for receiving, sending and assigned 2271 as receiving port and 2272 as sending port.

 

[Scott] You really only need one SipStack for any SIP based application.  It can both send and receive messages.  The testStack program creates multiple stacks for testing only.

 

When i make a call, I'm receiving the message to application and able to process successfully. But when i'm trying to send new request from application, i'm getting this below error

 

ERR | 20170712-134943.117 |  | RESIP | 140053664692192 | DataParameter.cxx:91 | Accessing defaulted DataParameter: 'tag'

B2BServer: DataParameter.cxx:93: virtual std::ostream& resip::DataParameter::encode(std::ostream&) const: Assertion `!mValue.empty()' failed.

 

When i debugged this i got to know this error is for headerEnum 11, which is of Contact header. Though it is of NameAddr type, tag is not mandatory parameter for Contact right?

 

I'm providing complete output in the attached file ‘Stack_Error2.txt’ . Can you suggest some clue to resolve my issue if i'm doing anything wrong.

 

[Scott]  It is too hard to troubleshoot this without seeing your code.

 

Can we use same SipStack pointer with only one transport to send and receive sip messages which are out of transaction?

 

[Scott]  You only need 1 SipStack and at least one transport.  You cannot pass the same transport to 2 SipStacks. 

 

Also I have few queries in StackThread class. As per your previous comment, process() should be in loop, i couldn't find explicit while or for loop in the file.

Does these statements runs in loop?

 

receiver->process(fdset);

sender->process(fdset);

 

Could you explain how its working?

 

[Scott]  Sorry I forgot testStack got reasonably complicated recently.  testSipStackInvite might be an easier example to read.

Some information here:

and

and

 

 

Thanks & Regards,

LavanyaKumar S

+91 9603323366

 

From: slgodin@xxxxxxxxx [mailto:slgodin@xxxxxxxxx] On Behalf Of Scott Godin
Sent: Thursday, June 29, 2017 08:27 PM
To: LavanyaKumar <lavanyakumar.s@xxxxxxxxxxx>
Cc: resiprocate-users@xxxxxxxxxxxxxxx; resiprocate-devel@xxxxxxxxxxxxxxx
Subject: Re: [reSIProcate-users] Help - Facing problem to send sip message towards proxy

 

You need to process in a loop.  Check out stack/test/testStack and other programs in the test directory.   You can use StackThread class to help.

 

There is also info on the wiki for this:  http://www.resiprocate.org/DUM_Threading

 

Just ignore the DUM parts of the wiki page.

 

Good luck,

Scott

 

 

On Wed, Jun 28, 2017 at 3:57 AM, LavanyaKumar <lavanyakumar.s@xxxxxxxxxxx> wrote:

Hi,

 

I'm new to resiprocate. I'm trying to send an INVITE request from my linux machine. I'm able to generate a SIP message. But unable to forward to my proxy with the details filled in Route header. My requirement is to use resip but not dum as our application will handle session.

 

Here i'm attaching my code and output. Not sure whether i missed something.

 

Could someone please help probably with some sample references or examples.

 

We are using resiprocate-1.9.10.

 

Thanks & Regards,

LavanyaKumar S

 


_______________________________________________
resiprocate-users mailing list
resiprocate-users@xxxxxxxxxxxxxxx
List Archive: http://list.resiprocate.org/archive/resiprocate-users/

 

 

#ifndef _STACKSERVER_HPP_
#define _STACKSERVER_HPP_

#include "rutil/GeneralCongestionManager.hxx"
#include "rutil/DnsUtil.hxx"
#include "rutil/Inserter.hxx"
#include "rutil/Logger.hxx"
#include "resip/stack/DeprecatedDialog.hxx"
#include "resip/stack/Helper.hxx"
#include "resip/stack/SipMessage.hxx"
#include "resip/stack/SipStack.hxx"
#include "resip/stack/StackThread.hxx"
#include "rutil/SelectInterruptor.hxx"
#include "resip/stack/TransportThread.hxx"
#include "resip/stack/InterruptableStackThread.hxx"
#include "resip/stack/EventStackThread.hxx"
#include "resip/stack/Uri.hxx"
#include "resip/stack/UnknownHeaderType.hxx"

#include "resip/stack/Transport.hxx"
#include "rutil/DataStream.hxx"
#include "rutil/Data.hxx"

#include "../Protobuf/src/ProtoSIPBuff.pb.h"

#define RESIPROCATE_SUBSYSTEM Subsystem::APP

using namespace resip;

class SharedAsyncNotify : public AsyncProcessHandler
{
   public:
       SharedAsyncNotify() { };
       virtual ~SharedAsyncNotify() { };

       virtual void handleProcessNotification();

       bool waitNotify(int ms);

   protected:
           resip::Mutex mMutex;
       Condition mCondition;
};


typedef struct StackThreadPair;

class SipStackAndThread
{
        public:
                SipMessage* received;
                SipMessage* response;
                
                static SipStackAndThread& instance() 
                {
                        return myInstance;
                }

      ~SipStackAndThread(){};
      SipStack* getStack();
          SipStack& operator*() const { assert(mStack); return *mStack; }
          SipStack* operator->() const { return mStack; }
          void setCongestionManager(CongestionManager* cm);
          void run();
          void shutdown();
          void join();
          void destroy();

          void init();
          void receivedMsg(StackThreadPair& pair);
          bool sendMsgToStack(sip_proto_buf::ProtoSIPMessage *pCL_SipMsg, 
SipMessage *pCL_SipReq = NULL);

        protected:
          ThreadIf          *mThread;
         SelectInterruptor *mSelIntr;
         FdPollGrp         *mPollGrp;
         EventThreadInterruptor    *mEventIntr;
         bool mMultiThreadedStack;

        private:
          SipStack          *mStack;
          static SipStackAndThread myInstance;
          SipStackAndThread() {}
        SipStackAndThread(const char *tType, AsyncProcessHandler *notifyDn=0, 
AsyncProcessHandler *notifyUp=0);
};
#endif
#include "resip/stack/Helper.hxx"
#include "resip/stack/SipMessage.hxx"
#include "resip/stack/Uri.hxx"
#include "resip/stack/SipStack.hxx"
#include "rutil/Logger.hxx"
#include "rutil/ThreadIf.hxx"
#include "rutil/ParseBuffer.hxx"

using namespace resip;
using namespace std;

int gPort = {0};

SipStackAndThread SipStackAndThread::myInstance;

SipStack *GStack;
bool bG_SendStackFdSet = false;

FdSet CG_Fdset;

void SharedAsyncNotify::handleProcessNotification()
 {
    Lock lock(mMutex); (void)lock;
    mCondition.signal();
 }

bool SharedAsyncNotify::waitNotify(int ms)
{
   Lock lock(mMutex); (void)lock;

   if (ms<0)
   {
       mCondition.wait(mMutex);
       return true;
   }
   else
   {
      return mCondition.wait(mMutex, ms);
   }
}

SipStack* SipStackAndThread::getStack() 
{
        //assert(mStack); 
        //LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"This is the mStack %x", 
mStack);
        //
    return mStack; 
}

void SipStackAndThread::setCongestionManager(CongestionManager* cm)
{
   mStack->setCongestionManager(cm);
}

void SipStackAndThread::run() 
{
   if ( mThread ) mThread->run();
   if ( mMultiThreadedStack ) mStack->run();
}

void SipStackAndThread::shutdown()
{
  if ( mThread ) mThread->shutdown();
}

void SipStackAndThread::join()
{
  if ( mThread ) mThread->join();
  if ( mMultiThreadedStack ) mStack->shutdownAndJoinThreads();
}

SipStackAndThread::SipStackAndThread(const char *tType, AsyncProcessHandler 
*notifyDn, AsyncProcessHandler *notifyUp)
: mStack(0), mThread(0), mSelIntr(0), mPollGrp(0), mEventIntr(0), 
mMultiThreadedStack(false)
{
        bool doStd = false;
        assert( tType );
        if (strcmp(tType,"intr")==0) 
        {
                mSelIntr = new SelectInterruptor();
        }
        else if ( strcmp(tType,"event")==0 || strcmp(tType,"epoll")==0 || 
strcmp(tType,"fdset")==0 || strcmp(tType,"poll")==0 )
        {
                mPollGrp = FdPollGrp::create(tType);
                mEventIntr = new EventThreadInterruptor(*mPollGrp);
        }
        else if ( strcmp(tType,"std")==0 ) 
        {
                doStd = true;
        } 
        else if ( strcmp(tType,"none")==0 ) 
        {
        }
        else if ( strcmp(tType,"multithreadedstack")==0 )
        {
                mMultiThreadedStack=true;
                mPollGrp = FdPollGrp::create("event");
                mEventIntr = new EventThreadInterruptor(*mPollGrp);
        }
        else 
        {
                //CritLog(<<"Bad thread-type: "<<tType);
                exit(1);
        }
        SipStackOptions options;
        //options.mAsyncProcessHandler = mEventIntr?mEventIntr 
:(mSelIntr?mSelIntr:notifyUp);
        options.mAsyncProcessHandler = mEventIntr;
        options.mPollGrp = mPollGrp;
        mStack = new SipStack(options);
        mStack->setFallbackPostNotify(notifyUp);
        if (mEventIntr) 
        {
                mThread = new EventStackThread(*mStack, *mEventIntr, *mPollGrp);
        } 
        else if (mSelIntr) 
        {
                mThread = new InterruptableStackThread(*mStack, *mSelIntr);
        } 
        else if (doStd) 
        {
                mThread = new StackThread(*mStack);
        }

        GStack = mStack;
}

void SipStackAndThread::destroy()
{
   if ( mThread )
   {
       delete mThread;
       mThread = 0;
   }
   if ( mStack )
    {
       delete mStack;
       mStack = 0;
    }
    if ( mSelIntr )
    {
       delete mSelIntr;
       mSelIntr = 0;
    }
    if ( mEventIntr )
    {
        delete mEventIntr;
        mEventIntr = 0;
    }
   if ( mPollGrp )
    {
        delete mPollGrp;
       mPollGrp = 0;
    }
}

static void waitForStacks(SipStackAndThread& receiver, SelectInterruptor 
*commonIntr, int& thisseltime, bool& isStrange)
{
   FdSet fdset;
   receiver->buildFdSet(fdset);
   if ( commonIntr )
   {
        commonIntr->buildFdSet(fdset);
   }
   
   if ( commonIntr )
   {
       commonIntr->process(fdset);
   }
   receiver->process(fdset);
}

typedef struct StackThreadPair
{
   StackThreadPair(SipStackAndThread& receiver, SharedAsyncNotify& sharedUp) : 
mReceiver(receiver), mSharedUp(sharedUp),
                                        mSeltime(0), mNoStackThread(false), 
mCommonIntr(0)
   {
   }
   bool wait(int& thisseltime);
   SipStackAndThread& mReceiver;
   SharedAsyncNotify& mSharedUp;
   int mSeltime;
   bool mNoStackThread;
   SelectInterruptor *mCommonIntr;
};

bool
StackThreadPair::wait(int& thisseltime)
{
   if(mReceiver.getStack()->hasMessage())
   {
       return false;
   }
   thisseltime = mSeltime;
   bool isStrange = false;
   if ( mNoStackThread )
   {
       waitForStacks( mReceiver, mCommonIntr, thisseltime, isStrange);
   }
   else
   {
       thisseltime = 4000;
       bool gotPost = mSharedUp.waitNotify(thisseltime);
       isStrange = !gotPost;
   }
   return isStrange;
}

void SipStackAndThread::receivedMsg(StackThreadPair& pair)
{
        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"This is the received stack %x", 
getStack());
        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"This is the received mStack %x", 
mStack);
        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"This is the send Stack %x", 
GStack);

        UInt64 startTime = Timer::getTimeMs();
        static long runs = 0;

        while(1)//mStack->mAsyncProcessHandler)
        {
                GStack->process(CG_Fdset);

                int thisseltime = 0;
                runs++;
                bool isStrange = pair.wait(thisseltime);
                if (isStrange)
                {
                }
                UInt64 elapsed = Timer::getTimeMs() - startTime;

                received = GStack->receive();

                //LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"Received %x", 
received);
                if (received)
                {
                        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"Received 
SIPMessage from stack");
                        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"GStack %x", 
GStack);
                        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"mStack %x", 
mStack);
                        ProtoSIPMessage *protoSipMessage = new 
ProtoSIPMessage();
                        protoSipMessage->set_reqeventtype(SPB_ET_INVALID);
                        protoSipMessage->set_resstatuscode(SPB_RSP_INVALID);

                        if(received->isRequest() == true)
                        {
                                LOG(LOGLEVEL_INFO, __FILE__, 
__LINE__,"SIPRequest: %s", 
getMethodName(received->header(h_RequestLine).getMethod()).c_str());
                                Contents* body = received->getContents();
                                SdpContents* sdp = 
dynamic_cast<SdpContents*>(body);

                                MethodTypes meth = 
received->header(h_RequestLine).getMethod();
                                if(meth == OPTIONS)
                                {
                                        NameAddr contact;
                                        contact.uri().scheme() = "sip";
                                        contact.uri().user() = "heartbeat";
                                        contact.uri().host() = 
SipStack::getHostname();
                                        contact.uri().port() = gPort;
                                        //contact.uri().param(p_transport) = 
Tuple::toData(mTransport);
                                        auto_ptr<SipMessage> 
msg200(Helper::makeResponse(*received, 200, contact));
                                        //getStack()->send(*msg200);
                                        GStack->send(*msg200);
                                        delete protoSipMessage;
                                        continue;
                                }

                                fnG_decodeSIPMessageToProtoBuff(received, 
protoSipMessage);
                                if(sdp)
                                        fnG_decodeSDPBodyToProtoBuf(sdp, 
protoSipMessage);

                                int packSize = protoSipMessage->ByteSize()+4;
                                char *packBuf = new char[packSize+1];
                                google::protobuf::io::ArrayOutputStream 
arrayOut(packBuf, packSize);
                                google::protobuf::io::CodedOutputStream 
codedOut(&arrayOut);
                                
codedOut.WriteVarint32(protoSipMessage->ByteSize());
                                
protoSipMessage->SerializeToCodedStream(&codedOut);

                                //LOG(LOGLEVEL_INFO, __FILE__, 
__LINE__,"Protobuf packbuf: 0x%x created for callid: %s", packBuf, \
                                //              
protoSipMessage->siprequest().headers().callid().c_str());

                                MsgData_t *l_Msg = new MsgData_t;
                                l_Msg->MsgType = SIP_MESSAGE_TYPE;
                                l_Msg->t.m_SipMsg.packBuf = packBuf;
                                l_Msg->t.m_SipMsg.packLen = 
codedOut.ByteCount();
                                //l_Msg->t.m_SipMsg.stack = getStack();
                                l_Msg->t.m_SipMsg.stack = GStack;
                                l_Msg->t.m_SipMsg.sipRequest = received;
                                //LOG(LOGLEVEL_INFO, __FILE__, 
__LINE__,"Inserting in msg queue");

                                
CB2BWorkerThread::instance().AddMsgToQueue(*l_Msg,1);
                                if(l_Msg)
                                        delete l_Msg;

                                //delete packBuf;
                        }
                        else if(received->isResponse() == true)
                        {
                                LOG(LOGLEVEL_INFO, __FILE__, 
__LINE__,"SIPResponse: %d %s", received->header(h_StatusLine).statusCode(), 
received->header(h_StatusLine).reason().c_str());
                                Contents* body = received->getContents();
                                SdpContents* sdp = 
dynamic_cast<SdpContents*>(body);

                                fnG_decodeSIPMessageToProtoBuff(received, 
protoSipMessage);
                                if(sdp)
                                        fnG_decodeSDPBodyToProtoBuf(sdp, 
protoSipMessage);

                                int packSize = protoSipMessage->ByteSize()+4;
                                char *packBuf = new char[packSize+1];
                                google::protobuf::io::ArrayOutputStream 
arrayOut(packBuf, packSize);
                                google::protobuf::io::CodedOutputStream 
codedOut(&arrayOut);
                                
codedOut.WriteVarint32(protoSipMessage->ByteSize());
                                
protoSipMessage->SerializeToCodedStream(&codedOut);

                                //LOG(LOGLEVEL_INFO, __FILE__, 
__LINE__,"Protobuf packbuf: 0x%x created for callid: %s", packBuf, \
                                                
protoSipMessage->siprequest().headers().callid().c_str());

                                MsgData_t *l_Msg = new MsgData_t;
                                l_Msg->MsgType = SIP_MESSAGE_TYPE;
                                l_Msg->t.m_SipMsg.packBuf = packBuf;
                                l_Msg->t.m_SipMsg.packLen = 
codedOut.ByteCount();
                                //l_Msg->t.m_SipMsg.stack = getStack();
                                l_Msg->t.m_SipMsg.stack = GStack;
                                l_Msg->t.m_SipMsg.sipRequest = received;
                                //LOG(LOGLEVEL_INFO, __FILE__, 
__LINE__,"Inserting in msg queue");

                                
CB2BWorkerThread::instance().AddMsgToQueue(*l_Msg,1);
                                if(l_Msg)
                                        delete l_Msg;

                                //delete packBuf;
                        }
                        else
                        {
                                LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"Received 
unknown sipmessage... ignore");
                        }
                        delete protoSipMessage;
                }
        }
}

bool SipStackAndThread::sendMsgToStack(ProtoSIPMessage *pCL_PBSipMsg, 
SipMessage *pCL_SIPRequest)
{
        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"sendMsgToStack >>>");
        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"mStack %x", mStack);
        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"GStack %x", GStack);
        SipMessage *pCL_SipStackMsg = NULL;

        /*
        char pscL_SIPMsg[4000] = {0};
        fnG_decodeSIPMessageToString(pCL_PBSipMsg, pscL_SIPMsg);
        LOG(LOGLEVEL_INFO,__FILE__, __LINE__, "%s", pscL_SIPMsg);
        */

        pCL_SipStackMsg = fnG_encodeSipPBMsgToSIPStackMessage(pCL_PBSipMsg, 
pCL_SipStackMsg, pCL_SIPRequest);

        GStack->send(*pCL_SipStackMsg);
        GStack->buildFdSet(CG_Fdset);

        fnG_decodeAndPrintStackMsg(pCL_SipStackMsg);

        bG_SendStackFdSet = true;

        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"sent request out");

        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"sendMsgToStack <<<");
        return true;
}

void SipStackAndThread::init()
{
        LOG(LOGLEVEL_INFO, __FILE__, __LINE__,"SipStackAndThread::init()");
        Log::initialize(Log::Cout, Log::toLevel("STACK"), NULL,NULL,NULL);
        gPort = 2271; //getPort();
        int tpFlags = 0;

        const char* threadType = "multithreadedstack";
        int statisticsInterval=60;
        std::vector<Transport*> transports;

        const char *eachThreadType = threadType;
        SelectInterruptor *commonIntr = NULL;
        AsyncProcessHandler *notifyUp = NULL;
        bool noStackThread = false;
        SharedAsyncNotify sharedUp;
        notifyUp = &sharedUp;

        SipStackAndThread receiver(eachThreadType, notifyUp, &sharedUp);

        receiver.getStack()->setStatisticsInterval(statisticsInterval);

        transports.push_back(receiver->addTransport(UDP, gPort, V4, 
StunDisabled,/*ipInterface*/Data::Empty,/*sipDomain*/Data::Empty,/*keypass*/Data::Empty,SecurityTypes::TLSv1,
 tpFlags));

        std::auto_ptr<CongestionManager> receiverCongestionManager;
        std::auto_ptr<CongestionManager> senderCongestionManager;

        std::vector<TransportThread*> transportThreads;

        if(tpFlags & RESIP_TRANSPORT_FLAG_OWNTHREAD)
        {
                while(!transports.empty())
                {
                        transportThreads.push_back(new 
TransportThread(*transports.back()));
                        transportThreads.back()->run();
                        transports.pop_back();
                }
        }

        receiver.run();

        StackThreadPair pair(receiver, sharedUp);
        pair.mSeltime = 100;//seltime;
        pair.mCommonIntr = commonIntr;
        pair.mNoStackThread = noStackThread;
        receiver.receivedMsg(pair);
        receiver.join();
}
putq SUCESS retval:1DEBUG | 20170719-141343.156 |  | RESIP | 140643840018176 | 
SipStack.cxx:594 | SEND: SipReq:  INVITE 1.1.5695103.en-fe@10.10.30.111:5060 
tid=5615554850bd4935 cseq=1 INVITE contact=SonetelPBX@49.57.50.46:30029 / 1 
from(tu)
STACK | 20170719-141343.157 |  | RESIP:TRANSACTION | 140643582072576 | 
TransactionState.cxx:168 | No matching transaction for SipReq:  INVITE 
1.1.5695103.en-fe@10.10.30.111:5060 tid=5615554850bd4935 cseq=1 INVITE 
contact=SonetelPBX@49.57.50.46:30029 / 1 from(tu)
STACK | 20170719-141343.157 |  | RESIP:TRANSACTION | 140643582072576 | 
TransactionState.cxx:68 | Creating new TransactionState: tid=5615554850bd4935 [ 
ClientInvite/Calling reliable target=[ V4 0.0.0.0:0 UNKNOWN_TRANSPORT target 
domain=unspecified mFlowKey=0 ]]
STACK | 20170719-141343.157 |  | RESIP:TRANSACTION | 140643582072576 | 
TransactionState.cxx:1149 | TransactionState::processClientInvite: SipReq:  
INVITE 1.1.5695103.en-fe@10.10.30.111:5060 tid=5615554850bd4935 cseq=1 INVITE 
contact=SonetelPBX@49.57.50.46:30029 / 1 from(tu) tid=5615554850bd4935 [ 
ClientInvite/Calling reliable target=[ V4 0.0.0.0:0 UNKNOWN_TRANSPORT target 
domain=unspecified mFlowKey=0 ]]
DEBUG | 20170719-141343.157 |  | RESIP:TRANSACTION | 140643582072576 | 
TimerQueue.cxx:50 | Adding timer: Timer B tid=5615554850bd4935 ms=32000
STACK | 20170719-141343.157 |  | RESIP:TRANSACTION | 140643582072576 | 
TransactionState.cxx:2511 | sendToWire with no dns result: tid=5615554850bd4935 
[ ClientInvite/Calling reliable target=[ V4 0.0.0.0:0 UNKNOWN_TRANSPORT target 
domain=unspecified mFlowKey=0 ]]
DEBUG | 20170719-141343.157 |  | RESIP:TRANSPORT | 140643582072576 | 
TransportSelector.cxx:463 | Looking up dns entries (from route) for 
sip:10.10.30.113:30029
DEBUG | 20170719-141343.157 |  | RESIP:DNS | 140643582072576 | 
DnsResult.cxx:249 | DnsResult::lookup sip:10.10.30.113:30029
DEBUG | 20170719-141343.157 |  | RESIP:DNS | 140643582072576 | 
DnsResult.cxx:471 | Numeric result so return immediately: [ V4 
10.10.30.113:30029 UDP target domain=10.10.30.113 mFlowKey=0 ]
STACK | 20170719-141343.157 |  | RESIP:TRANSACTION | 140643582072576 | 
TransactionState.cxx:723 | Found matching transaction for Client 
DnsResultMessage: tid=5615554850bd4935 -> tid=5615554850bd4935 [ 
ClientInvite/Calling reliable target=[ V4 0.0.0.0:0 UNKNOWN_TRANSPORT target 
domain=unspecified mFlowKey=0 ]]
STACK | 20170719-141343.157 |  | RESIP:TRANSACTION | 140643582072576 | 
TransactionState.cxx:1149 | TransactionState::processClientInvite: Client 
DnsResultMessage: tid=5615554850bd4935 tid=5615554850bd4935 [ 
ClientInvite/Calling reliable target=[ V4 0.0.0.0:0 UNKNOWN_TRANSPORT target 
domain=unspecified mFlowKey=0 ]]
STACK | 20170719-141343.157 |  | RESIP:TRANSACTION | 140643582072576 | 
TransactionState.cxx:2350 | tid=5615554850bd4935 [ ClientInvite/Calling 
reliable target=[ V4 0.0.0.0:0 UNKNOWN_TRANSPORT target domain=unspecified 
mFlowKey=0 ]] got DNS result: 10.10.30.113 --> [[ V4 10.10.30.113:30029 UDP 
target domain=10.10.30.113 mFlowKey=0 ]]
STACK | 20170719-141343.157 |  | RESIP:DNS | 140643582072576 | 
DnsResult.cxx:228 | Returning next dns entry: [ V4 10.10.30.113:30029 UDP 
target domain=10.10.30.113 mFlowKey=0 ]
STACK | 20170719-141343.157 |  | RESIP:TRANSACTION | 140643582072576 | 
TransactionState.cxx:2395 | Unreliable transport: tid=5615554850bd4935 [ 
ClientInvite/Calling unreliable target=[ V4 0.0.0.0:0 UNKNOWN_TRANSPORT target 
domain=unspecified mFlowKey=0 ]]
DEBUG | 20170719-141343.157 |  | RESIP:TRANSACTION | 140643582072576 | 
TimerQueue.cxx:50 | Adding timer: Timer A tid=5615554850bd4935 ms=500
DEBUG | 20170719-141343.157 |  | RESIP:TRANSPORT | 140643582072576 | 
TransportSelector.cxx:1376 | findTransportBySource([ V4 192.168.2.106:2271 UDP 
target domain=unspecified mFlowKey=0 ])
DEBUG | 20170719-141343.157 |  | RESIP:TRANSPORT | 140643582072576 | 
TransportSelector.cxx:1390 | should port be ignored: 0
DEBUG | 20170719-141343.157 |  | RESIP:TRANSPORT | 140643582072576 | 
TransportSelector.cxx:1419 | findTransport (any interface) => Transport: [ V4 
0.0.0.0:2271 UDP target domain=unspecified mFlowKey=33 ]
ERR | 20170719-141343.157 |  | RESIP | 140643582072576 | DataParameter.cxx:91 | 
Accessing defaulted DataParameter: 'tag'
B2BServer: DataParameter.cxx:93: virtual std::ostream& 
resip::DataParameter::encode(std::ostream&) const: Assertion `!mValue.empty()' 
failed.
ORA-24550: signal received: [si_signo=6] [si_errno=0] [si_code=-6] [si_int=0] 
[si_ptr=(nil)] [si_addr=0x1f400003d46]