diff options
author | Yves-Alexis Perez <corsac@corsac.net> | 2012-06-28 21:16:07 +0200 |
---|---|---|
committer | Yves-Alexis Perez <corsac@corsac.net> | 2012-06-28 21:16:07 +0200 |
commit | b34738ed08c2227300d554b139e2495ca5da97d6 (patch) | |
tree | 62f33b52820f2e49f0e53c0f8c636312037c8054 /src/libcharon/encoding/payloads/endpoint_notify.c | |
parent | 0a9d51a49042a68daa15b0c74a2b7f152f52606b (diff) | |
download | vyos-strongswan-b34738ed08c2227300d554b139e2495ca5da97d6.tar.gz vyos-strongswan-b34738ed08c2227300d554b139e2495ca5da97d6.zip |
Imported Upstream version 4.6.4
Diffstat (limited to 'src/libcharon/encoding/payloads/endpoint_notify.c')
-rw-r--r-- | src/libcharon/encoding/payloads/endpoint_notify.c | 125 |
1 files changed, 58 insertions, 67 deletions
diff --git a/src/libcharon/encoding/payloads/endpoint_notify.c b/src/libcharon/encoding/payloads/endpoint_notify.c index faec1ea71..1ead0a052 100644 --- a/src/libcharon/encoding/payloads/endpoint_notify.c +++ b/src/libcharon/encoding/payloads/endpoint_notify.c @@ -76,6 +76,11 @@ ENUM(me_endpoint_type_names, HOST, RELAYED, ); /** + * Forward declaration + */ +static private_endpoint_notify_t *endpoint_notify_create(); + +/** * Helper functions to parse integer values */ static status_t parse_uint8(u_int8_t **cur, u_int8_t *top, u_int8_t *val) @@ -216,10 +221,8 @@ static chunk_t build_notification_data(private_endpoint_notify_t *this) return data; } -/** - * Implementation of endpoint_notify_t.build_notify - */ -static notify_payload_t *build_notify(private_endpoint_notify_t *this) +METHOD(endpoint_notify_t, build_notify, notify_payload_t*, + private_endpoint_notify_t *this) { chunk_t data; notify_payload_t *notify; @@ -233,64 +236,53 @@ static notify_payload_t *build_notify(private_endpoint_notify_t *this) return notify; } -/** - * Implementation of endpoint_notify_t.get_priority. - */ -static u_int32_t get_priority(private_endpoint_notify_t *this) + +METHOD(endpoint_notify_t, get_priority, u_int32_t, + private_endpoint_notify_t *this) { return this->priority; } -/** - * Implementation of endpoint_notify_t.set_priority. - */ -static void set_priority(private_endpoint_notify_t *this, u_int32_t priority) +METHOD(endpoint_notify_t, set_priority, void, + private_endpoint_notify_t *this, u_int32_t priority) { this->priority = priority; } -/** - * Implementation of endpoint_notify_t.get_type. - */ -static me_endpoint_type_t get_type(private_endpoint_notify_t *this) +METHOD(endpoint_notify_t, get_type, me_endpoint_type_t, + private_endpoint_notify_t *this) { return this->type; } -/** - * Implementation of endpoint_notify_t.get_family. - */ -static me_endpoint_family_t get_family(private_endpoint_notify_t *this) +METHOD(endpoint_notify_t, get_family, me_endpoint_family_t, + private_endpoint_notify_t *this) { return this->family; } -/** - * Implementation of endpoint_notify_t.get_host. - */ -static host_t *get_host(private_endpoint_notify_t *this) +METHOD(endpoint_notify_t, get_host, host_t*, + private_endpoint_notify_t *this) { return this->endpoint; } -/** - * Implementation of endpoint_notify_t.get_base. - */ -static host_t *get_base(private_endpoint_notify_t *this) +METHOD(endpoint_notify_t, get_base, host_t*, + private_endpoint_notify_t *this) { return (!this->base) ? this->endpoint : this->base; } -/** - * Implementation of endpoint_notify_t.clone. - */ -static endpoint_notify_t *_clone(private_endpoint_notify_t *this) +METHOD(endpoint_notify_t, clone_, endpoint_notify_t*, + private_endpoint_notify_t *this) { - private_endpoint_notify_t *clone = (private_endpoint_notify_t*)endpoint_notify_create(); + private_endpoint_notify_t *clone; + clone = endpoint_notify_create(); clone->priority = this->priority; clone->type = this->type; clone->family = this->family; + if (this->endpoint) { clone->endpoint = this->endpoint->clone(this->endpoint); @@ -304,52 +296,47 @@ static endpoint_notify_t *_clone(private_endpoint_notify_t *this) return &clone->public; } -/** - * Implementation of endpoint_notify_t.destroy. - */ -static status_t destroy(private_endpoint_notify_t *this) +METHOD(endpoint_notify_t, destroy, void, + private_endpoint_notify_t *this) { DESTROY_IF(this->endpoint); DESTROY_IF(this->base); free(this); - return SUCCESS; } -/* - * Described in header +/** + * Creates an empty endpoint notify */ -endpoint_notify_t *endpoint_notify_create() +static private_endpoint_notify_t *endpoint_notify_create() { - private_endpoint_notify_t *this = malloc_thing(private_endpoint_notify_t); - - /* public functions */ - this->public.get_priority = (u_int32_t (*) (endpoint_notify_t *)) get_priority; - this->public.set_priority = (void (*) (endpoint_notify_t *, u_int32_t)) set_priority; - this->public.get_type = (me_endpoint_type_t (*) (endpoint_notify_t *)) get_type; - this->public.get_family = (me_endpoint_family_t (*) (endpoint_notify_t *)) get_family; - this->public.get_host = (host_t *(*) (endpoint_notify_t *)) get_host; - this->public.get_base = (host_t *(*) (endpoint_notify_t *)) get_base; - this->public.build_notify = (notify_payload_t *(*) (endpoint_notify_t *)) build_notify; - this->public.clone = (endpoint_notify_t *(*) (endpoint_notify_t *)) _clone; - this->public.destroy = (void (*) (endpoint_notify_t *)) destroy; - - /* set default values of the fields */ - this->priority = 0; - this->family = NO_FAMILY; - this->type = NO_TYPE; - this->endpoint = NULL; - this->base = NULL; - - return &this->public; + private_endpoint_notify_t *this; + + INIT(this, + .public = { + .get_priority = _get_priority, + .set_priority = _set_priority, + .get_type = _get_type, + .get_family = _get_family, + .get_host = _get_host, + .get_base = _get_base, + .build_notify = _build_notify, + .clone = _clone_, + .destroy = _destroy, + }, + .family = NO_FAMILY, + .type = NO_TYPE, + ); + + return this; } /** * Described in header */ -endpoint_notify_t *endpoint_notify_create_from_host(me_endpoint_type_t type, host_t *host, host_t *base) +endpoint_notify_t *endpoint_notify_create_from_host(me_endpoint_type_t type, + host_t *host, host_t *base) { - private_endpoint_notify_t *this = (private_endpoint_notify_t*)endpoint_notify_create(); - + private_endpoint_notify_t *this = endpoint_notify_create(); this->type = type; switch(type) @@ -406,13 +393,17 @@ endpoint_notify_t *endpoint_notify_create_from_host(me_endpoint_type_t type, hos */ endpoint_notify_t *endpoint_notify_create_from_payload(notify_payload_t *notify) { + private_endpoint_notify_t *this; + chunk_t data; + if (notify->get_notify_type(notify) != ME_ENDPOINT) { return NULL; } - private_endpoint_notify_t *this = (private_endpoint_notify_t*)endpoint_notify_create(); - chunk_t data = notify->get_notification_data(notify); + this = endpoint_notify_create(); + data = notify->get_notification_data(notify); + if (parse_notification_data(this, data) != SUCCESS) { destroy(this); |