diff options
author | Tobias Brunner <tobias@strongswan.org> | 2010-07-06 16:09:06 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2010-09-02 19:01:23 +0200 |
commit | f7f3d87ed7206f8b5f8cdb2b2de6f3d657ca6426 (patch) | |
tree | dfd581b5374659c9e5351ac5638bc7d3002e425f /src/libcharon | |
parent | c560ddeb252fd42cc28d1d2e9c491a70b860ff9e (diff) | |
download | strongswan-f7f3d87ed7206f8b5f8cdb2b2de6f3d657ca6426.tar.bz2 strongswan-f7f3d87ed7206f8b5f8cdb2b2de6f3d657ca6426.tar.xz |
All kernel listener hooks are optional.
Diffstat (limited to 'src/libcharon')
-rw-r--r-- | src/libcharon/kernel/kernel_interface.c | 14 | ||||
-rw-r--r-- | src/libcharon/kernel/kernel_listener.h | 2 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/libcharon/kernel/kernel_interface.c b/src/libcharon/kernel/kernel_interface.c index 98ec37cde..fffde68ae 100644 --- a/src/libcharon/kernel/kernel_interface.c +++ b/src/libcharon/kernel/kernel_interface.c @@ -376,7 +376,8 @@ METHOD(kernel_interface_t, acquire, void, enumerator = this->listeners->create_enumerator(this->listeners); while (enumerator->enumerate(enumerator, &listener)) { - if (!listener->acquire(listener, reqid, src_ts, dst_ts)) + if (listener->acquire && + !listener->acquire(listener, reqid, src_ts, dst_ts)) { this->listeners->remove_at(this->listeners, enumerator); } @@ -395,7 +396,8 @@ METHOD(kernel_interface_t, expire, void, enumerator = this->listeners->create_enumerator(this->listeners); while (enumerator->enumerate(enumerator, &listener)) { - if (!listener->expire(listener, reqid, protocol, spi, hard)) + if (listener->expire && + !listener->expire(listener, reqid, protocol, spi, hard)) { this->listeners->remove_at(this->listeners, enumerator); } @@ -414,7 +416,8 @@ METHOD(kernel_interface_t, mapping, void, enumerator = this->listeners->create_enumerator(this->listeners); while (enumerator->enumerate(enumerator, &listener)) { - if (!listener->mapping(listener, reqid, spi, remote)) + if (listener->mapping && + !listener->mapping(listener, reqid, spi, remote)) { this->listeners->remove_at(this->listeners, enumerator); } @@ -434,7 +437,8 @@ METHOD(kernel_interface_t, migrate, void, enumerator = this->listeners->create_enumerator(this->listeners); while (enumerator->enumerate(enumerator, &listener)) { - if (!listener->migrate(listener, reqid, src_ts, dst_ts, direction, + if (listener->migrate && + !listener->migrate(listener, reqid, src_ts, dst_ts, direction, local, remote)) { this->listeners->remove_at(this->listeners, enumerator); @@ -446,7 +450,7 @@ METHOD(kernel_interface_t, migrate, void, static bool call_roam(kernel_listener_t *listener, bool *roam) { - return !listener->roam(listener, *roam); + return listener->roam && !listener->roam(listener, *roam); } METHOD(kernel_interface_t, roam, void, diff --git a/src/libcharon/kernel/kernel_listener.h b/src/libcharon/kernel/kernel_listener.h index e0a911a16..b69bed66f 100644 --- a/src/libcharon/kernel/kernel_listener.h +++ b/src/libcharon/kernel/kernel_listener.h @@ -29,6 +29,8 @@ typedef struct kernel_listener_t kernel_listener_t; /** * Interface for components interested in kernel events. + * + * All hooks are optional. */ struct kernel_listener_t { |