Annotation of embedaddon/strongswan/src/libcharon/sa/ikev2/connect_manager.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2007-2008 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 connect_manager connect_manager
                     18:  * @{ @ingroup ikev2
                     19:  */
                     20: 
                     21: #ifndef CONNECT_MANAGER_H_
                     22: #define CONNECT_MANAGER_H_
                     23: 
                     24: typedef struct connect_manager_t connect_manager_t;
                     25: 
                     26: #include <encoding/message.h>
                     27: #include <sa/ike_sa_id.h>
                     28: #include <utils/identification.h>
                     29: 
                     30: /**
                     31:  * The connection manager is responsible for establishing a direct
                     32:  * connection with another peer.
                     33:  */
                     34: struct connect_manager_t {
                     35: 
                     36:        /**
                     37:         * Checks if a there is already a mediated connection registered
                     38:         * between two peers.
                     39:         *
                     40:         * @param id                    my id
                     41:         * @param peer_id               the other peer's id
                     42:         * @param mediated_sa   the IKE_SA ID of the mediated connection
                     43:         * @returns
                     44:         *                                              - TRUE, if a mediated connection is registered
                     45:         *                                              - FALSE, otherwise
                     46:         */
                     47:        bool (*check_and_register) (connect_manager_t *this, identification_t *id,
                     48:                                                                identification_t *peer_id,
                     49:                                                                ike_sa_id_t *mediated_sa);
                     50: 
                     51:        /**
                     52:         * Checks if there are waiting connections with a specific peer.
                     53:         * If so, reinitiate them.
                     54:         *
                     55:         * @param id                    my id
                     56:         * @param peer_id               the other peer's id
                     57:         */
                     58:        void (*check_and_initiate) (connect_manager_t *this,
                     59:                                                                ike_sa_id_t *mediation_sa, identification_t *id,
                     60:                                                                identification_t *peer_id);
                     61: 
                     62:        /**
                     63:         * Creates a checklist and sets the initiator's data.
                     64:         *
                     65:         * @param initiator             ID of the initiator
                     66:         * @param responder             ID of the responder
                     67:         * @param connect_id    the connect ID provided by the initiator
                     68:         * @param key                   the initiator's key
                     69:         * @param endpoints             the initiator's endpoints
                     70:         * @param is_initiator  TRUE, if the caller of this method is the initiator
                     71:         * @returns                             SUCCESS
                     72:         */
                     73:        status_t (*set_initiator_data) (connect_manager_t *this,
                     74:                                                                        identification_t *initiator,
                     75:                                                                        identification_t *responder,
                     76:                                                                        chunk_t connect_id, chunk_t key,
                     77:                                                                        linked_list_t *endpoints,
                     78:                                                                        bool is_initiator);
                     79: 
                     80:        /**
                     81:         * Updates a checklist and sets the responder's data. The checklist's
                     82:         * state is advanced to WAITING which means that checks will be sent.
                     83:         *
                     84:         * @param connect_id    the connect ID
                     85:         * @param chunk_t               the responder's key
                     86:         * @param endpoints             the responder's endpoints
                     87:         * @returns
                     88:         *                                              - NOT_FOUND, if the checklist has not been found
                     89:         *                                              - SUCCESS, otherwise
                     90:         */
                     91:        status_t (*set_responder_data) (connect_manager_t *this,
                     92:                                                                        chunk_t connect_id, chunk_t key,
                     93:                                                                        linked_list_t *endpoints);
                     94: 
                     95:        /**
                     96:         * Stops checks for a checklist. Called after the responder received an
                     97:         * IKE_SA_INIT request which contains a ME_CONNECTID payload.
                     98:         *
                     99:         * @param connect_id    the connect ID
                    100:         * @returns
                    101:         *                                              - NOT_FOUND, if the checklist has not been found
                    102:         *                                              - SUCCESS, otherwise
                    103:         */
                    104:        status_t (*stop_checks) (connect_manager_t *this, chunk_t connect_id);
                    105: 
                    106:        /**
                    107:         * Processes a connectivity check
                    108:         *
                    109:         * @param message               the received message
                    110:         */
                    111:        void (*process_check) (connect_manager_t *this, message_t *message);
                    112: 
                    113:        /**
                    114:         * Destroys the manager with all data.
                    115:         */
                    116:        void (*destroy) (connect_manager_t *this);
                    117: };
                    118: 
                    119: /**
                    120:  * Create a manager.
                    121:  *
                    122:  * @returns    connect_manager_t object
                    123:  */
                    124: connect_manager_t *connect_manager_create(void);
                    125: 
                    126: #endif /** CONNECT_MANAGER_H_ @}*/

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