[SR-Users] Strange behavior for unregister() function. Wrong docs? Bug?

Daniel-Constantin Mierla miconda at gmail.com
Tue Aug 13 10:23:05 CEST 2019


I just updated the code to allow unregister() in all route block types.

Cheers,
Daniel

On 13.08.19 09:38, Joel Serrano wrote:
> Great!!! This is good to know!!
>
> Thank you Daniel!
> Joel.
>
> On Tue, Aug 13, 2019 at 12:36 AM Daniel-Constantin Mierla
> <miconda at gmail.com <mailto:miconda at gmail.com>> wrote:
>
>     Hello,
>
>     that is a "known hack" to go around the route block type
>     restrictions for functions.
>
>     The purpose of the restrictions is to limit the usage in the
>     blocks where the developer intended to allow the function to be
>     used, like she/he tested for those route blocks or thought it is
>     enough there and didn't analyze the effects when using in other
>     route block types.
>
>     However, many functions are just safe to use in other route block
>     types than those imposed by the developer.
>
>     Probably the unregister() is safe in onreply block, because it
>     doesn't need to generate a reply or use information from request URI.
>
>     Cheers,
>     Daniel
>
>     On 13.08.19 07:28, Joel Serrano wrote:
>>     Forgot to add:
>>
>>     root at csbc01:~# kamailio -V
>>     version: kamailio 5.3.0-dev7 (x86_64/linux)
>>     flags: STATS: Off, USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS,
>>     USE_RAW_SOCKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MMAP,
>>     PKG_MALLOC, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY,
>>     USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE,
>>     USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES
>>     ADAPTIVE_WAIT_LOOPS 1024, MAX_RECV_BUFFER_SIZE 262144,
>>     MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB
>>     poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
>>     id: unknown
>>     compiled with gcc 8.3.0
>>     root at csbc01:~#
>>
>>
>>
>>     On Mon, Aug 12, 2019 at 2:13 PM Joel Serrano <joel at textplus.com
>>     <mailto:joel at textplus.com>> wrote:
>>
>>         Hello, 
>>
>>         I'm playing around with the unregister() function from the
>>         registrar module:
>>
>>         https://www.kamailio.org/docs/modules/devel/modules/registrar.html#registrar.f.unregister
>>
>>         Docs say that that it can be used in REQUEST_ROUTE or
>>         FAILURE_ROUTE.
>>
>>         I needed it in REPLY_ROUTE, and before reading the docs I
>>         tried it and got this error:
>>
>>         Aug 12 15:52:44 csbc01 kamailio: CRITICAL: <core>
>>         [core/cfg.y:3526]: yyerror_at(): parse error in config file
>>         /etc/kamailio/csbc/reply_routes.cfg, line 27, column 71:
>>         Command cannot be used in the block#012
>>         Aug 12 15:52:44 csbc01 kamailio[12737]: ERROR: bad config
>>         file (1 errors)
>>
>>         But, I have this working on another setup, I compared, and my
>>         difference is that I'm running unregister() inside a route,
>>         and calling that route from reply_route, and that works (and
>>         by works, I mean it also does what it is supposed to do,
>>         which is unregister the AoR).
>>
>>         So this doesn't work:
>>
>>         ...
>>         onreply_route[MANAGE_REG_REPLY] {
>>              if(status=~"2[0-9][0-9]") {
>>                  if(($sel(contact.expires)==0) || ($hdr(Expires)==0)){
>>                     if (unregister("location",
>>         "$sht(sipserver=>$fU::contact)")) {
>>                         xlog("L_NOTICE", "[usrloc] removed user
>>         location\n");
>>                     }
>>                     route(DEL_SIPSERVER);
>>         }
>>         ...
>>
>>         But this works:
>>
>>         ...
>>         onreply_route[MANAGE_REG_REPLY] {
>>              if(status=~"2[0-9][0-9]") {
>>                  if(($sel(contact.expires)==0) || ($hdr(Expires)==0)){
>>                     route(UNREG_CUSTOMER);
>>                     route(DEL_SIPSERVER);
>>         }
>>         ...
>>
>>         ...
>>         route[UNREG_CUSTOMER] {
>>                     if (unregister("location",
>>         "$sht(sipserver=>$fU::contact)")) {
>>                         xlog("L_NOTICE", "[usrloc] removed user
>>         location\n");
>>                     }
>>         }
>>         ...
>>
>>
>>
>>         So I'm in no-mans-land right now, docs say it's not allowed
>>         in REPLY_ROUTE, and if I try it it will fail, but if I try it
>>         inside a route, it woks (hack?).
>>
>>         What is the correct approach here? Should unregister() be
>>         valid in reply_route (like other similar functions, for
>>         example: save()) and therefor docs should be updated and the
>>         error in the logs should also be updated, or if it's really
>>         not supported, shouldn't Kamailio not let me use it anywhere
>>         that a ends up being called from reply_route?
>>
>>         I hope I have explained myself correctly. As always, please
>>         let me know if this should be a GH issue instead and I'll
>>         happily create it.
>>
>>         Thanks, 
>>         Joel.
>>
>>
>>
>>
>>     _______________________________________________
>>     Kamailio (SER) - Users Mailing List
>>     sr-users at lists.kamailio.org <mailto:sr-users at lists.kamailio.org>
>>     https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
>
>     -- 
>     Daniel-Constantin Mierla -- www.asipto.com <http://www.asipto.com>
>     www.twitter.com/miconda <http://www.twitter.com/miconda> -- www.linkedin.com/in/miconda <http://www.linkedin.com/in/miconda>
>
-- 
Daniel-Constantin Mierla -- www.asipto.com
www.twitter.com/miconda -- www.linkedin.com/in/miconda

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20190813/b378b656/attachment.html>


More information about the sr-users mailing list