[sr-dev] Dialog2 and proxy initiated early dialog termination

Timo Reimann timo.reimann at 1und1.de
Fri Sep 30 11:38:50 CEST 2011


On 29.09.2011 17:30, Jason Penton wrote:
> yeah, make sense. Ok, we will proceed exposing fake_reply in tm and
> start a new branch for everyone to review. Any tips on how to create a
> branch using GIT? ;) - I'm paranoid of doing something wrong to git
> master ;)

You simply need to push your changes to a new, non-existing remote
branch. This should do the trick:

  git push origin <your local branch name>:<your git user name>/<new
remote branch name>

For instance,

  git push origin master_dialog2:jpenton/dialog2

When I did it for the first time I got weird permission errors; this was
because I didn't use my correct git user name, so watch out for that.


Cheers,

--Timo



> On Thu, Sep 29, 2011 at 5:05 PM, Timo Reimann <timo.reimann at 1und1.de
> <mailto:timo.reimann at 1und1.de>> wrote:
> 
>     Hey Jason,
> 
> 
>     On 29.09.2011 16:54, Jason Penton wrote:
>     > Awesome, thanks Timo. However, The example you give here is to store
>     > dlg_cell in transaction. Actually, we are using the reverse, se pseudo
>     > code below:
>     >
>     > when INVITE req_forwarded callback is called, create dialog_in
>     > structure, link and store pointer to transaction in dlg_cell
>     > if we get a request to terminate dialog that is unconfirmed we get the
>     > transaction ptr from dlg_cell and traverse through branches, sending
>     > fake_reply (480/408/x).
> 
>     Dialogs aren't stored in transactions, they are stored (hackishly) in
>     transaction callbacks (better: attached to them). But anyways, I think
>     the uses-relationships are similar in both cases: The dialog module is
>     called and needs to refer to its transaction. The current module's
>     pseudo-code:
> 
>     "When INVITE on_create callback is called: create dialog structure, link
>     and store pointer to transaction in tm callback.
>     If we a response, fetch the transaction ptr from the tm callback to
>     allow access to dialog variables."
> 
>     AFAICS, all that differs is the location of the transaction pointer
>     which is currently stored in a tm callback (bad) while you use the
>     dialog structure (good). Let me know if I get things wrong.
> 
> 
>     Cheers,
> 
>     --Timo
> 
> 
> 
>     > On Thu, Sep 29, 2011 at 4:34 PM, Timo Reimann
>     <timo.reimann at 1und1.de <mailto:timo.reimann at 1und1.de>
>     > <mailto:timo.reimann at 1und1.de <mailto:timo.reimann at 1und1.de>>> wrote:
>     >
>     >     Hi Jason,
>     >
>     >
>     >     On 29.09.2011 16:06, Jason Penton wrote:
>     >     > Ok Dialog2 progressing nicely. We now have dialogs and their
>     >     associated
>     >     > out dialogs (branches / forking) stored and managed within
>     the dialog2
>     >     > module. For the moment, we have excluded DB support but will add
>     >     once we
>     >     > check in to git. One thing we need a little assistance with:
>     >     >
>     >     > We have just finished the prototype for proxy initiated
>     early dialog
>     >     > termination, but we are concerned with the way it has been done.
>     >     > Basically as mentioned in the wiki
>     >     >
>     >    
>     (http://www.kamailio.org/dokuwiki/doku.php/modules-new-design:dialog-module-design),
>     >     >
>     >     >
>     >     >     *
>     >     >       It should be possible to terminate dialogs in the
>     “early” state,
>     >     >       i.e., sending out BYE/CANCEL requests in order to
>     terminate all
>     >     >       branches appropriately.
>     >     >           o
>     >     >             ibc: IMHO it would be easier just to cancel the
>     >     transaction
>     >     >             as when fr_inv_timer expires, this is, by
>     sending a CANCEL
>     >     >             to all the pending branches and a 408 to the UAC
>     >     (perhaps in
>     >     >             this case a 480 would be more appropriate).
>     >     >
>     >     > The only way we could think of doing this was to send a fake
>     reply via
>     >     > the TM module. We have therefore exposed the fake_reply
>     function from
>     >     > the TM module and using that to terminate early dialogs. It
>     works
>     >     in the
>     >     > test scenarios we have performed, but the main drawback we
>     can see
>     >     here
>     >     > is that the dialog module needs to hold a pointer to the
>     >     transaction for
>     >     > each dialog (not sure how bad this is as my experience with
>     tm is not
>     >     > expert yet ;) )
>     >     >
>     >     > So any thoughts/ideas. Is this the correct way to do it?
>     Would it be
>     >     > okay to expose a fake_reply function through TM API?
>     >
>     >     I cannot comment on how good or bad it is to expose the fake_reply
>     >     function.
>     >
>     >     Regarding pointing each dialog to its associated transaction
>     at a given
>     >     time: This is already implemented in the current dialog(1)
>     module. It
>     >     was needed for several reasons, one of them being to allow
>     access to
>     >     dialog variables in responses. The way the link between
>     dialogs and
>     >     transactions is done is by attaching a transaction pointer to the
>     >     TMCB_MAX callback which is fetched when required. Look at
>     >     store_dlg_in_tm() in dlg_handlers.c and get_dialog_from_tm() in
>     >     dlg_profile.c.
>     >
>     >     Yes, abusing TMCB_MAX to store additional data is kinda
>     hackish. The
>     >     point here is that the dialog/transaction linkage is
>     definitely needed,
>     >     so IMHO you may go ahead and re-establish it in dialog2. Finding a
>     >     cleaner implementation approach that doesn't involve TMCB_MAX
>     is highly
>     >     appreciated though.
>     >
>     >
>     >     HTH,
>     >
>     >     --Timo



More information about the sr-dev mailing list