From 7d24aa06241a7e6beba19ff91ea921a9ec7d0e73 Mon Sep 17 00:00:00 2001 From: Andreas Steffen Date: Tue, 17 Nov 2015 21:20:15 +0100 Subject: [PATCH] Extended and refactored vici perl implementation --- .../perl/Vici-Session/lib/Vici/Message.pm | 8 +- .../vici/perl/Vici-Session/lib/Vici/Packet.pm | 28 +-- .../perl/Vici-Session/lib/Vici/Session.pm | 165 ++++++++++-------- 3 files changed, 121 insertions(+), 80 deletions(-) diff --git a/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Message.pm b/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Message.pm index 7a63852883..228431c903 100644 --- a/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Message.pm +++ b/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Message.pm @@ -5,7 +5,7 @@ use AutoLoader qw(AUTOLOAD); our @ISA = qw(Exporter); our @EXPORT = qw( - new, from_data, hash, encode, raw + new, from_data, hash, encode, raw, result ); our $VERSION = '0.9'; @@ -62,6 +62,12 @@ sub raw { return '{' . raw_hash($self->{'Hash'}) . '}'; } +sub result { + my $self = shift; + my $result = $self->{'Hash'}; + return ($result->{'success'} eq 'yes', $result->{'errmsg'}); +} + # private functions sub parse { diff --git a/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Packet.pm b/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Packet.pm index bcd1725938..62dac0a377 100644 --- a/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Packet.pm +++ b/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Packet.pm @@ -12,6 +12,7 @@ our $VERSION = '0.9'; use strict; use warnings; use Switch; +use Vici::Message; use Vici::Transport; use constant { @@ -36,18 +37,19 @@ sub new { } sub request { - my ($self, $command, $data) = @_; - my $request = pack('CC/a*a*', CMD_REQUEST, $command, $data); + my ($self, $command, $vars) = @_; + my $out = defined $vars ? $vars->encode() : ''; + my $request = pack('CC/a*a*', CMD_REQUEST, $command, $out); $self->{'Transport'}->send($request); my $response = $self->{'Transport'}->receive(); - my ($type, $msg) = unpack('Ca*', $response); + my ($type, $data) = unpack('Ca*', $response); switch ($type) { case CMD_RESPONSE { - return $msg + return Vici::Message->from_data($data); } case CMD_UNKNOWN { @@ -111,13 +113,15 @@ sub unregister { } sub streamed_request { - my ($self, $command, $event, $data) = @_; - $self->register($event); + my ($self, $command, $event, $vars) = @_; + my $out = defined $vars ? $vars->encode() : ''; + + $self->register($event); - my $request = pack('CC/a*a*', CMD_REQUEST, $command, $data); + my $request = pack('CC/a*a*', CMD_REQUEST, $command, $out); $self->{'Transport'}->send($request); my $more = 1; - my $msg = ""; + my @list = (); while ($more) { @@ -129,9 +133,11 @@ sub streamed_request { case EVENT { (my $event_name, $data) = unpack('C/a*a*', $data); - if ($event_name == $event) + + if ($event_name eq $event) { - $msg .= $data; + my $msg = Vici::Message->from_data($data); + push(@list, $msg); } } case CMD_RESPONSE @@ -146,7 +152,7 @@ sub streamed_request { } } } - return $msg; + return \@list; } 1; diff --git a/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Session.pm b/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Session.pm index 9b7070c123..02ed269f80 100644 --- a/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Session.pm +++ b/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Session.pm @@ -5,9 +5,11 @@ use AutoLoader qw(AUTOLOAD); our @ISA = qw(Exporter); our @EXPORT = qw( - new, version, stats, reload_settings, initiate, list_sas, list_policies, - list_conns, get_conns, list_certs, list_authorities, get_authorities, - get_pools + new, version, stats, reload_settings, initiate, terminate, install, + uninstall, list_sas, list_policies, list_conns, get_conns, list_certs, + list_authorities, get_authorities, load_conn, unload_conn, load_cert, + load_key, load_shared, clear_creds, load_authority, unload_authority, + load_pool, unload_pool, get_pools, get_algorithms ); our $VERSION = '0.9'; @@ -27,104 +29,131 @@ sub new { } sub version { - my $self = shift; - my $data = $self->{'Packet'}->request('version'); - return Vici::Message->from_data($data); + return request('version', @_); } sub stats { - my $self = shift; - my $data = $self->{'Packet'}->request('stats'); - return Vici::Message->from_data($data); + return request('stats', @_); } sub reload_settings { - my $self = shift; - my $data = $self->{'Packet'}->request('reload-settings'); - my $msg = Vici::Message->from_data($data); - my $res = $msg->hash(); - return $res->{'success'} == 'yes'; + return request_res('reload-settings', @_); } sub initiate { - my ($self, $msg) = @_; - my $vars = ''; - if (defined $msg) - { - $vars = $msg->encode(); - } - my $data = $self->{'Packet'}->request('initiate', $vars); - my $msg = Vici::Message->from_data($data); - my $res = $msg->hash(); - return $res->{'success'} == 'yes'; + return request_vars_res('initiate', @_); +} + +sub terminate { + return request_vars_res('terminate', @_); +} + +sub install { + return request_vars_res('install', @_); +} + +sub uninstall { + return request_vars_res('uninstall', @_); } sub list_sas { - my ($self, $msg) = @_; - my $vars = ''; - if (defined $msg) - { - $vars = $msg->encode(); - } - my $data = $self->{'Packet'}->streamed_request('list-sas', - 'list-sa', $vars); - return Vici::Message->from_data($data); + return request_list('list-sas', 'list-sa', @_); } sub list_policies { - my $self = shift; - my $data = $self->{'Packet'}->streamed_request('list-policies', - 'list-policy'); - return Vici::Message->from_data($data); + return request_list('list-policies', 'list-policy', @_); } sub list_conns { - my ($self, $msg) = @_; - my $vars = ''; - if (defined $msg) - { - $vars = $msg->encode(); - } - my $data = $self->{'Packet'}->streamed_request('list-conns', - 'list-conn', $vars); - return Vici::Message->from_data($data); + return request_list('list-conns', 'list-conn', @_); } sub get_conns { - my $self = shift; - my $data = $self->{'Packet'}->request('get-conns'); - return Vici::Message->from_data($data); + return request('get-conns', @_); } sub list_certs { - my ($self, $msg) = @_; - my $vars = ''; - if (defined $msg) - { - $vars = $msg->encode(); - } - my $data = $self->{'Packet'}->streamed_request('list-authorities', - 'list-authority', $vars); - return Vici::Message->from_data($data); + return request_list('list-certs', 'list-cert', @_); } sub list_authorities { - my $self = shift; - my $data = $self->{'Packet'}->streamed_request('list-authorities', - 'list-authority'); - return Vici::Message->from_data($data); + return request_list('list-authorities', 'list-authority', @_); } sub get_authorities { - my $self = shift; - my $data = $self->{'Packet'}->request('get-authorities'); - return Vici::Message->from_data($data); + return request('get-authorities', @_); +} + +sub load_conn { + return request_vars_res('load-conn', @_); +} + +sub unload_conn { + return request_vars_res('unload-conn', @_); +} + +sub load_cert { + return request_vars_res('load-cert', @_); +} + +sub load_key { + return request_vars_res('load-key', @_); +} + +sub load_shared { + return request_vars_res('load-shared', @_); +} + +sub clear_creds { + return request_res('clear-creds', @_); +} + +sub load_authority { + return request_vars_res('load-authority', @_); +} + +sub unload_authority { + return request_vars_res('unload-authority', @_); +} + +sub load_pool { + return request_vars_res('load-pool', @_); +} + +sub unload_pool { + return request_vars_res('unload-pool', @_); } sub get_pools { - my $self = shift; - my $data = $self->{'Packet'}->request('get-pools'); - return Vici::Message->from_data($data); + return request('get-pools', @_); +} + +sub get_algorithms { + return request('get-algorithms', @_); +} + +# Private functions + +sub request { + my ($command, $self) = @_; + return $self->{'Packet'}->request($command); +} + +sub request_res { + my ($command, $self) = @_; + my $msg = $self->{'Packet'}->request($command); + return $msg->result(); +} + +sub request_vars_res { + my ($command, $self, $vars) = @_; + my $msg = $self->{'Packet'}->request($command, $vars); + return $msg->result(); +} + +sub request_list { + my ($command, $event, $self, $vars) = @_; + return $self->{'Packet'}->streamed_request($command, $event, $vars); } 1; -- 2.47.2