[reSIProcate] Duplicate transaction id's in sequential NICT (INF0 Requests)

Keohane, Stephen Stephen.Keohane at scansoft.com
Thu Sep 15 18:24:33 CDT 2005


Hello,

 

I'm stuck on a problem using DUM to send sequential INFO response/requests
after I have established a call.

 

I'm seeing a transaction Id reused in requests which causes the response not
to be sent up to the application layer.

 

Essentially, I have multiple threads that request a singleton object (SipH)
to create and send Info messages to a UAS. When I receive a response from
the INFO, I process it from another thread which has the
dum->process(fdset);

 

The method which has the dum->process() is mutexed with the methods that
create requests.

 

Here is the code snippet which creates the requests:

 

 

try 

{

  std::auto_ptr<resip::Contents> contents(new
resip::PlainContents(message.c_str()));

 

  resip::SipMessage& infoMessage = pep->inviteSession()->makeInfo(contents);

 

  TRACE("SipH::sendInfo() -- ", infoMessage.brief().c_str());

 

  pep->inviteSession()->send(infoMessage);

 

}

catch(resip::BaseException& be) {}

 

 

Each call object (pep) keeps its own inviteSession. In my scenario I am only
running one call. The requests are a couple of seconds apart - the UAS
responds almost immediately.

My log format is seconds:thread:Class:method() - message and I am using
SIpMessage::brief() here.

 

Here is the pertinent info from my log:

 

 

1126822932:2528:SipH::sendInfo() --  SipReq:  INFO admin at 10.1.17.70:5060
tid=eb01e926a62eb30b cseq=INFO contact=administrator / 2 from(tu)

 

1126822932:3876:SipInviteSessionHandler::onInfoSuccess() --  SipResp: 200
tid=3c15db120c39877e cseq=INFO / 2 from(wire)

 

1126822935:2856:SipH::sendInfo() --  SipReq:  INFO admin at 10.1.17.70:5060
tid=234829008467be18 cseq=INFO contact=administrator / 3 from(tu)

 

1126822935:3876:SipInviteSessionHandler::onInfoSuccess() --  SipResp: 200
tid=6c3de14aae72d62c cseq=INFO / 3 from(wire)

 

1126822937:3684:SipH::sendInfo() --  SipReq:  INFO admin at 10.1.17.70:5060
tid=234829008467be18 cseq=INFO contact=administrator / 4 from(tu)

 

The reSIProcate logs look fine - they essentially tell the same story. The
duplicate tid shows up first from Dialog::makeRequest and it is not clear to
me how it obtains a transaction id.

 

I've created a test program based on basicCall and it processes
requests/responses without incident. The onAnswer sends a infoMessage and
the onInfoSuccess sends infoMessages. It might be a rather brutal test but
it works. Here is the OnAnswer and OnInfoSuccess:

 

virtual void onAnswer(InviteSessionHandle is, const SipMessage& msg, const
SdpContents*sdp)

{

  cout << name << ": InviteSession-onAnswer(SDP)" << endl;

 

  std::string myMsg("Message One");

  std::auto_ptr<resip::Contents> contents(new
resip::PlainContents(myMsg.c_str()));

  resip::SipMessage& infoMessage = is->makeInfo(contents);

 

  is->send(infoMessage);

}

 

virtual void onInfoSuccess(InviteSessionHandle is, const SipMessage& msg)

{

  cout << name << ": InviteSession-onInfoSuccess - " << msg.brief() << endl;

 

  std::string myMsg("Message Two");

  std::auto_ptr<resip::Contents> contents(new
resip::PlainContents(myMsg.c_str()));

  resip::SipMessage& infoMessage = is->makeInfo(contents);

  is->send(infoMessage);

}

 

 

Am I doing something stupid? It wouldn't be the first time. Any help or
advice would be greatly appreciated.

 

Thanks,

 

Stephen Keohane

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20050915/83d8c9cf/attachment.htm>


More information about the resiprocate-devel mailing list