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 #define DISABLE_DEBUGLOG
00031 
00032 
00033 #include "configmgr_p.h"
00034 
00035 #include <gwenhywfar/gwenhywfar.h>
00036 #include <gwenhywfar/misc.h>
00037 #include <gwenhywfar/url.h>
00038 #include <gwenhywfar/debug.h>
00039 
00040 
00041 #include <stdlib.h>
00042 #include <assert.h>
00043 #include <string.h>
00044 #include <errno.h>
00045 #include <ctype.h>
00046 
00047 
00048 
00049 GWEN_INHERIT_FUNCTIONS(GWEN_CONFIGMGR)
00050 
00051 GWEN_INHERIT(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN)
00052 
00053 
00054 
00055 int GWEN_ConfigMgr_ModuleInit(void){
00056   GWEN_PLUGIN_MANAGER *pm;
00057   int err;
00058   GWEN_STRINGLIST *sl;
00059 
00060   pm=GWEN_PluginManager_new(GWEN_CONFIGMGR_PLUGIN_NAME, GWEN_PM_LIBNAME);
00061   err=GWEN_PluginManager_Register(pm);
00062   if (err) {
00063     DBG_ERROR(GWEN_LOGDOMAIN, "Could not register ConfigMgr plugin manager");
00064     return err;
00065   }
00066 
00067   /* create plugin paths */
00068   sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_PLUGINDIR);
00069   if (sl) {
00070     GWEN_STRINGLISTENTRY *se;
00071     GWEN_BUFFER *pbuf;
00072 
00073     pbuf=GWEN_Buffer_new(0, 256, 0, 1);
00074 
00075     se=GWEN_StringList_FirstEntry(sl);
00076     while(se) {
00077       GWEN_Buffer_AppendString(pbuf, GWEN_StringListEntry_Data(se));
00078       GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S GWEN_CONFIGMGR_FOLDER);
00079       DBG_INFO(GWEN_LOGDOMAIN, "Adding plugin path [%s]",
00080                GWEN_Buffer_GetStart(pbuf));
00081       GWEN_PluginManager_AddPath(pm, GWEN_PM_LIBNAME,
00082                                  GWEN_Buffer_GetStart(pbuf));
00083       GWEN_Buffer_Reset(pbuf);
00084       se=GWEN_StringListEntry_Next(se);
00085     }
00086     GWEN_Buffer_free(pbuf);
00087     GWEN_StringList_free(sl);
00088   }
00089 
00090   return 0;
00091 }
00092 
00093 
00094 
00095 int GWEN_ConfigMgr_ModuleFini(void){
00096   GWEN_PLUGIN_MANAGER *pm;
00097 
00098   pm=GWEN_PluginManager_FindPluginManager(GWEN_CONFIGMGR_PLUGIN_NAME);
00099   if (pm) {
00100     int rv;
00101 
00102     rv=GWEN_PluginManager_Unregister(pm);
00103     if (rv) {
00104       DBG_ERROR(GWEN_LOGDOMAIN,
00105                 "Could not unregister ConfigMgr plugin manager (%d)", rv);
00106       return rv;
00107     }
00108     else
00109       GWEN_PluginManager_free(pm);
00110   }
00111 
00112   return 0;
00113 }
00114 
00115 
00116 
00117 
00118 GWEN_CONFIGMGR *GWEN_ConfigMgr_new(const char *url) {
00119   GWEN_CONFIGMGR *mgr;
00120 
00121   GWEN_NEW_OBJECT(GWEN_CONFIGMGR, mgr);
00122   GWEN_INHERIT_INIT(GWEN_CONFIGMGR, mgr);
00123 
00124   if (url)
00125     mgr->url=strdup(url);
00126 
00127   return mgr;
00128 }
00129 
00130 
00131 
00132 void GWEN_ConfigMgr_free(GWEN_CONFIGMGR *mgr) {
00133   if (mgr) {
00134     GWEN_INHERIT_FINI(GWEN_CONFIGMGR, mgr);
00135     free(mgr->url);
00136     GWEN_FREE_OBJECT(mgr);
00137   }
00138 }
00139 
00140 
00141 
00142 GWEN_CONFIGMGR_GETGROUP_FN GWEN_ConfigMgr_SetGetGroupFn(GWEN_CONFIGMGR *mgr,
00143                                                         GWEN_CONFIGMGR_GETGROUP_FN f) {
00144   GWEN_CONFIGMGR_GETGROUP_FN of;
00145 
00146   assert(mgr);
00147   of=mgr->getGroupFn;
00148   mgr->getGroupFn=f;
00149 
00150   return of;
00151 }
00152 
00153 
00154 
00155 GWEN_CONFIGMGR_SETGROUP_FN GWEN_ConfigMgr_SetSetGroupFn(GWEN_CONFIGMGR *mgr,
00156                                                         GWEN_CONFIGMGR_SETGROUP_FN f) {
00157   GWEN_CONFIGMGR_SETGROUP_FN of;
00158 
00159   assert(mgr);
00160   of=mgr->setGroupFn;
00161   mgr->setGroupFn=f;
00162 
00163   return of;
00164 }
00165 
00166 
00167 
00168 GWEN_CONFIGMGR_LOCKGROUP_FN GWEN_ConfigMgr_SetLockGroupFn(GWEN_CONFIGMGR *mgr,
00169                                                           GWEN_CONFIGMGR_LOCKGROUP_FN f) {
00170   GWEN_CONFIGMGR_LOCKGROUP_FN of;
00171 
00172   assert(mgr);
00173   of=mgr->lockGroupFn;
00174   mgr->lockGroupFn=f;
00175 
00176   return of;
00177 }
00178 
00179 
00180 
00181 GWEN_CONFIGMGR_UNLOCKGROUP_FN GWEN_ConfigMgr_SetUnlockGroupFn(GWEN_CONFIGMGR *mgr,
00182                                                               GWEN_CONFIGMGR_UNLOCKGROUP_FN f) {
00183   GWEN_CONFIGMGR_UNLOCKGROUP_FN of;
00184 
00185   assert(mgr);
00186   of=mgr->unlockGroupFn;
00187   mgr->unlockGroupFn=f;
00188 
00189   return of;
00190 }
00191 
00192 
00193 
00194 GWEN_CONFIGMGR_GETUNIQUEID_FN GWEN_ConfigMgr_SetGetUniqueIdFn(GWEN_CONFIGMGR *mgr,
00195                                                               GWEN_CONFIGMGR_GETUNIQUEID_FN f) {
00196   GWEN_CONFIGMGR_GETUNIQUEID_FN of;
00197 
00198   assert(mgr);
00199   of=mgr->getUniqueIdFn;
00200   mgr->getUniqueIdFn=f;
00201 
00202   return of;
00203 }
00204 
00205 
00206 
00207 GWEN_CONFIGMGR_DELETEGROUP_FN GWEN_ConfigMgr_SetDeleteGroupFn(GWEN_CONFIGMGR *mgr,
00208                                                               GWEN_CONFIGMGR_DELETEGROUP_FN f) {
00209   GWEN_CONFIGMGR_DELETEGROUP_FN of;
00210 
00211   assert(mgr);
00212   of=mgr->deleteGroupFn;
00213   mgr->deleteGroupFn=f;
00214 
00215   return of;
00216 }
00217 
00218 
00219 
00220 GWEN_CONFIGMGR_LISTGROUPS_FN GWEN_ConfigMgr_SetListGroupsFn(GWEN_CONFIGMGR *mgr,
00221                                                             GWEN_CONFIGMGR_LISTGROUPS_FN f) {
00222   GWEN_CONFIGMGR_LISTGROUPS_FN of;
00223 
00224   assert(mgr);
00225   of=mgr->listGroupsFn;
00226   mgr->listGroupsFn=f;
00227 
00228   return of;
00229 }
00230 
00231 
00232 
00233 GWEN_CONFIGMGR_LISTSUBGROUPS_FN GWEN_ConfigMgr_SetListSubGroupsFn(GWEN_CONFIGMGR *mgr,
00234                                                                   GWEN_CONFIGMGR_LISTSUBGROUPS_FN f) {
00235   GWEN_CONFIGMGR_LISTSUBGROUPS_FN of;
00236 
00237   assert(mgr);
00238   of=mgr->listSubGroupsFn;
00239   mgr->listSubGroupsFn=f;
00240 
00241   return of;
00242 }
00243 
00244 
00245 
00246 int GWEN_ConfigMgr_GetGroup(GWEN_CONFIGMGR *mgr,
00247                             const char *groupName,
00248                             const char *subGroupName,
00249                             GWEN_DB_NODE **pDb) {
00250   assert(mgr);
00251   if (mgr->getGroupFn)
00252     return mgr->getGroupFn(mgr, groupName, subGroupName, pDb);
00253   else
00254     return GWEN_ERROR_NOT_IMPLEMENTED;
00255 }
00256 
00257 
00258 
00259 int GWEN_ConfigMgr_SetGroup(GWEN_CONFIGMGR *mgr,
00260                             const char *groupName,
00261                             const char *subGroupName,
00262                             GWEN_DB_NODE *db) {
00263   assert(mgr);
00264   if (mgr->setGroupFn)
00265     return mgr->setGroupFn(mgr, groupName, subGroupName, db);
00266   else
00267     return GWEN_ERROR_NOT_IMPLEMENTED;
00268 }
00269 
00270 
00271 
00272 int GWEN_ConfigMgr_LockGroup(GWEN_CONFIGMGR *mgr,
00273                              const char *groupName,
00274                              const char *subGroupName) {
00275   assert(mgr);
00276   if (mgr->lockGroupFn)
00277     return mgr->lockGroupFn(mgr, groupName, subGroupName);
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   assert(mgr);
00288   if (mgr->unlockGroupFn)
00289     return mgr->unlockGroupFn(mgr, groupName, subGroupName);
00290   else
00291     return GWEN_ERROR_NOT_IMPLEMENTED;
00292 }
00293 
00294 
00295 
00296 int GWEN_ConfigMgr_GetUniqueId(GWEN_CONFIGMGR *mgr,
00297                                const char *groupName,
00298                                char *buffer,
00299                                uint32_t bufferLen) {
00300   assert(mgr);
00301   if (mgr->getUniqueIdFn)
00302     return mgr->getUniqueIdFn(mgr, groupName, buffer, bufferLen);
00303   else
00304     return GWEN_ERROR_NOT_IMPLEMENTED;
00305 }
00306 
00307 
00308 
00309 int GWEN_ConfigMgr_DeleteGroup(GWEN_CONFIGMGR *mgr,
00310                                const char *groupName,
00311                                const char *subGroupName) {
00312   assert(mgr);
00313   if (mgr->deleteGroupFn)
00314     return mgr->deleteGroupFn(mgr, groupName, subGroupName);
00315   else
00316     return GWEN_ERROR_NOT_IMPLEMENTED;
00317 }
00318 
00319 
00320 
00321 int GWEN_ConfigMgr_ListGroups(GWEN_CONFIGMGR *mgr,
00322                               GWEN_STRINGLIST *sl) {
00323   assert(mgr);
00324   if (mgr->listGroupsFn)
00325     return mgr->listGroupsFn(mgr, sl);
00326   else
00327     return GWEN_ERROR_NOT_IMPLEMENTED;
00328 }
00329 
00330 
00331 int GWEN_ConfigMgr_ListSubGroups(GWEN_CONFIGMGR *mgr,
00332                                  const char *groupName,
00333                                  GWEN_STRINGLIST *sl) {
00334   assert(mgr);
00335   if (mgr->listSubGroupsFn)
00336     return mgr->listSubGroupsFn(mgr, groupName, sl);
00337   else
00338     return GWEN_ERROR_NOT_IMPLEMENTED;
00339 }
00340 
00341 
00342 
00343 
00344 
00345 
00346 
00347 
00348 
00349 GWEN_PLUGIN *GWEN_ConfigMgr_Plugin_new(GWEN_PLUGIN_MANAGER *pm,
00350                                        const char *name,
00351                                        const char *fileName) {
00352   GWEN_PLUGIN *pl;
00353   GWEN_CONFIGMGR_PLUGIN *xpl;
00354 
00355   pl=GWEN_Plugin_new(pm, name, fileName);
00356   GWEN_NEW_OBJECT(GWEN_CONFIGMGR_PLUGIN, xpl);
00357   GWEN_INHERIT_SETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl, xpl,
00358                        GWEN_ConfigMgr_Plugin_FreeData);
00359 
00360   return pl;
00361 }
00362 
00363 
00364 
00365 void GWENHYWFAR_CB GWEN_ConfigMgr_Plugin_FreeData(GWEN_UNUSED void *bp, void *p) {
00366   GWEN_CONFIGMGR_PLUGIN *xpl;
00367 
00368   xpl=(GWEN_CONFIGMGR_PLUGIN*)p;
00369   GWEN_FREE_OBJECT(xpl);
00370 }
00371 
00372 
00373 
00374 void GWEN_ConfigMgr_Plugin_SetFactoryFn(GWEN_PLUGIN *pl,
00375                                         GWEN_CONFIGMGR_PLUGIN_FACTORYFN f) {
00376   GWEN_CONFIGMGR_PLUGIN *xpl;
00377 
00378   assert(pl);
00379   xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl);
00380   assert(xpl);
00381 
00382   xpl->factoryFn=f;
00383 }
00384 
00385 
00386 
00387 GWEN_CONFIGMGR *GWEN_ConfigMgr_Plugin_Factory(GWEN_PLUGIN *pl,
00388                                               const char *url) {
00389   GWEN_CONFIGMGR_PLUGIN *xpl;
00390 
00391   assert(pl);
00392   xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl);
00393   assert(xpl);
00394 
00395   assert(xpl->factoryFn);
00396   return xpl->factoryFn(pl, url);
00397 }
00398 
00399 
00400 
00401 GWEN_CONFIGMGR *GWEN_ConfigMgr_Factory(const char *url) {
00402   GWEN_PLUGIN_MANAGER *pm;
00403   GWEN_PLUGIN *pl;
00404   GWEN_CONFIGMGR *mgr=NULL;
00405   GWEN_URL *purl;
00406   const char *modname;
00407 
00408   pm=GWEN_PluginManager_FindPluginManager(GWEN_CONFIGMGR_PLUGIN_NAME);
00409   if (!pm) {
00410     DBG_ERROR(GWEN_LOGDOMAIN, "No plugin manager for \"ConfigMgr\" found");
00411     return 0;
00412   }
00413 
00414   purl=GWEN_Url_fromString(url);
00415   if (purl==NULL) {
00416     DBG_INFO(GWEN_LOGDOMAIN, "Invalid url [%s]", url);
00417     return NULL;
00418   }
00419 
00420   modname=GWEN_Url_GetProtocol(purl);
00421   if (modname==NULL)
00422     modname="file";
00423 
00424   pl=GWEN_PluginManager_GetPlugin(pm, modname);
00425   if (!pl) {
00426     DBG_INFO(GWEN_LOGDOMAIN, "ConfigMgr-Plugin \"%s\" not found", modname);
00427     GWEN_Url_free(purl);
00428     return 0;
00429   }
00430   GWEN_Url_free(purl);
00431 
00432   mgr=GWEN_ConfigMgr_Plugin_Factory(pl, url);
00433   if (mgr==NULL) {
00434     DBG_INFO(GWEN_LOGDOMAIN,
00435              "Plugin did not create a GWEN_CONFIGMGR");
00436   }
00437 
00438   return mgr;
00439 }
00440 
00441 
00442 
00443 
00444 
00445 
00446 
00447 
00448