diff options
author | Tobias Brunner <tobias@strongswan.org> | 2015-08-06 14:51:21 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2015-08-17 11:12:18 +0200 |
commit | b3d91cc64e1e4a0b7b83aea3d9d0efd15f4749ce (patch) | |
tree | 57535599e880d96e42100abfecb640396aa2b136 | |
parent | cf4cefee4247293182805e6cc0cc7852dcfd5d46 (diff) | |
download | strongswan-b3d91cc64e1e4a0b7b83aea3d9d0efd15f4749ce.tar.bz2 strongswan-b3d91cc64e1e4a0b7b83aea3d9d0efd15f4749ce.tar.xz |
vici: Add listen methods to receive arbitrary events in Python library
-rw-r--r-- | src/libcharon/plugins/vici/python/vici/session.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/libcharon/plugins/vici/python/vici/session.py b/src/libcharon/plugins/vici/python/vici/session.py index 53ce10dbd..283e3d13d 100644 --- a/src/libcharon/plugins/vici/python/vici/session.py +++ b/src/libcharon/plugins/vici/python/vici/session.py @@ -197,6 +197,16 @@ class Session(object): """ return self.handler.request("get-pools") + def listen(self, event_types): + """Register and listen for the given events. + + :param event_types: event types to register + :type event_types: list + :return: generator for streamed event responses as (event_type, dict) + :rtype: generator + """ + return self.handler.listen(event_types) + class SessionHandler(object): """Handles client command execution requests over vici.""" @@ -331,3 +341,27 @@ class SessionHandler(object): errmsg=command_response["errmsg"] ) ) + + def listen(self, event_types): + """Register and listen for the given events. + + :param event_types: event types to register + :type event_types: list + :return: generator for streamed event responses as (event_type, dict) + :rtype: generator + """ + for event_type in event_types: + self._register_unregister(event_type, True) + + try: + while True: + response = Packet.parse(self.transport.receive()) + if response.response_type == Packet.EVENT: + try: + yield response.event_type, Message.deserialize(response.payload) + except GeneratorExit: + break + + finally: + for event_type in event_types: + self._register_unregister(event_type, False) |