GPLization banner introduced to *.[hc] files
[sip-router] / sr_module.h
1 /* $Id$
2  *
3  * modules/plugin strtuctures declarations
4  *
5  *
6  * Copyright (C) 2001-2003 Fhg Fokus
7  *
8  * This file is part of ser, a free SIP server.
9  *
10  * ser is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version
14  *
15  * For a license to use the ser software under conditions
16  * other than those described here, or to purchase support for this
17  * software, please contact iptel.org by e-mail at the following addresses:
18  *    info@iptel.org
19  *
20  * ser is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License 
26  * along with this program; if not, write to the Free Software 
27  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
28  */
29
30
31 #ifndef sr_module_h
32 #define sr_module_h
33
34 #include "parser/msg_parser.h" /* for sip_msg */
35
36 typedef  struct module_exports* (*module_register)();
37 typedef  int (*cmd_function)(struct sip_msg*, char*, char*);
38 typedef  int (*fixup_function)(void** param, int param_no);
39 typedef  int (*response_function)(struct sip_msg*);
40 typedef  void (*onbreak_function)(struct sip_msg*);
41 typedef void (*destroy_function)();
42 typedef int (*init_function)(void);
43 typedef int (*child_init_function)(int rank);
44
45
46 typedef enum {
47         STR_PARAM,  /* String parameter type */
48         INT_PARAM,  /* Integer parameter type */
49 } modparam_t;       /* Allowed types of parameters */
50
51
52 struct module_exports{
53         char* name;                     /* null terminated module name */
54         char** cmd_names;               /* cmd names registered by this modules */
55         cmd_function* cmd_pointers;     /* pointers to the corresponding functions */
56         int* param_no;                  /* number of parameters used by the function */
57         fixup_function* fixup_pointers; /* pointers to functions called to "fix"
58                                          * the params, e.g: precompile a re 
59                                          */
60         int cmd_no;       /* number of registered commands
61                            * (size of cmd_{names,pointers}
62                            */
63
64         char** param_names;    /* parameter names registered by this modules */
65         modparam_t* param_types; /* Type of parameters */
66         void** param_pointers; /* Pointers to the corresponding memory locations */
67         int par_no;            /* Number of registered parameters */
68
69
70         init_function init_f;         /* Initilization function */
71         response_function response_f; /* function used for responses,
72                                        * returns yes or no;
73                                        * can be null 
74                                        */
75         destroy_function destroy_f;  /* function called when the module should
76                                       * be "destroyed", e.g: on ser exit;
77                                       * can be null 
78                                       */
79         onbreak_function onbreak_f;
80         child_init_function init_child_f;  /* Function will be called by all 
81                                             * processes after the fork 
82                                             */
83 };
84
85 struct sr_module{
86         char* path;
87         void* handle;
88         struct module_exports* exports;
89         struct sr_module* next;
90 };
91  
92 struct sr_module* modules; /* global module list*/
93
94 int register_builtin_modules();
95 int register_module(struct module_exports*, char*,  void*);
96 int load_module(char* path);
97 cmd_function find_export(char* name, int param_no);
98 struct sr_module* find_module(void *f, int* r);
99 void destroy_modules();
100 int init_child(int rank);
101 int init_modules(void);
102
103 /*
104  * Find a parameter with given type and return it's
105  * address in memory
106  * If there is no such parameter, NULL is returned
107  */
108 void* find_param_export(char* mod, char* name, modparam_t type);
109
110 /* modules function prototypes:
111  * struct module_exports* mod_register(); (type module_register)
112  * int   foo_cmd(struct sip_msg* msg, char* param);
113  *  - returns >0 if ok , <0 on error, 0 to stop processing (==DROP)
114  * int   response_f(struct sip_msg* msg)
115  *  - returns >0 if ok, 0 to drop message
116  */
117
118
119 #endif