configmgr.c

Go to the documentation of this file.
00001 /***************************************************************************
00002  begin       : Mon Aug 11 2008
00003  copyright   : (C) 2008 by Martin Preuss
00004  email       : martin@libchipcard.de
00005 
00006  ***************************************************************************
00007  *                                                                         *
00008  *   This library is free software; you can redistribute it and/or         *
00009  *   modify it under the terms of the GNU Lesser General Public            *
00010  *   License as published by the Free Software Foundation; either          *
00011  *   version 2.1 of the License, or (at your option) any later version.    *
00012  *                                                                         *
00013  *   This library is distributed in the hope that it will be useful,       *
00014  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00015  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00016  *   Lesser General Public License for more details.                       *
00017  *                                                                         *
00018  *   You should have received a copy of the GNU Lesser General Public      *
00019  *   License along with this library; if not, write to the Free Software   *
00020  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston,                 *
00021  *   MA  02111-1307  USA                                                   *
00022  *                                                                         *
00023  ***************************************************************************/
00024 
00025 
00026 #ifdef HAVE_CONFIG_H
00027 # include <config.h>
00028 #endif
00029 
00030 #include "configmgr_p.h"
00031 
00032 #include <gwenhywfar/gwenhywfar.h>
00033 #include <gwenhywfar/misc.h>
00034 #include <gwenhywfar/url.h>
00035 #include <gwenhywfar/debug.h>
00036 
00037 
00038 #include <stdlib.h>
00039 #include <assert.h>
00040 #include <string.h>
00041 #include <errno.h>
00042 #include <ctype.h>
00043 
00044 
00045 
00046 GWEN_INHERIT_FUNCTIONS(GWEN_CONFIGMGR)
00047 
00048 GWEN_INHERIT(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN)
00049 
00050 
00051 
00052 int GWEN_ConfigMgr_ModuleInit(){
00053   GWEN_PLUGIN_MANAGER *pm;
00054   int err;
00055   GWEN_STRINGLIST *sl;
00056 
00057   pm=GWEN_PluginManager_new(GWEN_CONFIGMGR_PLUGIN_NAME, GWEN_PM_LIBNAME);
00058   err=GWEN_PluginManager_Register(pm);
00059   if (err) {
00060     DBG_ERROR(GWEN_LOGDOMAIN, "Could not register ConfigMgr plugin manager");
00061     return err;
00062   }
00063 
00064   /* create plugin paths */
00065   sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_PLUGINDIR);
00066   if (sl) {
00067     GWEN_STRINGLISTENTRY *se;
00068     GWEN_BUFFER *pbuf;
00069 
00070     pbuf=GWEN_Buffer_new(0, 256, 0, 1);
00071 
00072     se=GWEN_StringList_FirstEntry(sl);
00073     while(se) {
00074       GWEN_Buffer_AppendString(pbuf, GWEN_StringListEntry_Data(se));
00075       GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S GWEN_CONFIGMGR_FOLDER);
00076       DBG_INFO(GWEN_LOGDOMAIN, "Adding plugin path [%s]",
00077                GWEN_Buffer_GetStart(pbuf));
00078       GWEN_PluginManager_AddPath(pm, GWEN_PM_LIBNAME,
00079                                  GWEN_Buffer_GetStart(pbuf));
00080       GWEN_Buffer_Reset(pbuf);
00081       se=GWEN_StringListEntry_Next(se);
00082     }
00083     GWEN_Buffer_free(pbuf);
00084     GWEN_StringList_free(sl);
00085   }
00086 
00087   return 0;
00088 }
00089 
00090 
00091 
00092 int GWEN_ConfigMgr_ModuleFini(){
00093   GWEN_PLUGIN_MANAGER *pm;
00094 
00095   pm=GWEN_PluginManager_FindPluginManager(GWEN_CONFIGMGR_PLUGIN_NAME);
00096   if (pm) {
00097     int rv;
00098 
00099     rv=GWEN_PluginManager_Unregister(pm);
00100     if (rv) {
00101       DBG_ERROR(GWEN_LOGDOMAIN,
00102                 "Could not unregister ConfigMgr plugin manager (%d)", rv);
00103       return rv;
00104     }
00105     else
00106       GWEN_PluginManager_free(pm);
00107   }
00108 
00109   return 0;
00110 }
00111 
00112 
00113 
00114 
00115 GWEN_CONFIGMGR *GWEN_ConfigMgr_new(const char *url) {
00116   GWEN_CONFIGMGR *mgr;
00117 
00118   GWEN_NEW_OBJECT(GWEN_CONFIGMGR, mgr);
00119   GWEN_INHERIT_INIT(GWEN_CONFIGMGR, mgr);
00120 
00121   if (url)
00122     mgr->url=strdup(url);
00123 
00124   return mgr;
00125 }
00126 
00127 
00128 
00129 void GWEN_ConfigMgr_free(GWEN_CONFIGMGR *mgr) {
00130   if (mgr) {
00131     GWEN_INHERIT_FINI(GWEN_CONFIGMGR, mgr);
00132     free(mgr->url);
00133     GWEN_FREE_OBJECT(mgr);
00134   }
00135 }
00136 
00137 
00138 
00139 GWEN_CONFIGMGR_GETGROUP_FN GWEN_ConfigMgr_SetGetGroupFn(GWEN_CONFIGMGR *mgr,
00140                                                         GWEN_CONFIGMGR_GETGROUP_FN f) {
00141   GWEN_CONFIGMGR_GETGROUP_FN of;
00142 
00143   assert(mgr);
00144   of=mgr->getGroupFn;
00145   mgr->getGroupFn=f;
00146 
00147   return of;
00148 }
00149 
00150 
00151 
00152 GWEN_CONFIGMGR_SETGROUP_FN GWEN_ConfigMgr_SetSetGroupFn(GWEN_CONFIGMGR *mgr,
00153                                                         GWEN_CONFIGMGR_SETGROUP_FN f) {
00154   GWEN_CONFIGMGR_SETGROUP_FN of;
00155 
00156   assert(mgr);
00157   of=mgr->setGroupFn;
00158   mgr->setGroupFn=f;
00159 
00160   return of;
00161 }
00162 
00163 
00164 
00165 GWEN_CONFIGMGR_LOCKGROUP_FN GWEN_ConfigMgr_SetLockGroupFn(GWEN_CONFIGMGR *mgr,
00166                                                           GWEN_CONFIGMGR_LOCKGROUP_FN f) {
00167   GWEN_CONFIGMGR_LOCKGROUP_FN of;
00168 
00169   assert(mgr);
00170   of=mgr->lockGroupFn;
00171   mgr->lockGroupFn=f;
00172 
00173   return of;
00174 }
00175 
00176 
00177 
00178 GWEN_CONFIGMGR_UNLOCKGROUP_FN GWEN_ConfigMgr_SetUnlockGroupFn(GWEN_CONFIGMGR *mgr,
00179                                                               GWEN_CONFIGMGR_UNLOCKGROUP_FN f) {
00180   GWEN_CONFIGMGR_UNLOCKGROUP_FN of;
00181 
00182   assert(mgr);
00183   of=mgr->unlockGroupFn;
00184   mgr->unlockGroupFn=f;
00185 
00186   return of;
00187 }
00188 
00189 
00190 
00191 GWEN_CONFIGMGR_GETUNIQUEID_FN GWEN_ConfigMgr_SetGetUniqueIdFn(GWEN_CONFIGMGR *mgr,
00192                                                               GWEN_CONFIGMGR_GETUNIQUEID_FN f) {
00193   GWEN_CONFIGMGR_GETUNIQUEID_FN of;
00194 
00195   assert(mgr);
00196   of=mgr->getUniqueIdFn;
00197   mgr->getUniqueIdFn=f;
00198 
00199   return of;
00200 }
00201 
00202 
00203 
00204 GWEN_CONFIGMGR_DELETEGROUP_FN GWEN_ConfigMgr_SetDeleteGroupFn(GWEN_CONFIGMGR *mgr,
00205                                                               GWEN_CONFIGMGR_DELETEGROUP_FN f) {
00206   GWEN_CONFIGMGR_DELETEGROUP_FN of;
00207 
00208   assert(mgr);
00209   of=mgr->deleteGroupFn;
00210   mgr->deleteGroupFn=f;
00211 
00212   return of;
00213 }
00214 
00215 
00216 
00217 GWEN_CONFIGMGR_LISTGROUPS_FN GWEN_ConfigMgr_SetListGroupsFn(GWEN_CONFIGMGR *mgr,
00218                                                             GWEN_CONFIGMGR_LISTGROUPS_FN f) {
00219   GWEN_CONFIGMGR_LISTGROUPS_FN of;
00220 
00221   assert(mgr);
00222   of=mgr->listGroupsFn;
00223   mgr->listGroupsFn=f;
00224 
00225   return of;
00226 }
00227 
00228 
00229 
00230 GWEN_CONFIGMGR_LISTSUBGROUPS_FN GWEN_ConfigMgr_SetListSubGroupsFn(GWEN_CONFIGMGR *mgr,
00231                                                                   GWEN_CONFIGMGR_LISTSUBGROUPS_FN f) {
00232   GWEN_CONFIGMGR_LISTSUBGROUPS_FN of;
00233 
00234   assert(mgr);
00235   of=mgr->listSubGroupsFn;
00236   mgr->listSubGroupsFn=f;
00237 
00238   return of;
00239 }
00240 
00241 
00242 
00243 int GWEN_ConfigMgr_GetGroup(GWEN_CONFIGMGR *mgr,
00244                             const char *groupName,
00245                             const char *subGroupName,
00246                             GWEN_DB_NODE **pDb,
00247                             uint32_t guiid) {
00248   assert(mgr);
00249   if (mgr->getGroupFn)
00250     return mgr->getGroupFn(mgr, groupName, subGroupName, pDb, guiid);
00251   else
00252     return GWEN_ERROR_NOT_IMPLEMENTED;
00253 }
00254 
00255 
00256 
00257 int GWEN_ConfigMgr_SetGroup(GWEN_CONFIGMGR *mgr,
00258                             const char *groupName,
00259                             const char *subGroupName,
00260                             GWEN_DB_NODE *db,
00261                             uint32_t guiid) {
00262   assert(mgr);
00263   if (mgr->setGroupFn)
00264     return mgr->setGroupFn(mgr, groupName, subGroupName, db, guiid);
00265   else
00266     return GWEN_ERROR_NOT_IMPLEMENTED;
00267 }
00268 
00269 
00270 
00271 int GWEN_ConfigMgr_LockGroup(GWEN_CONFIGMGR *mgr,
00272                              const char *groupName,
00273                              const char *subGroupName,
00274                              uint32_t guiid) {
00275   assert(mgr);
00276   if (mgr->lockGroupFn)
00277     return mgr->lockGroupFn(mgr, groupName, subGroupName, guiid);
00278   else
00279     return GWEN_ERROR_NOT_IMPLEMENTED;
00280 }
00281 
00282 
00283 
00284 int GWEN_ConfigMgr_UnlockGroup(GWEN_CONFIGMGR *mgr,
00285                                const char *groupName,
00286                                const char *subGroupName,
00287                                uint32_t guiid) {
00288   assert(mgr);
00289   if (mgr->unlockGroupFn)
00290     return mgr->unlockGroupFn(mgr, groupName, subGroupName, guiid);
00291   else
00292     return GWEN_ERROR_NOT_IMPLEMENTED;
00293 }
00294 
00295 
00296 
00297 int GWEN_ConfigMgr_GetUniqueId(GWEN_CONFIGMGR *mgr,
00298                                const char *groupName,
00299                                char *buffer,
00300                                uint32_t bufferLen,
00301                                uint32_t guiid) {
00302   assert(mgr);
00303   if (mgr->getUniqueIdFn)
00304     return mgr->getUniqueIdFn(mgr, groupName, buffer, bufferLen, guiid);
00305   else
00306     return GWEN_ERROR_NOT_IMPLEMENTED;
00307 }
00308 
00309 
00310 
00311 int GWEN_ConfigMgr_DeleteGroup(GWEN_CONFIGMGR *mgr,
00312                                const char *groupName,
00313                                const char *subGroupName,
00314                                uint32_t guiid) {
00315   assert(mgr);
00316   if (mgr->deleteGroupFn)
00317     return mgr->deleteGroupFn(mgr, groupName, subGroupName, guiid);
00318   else
00319     return GWEN_ERROR_NOT_IMPLEMENTED;
00320 }
00321 
00322 
00323 
00324 int GWEN_ConfigMgr_ListGroups(GWEN_CONFIGMGR *mgr,
00325                               GWEN_STRINGLIST *sl,
00326                               uint32_t guiid) {
00327   assert(mgr);
00328   if (mgr->listGroupsFn)
00329     return mgr->listGroupsFn(mgr, sl, guiid);
00330   else
00331     return GWEN_ERROR_NOT_IMPLEMENTED;
00332 }
00333 
00334 
00335 int GWEN_ConfigMgr_ListSubGroups(GWEN_CONFIGMGR *mgr,
00336                                  const char *groupName,
00337                                  GWEN_STRINGLIST *sl,
00338                                  uint32_t guiid) {
00339   assert(mgr);
00340   if (mgr->listSubGroupsFn)
00341     return mgr->listSubGroupsFn(mgr, groupName, sl, guiid);
00342   else
00343     return GWEN_ERROR_NOT_IMPLEMENTED;
00344 }
00345 
00346 
00347 
00348 
00349 
00350 
00351 
00352 
00353 
00354 GWEN_PLUGIN *GWEN_ConfigMgr_Plugin_new(GWEN_PLUGIN_MANAGER *pm,
00355                                        const char *name,
00356                                        const char *fileName) {
00357   GWEN_PLUGIN *pl;
00358   GWEN_CONFIGMGR_PLUGIN *xpl;
00359 
00360   pl=GWEN_Plugin_new(pm, name, fileName);
00361   GWEN_NEW_OBJECT(GWEN_CONFIGMGR_PLUGIN, xpl);
00362   GWEN_INHERIT_SETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl, xpl,
00363                        GWEN_ConfigMgr_Plugin_FreeData);
00364 
00365   return pl;
00366 }
00367 
00368 
00369 
00370 void GWENHYWFAR_CB GWEN_ConfigMgr_Plugin_FreeData(GWEN_UNUSED void *bp, void *p) {
00371   GWEN_CONFIGMGR_PLUGIN *xpl;
00372 
00373   xpl=(GWEN_CONFIGMGR_PLUGIN*)p;
00374   GWEN_FREE_OBJECT(xpl);
00375 }
00376 
00377 
00378 
00379 void GWEN_ConfigMgr_Plugin_SetFactoryFn(GWEN_PLUGIN *pl,
00380                                         GWEN_CONFIGMGR_PLUGIN_FACTORYFN f) {
00381   GWEN_CONFIGMGR_PLUGIN *xpl;
00382 
00383   assert(pl);
00384   xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl);
00385   assert(xpl);
00386 
00387   xpl->factoryFn=f;
00388 }
00389 
00390 
00391 
00392 GWEN_CONFIGMGR *GWEN_ConfigMgr_Plugin_Factory(GWEN_PLUGIN *pl,
00393                                               const char *url) {
00394   GWEN_CONFIGMGR_PLUGIN *xpl;
00395 
00396   assert(pl);
00397   xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl);
00398   assert(xpl);
00399 
00400   assert(xpl->factoryFn);
00401   return xpl->factoryFn(pl, url);
00402 }
00403 
00404 
00405 
00406 GWEN_CONFIGMGR *GWEN_ConfigMgr_Factory(const char *url) {
00407   GWEN_PLUGIN_MANAGER *pm;
00408   GWEN_PLUGIN *pl;
00409   GWEN_CONFIGMGR *mgr=NULL;
00410   GWEN_URL *purl;
00411   const char *modname;
00412 
00413   pm=GWEN_PluginManager_FindPluginManager(GWEN_CONFIGMGR_PLUGIN_NAME);
00414   if (!pm) {
00415     DBG_ERROR(GWEN_LOGDOMAIN, "No plugin manager for \"ConfigMgr\" found");
00416     return 0;
00417   }
00418 
00419   purl=GWEN_Url_fromString(url);
00420   if (purl==NULL) {
00421     DBG_INFO(GWEN_LOGDOMAIN, "Invalid url [%s]", url);
00422     return NULL;
00423   }
00424 
00425   modname=GWEN_Url_GetProtocol(purl);
00426   if (modname==NULL)
00427     modname="file";
00428 
00429   pl=GWEN_PluginManager_GetPlugin(pm, modname);
00430   if (!pl) {
00431     DBG_INFO(GWEN_LOGDOMAIN, "ConfigMgr-Plugin \"%s\" not found", modname);
00432     GWEN_Url_free(purl);
00433     return 0;
00434   }
00435   GWEN_Url_free(purl);
00436 
00437   mgr=GWEN_ConfigMgr_Plugin_Factory(pl, url);
00438   if (mgr==NULL) {
00439     DBG_INFO(GWEN_LOGDOMAIN,
00440              "Plugin did not create a GWEN_CONFIGMGR");
00441   }
00442 
00443   return mgr;
00444 }
00445 
00446 
00447 
00448 
00449 
00450 
00451 
00452 
00453 

Generated on Mon Jan 25 12:56:01 2010 for gwenhywfar by  doxygen 1.5.6