gwenhywfar  4.99.8beta
configmgr.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Mon Aug 11 2008
3  copyright : (C) 2008,2017 by Martin Preuss
4  email : martin@libchipcard.de
5 
6  ***************************************************************************
7  * *
8  * This library is free software; you can redistribute it and/or *
9  * modify it under the terms of the GNU Lesser General Public *
10  * License as published by the Free Software Foundation; either *
11  * version 2.1 of the License, or (at your option) any later version. *
12  * *
13  * This library is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16  * Lesser General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU Lesser General Public *
19  * License along with this library; if not, write to the Free Software *
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21  * MA 02111-1307 USA *
22  * *
23  ***************************************************************************/
24 
25 
26 #ifdef HAVE_CONFIG_H
27 # include <config.h>
28 #endif
29 
30 #define DISABLE_DEBUGLOG
31 
32 
33 #include "configmgr_p.h"
34 
35 #include <gwenhywfar/gwenhywfar.h>
36 #include <gwenhywfar/misc.h>
37 #include <gwenhywfar/url.h>
38 #include <gwenhywfar/debug.h>
39 
40 
41 #include <stdlib.h>
42 #include <assert.h>
43 #include <string.h>
44 #include <errno.h>
45 #include <ctype.h>
46 
47 
48 
50 
51 GWEN_INHERIT(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN)
52 
53 
54 
57  int err;
58  GWEN_STRINGLIST *sl;
59 
62  if (err) {
63  DBG_ERROR(GWEN_LOGDOMAIN, "Could not register ConfigMgr plugin manager");
64  return err;
65  }
66 
67  /* create plugin paths */
69  if (sl) {
71  GWEN_BUFFER *pbuf;
72 
73  pbuf=GWEN_Buffer_new(0, 256, 0, 1);
74 
76  while(se) {
79  DBG_INFO(GWEN_LOGDOMAIN, "Adding plugin path [%s]",
80  GWEN_Buffer_GetStart(pbuf));
82  GWEN_Buffer_GetStart(pbuf));
83  GWEN_Buffer_Reset(pbuf);
85  }
86  GWEN_Buffer_free(pbuf);
88  }
89 
90  return 0;
91 }
92 
93 
94 
97 
99  if (pm) {
100  int rv;
101 
103  if (rv) {
105  "Could not unregister ConfigMgr plugin manager (%d)", rv);
106  return rv;
107  }
108  else
110  }
111 
112  return 0;
113 }
114 
115 
116 
117 
119  GWEN_CONFIGMGR *mgr;
120 
123 
124  if (url)
125  mgr->url=strdup(url);
126 
127  return mgr;
128 }
129 
130 
131 
133  if (mgr) {
135  free(mgr->url);
136  GWEN_FREE_OBJECT(mgr);
137  }
138 }
139 
140 
141 
145 
146  assert(mgr);
147  of=mgr->getGroupFn;
148  mgr->getGroupFn=f;
149 
150  return of;
151 }
152 
153 
154 
158 
159  assert(mgr);
160  of=mgr->setGroupFn;
161  mgr->setGroupFn=f;
162 
163  return of;
164 }
165 
166 
167 
171 
172  assert(mgr);
173  of=mgr->lockGroupFn;
174  mgr->lockGroupFn=f;
175 
176  return of;
177 }
178 
179 
180 
184 
185  assert(mgr);
186  of=mgr->unlockGroupFn;
187  mgr->unlockGroupFn=f;
188 
189  return of;
190 }
191 
192 
193 
197 
198  assert(mgr);
199  of=mgr->getUniqueIdFn;
200  mgr->getUniqueIdFn=f;
201 
202  return of;
203 }
204 
205 
206 
210 
211  assert(mgr);
212  of=mgr->mkUniqueIdFromIdFn;
213  mgr->mkUniqueIdFromIdFn=f;
214 
215  return of;
216 }
217 
218 
219 
223 
224  assert(mgr);
225  of=mgr->deleteGroupFn;
226  mgr->deleteGroupFn=f;
227 
228  return of;
229 }
230 
231 
232 
236 
237  assert(mgr);
238  of=mgr->listGroupsFn;
239  mgr->listGroupsFn=f;
240 
241  return of;
242 }
243 
244 
245 
249 
250  assert(mgr);
251  of=mgr->listSubGroupsFn;
252  mgr->listSubGroupsFn=f;
253 
254  return of;
255 }
256 
257 
258 
260  const char *groupName,
261  const char *subGroupName,
262  GWEN_DB_NODE **pDb) {
263  assert(mgr);
264  if (mgr->getGroupFn)
265  return mgr->getGroupFn(mgr, groupName, subGroupName, pDb);
266  else
268 }
269 
270 
271 
273  const char *groupName,
274  const char *subGroupName,
275  GWEN_DB_NODE *db) {
276  assert(mgr);
277  if (mgr->setGroupFn)
278  return mgr->setGroupFn(mgr, groupName, subGroupName, db);
279  else
281 }
282 
283 
284 
286  const char *groupName,
287  const char *subGroupName) {
288  assert(mgr);
289  if (mgr->lockGroupFn)
290  return mgr->lockGroupFn(mgr, groupName, subGroupName);
291  else
293 }
294 
295 
296 
298  const char *groupName,
299  const char *subGroupName) {
300  assert(mgr);
301  if (mgr->unlockGroupFn)
302  return mgr->unlockGroupFn(mgr, groupName, subGroupName);
303  else
305 }
306 
307 
308 
310  const char *groupName,
311  char *buffer,
312  uint32_t bufferLen) {
313  assert(mgr);
314  if (mgr->getUniqueIdFn)
315  return mgr->getUniqueIdFn(mgr, groupName, buffer, bufferLen);
316  else
318 }
319 
320 
321 
323  const char *groupName,
324  uint32_t uid,
325  int doCheck,
326  char *buffer,
327  uint32_t bufferLen) {
328  assert(mgr);
329  if (mgr->mkUniqueIdFromIdFn)
330  return mgr->mkUniqueIdFromIdFn(mgr, groupName, uid, doCheck, buffer, bufferLen);
331  else
333 }
334 
335 
336 
338  const char *groupName,
339  const char *subGroupName) {
340  assert(mgr);
341  if (mgr->deleteGroupFn)
342  return mgr->deleteGroupFn(mgr, groupName, subGroupName);
343  else
345 }
346 
347 
348 
350  GWEN_STRINGLIST *sl) {
351  assert(mgr);
352  if (mgr->listGroupsFn)
353  return mgr->listGroupsFn(mgr, sl);
354  else
356 }
357 
358 
360  const char *groupName,
361  GWEN_STRINGLIST *sl) {
362  assert(mgr);
363  if (mgr->listSubGroupsFn)
364  return mgr->listSubGroupsFn(mgr, groupName, sl);
365  else
367 }
368 
369 
370 
371 
372 
373 
374 
375 
376 
378  const char *name,
379  const char *fileName) {
380  GWEN_PLUGIN *pl;
381  GWEN_CONFIGMGR_PLUGIN *xpl;
382 
383  pl=GWEN_Plugin_new(pm, name, fileName);
384  GWEN_NEW_OBJECT(GWEN_CONFIGMGR_PLUGIN, xpl);
385  GWEN_INHERIT_SETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl, xpl,
387 
388  return pl;
389 }
390 
391 
392 
394  GWEN_CONFIGMGR_PLUGIN *xpl;
395 
396  xpl=(GWEN_CONFIGMGR_PLUGIN*)p;
397  GWEN_FREE_OBJECT(xpl);
398 }
399 
400 
401 
404  GWEN_CONFIGMGR_PLUGIN *xpl;
405 
406  assert(pl);
407  xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl);
408  assert(xpl);
409 
410  xpl->factoryFn=f;
411 }
412 
413 
414 
416  const char *url) {
417  GWEN_CONFIGMGR_PLUGIN *xpl;
418 
419  assert(pl);
420  xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl);
421  assert(xpl);
422 
423  assert(xpl->factoryFn);
424  return xpl->factoryFn(pl, url);
425 }
426 
427 
428 
431  GWEN_PLUGIN *pl;
432  GWEN_CONFIGMGR *mgr=NULL;
433  GWEN_URL *purl;
434  const char *modname;
435 
437  if (!pm) {
438  DBG_ERROR(GWEN_LOGDOMAIN, "No plugin manager for \"ConfigMgr\" found");
439  return 0;
440  }
441 
442  purl=GWEN_Url_fromString(url);
443  if (purl==NULL) {
444  DBG_INFO(GWEN_LOGDOMAIN, "Invalid url [%s]", url);
445  return NULL;
446  }
447 
448  modname=GWEN_Url_GetProtocol(purl);
449  if (modname==NULL)
450  modname="file";
451 
452  pl=GWEN_PluginManager_GetPlugin(pm, modname);
453  if (!pl) {
454  DBG_INFO(GWEN_LOGDOMAIN, "ConfigMgr-Plugin \"%s\" not found", modname);
455  GWEN_Url_free(purl);
456  return 0;
457  }
458  GWEN_Url_free(purl);
459 
460  mgr=GWEN_ConfigMgr_Plugin_Factory(pl, url);
461  if (mgr==NULL) {
463  "Plugin did not create a GWEN_CONFIGMGR");
464  }
465 
466  return mgr;
467 }
468 
469 
470 
471 
472 
473 
474 
475 
476 
int GWEN_ConfigMgr_ModuleFini(void)
Definition: configmgr.c:95
void GWEN_Url_free(GWEN_URL *st)
Definition: url.c:37
struct GWEN_CONFIGMGR GWEN_CONFIGMGR
Definition: configmgr.h:36
struct GWEN_PLUGIN_MANAGER GWEN_PLUGIN_MANAGER
Definition: plugin.h:40
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:223
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
Definition: stringlist.h:51
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
struct GWEN_PLUGIN GWEN_PLUGIN
Definition: plugin.h:39
#define GWEN_INHERIT_FINI(t, element)
Definition: inherit.h:238
int GWEN_ConfigMgr_DeleteGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
Definition: configmgr.c:337
#define GWEN_DIR_SEPARATOR_S
int(* GWEN_CONFIGMGR_SETGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db)
Definition: configmgr_be.h:44
GWEN_CONFIGMGR_DELETEGROUP_FN GWEN_ConfigMgr_SetDeleteGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_DELETEGROUP_FN f)
Definition: configmgr.c:220
GWEN_CONFIGMGR * GWEN_ConfigMgr_new(const char *url)
Definition: configmgr.c:118
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:92
#define NULL
Definition: binreloc.c:290
void GWEN_PluginManager_free(GWEN_PLUGIN_MANAGER *pm)
Definition: plugin.c:189
const char * GWEN_Url_GetProtocol(const GWEN_URL *st)
Definition: url.c:156
GWEN_CONFIGMGR_GETGROUP_FN GWEN_ConfigMgr_SetGetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETGROUP_FN f)
Definition: configmgr.c:142
void GWEN_ConfigMgr_free(GWEN_CONFIGMGR *mgr)
Definition: configmgr.c:132
GWEN_PLUGIN * GWEN_PluginManager_GetPlugin(GWEN_PLUGIN_MANAGER *pm, const char *s)
Definition: plugin.c:501
#define GWEN_LOGDOMAIN
Definition: logger.h:35
int GWEN_ConfigMgr_UnlockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
Definition: configmgr.c:297
int(* GWEN_CONFIGMGR_UNLOCKGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
Definition: configmgr_be.h:53
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:38
GWEN_PLUGIN_MANAGER * GWEN_PluginManager_FindPluginManager(const char *s)
Definition: plugin.c:519
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
Definition: stringlist.c:352
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:684
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:366
int(* GWEN_CONFIGMGR_LISTSUBGROUPS_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, GWEN_STRINGLIST *sl)
Definition: configmgr_be.h:76
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition: stringlist.c:57
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:86
#define GWEN_CONFIGMGR_PLUGIN_NAME
Definition: configmgr.h:39
int GWEN_ConfigMgr_ListSubGroups(GWEN_CONFIGMGR *mgr, const char *groupName, GWEN_STRINGLIST *sl)
Definition: configmgr.c:359
struct GWEN_URL GWEN_URL
Definition: url.h:77
int(* GWEN_CONFIGMGR_LOCKGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
Definition: configmgr_be.h:49
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
GWEN_CONFIGMGR_GETUNIQUEID_FN GWEN_ConfigMgr_SetGetUniqueIdFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETUNIQUEID_FN f)
Definition: configmgr.c:194
#define GWEN_CONFIGMGR_FOLDER
Definition: configmgr.h:40
int GWEN_ConfigMgr_LockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
Definition: configmgr.c:285
GWEN_CONFIGMGR_MKUNIQUEIDFROMID_FN GWEN_ConfigMgr_SetMkUniqueIdFromIdFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_MKUNIQUEIDFROMID_FN f)
Definition: configmgr.c:207
GWEN_PLUGIN_MANAGER * GWEN_PluginManager_new(const char *name, const char *destLib)
Definition: plugin.c:170
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition: stringlist.h:54
GWEN_CONFIGMGR_UNLOCKGROUP_FN GWEN_ConfigMgr_SetUnlockGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_UNLOCKGROUP_FN f)
Definition: configmgr.c:181
void GWEN_ConfigMgr_Plugin_SetFactoryFn(GWEN_PLUGIN *pl, GWEN_CONFIGMGR_PLUGIN_FACTORYFN f)
Definition: configmgr.c:402
#define GWEN_INHERIT_INIT(t, element)
Definition: inherit.h:223
int GWEN_PluginManager_Register(GWEN_PLUGIN_MANAGER *pm)
Definition: plugin.c:534
void GWENHYWFAR_CB GWEN_ConfigMgr_Plugin_FreeData(GWEN_UNUSED void *bp, void *p)
Definition: configmgr.c:393
GWEN_STRINGLIST * GWEN_PathManager_GetPaths(const char *destLib, const char *pathName)
Definition: pathmanager.c:483
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:83
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:41
GWEN_CONFIGMGR * GWEN_ConfigMgr_Factory(const char *url)
Definition: configmgr.c:429
GWEN_PLUGIN * GWEN_ConfigMgr_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName)
Definition: configmgr.c:377
int(* GWEN_CONFIGMGR_MKUNIQUEIDFROMID_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, uint32_t uid, int doCheck, char *buffer, uint32_t bufferLen)
Definition: configmgr_be.h:62
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
int(* GWEN_CONFIGMGR_GETUNIQUEID_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, char *buffer, uint32_t bufferLen)
Definition: configmgr_be.h:57
int GWEN_ConfigMgr_ListGroups(GWEN_CONFIGMGR *mgr, GWEN_STRINGLIST *sl)
Definition: configmgr.c:349
int(* GWEN_CONFIGMGR_GETGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb)
Definition: configmgr_be.h:39
GWEN_URL * GWEN_Url_fromString(const char *str)
Definition: urlfns.c:24
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
Definition: stringlist.c:359
GWEN_CONFIGMGR_LOCKGROUP_FN GWEN_ConfigMgr_SetLockGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LOCKGROUP_FN f)
Definition: configmgr.c:168
#define GWEN_PM_PLUGINDIR
Definition: gwenhywfar.h:53
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:164
#define GWEN_PM_LIBNAME
Definition: gwenhywfar.h:42
int GWEN_ConfigMgr_MkUniqueIdFromId(GWEN_CONFIGMGR *mgr, const char *groupName, uint32_t uid, int doCheck, char *buffer, uint32_t bufferLen)
Definition: configmgr.c:322
GWEN_CONFIGMGR *(* GWEN_CONFIGMGR_PLUGIN_FACTORYFN)(GWEN_PLUGIN *pl, const char *url)
Definition: configmgr_be.h:122
GWEN_CONFIGMGR_LISTSUBGROUPS_FN GWEN_ConfigMgr_SetListSubGroupsFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LISTSUBGROUPS_FN f)
Definition: configmgr.c:246
int GWEN_ConfigMgr_GetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb)
Definition: configmgr.c:259
GWEN_CONFIGMGR_SETGROUP_FN GWEN_ConfigMgr_SetSetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_SETGROUP_FN f)
Definition: configmgr.c:155
int GWEN_PluginManager_Unregister(GWEN_PLUGIN_MANAGER *pm)
Definition: plugin.c:564
int GWEN_PluginManager_AddPath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *s)
Definition: plugin.c:210
#define GWEN_INHERIT(bt, t)
Definition: inherit.h:264
int GWEN_ConfigMgr_ModuleInit(void)
Definition: configmgr.c:55
GWEN_CONFIGMGR_LISTGROUPS_FN GWEN_ConfigMgr_SetListGroupsFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LISTGROUPS_FN f)
Definition: configmgr.c:233
int(* GWEN_CONFIGMGR_DELETEGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
Definition: configmgr_be.h:69
int(* GWEN_CONFIGMGR_LISTGROUPS_FN)(GWEN_CONFIGMGR *mgr, GWEN_STRINGLIST *sl)
Definition: configmgr_be.h:73
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition: inherit.h:292
int GWEN_ConfigMgr_SetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db)
Definition: configmgr.c:272
#define GWEN_INHERIT_FUNCTIONS(t)
Definition: inherit.h:163
GWEN_PLUGIN * GWEN_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName)
Definition: plugin.c:79
#define GWEN_UNUSED
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:1014
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition: inherit.h:271
int GWEN_ConfigMgr_GetUniqueId(GWEN_CONFIGMGR *mgr, const char *groupName, char *buffer, uint32_t bufferLen)
Definition: configmgr.c:309
GWEN_CONFIGMGR * GWEN_ConfigMgr_Plugin_Factory(GWEN_PLUGIN *pl, const char *url)
Definition: configmgr.c:415
#define GWEN_ERROR_NOT_IMPLEMENTED
Definition: error.h:108