sr_module.h
3bf76e49
 /* $Id$
  *
  * modules/plugin strtuctures declarations
  *
  */
 
4042f646
 #ifndef sr_module_h
 #define sr_module_h
3bf76e49
 
3881f12c
 #include "parser/msg_parser.h" /* for sip_msg */
3bf76e49
 
404073d3
 typedef  struct module_exports* (*module_register)();
34fd2612
 typedef  int (*cmd_function)(struct sip_msg*, char*, char*);
 typedef  int (*fixup_function)(void** param, int param_no);
3bf76e49
 typedef  int (*response_function)(struct sip_msg*);
4bd1673d
 typedef  void (*onbreak_function)(struct sip_msg*);
bf08223a
 typedef void (*destroy_function)();
31309a3a
 typedef int (*init_function)(void);
192ac55b
 typedef int (*child_init_function)(int rank);
3bf76e49
 
31309a3a
 
 typedef enum {
 	STR_PARAM,  /* String parameter type */
 	INT_PARAM,  /* Integer parameter type */
 } modparam_t;       /* Allowed types of parameters */
 
 
3bf76e49
 struct module_exports{
31309a3a
 	char* name;                     /* null terminated module name */
 	char** cmd_names;               /* cmd names registered by this modules */
 	cmd_function* cmd_pointers;     /* pointers to the corresponding functions */
 	int* param_no;                  /* number of parameters used by the function */
34fd2612
 	fixup_function* fixup_pointers; /* pointers to functions called to "fix"
31309a3a
 					 * the params, e.g: precompile a re 
 					 */
 	int cmd_no;       /* number of registered commands
 			   * (size of cmd_{names,pointers}
 			   */
 
 	char** param_names;    /* parameter names registered by this modules */
 	modparam_t* param_types; /* Type of parameters */
 	void** param_pointers; /* Pointers to the corresponding memory locations */
 	int par_no;            /* Number of registered parameters */
 
 
 	init_function init_f;         /* Initilization function */
3bf76e49
 	response_function response_f; /* function used for responses,
31309a3a
 				       * returns yes or no;
 				       * can be null 
 				       */
 	destroy_function destroy_f;  /* function called when the module should
 				      * be "destroyed", e.g: on ser exit;
 				      * can be null 
 				      */
4bd1673d
 	onbreak_function onbreak_f;
31309a3a
 	child_init_function init_child_f;  /* Function will be called by all 
 					    * processes after the fork 
 					    */
3bf76e49
 };
 
 struct sr_module{
 	char* path;
 	void* handle;
 	struct module_exports* exports;
 	struct sr_module* next;
 };
031e278e
  
 struct sr_module* modules; /* global module list*/
3bf76e49
 
31309a3a
 int register_builtin_modules();
 int register_module(struct module_exports*, char*,  void*);
3bf76e49
 int load_module(char* path);
34fd2612
 cmd_function find_export(char* name, int param_no);
 struct sr_module* find_module(void *f, int* r);
bf08223a
 void destroy_modules();
192ac55b
 int init_child(int rank);
31309a3a
 int init_modules(void);
34fd2612
 
31309a3a
 /*
  * Find a parameter with given type and return it's
  * address in memory
  * If there is no such parameter, NULL is returned
  */
 void* find_param_export(char* mod, char* name, modparam_t type);
3bf76e49
 
 /* modules function prototypes:
404073d3
  * struct module_exports* mod_register(); (type module_register)
3bf76e49
  * int   foo_cmd(struct sip_msg* msg, char* param);
  *  - returns >0 if ok , <0 on error, 0 to stop processing (==DROP)
  * int   response_f(struct sip_msg* msg)
  *  - returns >0 if ok, 0 to drop message
  */
 
 
 #endif