[sr-dev] [kamailio/kamailio] dialplan: dp_match() does substitution and replace (#1952)

Victor Seva notifications at github.com
Wed May 15 09:50:49 CEST 2019


### Description

dialplan ``dp_match()`` fails with a substitution error when subst_exp doesn't match the string. I was expecting to only match the rule to get the attrs no matter what is defined in ``subst_exp/repl_exp``

### Troubleshooting

#### Reproduction

```
=> select * from dialplan where id = 24;
─[ RECORD 1 ]──────────────────────────────────────
id        │ 24
dpid      │ 101000
pr        │ 1
match_op  │ 1
match_exp │ ^00([1-9][0-35-9]|[1-35-9][0-9])[0-9]+$
match_len │ 0
subst_exp │ ^([1-9][0-9]{8})$
repl_exp  │ +34\1
attrs     │ cli=+34654205682;action=0
```

```
route[SET_DST] {
    if($var(dpid_team)==0){
        xdbg("SET_DST no $$var(dpid_team) - ci='$ci'");
        return;
    }
    xinfo("SET_DST trying to get dialplan from dpid:$var(dpid_team) - ci'$ci'");
    if(dp_translate("$(var(dpid_team){s.int})", "$rU/$var(dst)")){
        if($rU != $var(dst)){
            xinfo("SET_DST  change from $$rU:'$rU' to '$var(dst)' - ci='$ci'");
            $rU = $var(dst);
        }
    } else {
        xinfo("SET_DST  no valid subst_exp for '$rU' trying to match - ci='$ci'");
        dp_match("$(var(dpid_team){s.int})", "$rU");
    }
    if($var(dp_attrs)!=0) {
        xdbg("SET_DST $$var(dp_attrs):$var(dp_attrs) "
            "action:$(var(dp_attrs){param.value,action}) - ci='$ci'");
        $var(action) = $(var(dp_attrs){param.value,action});
        if($var(action)=='1'){
            xalert("Dialing rule group for '$rU' set to 'deny' - ci='$ci'");
            route(ERROR_DEST_DENY);
        }
    }
    return;
}
```

```
INFO: <script>: SET_DST trying to get dialplan from dpid:101000 - ci'57f955434e6ca1e57727367e4abcff1f at PBX-2797.xpbx.foehn.co.uk'
ERROR: dialplan [dp_repl.c:439]: rule_translate(): the string 0034654205681 matched the match_exp ^00([1-9][0-35-9]|[1-35-9][0-9])[0-9]+$ but not the subst_exp ^([1-9][0-9]{8})$!
ERROR: dialplan [dp_repl.c:727]: dp_translate_helper(): could not build the output
INFO: <script>: SET_DST  no valid subst_exp for '0034654205681' trying to match - ci='57f955434e6ca1e57727367e4abcff1f at PBX-2797.xpbx.foehn.co.uk'
ERROR: dialplan [dp_repl.c:439]: rule_translate(): the string 0034654205681 matched the match_exp ^00([1-9][0-35-9]|[1-35-9][0-9])[0-9]+$ but not the subst_exp ^([1-9][0-9]{8})$!
ERROR: dialplan [dp_repl.c:727]: dp_translate_helper(): could not build the output
```
### Additional Information

  * **Kamailio Version** - output of `kamailio -v`

```
version: kamailio 5.2.2 (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_MEM, 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 4.8.4
```

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/issues/1952
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-dev/attachments/20190515/a16401c5/attachment.html>


More information about the sr-dev mailing list