Annotation of embedaddon/strongswan/src/libcharon/encoding/payloads/endpoint_notify.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2007 Tobias Brunner
                      3:  * HSR Hochschule fuer Technik Rapperswil
                      4:  *
                      5:  * This program is free software; you can redistribute it and/or modify it
                      6:  * under the terms of the GNU General Public License as published by the
                      7:  * Free Software Foundation; either version 2 of the License, or (at your
                      8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                      9:  *
                     10:  * This program is distributed in the hope that it will be useful, but
                     11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     13:  * for more details.
                     14:  */
                     15: 
                     16: /**
                     17:  * @defgroup endpoint_notify endpoint_notify
                     18:  * @{ @ingroup payloads
                     19:  */
                     20: 
                     21: #ifndef ENDPOINT_NOTIFY_H_
                     22: #define ENDPOINT_NOTIFY_H_
                     23: 
                     24: #define ME_PRIO_HOST   255
                     25: #define ME_PRIO_PEER   128
                     26: #define ME_PRIO_SERVER 64
                     27: #define ME_PRIO_RELAY  0
                     28: 
                     29: typedef enum me_endpoint_family_t me_endpoint_family_t;
                     30: typedef enum me_endpoint_type_t me_endpoint_type_t;
                     31: typedef struct endpoint_notify_t endpoint_notify_t;
                     32: 
                     33: #include <encoding/payloads/notify_payload.h>
                     34: 
                     35: /**
                     36:  * ME endpoint families.
                     37:  */
                     38: enum me_endpoint_family_t {
                     39: 
                     40:        NO_FAMILY = 0,
                     41: 
                     42:        IPv4 = 1,
                     43: 
                     44:        IPv6 = 2,
                     45: 
                     46:        MAX_FAMILY = 3
                     47: 
                     48: };
                     49: 
                     50: /**
                     51:  * ME endpoint types.
                     52:  */
                     53: enum me_endpoint_type_t {
                     54: 
                     55:        NO_TYPE = 0,
                     56: 
                     57:        HOST = 1,
                     58: 
                     59:        PEER_REFLEXIVE = 2,
                     60: 
                     61:        SERVER_REFLEXIVE = 3,
                     62: 
                     63:        RELAYED = 4,
                     64: 
                     65:        MAX_TYPE = 5
                     66: 
                     67: };
                     68: 
                     69: /**
                     70:  * enum name for me_endpoint_type_t.
                     71:  */
                     72: extern enum_name_t *me_endpoint_type_names;
                     73: 
                     74: /**
                     75:  * Class representing a ME_ENDPOINT Notify payload. In fact it's not
                     76:  * the notify per se, but the notification data of that notify that is
                     77:  * handled with this class.
                     78:  */
                     79: struct endpoint_notify_t {
                     80:        /**
                     81:         * Returns the priority of this endpoint.
                     82:         *
                     83:         * @return                      priority
                     84:         */
                     85:        uint32_t (*get_priority) (endpoint_notify_t *this);
                     86: 
                     87:        /**
                     88:         * Sets the priority of this endpoint.
                     89:         *
                     90:         * @param priority      priority
                     91:         */
                     92:        void (*set_priority) (endpoint_notify_t *this, uint32_t priority);
                     93: 
                     94:        /**
                     95:         * Returns the endpoint type of this endpoint.
                     96:         *
                     97:         * @return                      endpoint type
                     98:         */
                     99:        me_endpoint_type_t (*get_type) (endpoint_notify_t *this);
                    100: 
                    101:        /**
                    102:         * Returns the endpoint family of this endpoint.
                    103:         *
                    104:         * @return                      endpoint family
                    105:         */
                    106:        me_endpoint_family_t (*get_family) (endpoint_notify_t *this);
                    107: 
                    108:        /**
                    109:         * Returns the host of this endpoint.
                    110:         *
                    111:         * @return                      host
                    112:         */
                    113:        host_t *(*get_host) (endpoint_notify_t *this);
                    114: 
                    115:        /**
                    116:         * Returns the base of this endpoint.
                    117:         *
                    118:         * If this is not a SERVER_REFLEXIVE endpoint, the returned host is the same
                    119:         * as the one returned by get_host.
                    120:         *
                    121:         * @return                      host
                    122:         */
                    123:        host_t *(*get_base) (endpoint_notify_t *this);
                    124: 
                    125:        /**
                    126:         * Generates a notification payload from this endpoint.
                    127:         *
                    128:         * @return                      built notify_payload_t
                    129:         */
                    130:        notify_payload_t *(*build_notify) (endpoint_notify_t *this);
                    131: 
                    132:        /**
                    133:         * Clones an endpoint_notify_t object.
                    134:         *
                    135:         * @return                      cloned object
                    136:         */
                    137:        endpoint_notify_t *(*clone) (endpoint_notify_t *this);
                    138: 
                    139:        /**
                    140:         * Destroys an endpoint_notify_t object.
                    141:         */
                    142:        void (*destroy) (endpoint_notify_t *this);
                    143: };
                    144: 
                    145: /**
                    146:  * Creates an endpoint_notify_t object from a host.
                    147:  *
                    148:  * @param type         the endpoint type
                    149:  * @param host         host to base the notify on (gets cloned)
                    150:  * @param base         base of the endpoint, applies only to reflexive
                    151:  *                                     endpoints (gets cloned)
                    152:  * @return                     created endpoint_notify_t object
                    153:  */
                    154: endpoint_notify_t *endpoint_notify_create_from_host(me_endpoint_type_t type,
                    155:                                                                                                        host_t *host, host_t *base);
                    156: 
                    157: /**
                    158:  * Creates an endpoint_notify_t object from a notify payload.
                    159:  *
                    160:  * @param notify       the notify payload
                    161:  * @return                     - created endpoint_notify_t object
                    162:  *                                     - NULL if invalid payload
                    163:  */
                    164: endpoint_notify_t *endpoint_notify_create_from_payload(notify_payload_t *notify);
                    165: 
                    166: #endif /** ENDPOINT_NOTIFY_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>