From: Martin Willi Date: Mon, 14 Nov 2022 10:55:30 +0000 (+0100) Subject: vici: Gracefully consume/ignore incoming events in Python event deregistration X-Git-Tag: 5.9.9rc1~13^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=484c0f8dd06d6861f58a46fbd3f9e1e85ef973cc;p=thirdparty%2Fstrongswan.git 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) --- diff --git a/src/libcharon/plugins/vici/python/test/test_session.py b/src/libcharon/plugins/vici/python/test/test_session.py index eabacc0234..3b568daf5c 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 e98d10133a..79f2bda815 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(