package NGCP::Panel::Utils::Sems; use Sipwise::Base; use NGCP::Panel::Utils::XMLDispatcher; use Data::Dumper; sub create_peer_registration { my ($c, $prov_subscriber, $prefs) = @_; if($c->config->{features}->{debug}) { $c->log->debug("skip creating peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'"); return 1; } my $dispatcher = NGCP::Panel::Utils::XMLDispatcher->new; $c->log->debug("creating peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'"); my $sid = $prov_subscriber->id; my $uuid = $prov_subscriber->uuid; my $contact = $c->config->{sip}->{lb_ext}; my @ret = $dispatcher->dispatch("appserver", 1, 1, < db_reg_agent.createRegistration $sid $$prefs{peer_auth_user} $$prefs{peer_auth_pass} $$prefs{peer_auth_realm} sip:$$prefs{peer_auth_user}\@$contact;uuid=$uuid EOF if(grep { $$_[1] != 1 or $$_[2] !~ m#OK# } @ret) { # error $c->log->error("Failed XML-RPC call to appserver: ". Dumper \@ret); # remove reg from successsful backends foreach my $ret (grep {!$$_[1]} @ret) { # successful backends $dispatcher->dispatch($$ret[0], 1, 1, < db_reg_agent.removeRegistration $sid EOF } die "Failed to add peer registration on application servers\n"; } return 1; } sub update_peer_registration { my ($c, $prov_subscriber, $prefs, $oldprefs) = @_; if($c->config->{features}->{debug}) { $c->log->debug("skip updating peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'"); return 1; } my $dispatcher = NGCP::Panel::Utils::XMLDispatcher->new; $c->log->debug("trying to update peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'"); my $sid = $prov_subscriber->id; my $uuid = $prov_subscriber->uuid; my $contact = $c->config->{sip}->{lb_ext}; use Data::Dumper; $c->log->debug("+++++++++++++++++++ old peer auth params: " . Dumper $oldprefs); $c->log->debug("+++++++++++++++++++ new peer auth params: " . Dumper $prefs); $c->log->debug("+++++++++++++++++++ sid=$sid"); $c->log->debug("+++++++++++++++++++ uuid=$uuid"); $c->log->debug("+++++++++++++++++++ contact=$contact"); my @ret = $dispatcher->dispatch("appserver", 1, 1, < db_reg_agent.updateRegistration $sid $$prefs{peer_auth_user} $$prefs{peer_auth_pass} $$prefs{peer_auth_realm} sip:$$prefs{peer_auth_user}\@$contact;uuid=$uuid EOF if(grep { $$_[1] != 1 or $$_[2] !~ m#OK# } @ret) { # error $c->log->error("Failed XML-RPC call to appserver: ". Dumper \@ret); # undo update on successsful backends foreach my $ret (grep {!$$_[1]} @ret) { # successful backends $dispatcher->dispatch($$ret[0], 1, 1, < db_reg_agent.updateRegistration $sid $$oldprefs{peer_auth_user} $$oldprefs{peer_auth_pass} $$oldprefs{peer_auth_realm} sip:$$oldprefs{peer_auth_user}\@$contact;uuid=$uuid EOF } die "Failed to update peer registration on application servers\n"; } return 1; } sub delete_peer_registration { my ($c, $prov_subscriber, $oldprefs) = @_; if($c->config->{features}->{debug}) { $c->log->debug("skip deleting peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'"); return 1; } my $dispatcher = NGCP::Panel::Utils::XMLDispatcher->new; $c->log->debug("trying to delete peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'"); my $sid = $prov_subscriber->id; my $uuid = $prov_subscriber->uuid; my $contact = $c->config->{sip}->{lb_ext}; my @ret = $dispatcher->dispatch("appserver", 1, 1, < db_reg_agent.removeRegistration $sid EOF if(grep { $$_[1] != 1 or $$_[2] !~ m#OK# } @ret) { # error $c->log->error("Failed XML-RPC call to appserver: ". Dumper \@ret); # remove reg from successsful backends foreach my $ret (grep {!$$_[1]} @ret) { # successful backends $dispatcher->dispatch($ret[0], 1, 1, < db_reg_agent.createRegistration $sid $$oldprefs{peer_auth_user} $$oldprefs{peer_auth_pass} $$oldprefs{peer_auth_realm} sip:$$oldprefs{peer_auth_user}\@$contact;uuid=$uuid EOF } die "Failed to delete peer registration on application servers\n"; } return 1; } sub clear_audio_cache { my ($service, $sound_set_id, $handle_name) = @_; my $dispatcher = NGCP::Panel::Utils::XMLDispatcher->new; my @ret = $dispatcher->dispatch($service, 1, 1, < postDSMEvent sw_audio cmd clearFile audio_id $handle_name sound_set_id $sound_set_id EOF if(grep { $$_[1] != 1 or $$_[2] !~ m#OK# } @ret) { # error die "failed to clear SEMS audio cache"; } return 1; } 1; # vim: set tabstop=4 expandtab: