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

Re: [reSIProcate-users] override CallID and From tag in message


FYI, I’ve done this using the user profile:

 

BaseCreator.cxx:

 

void

BaseCreator::makeInitialRequest(const NameAddr& target, const NameAddr& from, MethodTypes method)

{

   RequestLine rLine(method);

   rLine.uri() = target.uri();  

   mLastRequest->header(h_RequestLine) = rLine;

 

   mLastRequest->header(h_To) = target;

   mLastRequest->header(h_MaxForwards).value() = 70;

   mLastRequest->header(h_CSeq).method() = method;

   mLastRequest->header(h_CSeq).sequence() = 1;

   mLastRequest->header(h_From) = from;

   mLastRequest->header(h_From).param(p_tag) = Helper::computeTag(Helper::tagSize);

   //mod start

   if( false == mUserProfile->getCallID().empty() )

   {

              mLastRequest->header(h_CallId).value() = mUserProfile->getCallID();

   }

   else

   {

   mLastRequest->header(h_CallId).value() = Helper::computeCallId();

   }

//mod end

 

UserProfile.hxx

 

virtual void setCallID(const Data &callidAppend);

virtual Data& getCallID();

 

From: resiprocate-users-bounces@xxxxxxxxxxxxxxx [mailto:resiprocate-users-bounces@xxxxxxxxxxxxxxx] On Behalf Of Aurelien Grimaud
Sent: Tuesday, February 17, 2009 1:17 PM
To: Scott Godin
Cc: resiprocate-users
Subject: Re: [reSIProcate-users] override CallID and From tag in message

 

Ok, thank you.
I have got the callid from message when sent out, but I would like to have it *before* that, even before the INVITE is created.
Bad luck !

I thought of building the INVITE really early, keep somewhere to get the callid, but not sending it.
Do my stuff (with the callid) ...
Send the message and go on processing.
Or, eventually do not send the message (failed to get ressources for transcoding, whatever) and destroy it.

I'll try that, or just let go ...

Thanks.

Scott Godin a écrit :

There is currently no way to use an application provided call id
without modifying DUM code - it shouldn't be too hard to add this.
However, if your only objective is to log the call id you can retreive
the call id that DUM generated for the message before it is sent out.
 
Scott
 
On Tue, Feb 17, 2009 at 2:29 AM, Aurelien Grimaud <gstelzz@xxxxxxxx> wrote:
  
So this is not possible to do something like :
msg = dum.makeInviteSession(...)
msg.header(h_CallID).value() = myCallid ;
dum.send(msg) ;
or is it ?
 
When I do the last thing, all replies are discarded.
Dum sets its dialog tables when makeInviteSession with the generated callid
/ from tag
 
Thanks.
 
Aurelien Grimaud a écrit :
 
Hi,
In my application, I would like log file contains the CallID of Sip Message.
 
When I aact as a UAC, no problem, the CallID is known very early.
But, when I act as a UAS, I make a lot of things before building the Invite
and getting a CallID.
 
Sorry, when I am a UAS, no problem, I receive an INVITE and treat it. CallID
is early known.
When I am a UAC, I make a lot of things before building and sending an
Invite, and I have no CallID to use in my logs or communication with other
processes.
 
So I would like to compute my own callid and pass it to invite message after
building.
 
The problem is that DUM Dialog is registered in mDialogSetMap wilt old
CallID.
Therefore, all responses are rejected because no dialogset is found :-(
 
Is there a way to use a custom built CallID in sip messages ?
 
makeUACDialogSet uses my own AppDialogSet I provided.
But DUM build it's own DialogSet which gets its id from creator which does
not have the new callid
 
It would be fine if DialogSet was build by AppDialogSet.
i.e. add a
virtual AppDialogSet::makeNewDialogSet(BaseCreator *, DialogUsageManager &)
{
    return new DialogSet(creator, *this) ;
}
 
Which could be derived in
virtual MyAppDialogSet::makeNewDialogSet(BaseCreator *, DialogUsageManager
&)
{
    // Make any modification on creator message ...
    creator->getLastRequest()->header(h_CallID).value() = mycallid ;
 
    // Build my own dialog set
    // mId in dialog set will be the right one now !
    return new MyDialogSet(creator, dum) ;
 
}
 
Here is Dum original
 
00463 {
00464    if (mDumShutdownHandler)
00465    {
00466       throw DumException("Cannot create new sessions when DUM is
shutting down.", __FILE__, __LINE__);
00467    }
00468
00469    if (appDs == 0)
00470    {
00471       appDs = new AppDialogSet(*this);
00472    }
- 00473    DialogSet* ds = new DialogSet(creator, *this);
+ 00473    DialogSet *ds = appDs->makeNewDialogSet(creator, *this) ;
00474
00475    appDs->mDialogSet = ds;
00476    ds->mAppDialogSet = appDs;
00477
00478    StackLog ( << "************* Adding DialogSet ***************" );
00479    StackLog ( << "Before: " << Inserter(mDialogSetMap) );
00480    mDialogSetMap[ds->getId()] = ds;
00481    StackLog ( << "After: " << Inserter(mDialogSetMap) );
00482    return ds;
00483 }
 
 
am I missing something ?
 
Aurelien
 
________________________________
_______________________________________________
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/