Extended and refactored vici perl implementation

This commit is contained in:
Andreas Steffen
2015-12-01 14:52:43 +01:00
parent a17b6d469c
commit 7d24aa0624
3 changed files with 121 additions and 80 deletions
@@ -5,7 +5,7 @@ use AutoLoader qw(AUTOLOAD);
our @ISA = qw(Exporter); our @ISA = qw(Exporter);
our @EXPORT = qw( our @EXPORT = qw(
new, from_data, hash, encode, raw new, from_data, hash, encode, raw, result
); );
our $VERSION = '0.9'; our $VERSION = '0.9';
@@ -62,6 +62,12 @@ sub raw {
return '{' . raw_hash($self->{'Hash'}) . '}'; return '{' . raw_hash($self->{'Hash'}) . '}';
} }
sub result {
my $self = shift;
my $result = $self->{'Hash'};
return ($result->{'success'} eq 'yes', $result->{'errmsg'});
}
# private functions # private functions
sub parse { sub parse {
@@ -12,6 +12,7 @@ our $VERSION = '0.9';
use strict; use strict;
use warnings; use warnings;
use Switch; use Switch;
use Vici::Message;
use Vici::Transport; use Vici::Transport;
use constant { use constant {
@@ -36,18 +37,19 @@ sub new {
} }
sub request { sub request {
my ($self, $command, $data) = @_; my ($self, $command, $vars) = @_;
my $request = pack('CC/a*a*', CMD_REQUEST, $command, $data); my $out = defined $vars ? $vars->encode() : '';
my $request = pack('CC/a*a*', CMD_REQUEST, $command, $out);
$self->{'Transport'}->send($request); $self->{'Transport'}->send($request);
my $response = $self->{'Transport'}->receive(); my $response = $self->{'Transport'}->receive();
my ($type, $msg) = unpack('Ca*', $response); my ($type, $data) = unpack('Ca*', $response);
switch ($type) switch ($type)
{ {
case CMD_RESPONSE case CMD_RESPONSE
{ {
return $msg return Vici::Message->from_data($data);
} }
case CMD_UNKNOWN case CMD_UNKNOWN
{ {
@@ -111,13 +113,15 @@ sub unregister {
} }
sub streamed_request { sub streamed_request {
my ($self, $command, $event, $data) = @_; my ($self, $command, $event, $vars) = @_;
$self->register($event); my $out = defined $vars ? $vars->encode() : '';
my $request = pack('CC/a*a*', CMD_REQUEST, $command, $data); $self->register($event);
my $request = pack('CC/a*a*', CMD_REQUEST, $command, $out);
$self->{'Transport'}->send($request); $self->{'Transport'}->send($request);
my $more = 1; my $more = 1;
my $msg = ""; my @list = ();
while ($more) while ($more)
{ {
@@ -129,9 +133,11 @@ sub streamed_request {
case EVENT case EVENT
{ {
(my $event_name, $data) = unpack('C/a*a*', $data); (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 case CMD_RESPONSE
@@ -146,7 +152,7 @@ sub streamed_request {
} }
} }
} }
return $msg; return \@list;
} }
1; 1;
@@ -5,9 +5,11 @@ use AutoLoader qw(AUTOLOAD);
our @ISA = qw(Exporter); our @ISA = qw(Exporter);
our @EXPORT = qw( our @EXPORT = qw(
new, version, stats, reload_settings, initiate, list_sas, list_policies, new, version, stats, reload_settings, initiate, terminate, install,
list_conns, get_conns, list_certs, list_authorities, get_authorities, uninstall, list_sas, list_policies, list_conns, get_conns, list_certs,
get_pools 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'; our $VERSION = '0.9';
@@ -27,104 +29,131 @@ sub new {
} }
sub version { sub version {
my $self = shift; return request('version', @_);
my $data = $self->{'Packet'}->request('version');
return Vici::Message->from_data($data);
} }
sub stats { sub stats {
my $self = shift; return request('stats', @_);
my $data = $self->{'Packet'}->request('stats');
return Vici::Message->from_data($data);
} }
sub reload_settings { sub reload_settings {
my $self = shift; return request_res('reload-settings', @_);
my $data = $self->{'Packet'}->request('reload-settings');
my $msg = Vici::Message->from_data($data);
my $res = $msg->hash();
return $res->{'success'} == 'yes';
} }
sub initiate { sub initiate {
my ($self, $msg) = @_; return request_vars_res('initiate', @_);
my $vars = ''; }
if (defined $msg)
{ sub terminate {
$vars = $msg->encode(); return request_vars_res('terminate', @_);
} }
my $data = $self->{'Packet'}->request('initiate', $vars);
my $msg = Vici::Message->from_data($data); sub install {
my $res = $msg->hash(); return request_vars_res('install', @_);
return $res->{'success'} == 'yes'; }
sub uninstall {
return request_vars_res('uninstall', @_);
} }
sub list_sas { sub list_sas {
my ($self, $msg) = @_; return request_list('list-sas', 'list-sa', @_);
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);
} }
sub list_policies { sub list_policies {
my $self = shift; return request_list('list-policies', 'list-policy', @_);
my $data = $self->{'Packet'}->streamed_request('list-policies',
'list-policy');
return Vici::Message->from_data($data);
} }
sub list_conns { sub list_conns {
my ($self, $msg) = @_; return request_list('list-conns', 'list-conn', @_);
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);
} }
sub get_conns { sub get_conns {
my $self = shift; return request('get-conns', @_);
my $data = $self->{'Packet'}->request('get-conns');
return Vici::Message->from_data($data);
} }
sub list_certs { sub list_certs {
my ($self, $msg) = @_; return request_list('list-certs', 'list-cert', @_);
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);
} }
sub list_authorities { sub list_authorities {
my $self = shift; return request_list('list-authorities', 'list-authority', @_);
my $data = $self->{'Packet'}->streamed_request('list-authorities',
'list-authority');
return Vici::Message->from_data($data);
} }
sub get_authorities { sub get_authorities {
my $self = shift; return request('get-authorities', @_);
my $data = $self->{'Packet'}->request('get-authorities'); }
return Vici::Message->from_data($data);
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 { sub get_pools {
my $self = shift; return request('get-pools', @_);
my $data = $self->{'Packet'}->request('get-pools'); }
return Vici::Message->from_data($data);
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; 1;