]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Implemented subscription to events vici-perl-events
authorAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 20 Nov 2015 13:40:18 +0000 (14:40 +0100)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 20 Nov 2015 13:40:18 +0000 (14:40 +0100)
src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Message.pm
src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Packet.pm
src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Session.pm

index 228431c903282e0233208a22ef4b4834c59f2d7a..102ee8ba75f67ef3f81ef6f644bd109fb21d16b0 100644 (file)
@@ -78,10 +78,10 @@ sub parse {
     {
         (my $type, $data) = unpack('Ca*', $data);
 
-               if ($type == SECTION_END)
-               {
-                       return $data;
-               }
+        if ($type == SECTION_END)
+        {
+            return $data;
+        }
 
         (my $key, $data) = unpack('C/a*a*', $data);
 
index 62dac0a3772708f8d9d14fcb0099e3652f7e1afb..1884da146f9499c31bef26e01501d5ce34a094bf 100644 (file)
@@ -5,7 +5,7 @@ use AutoLoader qw(AUTOLOAD);
 
 our @ISA = qw(Exporter);
 our @EXPORT = qw(
-    new, request, register, unregister, streamed_request
+    new, request, register, unregister, event, streamed_request
 );
 our $VERSION = '0.9';
 
@@ -42,24 +42,27 @@ sub request {
     my $request = pack('CC/a*a*', CMD_REQUEST, $command, $out);
     $self->{'Transport'}->send($request);
 
-    my $response = $self->{'Transport'}->receive();
-    my ($type, $data) = unpack('Ca*', $response);
-
-       switch ($type)
+    while (1)
     {
-        case CMD_RESPONSE
-        {
-            return Vici::Message->from_data($data);
-        }
-        case CMD_UNKNOWN
-        {
-            die "unknown command '", $command, "'\n"
-        }
-        else
+        my $response = $self->{'Transport'}->receive();
+        my ($type, $data) = unpack('Ca*', $response);
+
+        switch ($type)
         {
-            die "invalid response type\n"
+            case CMD_RESPONSE
+            {
+                return Vici::Message->from_data($data);
+            }
+            case CMD_UNKNOWN
+            {
+                die "unknown command '", $command, "'\n"
+            }
+            else
+            {
+                #ignore, message might be for another thread
+            }
         }
-    }; 
+    } 
 }
 
 sub register {
@@ -112,6 +115,22 @@ sub unregister {
     }; 
 }
 
+sub event {
+    my $self = shift;
+
+    while (1)
+    {
+        my $response = $self->{'Transport'}->receive();
+        my ($type, $data) = unpack('Ca*', $response);
+        if ($type == EVENT)
+        {
+            (my $event_name, $data) = unpack('C/a*a*', $data);
+             my $msg = Vici::Message->from_data($data);
+            return ($event_name, $msg);
+        }
+    }
+}
+
 sub streamed_request {
     my ($self, $command, $event, $vars) = @_;
     my $out = defined $vars ? $vars->encode() : '';
index 256509b1900dc535861418fe6dd8c45adfad37ca..cd18cbc380403fb587cfde419268d5f24cf460d2 100644 (file)
@@ -9,7 +9,8 @@ our @EXPORT = qw(
     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
+    load_pool, unload_pool, get_pools, register_events, unregister_events,
+    listen_events
 );
 our $VERSION = '0.9';
 
@@ -128,6 +129,41 @@ sub get_pools {
     return request('get-pools', @_);
 }
 
+sub register_events {
+    my ($self, $events) = @_;
+    if (ref($events) eq 'ARRAY')
+    {
+        foreach my $event (@$events)
+        {
+            $self->{'Packet'}->register($event);
+        }
+    }
+    else
+    {
+        $self->{'Packet'}->register($events);
+    }
+}
+
+sub unregister_events {
+    my ($self, $events) = @_;
+    if (ref($events) eq 'ARRAY')
+    {
+        foreach my $event (@$events)
+        {
+            $self->{'Packet'}->register($event);
+        }
+    }
+    else
+    {
+        $self->{'Packet'}->register($events);
+    }
+}
+
+sub listen_events {
+    my ($self, $events) = @_;
+       return $self->{'Packet'}->event();
+}
+
 # Private functions
 
 sub request {