750b7a58f458565b61abe702306be77b0cfb317b
[citadel.git] / citadel / include / ctdl_module.h
1 /* $Id$ */
2
3 #ifndef CTDL_MODULE_H
4 #define CTDL_MODULE_H
5
6 #include "server.h"
7 #include "sysdep_decls.h"
8
9 /*
10  * define macros for module init stuff
11  */
12  
13 #define CTDL_MODULE_INIT(module_name) char *ctdl_module_##module_name##_init (void)
14
15 #define CTDL_INIT_CALL(module_name) ctdl_module_##module_name##_init ()
16
17
18 /*
19  * Hook functions available to modules.
20  */
21
22 void CtdlRegisterSessionHook(void (*fcn_ptr)(void), int EventType);
23 void CtdlUnregisterSessionHook(void (*fcn_ptr)(void), int EventType);
24
25 void CtdlRegisterUserHook(void (*fcn_ptr)(struct ctdluser *), int EventType);
26 void CtdlUnregisterUserHook(void (*fcn_ptr)(struct ctdluser *), int EventType);
27
28 void CtdlRegisterXmsgHook(int (*fcn_ptr)(char *, char *, char *), int order);
29 void CtdlUnregisterXmsgHook(int (*fcn_ptr)(char *, char *, char *), int order);
30
31 void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *),
32                                                         int EventType);
33 void CtdlUnregisterMessageHook(int (*handler)(struct CtdlMessage *),
34                                                         int EventType);
35
36 void CtdlRegisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) );
37 void CtdlUnregisterNetprocHook(int (*handler)(struct CtdlMessage *, char *) );
38
39 void CtdlRegisterRoomHook(int (*fcn_ptr)(struct ctdlroom *) );
40 void CtdlUnregisterRoomHook(int (*fnc_ptr)(struct ctdlroom *) );
41
42 void CtdlRegisterDeleteHook(void (*handler)(char *, long) );
43 void CtdlUnregisterDeleteHook(void (*handler)(char *, long) );
44
45 void CtdlRegisterCleanupHook(void (*fcn_ptr)(void));
46 void CtdlUnregisterCleanupHook(void (*fcn_ptr)(void));
47
48 void CtdlRegisterProtoHook(void (*handler)(char *), char *cmd, char *desc);
49 void CtdlUnregisterProtoHook(void (*handler)(char *), char *cmd);
50
51 void CtdlRegisterServiceHook(int tcp_port,
52                              char *sockpath,
53                              void (*h_greeting_function) (void),
54                              void (*h_command_function) (void),
55                              void (*h_async_function) (void),
56                              const char *ServiceName
57 );
58 void CtdlUnregisterServiceHook(int tcp_port,
59                         char *sockpath,
60                         void (*h_greeting_function) (void),
61                         void (*h_command_function) (void),
62                         void (*h_async_function) (void)
63 );
64
65 void CtdlRegisterFixedOutputHook(char *content_type,
66                         void (*output_function) (char *supplied_data, int len)
67 );
68 void CtdlUnRegisterFixedOutputHook(char *content_type);
69
70 void CtdlRegisterMaintenanceThread(char *name, void *(*thread_proc) (void *arg));
71
72 void CtdlRegisterSearchFuncHook(void (*fcn_ptr)(int *, long **, char *), char *name);
73
74
75 /*
76  * Directory services hooks for LDAP etc
77  */
78
79 #define DIRECTORY_USER_DEL 1    // Delete a user entry
80 #define DIRECTORY_CREATE_HOST 2 // Create a host entry if not already there.
81 #define DIRECTORY_CREATE_OBJECT 3       // Create a new object for directory entry
82 #define DIRECTORY_ATTRIB_ADD 4  // Add an attribute to the directory entry object
83 #define DIRECTORY_SAVE_OBJECT 5 // Save the object to the directory service
84 #define DIRECTORY_FREE_OBJECT 6 // Free the object and its attributes
85
86 int CtdlRegisterDirectoryServiceFunc(int (*func)(char *cn, char *ou, void **object), int cmd, char *module);
87 int CtdlDoDirectoryServiceFunc(char *cn, char *ou, void **object, char *module, int cmd);
88
89 /* TODODRW: This needs to be changed into a hook type interface
90  * for now we have this horrible hack
91  */
92 void CtdlModuleStartCryptoMsgs(char *ok_response, char *nosup_response, char *error_response);
93
94 #endif /* CTDL_MODULE_H */