From 3bb5df875aa636ab0fa5f6fb7b7dbdf9367b5810 Mon Sep 17 00:00:00 2001 From: Gerhard Jungwirth Date: Mon, 2 Mar 2015 15:47:18 +0100 Subject: [PATCH] MT#11501 configure dialogic from webinterface and change api config naming and add support for out_codecs now with preferences approach Change-Id: Ic62918e681fa877e8bfb92c2c70efb9edb4d0acc --- lib/NGCP/Panel/Controller/Peering.pm | 80 +++++++++++++++++++++++++- lib/NGCP/Panel/Form/Device/Model.pm | 2 +- lib/NGCP/Panel/Utils/DialogicImg.pm | 31 ++++++++-- ngcp_panel.conf | 6 ++ share/templates/peering/preferences.tt | 4 +- share/tools/dialogic-test-client.pl | 2 +- 6 files changed, 111 insertions(+), 14 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Peering.pm b/lib/NGCP/Panel/Controller/Peering.pm index 604e35d1b7..13a808538f 100644 --- a/lib/NGCP/Panel/Controller/Peering.pm +++ b/lib/NGCP/Panel/Controller/Peering.pm @@ -7,10 +7,11 @@ BEGIN { extends 'Catalyst::Controller'; } use NGCP::Panel::Form::PeeringGroup; use NGCP::Panel::Form::PeeringRule; use NGCP::Panel::Form::PeeringServer; -use NGCP::Panel::Utils::XMLDispatcher; +use NGCP::Panel::Utils::DialogicImg; use NGCP::Panel::Utils::Message; use NGCP::Panel::Utils::Navigation; use NGCP::Panel::Utils::Preferences; +use NGCP::Panel::Utils::XMLDispatcher; sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) { my ($self, $c) = @_; @@ -243,7 +244,17 @@ sub servers_create :Chained('servers_list') :PathPart('create') :Args(0) { ); if($posted && $form->validated) { try { - $c->stash->{group_result}->voip_peer_hosts->create($form->values); + my $dbvalues = { + name => $form->values->{name}, + ip => $form->values->{ip}, + host => $form->values->{host}, + port => $form->values->{port}, + transport => $form->values->{transport}, + weight => $form->values->{weight}, + via_route => $form->values->{via_route}, + enabled => $form->values->{enabled}, + }; + my $server = $c->stash->{group_result}->voip_peer_hosts->create($dbvalues); $self->_sip_lcr_reload($c); NGCP::Panel::Utils::Message->info( c => $c, @@ -262,7 +273,7 @@ sub servers_create :Chained('servers_list') :PathPart('create') :Args(0) { $c->stash( close_target => $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]]), servers_create_flag => 1, - servers_form => $form + servers_form => $form, ); } @@ -357,6 +368,69 @@ sub servers_delete :Chained('servers_base') :PathPart('delete') :Args(0) { NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]])); } +sub servers_flash_dialogic :Chained('servers_base') :PathPart('edit/dialogic') :Args(0) { + my ($self, $c) = @_; + + my $pref_mode = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( + c => $c, + attribute => 'dialogic_mode', + peer_host => $c->stash->{server_result}, + )->first; + my $pref_ip_rtp = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( + c => $c, + attribute => 'dialogic_ip_rtp', + peer_host => $c->stash->{server_result}, + )->first; + my $pref_ip_config = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( + c => $c, + attribute => 'dialogic_ip_config', + peer_host => $c->stash->{server_result}, + )->first; +my $pref_out_codecs = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( + c => $c, + attribute => 'dialogic_out_codecs', + peer_host => $c->stash->{server_result}, + )->first; + + try { + if ($pref_mode->value ne 'none') { + my $api = NGCP::Panel::Utils::DialogicImg->new( + server => 'https://' . $pref_ip_config->value, + ); + my @configured_out_codecs = map { s/^\s+|\s+$//gr } split(',', $pref_out_codecs->value); + $api->login( $c->config->{dialogic}{username}, $c->config->{dialogic}{password} ); + my $resp = $api->obtain_lock(); + die "Couldn't connect to dialogic" + unless $resp->code == 200; + if ($pref_mode->value eq 'sipsip') { + my $config = { + ip_sip => $c->stash->{server_result}->ip, + ip_rtp => $pref_ip_rtp->value, + ip_client => $c->config->{dialogic}{own_ip}, + out_codecs => \@configured_out_codecs, + ip_config => $pref_ip_config->value, # just for the config hash + dialogic_mode => $pref_mode->value, + }; + + $resp = $api->create_all_sipsip($config, 1); + my $config_hash = $api->hash_config($config); + } + } + NGCP::Panel::Utils::Message->info( + c => $c, + data => { $c->stash->{server_result}->get_inflated_columns }, + desc => $c->loc('Dialogic successfully flashed.'), + ); + } catch ($e) { + NGCP::Panel::Utils::Message->error( + c => $c, + error => $e, + desc => $c->loc('Failed to flash dialogic'), + ); + }; + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/peering/servers_root', [$c->req->captures->[0]])); +} + sub servers_preferences_list :Chained('servers_base') :PathPart('preferences') :CaptureArgs(0) { my ($self, $c) = @_; diff --git a/lib/NGCP/Panel/Form/Device/Model.pm b/lib/NGCP/Panel/Form/Device/Model.pm index 2c4ba4ea4b..7ddce01319 100644 --- a/lib/NGCP/Panel/Form/Device/Model.pm +++ b/lib/NGCP/Panel/Form/Device/Model.pm @@ -210,7 +210,7 @@ has_field 'bootstrap_method' => ( default => 'http', element_attr => { rel => ['tooltip'], - title => ['Method to configure the provisioning server on the phone. One of http, redirect_panasonic, redirect_yealink.'], + title => ['Method to configure the provisioning server on the phone. One of http, redirect_panasonic, redirect_yealink, redirect_polycom.'], # TODO: ???? javascript => ' onchange="bootstrapDynamicFields(this.options[this.selectedIndex].value);" ', }, diff --git a/lib/NGCP/Panel/Utils/DialogicImg.pm b/lib/NGCP/Panel/Utils/DialogicImg.pm index e09a601f83..f735543128 100644 --- a/lib/NGCP/Panel/Utils/DialogicImg.pm +++ b/lib/NGCP/Panel/Utils/DialogicImg.pm @@ -455,29 +455,43 @@ sub _create_generic { } # log: 0: none, 1: short, 2: everything +# necessary keys: ip_sip, ip_rtp, ip_client, out_codecs, optional: in_codecs sub create_all_sipsip { my ($self, $settings, $log) = @_; $self->_create_indent; + my $in_codecs = ['G711 ulaw', 'G711 alaw', 'G729', 'AMR', + 'AMR Bandwidth Efficient', 'AMR-WB', 'AMR-WB Bandwidth Efficient', + 'Clear Channel', 'G723 5.3 Kbps', 'G723 6.3 Kbps', 'G722', 'iLBC 30ms', + 'GSM-FR Static Payload Type', 'GSM-FR Dynamic Payload Type', + 'G726-32/G721 Static Payload Type', 'G726-32/G721 Dynamic Payload Type', + 'GSM-EFR']; + my $resp = $self->create_bn2020; my @in_schedule = map { + { + name => 'vocoder_profile', options => + { PayloadType => $_ }, + }; + } @{ $settings->{in_codecs} // $in_codecs }; + my @out_schedule = map { { name => 'vocoder_profile', options => { PayloadType => $_ }, }; - } @{ $settings->{in_codecs} }; + } @{ $settings->{out_codecs} }; my $schedule = [ {name => 'network', options => undef}, {name => 'interface_collection', options => undef}, {name => 'interface', options => undef}, {name => 'ip_address', options => { - NIIPAddress => $settings->{ip1}, + NIIPAddress => $settings->{ip_sip}, NIIPPhy => 'Services', }}, {name => 'interface', options => undef}, {name => 'ip_address', options => { - NIIPAddress => $settings->{ip2}, + NIIPAddress => $settings->{ip_rtp}, NIIPPhy => 'Media 0', }}, {name => 'facility', options => undef}, @@ -488,7 +502,7 @@ sub create_all_sipsip { {name => 'signaling', options => undef}, {name => 'sip', options => undef}, {name => 'sip_ip', options => { - IPAddress => $settings->{ip1}, + IPAddress => $settings->{ip_sip}, }}, {name => 'profile_collection', options => undef}, {name => 'ip_profile_collection', options => undef}, @@ -497,6 +511,11 @@ sub create_all_sipsip { Name => 'ngcp_in_profile', }}, @in_schedule, + {name => 'ip_profile', options => { + DigitRelay => 'DTMF Packetized', + Name => 'ngcp_out_profile', + }}, + @out_schedule, {name => 'sip_profile_collection', options => undef}, {name => 'sip_profile', options => undef}, #{run => 'download_profiles'}, @@ -518,7 +537,7 @@ sub create_all_sipsip { InRouteTable => 'ngcp_route_table - ID: 5', InIPProfile => 'ngcp_in_profile', InIPProfileId => '1', - OutIPProfile => 'ngcp_in_profile', # separate one for out? + OutIPProfile => 'ngcp_out_profile', SupportA2F => 'True', }}, {name => 'cg_network_element', options => undef}, @@ -556,7 +575,7 @@ sub create_all_sipsip { ###### OTHER STUFF ###### -sub hash_config_sipsip { +sub hash_config { my ($self, $config) = @_; $Storable::canonical = 1; return md5_hex(freeze $config); diff --git a/ngcp_panel.conf b/ngcp_panel.conf index e334a9dd0e..ecf04bb919 100644 --- a/ngcp_panel.conf +++ b/ngcp_panel.conf @@ -50,6 +50,12 @@ log4perl.appender.Default.layout.ConversionPattern=%d{ISO8601} [%p] [%F +%L] %m{ element_order customer_id + + own_ip 10.15.20.199 + username dialogic + password Dial0gic + + element_order source element_order destination diff --git a/share/templates/peering/preferences.tt b/share/templates/peering/preferences.tt index 82927aef21..a1c422bed9 100644 --- a/share/templates/peering/preferences.tt +++ b/share/templates/peering/preferences.tt @@ -14,11 +14,9 @@ helper.rewrite_rule_sets = rwr_sets; helper.man_aip_grp_rs = man_aip_grp_rs; - helper.dt_buttons = [ - { name = c.loc('Edit'), uri = c.uri_for_action("/peering/servers_preferences_root", [c.req.captures.0, c.req.captures.1]), class = 'btn-small btn-primary', icon = 'icon-edit' }, - ]; helper.top_buttons = [ { name = c.loc('Back'), uri = c.uri_for(group.id, "servers"), icon = 'icon-arrow-left' }, + { name = c.loc('Flash Dialogic'), uri = c.uri_for_action("/peering/servers_flash_dialogic", [c.req.captures.0, c.req.captures.1]), icon = 'icon-star' }, ]; PROCESS 'helpers/pref_table.tt'; diff --git a/share/tools/dialogic-test-client.pl b/share/tools/dialogic-test-client.pl index ac556a6a9c..98a67daa0c 100644 --- a/share/tools/dialogic-test-client.pl +++ b/share/tools/dialogic-test-client.pl @@ -48,7 +48,7 @@ my $result = $test->create_all_sipsip({ ip2 => '10.15.21.10', ip_client => '10.15.20.199', in_codecs => ['G711 ulaw', 'G711 alaw', 'G729', 'AMR'], - #out_codecs => ['G711 ulaw', 'G711 alaw', 'G729', 'AMR'], # not yet used + out_codecs => ['G711 ulaw', 'G711 alaw', 'G729', 'AMR'], }, 2, );