diff --git a/lib/NGCP/Panel/Controller/API/PeeringGroupsItem.pm b/lib/NGCP/Panel/Controller/API/PeeringGroupsItem.pm index da42b48182..2f08fbdac9 100644 --- a/lib/NGCP/Panel/Controller/API/PeeringGroupsItem.pm +++ b/lib/NGCP/Panel/Controller/API/PeeringGroupsItem.pm @@ -111,6 +111,14 @@ sub DELETE :Allow { last unless $self->resource_exists($c, peeringgroup => $item); foreach my $p ($item->voip_peer_hosts->all) { + if($p->probe) { + NGCP::Panel::Utils::Peering::_sip_delete_probe( + c => $c, + ip => $p->ip, + port => $p->port, + transport => $p->transport, + ); + } $p->voip_peer_preferences->delete_all; $p->delete; } diff --git a/lib/NGCP/Panel/Controller/API/PeeringServersItem.pm b/lib/NGCP/Panel/Controller/API/PeeringServersItem.pm index 2650885a26..b25dba051f 100644 --- a/lib/NGCP/Panel/Controller/API/PeeringServersItem.pm +++ b/lib/NGCP/Panel/Controller/API/PeeringServersItem.pm @@ -83,6 +83,14 @@ sub PATCH :Allow { try { NGCP::Panel::Utils::Peering::_sip_lcr_reload(c => $c); + if (($item->probe && $old_resource->{enabled} && !$item->enabled) || ($old_resource->{probe} && !$item->probe)) { + NGCP::Panel::Utils::Peering::_sip_delete_probe( + c => $c, + ip => $item->ip, + port => $item->port, + transport => $item->transport, + ); + } NGCP::Panel::Utils::Peering::_sip_dispatcher_reload(c => $c); } catch($e) { $c->log->error("failed to reload kamailio cache: $e"); # TODO: user, message, trace, ... @@ -131,6 +139,14 @@ sub PUT :Allow { $guard->commit; try { NGCP::Panel::Utils::Peering::_sip_lcr_reload(c => $c); + if (($item->probe && $old_resource->{enabled} && !$item->enabled) || ($old_resource->{probe} && !$item->probe)) { + NGCP::Panel::Utils::Peering::_sip_delete_probe( + c => $c, + ip => $item->ip, + port => $item->port, + transport => $item->transport, + ); + } NGCP::Panel::Utils::Peering::_sip_dispatcher_reload(c => $c); } catch($e) { $c->log->error("failed to reload kamailio cache: $e"); # TODO: user, message, trace, ... @@ -168,6 +184,12 @@ sub DELETE :Allow { try { NGCP::Panel::Utils::Peering::_sip_lcr_reload(c => $c); if($probe) { + NGCP::Panel::Utils::Peering::_sip_delete_probe( + c => $c, + ip => $item->ip, + port => $item->port, + transport => $item->transport, + ); NGCP::Panel::Utils::Peering::_sip_dispatcher_reload(c => $c); } } catch($e) { diff --git a/lib/NGCP/Panel/Controller/Peering.pm b/lib/NGCP/Panel/Controller/Peering.pm index 6da9678d5b..e1d05a193a 100644 --- a/lib/NGCP/Panel/Controller/Peering.pm +++ b/lib/NGCP/Panel/Controller/Peering.pm @@ -166,6 +166,14 @@ sub delete_peering :Chained('base') :PathPart('delete') { try { # manually delete hosts in group to let triggers hit in foreach my $p ($c->stash->{group_result}->voip_peer_hosts->all) { + if($p->probe) { + NGCP::Panel::Utils::Peering::_sip_delete_probe( + c => $c, + ip => $p->ip, + port => $p->port, + transport => $p->transport, + ); + } $p->voip_peer_preferences->delete_all; $p->delete; } @@ -358,8 +366,18 @@ sub servers_edit :Chained('servers_base') :PathPart('edit') :Args(0) { ); if($posted && $form->validated) { try { + my $enabled_before = $c->stash->{server_result}->enabled; + my $probing_before = $c->stash->{server_result}->probe; $c->stash->{server_result}->update($form->values); NGCP::Panel::Utils::Peering::_sip_lcr_reload(c => $c); + if (($c->stash->{server_result}->probe && $enabled_before && !$c->stash->{server_result}->enabled) || ($probing_before && !$c->stash->{server_result}->probe)) { + NGCP::Panel::Utils::Peering::_sip_delete_probe( + c => $c, + ip => $c->stash->{server_result}->ip, + port => $c->stash->{server_result}->port, + transport => $c->stash->{server_result}->transport, + ); + } NGCP::Panel::Utils::Peering::_sip_dispatcher_reload(c => $c); NGCP::Panel::Utils::Message::info( c => $c, @@ -390,6 +408,12 @@ sub servers_delete :Chained('servers_base') :PathPart('delete') :Args(0) { $c->stash->{server_result}->delete; NGCP::Panel::Utils::Peering::_sip_lcr_reload(c => $c); if($probe) { + NGCP::Panel::Utils::Peering::_sip_delete_probe( + c => $c, + ip => $c->stash->{server_result}->ip, + port => $c->stash->{server_result}->port, + transport => $c->stash->{server_result}->transport, + ); NGCP::Panel::Utils::Peering::_sip_dispatcher_reload(c => $c); } NGCP::Panel::Utils::Message::info( diff --git a/lib/NGCP/Panel/Utils/Peering.pm b/lib/NGCP/Panel/Utils/Peering.pm index 7748a9f801..9d11336841 100644 --- a/lib/NGCP/Panel/Utils/Peering.pm +++ b/lib/NGCP/Panel/Utils/Peering.pm @@ -31,6 +31,24 @@ EOF return ref $res ? @{ $res } : (); } +sub _sip_delete_probe { + my (%params) = @_; + my ($c, $ip, $port, $transport) = @params{qw/c ip port transport/}; + my $string_transport = {'1' => 'UDP', '2' => 'TCP', '3' => 'TLS'}; + NGCP::Panel::Utils::XMLDispatcher::dispatch($c, "proxy-ng", 1, 1, < + + htable.delete + + peer_probe + $ip:$port;transport=$string_transport->{$transport} + + +EOF + + return 1; +} + sub apply_rewrite { my (%params) = @_;