From 484c0f8dd06d6861f58a46fbd3f9e1e85ef973cc Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Mon, 14 Nov 2022 11:55:30 +0100 Subject: [PATCH] vici: Gracefully consume/ignore incoming events in Python event deregistration When issuing a deregistration message, some last events may still be sent by the daemon before deregistration completes. Ignore such event messages silently during deregistration, avoiding exceptions like: vici.exception.SessionException: Unexpected response type 7, expected '5' (EVENT_CONFIRM) --- src/libcharon/plugins/vici/python/test/test_session.py | 1 + src/libcharon/plugins/vici/python/vici/session.py | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libcharon/plugins/vici/python/test/test_session.py b/src/libcharon/plugins/vici/python/test/test_session.py index eabacc023..3b568daf5 100644 --- a/src/libcharon/plugins/vici/python/test/test_session.py +++ b/src/libcharon/plugins/vici/python/test/test_session.py @@ -84,6 +84,7 @@ class TestSession(object): if name is None: i += 1 if i > 2: + s.send(Packet.EVENT, name="event", message={"late": b'1'}) s.send(Packet.EVENT_CONFIRM) s.send(Packet.EVENT_CONFIRM) break diff --git a/src/libcharon/plugins/vici/python/vici/session.py b/src/libcharon/plugins/vici/python/vici/session.py index e98d10133..79f2bda81 100644 --- a/src/libcharon/plugins/vici/python/vici/session.py +++ b/src/libcharon/plugins/vici/python/vici/session.py @@ -40,7 +40,9 @@ class Session(CommandWrappers, object): raise EventUnknownException( "Unknown event type '{event}'".format(event=event_type) ) - elif response.response_type != Packet.EVENT_CONFIRM: + while response.response_type == Packet.EVENT: + response = Packet.parse(self.transport.receive()) + if response.response_type != Packet.EVENT_CONFIRM: raise SessionException( "Unexpected response type {type}, " "expected '{confirm}' (EVENT_CONFIRM)".format(