X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Finclude%2Fmodules.h;h=dbb17f3de6597fe988c8ea4de3d160db5cc5d53d;hb=e2eaf9194b16fdd15ebf274aafd05edc9fefb4bb;hp=0d65f9883873694e160440da131bd925103a2f4a;hpb=6a5d3d4a0c438d06bdf8f4c6ff741f598c441147;p=freeradius.git diff --git a/src/include/modules.h b/src/include/modules.h index 0d65f98..dbb17f3 100644 --- a/src/include/modules.h +++ b/src/include/modules.h @@ -7,7 +7,15 @@ #ifndef RADIUS_MODULES_H #define RADIUS_MODULES_H -#include "conffile.h" + +#include +RCSIDH(modules_h, "$Id$") + +#include + +#ifdef __cplusplus +extern "C" { +#endif typedef int (*packetmethod)(void *instance, REQUEST *request); @@ -20,24 +28,30 @@ enum { RLM_COMPONENT_PRE_PROXY, /* 5 */ RLM_COMPONENT_POST_PROXY, /* 6 */ RLM_COMPONENT_POST_AUTH, /* 7 */ - RLM_COMPONENT_COUNT /* 8: How many components are there */ +#ifdef WITH_COA + RLM_COMPONENT_RECV_COA, /* 8 */ + RLM_COMPONENT_SEND_COA, /* 9 */ +#endif + RLM_COMPONENT_COUNT /* 8 / 10: How many components are there */ }; -#define RLM_TYPE_THREAD_SAFE (0 << 0) -#define RLM_TYPE_THREAD_UNSAFE (1 << 0) +#define RLM_TYPE_THREAD_SAFE (0 << 0) +#define RLM_TYPE_THREAD_UNSAFE (1 << 0) +#define RLM_TYPE_CHECK_CONFIG_SAFE (1 << 1) +#define RLM_TYPE_HUP_SAFE (1 << 2) + +#define RLM_MODULE_MAGIC_NUMBER ((uint32_t) (0xf4ee4ad3)) +#define RLM_MODULE_INIT RLM_MODULE_MAGIC_NUMBER typedef struct module_t { + uint32_t magic; /* may later be opaque struct */ const char *name; - int type; /* reserved */ - int (*init)(void); - int (*instantiate)(CONF_SECTION *mod_cs, void **instance); + int type; + int (*instantiate)(CONF_SECTION *mod_cs, void **instance); + int (*detach)(void *instance); packetmethod methods[RLM_COMPONENT_COUNT]; - int (*detach)(void *instance); - int (*destroy)(void); } module_t; -extern const char *component_names[RLM_COMPONENT_COUNT]; - enum { RLM_MODULE_REJECT, /* immediately reject the request */ RLM_MODULE_FAIL, /* module failed, don't reply */ @@ -51,8 +65,9 @@ enum { RLM_MODULE_NUMCODES /* How many return codes there are */ }; -int setup_modules(void); +int setup_modules(int, CONF_SECTION *); int detach_modules(void); +int module_hup(CONF_SECTION *modules); int module_authorize(int type, REQUEST *request); int module_authenticate(int type, REQUEST *request); int module_preacct(REQUEST *request); @@ -61,5 +76,23 @@ int module_checksimul(int type, REQUEST *request, int maxsimul); int module_pre_proxy(int type, REQUEST *request); int module_post_proxy(int type, REQUEST *request); int module_post_auth(int type, REQUEST *request); +#ifdef WITH_COA +int module_recv_coa(int type, REQUEST *request); +int module_send_coa(int type, REQUEST *request); +#define MODULE_NULL_COA_FUNCS ,NULL,NULL +#else +#define MODULE_NULL_COA_FUNCS +#endif +int indexed_modcall(int comp, int idx, REQUEST *request); + +/* + * For now, these are strongly tied together. + */ +int virtual_servers_load(CONF_SECTION *config); +void virtual_servers_free(time_t when); + +#ifdef __cplusplus +} +#endif #endif /* RADIUS_MODULES_H */