Hi Ross,

Just to be sure, the  get_dialog_info () looks only for ongoing call.

Could you briefly describe your call flow, just to understand better 
when it works and when it doesn't.

Regards,
Bogdan


Ross Beer wrote:
> Hi Bogdan,
>
> Thank you for the advice, however I do call setflag(4) &
> create_dialog(). Flag 4 is dialog flag.
>
> I have included the routing script below which shows the same method
> but using the dispatcher. The issue here is that the get_dialog_info
> does not find the previous call. Only for the dialogue its already in,
> for example in an invite that requires auth.
>
> It's a strange one and I can't pin point where I have gone wrong :-(
>
>
>       # initial sanity checks -- messages with
>       # max_forwards==0, or excessively long requests
>       if (!mf_process_maxfwd_header("10"))
>       {
>               sl_send_reply("483","Too Many Hops");
>               exit;
>       };
>
>       if (msg:len >=  3072)
>       {
>               sl_send_reply("513", "Message too big");
>               exit;
>       };
>
>
>       #---- NAT Detection ----#
>       force_rport();
>       if (nat_uac_test("19"))
>       {
>               #force_rport();
>               if (method=="REGISTER")
>               {
>                       fix_nated_register();
>               }
>               else
>               {
>                       fix_nated_contact();
>               }
>               setflag(5);
>       }
>       
>       if(has_body("application/sdp"))
>       {
>               if(nat_uac_test("8"))
>               {
>                       fix_nated_sdp("3");
>               }
>       }
>
>
>       # we record-route all messages -- to make sure that
>       # subsequent messages will go through our proxy; that's
>       # particularly good if upstream and downstream entities
>       # use different transport protocol
>       if (!method=="REGISTER")
>       {
>               record_route();
>       }
> #
> #     # subsequent messages withing a dialog should take the
> #     # path determined by record-routing
>       if (loose_route())
>       {
>               # mark routing logic in request
>               xlog("Loose Route\n");
>               append_hf("P-hint: rr-enforced\r\n");
>               route(1);
>       };
>
>         # handle cancel and re-transmissions
>       if ( is_method("CANCEL") ) {
>               if ( t_check_trans() )
>                       t_relay();
>               exit;
>       }
>
>       if(is_method("INVITE"))
>       {
>               setflag(4);
>               create_dialog();
>       }
>
>
>       # Do Not Allow Publish Or Subscribe
>       if( is_method("PUBLISH|SUBSCRIBE"))
>       {
>               sl_send_reply("508", "Method Not Supported");
>               exit;
>       }
>
>       
>
>       # if the request is for other domain use UsrLoc
>       # (in case, it does not work, use the following command
>       # with proper names and addresses in it)
>       if (uri==myself)
>       {
>               if(method=="REGISTER")
>               {
>                       # Uncomment this if you want to use digest 
> authentication
>                       if (!www_authorize("", "subscriber")) {
>                               www_challenge("", "0");
>                               exit;
>                       };
>
>                       #---- Request is behind NAT(flag5) save with bflag 6 
> ----#
>                       #---- Use bflag 7 to start SIP pinging (Options)     
> ----#
>                       if (isflagset(5))
>                       {
>                               setbflag(6);
>                               #setbflag(7);
>                       };
>
>                       save("location", "c1f");
>                       exit;
>               };
>               
>               ##############################
>                 # HANDLE OPTIONS REPLY       #
>                 ##############################
>               if(is_method("OPTIONS"))
>               {
>                       xlog("OPTIONS REPLY - FROM $fU\r\n");
>                       # send reply for each options request
>                       sl_send_reply("200", "ok");
>                       exit();
>               }
>
>               ##############################
>                 # HANDLE NOTIFY              #
>                 ##############################
>               if(is_method("NOTIFY"))
>                 {
>                       # FOR LOCAL USER
>                         if (!lookup("location"))
>                         {
>                               if 
> (get_dialog_info("server","$var(x)","user","$fU"))
>                                 {
>                                          xlog("Log: Belonds to Server:
> $var(x)\n");
>                                          $du=$var(x);
>
>                                         ## ADD VARIABLE TO ROUTE GATEWAY
>                                         $dlg_val(server) = $var(x);
>                                         $dlg_val(user) = $fU;
>                                         route(1);
>                                       exit;
>                                 }
>                               else
>                               {
>                                       if(!load_balance("1","pstn"))
>                                       {
>                                               sl_send_reply("500","Service 
> full");
>                                                        exit;
>                                       }
>                                 #t_on_failure("1");
>                               }
>                                 xlog("NOTIFY - Non SIP Client Call
> Sent To $du FROM $fU\r\n");
>                         }
>                       xlog("NOTIFY - SIP Client Call Sent To $rU FROM 
> $fU\r\n");
>                       route(1);
>                       exit;
>
>                 }
>
>               ##############################
>               # HANDLE MESSAGES            #  
>               ##############################
>               if (is_method("MESSAGE"))
>               {
>                       if (!proxy_authorize("", "subscriber"))
>                       {
>                               proxy_challenge("", "1");  # Realm will be 
> autogenerated
>                       };
>               
>                       if (!lookup("location"))
>                       {
>                               sl_send_reply("404", "Not Found");
>                               exit;
>                       };
>
>                       #xlog("Log: MESSAGE: looked up user\n");
>                       route(1);
>                       exit;
>               }
>       
>               ##############################
>               # ROUTE CALLS TO DESTINATION #
>               ##############################
>               if (is_method("INVITE"))
>               {
>                       ######################
>                       # CALL PICKUP        #
>                       ######################
>                       if($rU=~"^\*%23[2-9][0-9]{2}")
>                       {
>                               route(2);
>                               exit;
>                       }
>
>                       ######################
>                       # GROUP CALL PICKUP  #
>                       ######################
>                       if($rU=~"^\*0%23[2-9][0-9]{2}")
>                       {
>                               route(2);
>                               exit;
>                       }
>
>                       ######################
>                       # LOCAL DESTINATIONS #
>                       ######################
>                       xlog("Method: $rm rU: $rU\r\n");
>                       if($rU=~"^[1-9][0-9]{4}\*[2-9][0-9]{2}")
>                       {
>                               # FROM LOCAL GATEWAY
>                               # MARK GATEWAY FOR DIALOGUE
>                                               
>                               # native SIP destinations are handled using our 
> USRLOC DB
>                               if (!lookup("location"))
>                               {
>                                       sl_send_reply("404", "Not Found");
>                                       exit;
>                               }
>
>                               $dlg_val(server) = "sip:" + $si + ":5060";
>                                 $dlg_val(user) = $rU;
>
>                               xlog("Log: looked up user for $dlg_val(server) 
> rU: $rU\n");
>                               append_hf("P-hint: usrloc applied\r\n");
>                               route(1);
>                               exit;
>                       }
>                       ############################
>                       # LOAD BALANCE TO GATEWAYS #
>                       ############################
>                       else
>                       {       
>
>                              if($fU=~"^[1-9][0-9]{4}\*[2-9][0-9]{2}")
>                                {
>                                         xlog("fu Match: $fU\n");
>
>                                         # IS PART OF EXISTING CALL
>                                         if
> (get_dialog_info("server","$var(x)","user","$fU"))
>                                         {
>                                                 xlog("************
> Log: Seen Before Call *************\n");
>                                                 xlog("Log: Belonds to
> Server: $var(x)\n");
>                                                 $du=$var(x);
>
>                                                 ## ADD VARIABLE TO ROUTE 
> GATEWAY
>                                                 $dlg_val(server) = $var(x);
>                                                 $dlg_val(user) = $fU;
>                                                 route(1);
>                                                 exit;
>                                         }
>                                       else
>                                       {
>                                               xlog("************ Log: New 
> INVITE *************\n");   
>                                               ## LOAD BALANCE
>                                               ds_select_dst("1", "4");
>                                               t_on_failure("1");
>
>                                               xlog("LB Sent To 
> $avp(i:271)\n");
>                               
>                                               $dlg_val(server) = $avp(i:271);
>                                                 $dlg_val(user) = $fU;
>                                                 route(1);
>                                                 exit;
>                                       }
>                               }
>                               }
>                               # END OF PART OF AN EXISTING CALL ROUTE TO 
> GATEWAY
>               
>                               ## IF NOT A SIP CLIENT JUST LOAD BALANCE
>                               ## WITHOUT LOGGING WHICH GATEWAY
>                               ds_select_dst("1", "4");
>                               t_on_failure("1");
>                               xlog("Not SIP Client Call Sent To $du FROM 
> $fU\r\n");
>                               route(1);
>                               exit;
>                       }
> #             }
>       };
>
>       route(1);
> }
>
>
> Any further advice would be appreciated.
>
> Kind regards,
>
> Ross
>
> On 1 September 2010 10:50, Bogdan-Andrei Iancu <[email protected]> wrote:
>   
>> Hi Ross,
>>
>> To use get_dialog_info() and dlg_val's you must create the dialog before
>> (see create_dialog() function in dialog module) - otherwise all dialog
>> ops are invalid.
>>
>> Regards,
>> Bogdan
>>
>> Ross Beer wrote:
>>     
>>> Hi,
>>>
>>> I am using the following piece of code to set dlg_val and then using
>>> get_dialog_info to check to see if a user already has a call and if so
>>> pass the new call to the same gateway for attended transfer.
>>>
>>> The code works perfectly if in the same dialog, i.e. when an invite is
>>> sent and then requires authentication however it does not appear to
>>> match any results across different dialogs. Also I can not see any
>>> values in the 'vars' column in the dialog database.
>>>
>>> Am I using the feature correctly?
>>>
>>>   # IS PART OF EXISTING CALL
>>> if (get_dialog_info("server","$var(x)","user","$fU"))
>>> {
>>>      xlog("************Log: Seen Before Call *************\n");
>>>     xlog("Log: Belonds to server: $var(x)\n");
>>>      $du=$var(x);
>>>      ## ADD VARIABLE TO ROUTE GATEWAY
>>>      $dlg_val("server") = $var(x);
>>>      $dlg_val("user") = $fU;
>>>       route(1);
>>>       exit;
>>> }
>>> else
>>> {
>>>       xlog("************Log: New INVITE *************\n");
>>>       ds_select_dst("1", "4");
>>>       xlog("LB Sent To $avp(i:271)\n");
>>>
>>>      store_dlg_value("server","$avp(i:271)");
>>>      store_dlg_value("user","$fU");
>>>      #$dlg_val(server) = $avp(i:271);
>>>      #$dlg_val(user) = $fU;
>>>      route(1);
>>>      exit;
>>> }
>>>
>>> Kind regards,
>>>
>>> Ross
>>>
>>> PS - Sorry this is a duplicate but my gmail account doesn't seam to
>>> post messages to the mailing list
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> Users mailing list
>>> [email protected]
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>>       
>> --
>> Bogdan-Andrei Iancu
>> OpenSIPS Bootcamp
>> 20 - 24 September 2010, Frankfurt, Germany
>> www.voice-system.ro
>>
>>
>> _______________________________________________
>> Users mailing list
>> [email protected]
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>
>>     
>
>   


-- 
Bogdan-Andrei Iancu
OpenSIPS Bootcamp
20 - 24 September 2010, Frankfurt, Germany
www.voice-system.ro


_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to