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 <bog...@voice-system.ro> 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
>> Users@lists.opensips.org
>> 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
> Users@lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>

_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to