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,
);