From 8bbdb21aa8bcc2fca74f70eb12e6adab1ce92ae7 Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Thu, 24 Sep 2009 20:20:19 +0000 Subject: [PATCH] Added peering rule functionality --- lib/admin/Controller/peering.pm | 213 +++++++++++++++- root/tt/peering_detail.tt | 2 +- root/tt/peering_rewrite.tt | 419 ++++++++++++++++++++++++++++++++ 3 files changed, 632 insertions(+), 2 deletions(-) create mode 100644 root/tt/peering_rewrite.tt diff --git a/lib/admin/Controller/peering.pm b/lib/admin/Controller/peering.pm index 83edd58..53791af 100644 --- a/lib/admin/Controller/peering.pm +++ b/lib/admin/Controller/peering.pm @@ -44,6 +44,7 @@ Delete a peering group sub delete_grp : Local { my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering.tt'; my %messages; my %settings; @@ -75,6 +76,7 @@ Create a peering group sub create_grp : Local { my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering.tt'; my %messages; my %settings; @@ -125,6 +127,7 @@ Edit a peering group sub edit_grp : Local { my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering.tt'; my %messages; my %settings; @@ -167,7 +170,6 @@ sub detail : Local { { id => $grpid }, \$peer_details ); - $c->log->debug(Dumper $peer_details); $c->stash->{grp} = $peer_details; $c->stash->{reditid} = $c->request->params->{reditid}; $c->stash->{peditid} = $c->request->params->{peditid}; @@ -183,6 +185,7 @@ Create a peering rule for a given group sub create_rule : Local { my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering_detail.tt'; my %messages; my %settings; @@ -236,6 +239,7 @@ Delete a peering rule sub delete_rule : Local { my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering_detail.tt'; my %messages; my %settings; @@ -271,6 +275,7 @@ Edit a peering rule sub edit_rule : Local { my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering_detail.tt'; my %messages; my %settings; @@ -325,6 +330,7 @@ Create a peering server for a given group sub create_peer : Local { my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering_detail.tt'; my %messages; my %settings; @@ -383,6 +389,7 @@ Delete a peering host sub delete_peer : Local { my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering_detail.tt'; my %messages; my %settings; @@ -418,6 +425,7 @@ Edit a peering host sub edit_peer : Local { my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering_detail.tt'; my %messages; my %settings; @@ -466,6 +474,209 @@ sub edit_peer : Local { return; } +=head2 rewrite + +Show rewrite rules for a given peer + +=cut + +sub rewrite : Local { + my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering_rewrite.tt'; + + my $peerid = $c->request->params->{peer_id}; + + my $peer_details; + return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_peer_host_details', + { id => $peerid }, + \$peer_details + ); + $c->stash->{peer} = $peer_details; + $c->stash->{ifeditid} = $c->request->params->{ifeditid}; + $c->stash->{iteditid} = $c->request->params->{iteditid}; + $c->stash->{ofeditid} = $c->request->params->{ofeditid}; + $c->stash->{oteditid} = $c->request->params->{oteditid}; + + return 1; +} + +=head2 create_rewrite + +Create a rewrite rule for a given peer with defined direction and field + +=cut + +sub create_rewrite : Local { + my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering_rewrite.tt'; + + my %messages; + my %settings; + + my $grpid = $c->request->params->{grpid}; + my $peerid = $c->request->params->{peerid}; + my $match_pattern = $c->request->params->{match_pattern}; + my $replace_pattern = $c->request->params->{replace_pattern}; + my $description = $c->request->params->{description}; + my $direction = $c->request->params->{direction}; + my $field = $c->request->params->{field}; + + my $a = ""; + if($field eq 'caller') { $a = 'caller'.$a; } + elsif($field eq 'callee') { $a = 'callee'.$a; } + if($direction eq 'in') { $a = 'i'.$a; } + elsif($direction eq 'out') { $a = 'o'.$a; } + my $m = $a.'msg'; my $e = $a.'err'; + +# $messages{crulerr} = 'Client.Syntax.MalformedPeerGroupName' +# unless $callee_prefix =~ /^[a-zA-Z0-9_\.\-\@\:]+/; + + unless(keys %messages) { + if($c->model('Provisioning')->call_prov( $c, 'voip', 'create_peer_rewrite', + { peer_id => $peerid, + match_pattern => $match_pattern, + replace_pattern => $replace_pattern, + description => $description, + direction => $direction, + field => $field + }, + undef + )) + { + $messages{$m} = 'Server.Voip.SavedSettings'; + $c->session->{messages} = \%messages; + $c->response->redirect("/peering/rewrite?peer_id=$peerid#$a"); + return; + } + else + { + $messages{$e} = 'Client.Voip.InputErrorFound'; + } + } else { + # TODO: add proper values here and set them in tt + my %arefill = (); +# $arefill{name} = $grpname; +# $arefill{desc} = $grpdesc; + + $c->stash->{arefill} = \%arefill; + } + + $c->session->{messages} = \%messages; + $c->response->redirect("/peering/rewrite?peer_id=$peerid#$a"); + return; +} + +=head2 delete_rewrite + +Delete a rewrite rule + +=cut + +sub delete_rewrite : Local { + my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering_rewrite.tt'; + + my %messages; + my %settings; + + my $peerid = $c->request->params->{peerid}; + my $rewriteid = $c->request->params->{rewriteid}; + my $direction = $c->request->params->{direction}; + my $field = $c->request->params->{field}; + + my $a = ""; + if($field eq 'caller') { $a = 'caller'.$a; } + elsif($field eq 'callee') { $a = 'callee'.$a; } + if($direction eq 'in') { $a = 'i'.$a; } + elsif($direction eq 'out') { $a = 'o'.$a; } + my $m = $a.'msg'; my $e = $a.'err'; + + unless(keys %messages) { + if($c->model('Provisioning')->call_prov( $c, 'voip', 'delete_peer_rewrite', + { id => $rewriteid + }, + undef + )) + { + $messages{$m} = 'Server.Voip.SavedSettings'; + $c->session->{messages} = \%messages; + $c->response->redirect("/peering/rewrite?peer_id=$peerid#$a"); + return; + } + } else { + } + + $c->session->{messages} = \%messages; + $c->response->redirect("/peering/rewrite?peer_id=$peerid#$a"); + return; +} + +=head2 edit_rewrite + +Updates a rewrite rule + +=cut + +sub edit_rewrite : Local { + my ( $self, $c ) = @_; + $c->stash->{template} = 'tt/peering_rewrite.tt'; + + my %messages; + my %settings; + + my $peerid = $c->request->params->{peerid}; + my $rewriteid = $c->request->params->{rewriteid}; + my $match_pattern = $c->request->params->{match_pattern}; + my $replace_pattern = $c->request->params->{replace_pattern}; + my $description = $c->request->params->{description}; + my $direction = $c->request->params->{direction}; + my $field = $c->request->params->{field}; + + my $a = ""; + if($field eq 'caller') { $a = 'caller'.$a; } + elsif($field eq 'callee') { $a = 'callee'.$a; } + if($direction eq 'in') { $a = 'i'.$a; } + elsif($direction eq 'out') { $a = 'o'.$a; } + my $m = $a.'msg'; my $e = $a.'err'; + +# $messages{crulerr} = 'Client.Syntax.MalformedPeerGroupName' +# unless $callee_prefix =~ /^[a-zA-Z0-9_\.\-\@\:]+/; + + unless(keys %messages) { + if($c->model('Provisioning')->call_prov( $c, 'voip', 'update_peer_rewrite', + { id => $rewriteid, + match_pattern => $match_pattern, + replace_pattern => $replace_pattern, + description => $description, + direction => $direction, + field => $field + }, + undef + )) + { + $messages{$m} = 'Server.Voip.SavedSettings'; + $c->session->{messages} = \%messages; + $c->response->redirect("/peering/rewrite?peer_id=$peerid#$a"); + return; + } + else + { + $messages{$e} = 'Client.Voip.InputErrorFound'; + } + } else { + # TODO: add proper values here and set them in tt + my %arefill = (); +# $arefill{name} = $grpname; +# $arefill{desc} = $grpdesc; + + $c->stash->{arefill} = \%arefill; + } + + $c->session->{messages} = \%messages; + $c->response->redirect("/peering/rewrite?peer_id=$peerid#$a"); + return; +} + =head1 BUGS AND LIMITATIONS diff --git a/root/tt/peering_detail.tt b/root/tt/peering_detail.tt index 52989ef..e6cb17c 100644 --- a/root/tt/peering_detail.tt +++ b/root/tt/peering_detail.tt @@ -148,7 +148,7 @@ cancel [% ELSE %] - [% peer.name %] + [% peer.name %] [% peer.ip %] [% peer.port %] diff --git a/root/tt/peering_rewrite.tt b/root/tt/peering_rewrite.tt new file mode 100644 index 0000000..1827042 --- /dev/null +++ b/root/tt/peering_rewrite.tt @@ -0,0 +1,419 @@ +

SIP Peering Rewrite Rules for host + + [% peer.name %] +

+ + back + +

Inbound Rewrite Rules for Caller

+ +
+ [% IF messages.icallermsg %]
[% messages.icallermsg %]
[% END %] + [% IF messages.icallererr %]
[% messages.icallererr %]
[% END %] + + + + + + + + [% id = 0 %] + [% FOREACH rule = peer.rewrite_in_caller %] + + [% IF rule.id == ifeditid %] + + + + + + + + + + + + [% ELSE %] + + + + + + + + + + + [% END %] + + + [% id = id + 1 %] + [% END %] + + + + + + + + + + + + + + +
Match PatternReplacement PatternDescription + +
+ + + + + + + + cancel[% rule.match_pattern %][% rule.replace_pattern %][% rule.description %] + [% UNLESS Catalyst.session.admin.read_only %] + edit + [% END %] +
+ [% UNLESS Catalyst.session.admin.read_only %] + + [% END %] +
+ + + + + + + + + +
+
+ +

Inbound Rewrite Rules for Callee

+ +
+ [% IF messages.icalleemsg %]
[% messages.icalleemsg %]
[% END %] + [% IF messages.icalleeerr %]
[% messages.icalleeerr %]
[% END %] + + + + + + + + [% id = 0 %] + [% FOREACH rule = peer.rewrite_in_callee %] + + [% IF rule.id == iteditid %] + + + + + + + + + + + + [% ELSE %] + + + + + + + + + + + [% END %] + + + [% id = id + 1 %] + [% END %] + + + + + + + + + + + + + + +
Match PatternReplacement PatternDescription + +
+ + + + + + + + cancel[% rule.match_pattern %][% rule.replace_pattern %][% rule.description %] + [% UNLESS Catalyst.session.admin.read_only %] + edit + [% END %] +
+ [% UNLESS Catalyst.session.admin.read_only %] + + [% END %] +
+ + + + + + + + + +
+
+ +

Outbound Rewrite Rules for Caller

+ +
+ [% IF messages.ocallermsg %]
[% messages.ocallermsg %]
[% END %] + [% IF messages.ocallererr %]
[% messages.ocallererr %]
[% END %] + + + + + + + + [% id = 0 %] + [% FOREACH rule = peer.rewrite_out_caller %] + + [% IF rule.id == ofeditid %] + + + + + + + + + + + + [% ELSE %] + + + + + + + + + + + [% END %] + + + [% id = id + 1 %] + [% END %] + + + + + + + + + + + + + + +
Match PatternReplacement PatternDescription + +
+ + + + + + + + cancel[% rule.match_pattern %][% rule.replace_pattern %][% rule.description %] + [% UNLESS Catalyst.session.admin.read_only %] + edit + [% END %] +
+ [% UNLESS Catalyst.session.admin.read_only %] + + [% END %] +
+ + + + + + + + + +
+
+ +

Outbound Rewrite Rules for Callee

+ +
+ [% IF messages.ocalleemsg %]
[% messages.ocalleemsg %]
[% END %] + [% IF messages.ocalleeerr %]
[% messages.ocalleeerr %]
[% END %] + + + + + + + + [% id = 0 %] + [% FOREACH rule = peer.rewrite_out_callee %] + + [% IF rule.id == oteditid %] + + + + + + + + + + + + [% ELSE %] + + + + + + + + + + + [% END %] + + + [% id = id + 1 %] + [% END %] + + + + + + + + + + + + + + +
Match PatternReplacement PatternDescription + +
+ + + + + + + + cancel[% rule.match_pattern %][% rule.replace_pattern %][% rule.description %] + [% UNLESS Catalyst.session.admin.read_only %] + edit + [% END %] +
+ [% UNLESS Catalyst.session.admin.read_only %] + + [% END %] +
+ + + + + + + + + +
+
+