diff options
Diffstat (limited to 'ldap/servers/plugins/replication/repl_ext.c')
-rw-r--r-- | ldap/servers/plugins/replication/repl_ext.c | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/ldap/servers/plugins/replication/repl_ext.c b/ldap/servers/plugins/replication/repl_ext.c new file mode 100644 index 00000000..4ad28726 --- /dev/null +++ b/ldap/servers/plugins/replication/repl_ext.c @@ -0,0 +1,113 @@ +/** BEGIN COPYRIGHT BLOCK + * Copyright 2001 Sun Microsystems, Inc. + * Portions copyright 1999, 2001-2003 Netscape Communications Corporation. + * All rights reserved. + * END COPYRIGHT BLOCK **/ +/* repl_ext.c - manages operation extensions created by the + * replication system + */ + + +#include "repl.h" + +/* structure with information for each extension */ +typedef struct repl_ext +{ + char *object_name; /* name of the object extended */ + int object_type; /* handle to the extended object */ + int handle; /* extension handle */ +} repl_ext; + +/* ----------------------------- Supplier ----------------------------- */ + +static repl_ext repl_sup_ext_list [REPL_EXT_ALL]; + +/* initializes replication extensions */ +void repl_sup_init_ext () +{ + int rc; + + /* populate the extension list */ + repl_sup_ext_list[REPL_SUP_EXT_OP].object_name = SLAPI_EXT_OPERATION; + + rc = slapi_register_object_extension(repl_plugin_name, + SLAPI_EXT_OPERATION, + supplier_operation_extension_constructor, + supplier_operation_extension_destructor, + &repl_sup_ext_list[REPL_SUP_EXT_OP].object_type, + &repl_sup_ext_list[REPL_SUP_EXT_OP].handle); + + if(rc!=0) + { + PR_ASSERT(0); /* JCMREPL Argh */ + } +} + +void* repl_sup_get_ext (ext_type type, void *object) +{ + /* find the requested extension */ + repl_ext ext = repl_sup_ext_list [type]; + + void* data = slapi_get_object_extension(ext.object_type, object, ext.handle); + + return data; +} + +/* ----------------------------- Consumer ----------------------------- */ + +static repl_ext repl_con_ext_list [REPL_EXT_ALL]; + +/* initializes replication extensions */ +void repl_con_init_ext () +{ + int rc; + + /* populate the extension list */ + repl_con_ext_list[REPL_CON_EXT_OP].object_name = SLAPI_EXT_OPERATION; + rc = slapi_register_object_extension(repl_plugin_name, + SLAPI_EXT_OPERATION, + consumer_operation_extension_constructor, + consumer_operation_extension_destructor, + &repl_con_ext_list[REPL_CON_EXT_OP].object_type, + &repl_con_ext_list[REPL_CON_EXT_OP].handle); + if(rc!=0) + { + PR_ASSERT(0); /* JCMREPL Argh */ + } + + repl_con_ext_list[REPL_CON_EXT_CONN].object_name = SLAPI_EXT_CONNECTION; + rc = slapi_register_object_extension(repl_plugin_name, + SLAPI_EXT_CONNECTION, + consumer_connection_extension_constructor, + consumer_connection_extension_destructor, + &repl_con_ext_list[REPL_CON_EXT_CONN].object_type, + &repl_con_ext_list[REPL_CON_EXT_CONN].handle); + if(rc!=0) + { + PR_ASSERT(0); /* JCMREPL Argh */ + } + + repl_con_ext_list[REPL_CON_EXT_MTNODE].object_name = SLAPI_EXT_MTNODE; + rc = slapi_register_object_extension(repl_plugin_name, + SLAPI_EXT_MTNODE, + multimaster_mtnode_extension_constructor, + multimaster_mtnode_extension_destructor, + &repl_con_ext_list[REPL_CON_EXT_MTNODE].object_type, + &repl_con_ext_list[REPL_CON_EXT_MTNODE].handle); + if(rc!=0) + { + PR_ASSERT(0); /* JCMREPL Argh */ + } +} + +void* repl_con_get_ext (ext_type type, void *object) +{ + /* find the requested extension */ + repl_ext ext = repl_con_ext_list [type]; + + void* data = slapi_get_object_extension(ext.object_type, object, ext.handle); + + return data; +} + + |