/* * Copyright (C) 2012 Tobias Brunner * Copyright (C) 2008 Martin Willi * HSR Hochschule fuer Technik Rapperswil * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. See . * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. */ /** * @defgroup eap_manager eap_manager * @{ @ingroup eap */ #ifndef EAP_MANAGER_H_ #define EAP_MANAGER_H_ #include typedef struct eap_manager_t eap_manager_t; /** * The EAP manager manages all EAP implementations and creates instances. * * A plugin registers it's implemented EAP method at the manager by * providing type and a constructor function. The manager then instantiates * eap_method_t instances through the provided constructor to handle * EAP authentication. */ struct eap_manager_t { /** * Register a EAP method implementation. * * @param method vendor specific method, if vendor != 0 * @param vendor vendor ID, 0 for non-vendor (default) EAP methods * @param role EAP role of the registered method * @param constructor constructor function, returns an eap_method_t */ void (*add_method)(eap_manager_t *this, eap_type_t type, uint32_t vendor, eap_role_t role, eap_constructor_t constructor); /** * Unregister a EAP method implementation using it's constructor. * * @param constructor constructor function to remove, as added in add_method */ void (*remove_method)(eap_manager_t *this, eap_constructor_t constructor); /** * Enumerate the registered EAP authentication methods for the given role. * * @note Only authentication types are enumerated (e.g. EAP-Identity is not * even though it is registered as method with this manager). * * @param role EAP role of methods to enumerate * @return enumerator over (eap_type_t type, uint32_t vendor) */ enumerator_t* (*create_enumerator)(eap_manager_t *this, eap_role_t role); /** * Create a new EAP method instance. * * @param type type of the EAP method * @param vendor vendor ID, 0 for non-vendor (default) EAP methods * @param role role of EAP method, either EAP_SERVER or EAP_PEER * @param server identity of the server * @param peer identity of the peer (client) * @return EAP method instance, NULL if no constructor found */ eap_method_t* (*create_instance)(eap_manager_t *this, eap_type_t type, uint32_t vendor, eap_role_t role, identification_t *server, identification_t *peer); /** * Destroy a eap_manager instance. */ void (*destroy)(eap_manager_t *this); }; /** * Create a eap_manager instance. */ eap_manager_t *eap_manager_create(); #endif /** EAP_MANAGER_H_ @}*/