X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/8e9c6a75905ad9feb5d374e67b4c9ab5f6e8a514..968dee680f777012773c21a23dd698b693634104:/include/modules.h diff --git a/include/modules.h b/include/modules.h index 6c0f7ccf..0c746728 100644 --- a/include/modules.h +++ b/include/modules.h @@ -24,9 +24,11 @@ #ifndef INCLUDED_modules_h #define INCLUDED_modules_h -#include "config.h" +#include "serno.h" +#include "defaults.h" #include "setup.h" #include "parse.h" +#include "client.h" /* for IDLEN */ #define MAPI_CHARYBDIS 2 @@ -39,10 +41,14 @@ struct module { char *name; const char *version; + const char *description; lt_dlhandle address; - int core; + int core; /* This is int for backwards compat reasons */ + int origin; /* Ditto */ + char *path; int mapi_version; void *mapi_header; /* actually struct mapi_mheader_av */ + rb_dlink_node node; }; #define MAPI_MAGIC_HDR 0x4D410000 @@ -65,9 +71,9 @@ typedef struct { const char *hapi_name; hookfn fn; + enum hook_priority priority; } mapi_hfn_list_av1; - #define MAPI_CAP_CLIENT 1 #define MAPI_CAP_SERVER 2 @@ -76,7 +82,7 @@ typedef struct int cap_index; /* Which cap index does this belong to? */ const char *cap_name; /* Capability name */ void *cap_ownerdata; /* Not used much but why not... */ - int *cap_id; /* May be set to non-NULL to store cap id */ + unsigned int *cap_id; /* May be set to non-NULL to store cap id */ } mapi_cap_list_av2; struct mapi_mheader_av1 @@ -90,6 +96,10 @@ struct mapi_mheader_av1 const char *mapi_module_version; /* Module's version (freeform) */ }; +#define MAPI_ORIGIN_UNKNOWN 0 /* Unknown provenance (AV1 etc.) */ +#define MAPI_ORIGIN_EXTENSION 1 /* Charybdis extension */ +#define MAPI_ORIGIN_CORE 2 /* Charybdis core module */ + struct mapi_mheader_av2 { int mapi_version; /* Module API version */ @@ -101,31 +111,45 @@ struct mapi_mheader_av2 mapi_cap_list_av2 *mapi_cap_list; /* List of CAPs to add */ const char *mapi_module_version; /* Module's version (freeform), replaced with ircd version if NULL */ const char *mapi_module_description; /* Module's description (freeform) */ + unsigned long int mapi_datecode; /* Unix timestamp of module's build */ }; #define DECLARE_MODULE_AV1(name, reg, unreg, cl, hl, hfnlist, v) \ struct mapi_mheader_av1 _mheader = { MAPI_V1, reg, unreg, cl, hl, hfnlist, v} #define DECLARE_MODULE_AV2(name, reg, unreg, cl, hl, hfnlist, caplist, v, desc) \ - struct mapi_mheader_av2 _mheader = { MAPI_V1, reg, unreg, cl, hl, hfnlist, caplist, v, desc} + struct mapi_mheader_av2 _mheader = { MAPI_V2, reg, unreg, cl, hl, hfnlist, caplist, v, desc, DATECODE} + +struct modreload +{ + char module[BUFSIZE]; + char id[IDLEN]; +}; /* add a path */ void mod_add_path(const char *path); void mod_clear_paths(void); +/* cap-notify utilities */ +extern void mod_remember_clicaps(void); +extern void mod_notify_clicaps(void); + /* load a module */ extern void load_module(char *path); /* load all modules */ -extern void load_all_modules(int warn); +extern void load_all_modules(bool warn); /* load core modules */ -extern void load_core_modules(int); +extern void load_core_modules(bool); + +extern bool unload_one_module(const char *, bool); +extern bool load_one_module(const char *, int, bool); +extern bool load_a_module(const char *, bool, int, bool); +extern struct module *findmodule_byname(const char *); +extern void init_modules(void); -extern int unload_one_module(const char *, int); -extern int load_one_module(const char *, int); -extern int load_a_module(const char *, int, int); -extern int findmodule_byname(const char *); -extern void modules_init(void); +extern rb_dlink_list module_list; +extern rb_dlink_list mod_paths; #endif /* INCLUDED_modules_h */