diff --git a/lib/NGCP/Panel/Controller/API/Interceptions.pm b/lib/NGCP/Panel/Controller/API/Interceptions.pm index e1d99d5d27..36118527ab 100644 --- a/lib/NGCP/Panel/Controller/API/Interceptions.pm +++ b/lib/NGCP/Panel/Controller/API/Interceptions.pm @@ -195,7 +195,7 @@ sub POST :Allow { $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number is not active"); last; } - $resource->{sip_username} = NGCP::Panel::Utils::Interception::username_to_regexp_pattern($num_rs->first,$sub->username); + $resource->{sip_username} = NGCP::Panel::Utils::Interception::username_to_regexp_pattern($c,$num_rs->first,$sub->username); $resource->{sip_domain} = $sub->domain->domain; if($resource->{x3_required} && (!defined $resource->{x3_host} || !defined $resource->{x3_port})) { @@ -227,7 +227,7 @@ sub POST :Allow { liid => $resource->{liid}, uuid => $resource->{uuid}, number => $resource->{number}, - sip_username => NGCP::Panel::Utils::Interception::username_to_regexp_pattern($num_rs->first,$sub->username), + sip_username => NGCP::Panel::Utils::Interception::username_to_regexp_pattern($c,$num_rs->first,$sub->username), sip_domain => $sub->domain->domain, delivery_host => $resource->{x2_host}, delivery_port => $resource->{x2_port}, diff --git a/lib/NGCP/Panel/Role/API/Interceptions.pm b/lib/NGCP/Panel/Role/API/Interceptions.pm index 70b0156a08..a12b50d23c 100644 --- a/lib/NGCP/Panel/Role/API/Interceptions.pm +++ b/lib/NGCP/Panel/Role/API/Interceptions.pm @@ -129,7 +129,7 @@ sub update_item { return unless($sub && $reseller); $resource->{reseller_id} = $reseller->id; - $resource->{sip_username} = NGCP::Panel::Utils::Interception::username_to_regexp_pattern($voip_number,$sub->username); + $resource->{sip_username} = NGCP::Panel::Utils::Interception::username_to_regexp_pattern($c,$voip_number,$sub->username); $resource->{sip_domain} = $sub->domain->domain; if($resource->{liid} && ($old_resource->{liid} ne $resource->{liid})) { @@ -157,7 +157,7 @@ sub update_item { my $res = NGCP::Panel::Utils::Interception::request($c, 'PUT', $item->uuid, { number => $resource->{number}, - sip_username => NGCP::Panel::Utils::Interception::username_to_regexp_pattern($voip_number,$sub->username), + sip_username => NGCP::Panel::Utils::Interception::username_to_regexp_pattern($c,$voip_number,$sub->username), sip_domain => $sub->domain->domain, delivery_host => $resource->{delivery_host}, delivery_port => $resource->{delivery_port}, diff --git a/lib/NGCP/Panel/Utils/Interception.pm b/lib/NGCP/Panel/Utils/Interception.pm index 828ccc364e..cf34a1d102 100644 --- a/lib/NGCP/Panel/Utils/Interception.pm +++ b/lib/NGCP/Panel/Utils/Interception.pm @@ -84,15 +84,28 @@ sub _init { sub username_to_regexp_pattern { - my ($voip_number,$username) = @_; + my ($c,$voip_number,$username) = @_; + + # $c is intended to use $c->config vars here. + # vsc.clir_code is not part of the panel conf, so + # the global conf would be required to load to get it. + # as this is not done elsewhere in panel code yet, we leave + # that as todo for now, and capture any vsc codes. + my $vsc_pattern = '(\*\d+\*)?'; + #my $vsc_pattern = '(\*31\*)?'; + my @pattern_elements = (); - #1. "local format": concat(concat('0',ac),sn): - push(@pattern_elements,'0' . $voip_number->ac . $voip_number->sn); - #2. "e164 format": concat(cc,ac,sn): - push(@pattern_elements,$voip_number->cc . $voip_number->ac . $voip_number->sn); - #3. "international format": concat(concat('00',cc),ac,sn): - push(@pattern_elements,'00' . $voip_number->cc . $voip_number->ac . $voip_number->sn); - push(@pattern_elements,quotemeta($username)); + # longest to shortest: + + #1. the sip username itself: + push(@pattern_elements,$vsc_pattern . quotemeta($username)); + #2. "international format": concat(concat('00',cc),ac,sn): + push(@pattern_elements,$vsc_pattern . '00' . $voip_number->cc . $voip_number->ac . $voip_number->sn); + #3. "e164 format": concat(cc,ac,sn): + push(@pattern_elements,$vsc_pattern . $voip_number->cc . $voip_number->ac . $voip_number->sn); + #4. "local format": concat(concat('0',ac),sn): + push(@pattern_elements,$vsc_pattern . '0' . $voip_number->ac . $voip_number->sn); + return '^(' . join('|',@pattern_elements) . ')$'; }