The SQL Cacher module I mentioned does exactly this already. It seems you’ve just created a very simplified version of that module in your script. I’d recommend checking it out:
https://opensips.org/docs/modules/3.2.x/sql_cacher.html Ben Newlin From: Users <[email protected]> on behalf of Alexey <[email protected]> Date: Friday, February 9, 2024 at 12:46 PM To: OpenSIPS users mailling list <[email protected]> Subject: Re: [OpenSIPS-Users] variable/avp value check EXTERNAL EMAIL - Please use caution with links and attachments Hi list, the problem was solved. Highlights: 1. Select data from DB using timer_route with timeout (for regular data updates) and store it in AVP. This AVP is seen in timer_route only. So, put all its values into the local_cache (with the same timeout), to be able to use it in the main route. timer_route[id_update, 300] { # get all IDs of customers who have some feature (our inner logic) # and store all them in a single AVP. avp_db_query("select customer_id from customers","$avp(goldencustomers)"); # put each AVP's index value into a separate local_cache attribute (record) with value "1". for ($var(blahblah) in $(avp(goldencustomers)[*])) cache_store ("local","goldencustomers_$var(blahblah)","1",300); } -------------------------------------------------------------------------------- 2. Get needed parts of SIP-headers according to our inner logic... Don't forget to reset variables before applying the value! (See "Hints" section: https://www.opensips.org/Documentation/Script-CoreVar-3-2#varscript ) # main route route { ... # initial INVITES section ... $var(customerfullid) = NULL; $var(customerfullid) = $(fn{s.select,0, }); # get "Customer-1234 from full CallerID. index 0, separator is space. $var(customerid) = NULL; $var(customerid) = $(var(customerfullid){s.select,1,-}); # get 1234 from "Customer-1234 $var(ret) = NULL; cache_fetch("local", "goldencustomers_$var(blahblah)", $var(ret)); # check if there is a local_cache attribute value for INVITE with such ID in 'From:' header if ($var(ret) == "1") { xlog("L_INFO", "[$ci] attr value from cache_local is: $var(ret) . $var(customerfullid) has privileges. goto route customers_gold"); route(customers_gold); } else { xlog("L_INFO", "[$ci] attr value from cache_local is: $var(ret) . $var(customerfullid) has no privileges. goto route customers_all"); route(customers_all); } ... } #main route END -------------------------------------------------------------------------------- 3. Additional routes. # do not apply global call-limits here route[customers_gold] { xlog("L_INFO", "[$ci] This is $route . This $var(customerfullid) has privileges. Global call-limits not applied."); ... } # apply global call-limits here route[customers_all] { xlog("L_INFO", "[$ci] This is $route . This $var(customerfullid) has no privileges. Global call-limits applied."); ... # call-limit logic } -- best regards, Alexey https://alexeyka.zantsev.com _______________________________________________ Users mailing list [email protected] http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________ Users mailing list [email protected] http://lists.opensips.org/cgi-bin/mailman/listinfo/users
