From 2dccfb6780c89cf9ac5e215afd7d2a18ee211840 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Thu, 10 Jan 2008 07:17:37 +0000 Subject: needed to create obj-types.h to break circular references --- obj-types.h | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 obj-types.h diff --git a/obj-types.h b/obj-types.h new file mode 100644 index 00000000..005d6a4d --- /dev/null +++ b/obj-types.h @@ -0,0 +1,117 @@ +/* Some type definitions and macros for the obj object. + * I needed to move them out of the main obj.h, because obj.h's + * prototypes use other data types. However, their .h's rely + * on some of the obj.h data types and macros. So I needed to break + * that loop somehow and I've done that by moving the typedefs + * into this file here. + * + * Copyright 2008 Rainer Gerhards and Adiscon GmbH. + * + * This file is part of rsyslog. + * + * Rsyslog is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Rsyslog is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Rsyslog. If not, see . + * + * A copy of the GPL can be found in the file "COPYING" in this distribution. + */ + +#ifndef OBJ_TYPES_H_INCLUDED +#define OBJ_TYPES_H_INCLUDED + +#include "stringbuf.h" + +/* property types */ +typedef enum { /* do NOT start at 0 to detect uninitialized types after calloc() */ + PROPTYPE_PSZ = 1, + PROPTYPE_SHORT = 2, + PROPTYPE_INT = 3, + PROPTYPE_LONG = 4, + PROPTYPE_CSTR = 5, + PROPTYPE_SYSLOGTIME = 6 +} propertyType_t; + +typedef struct { + rsCStrObj *pcsName; + propertyType_t propType; + union { + short vShort; + int vInt; + long vLong; + rsCStrObj *vpCStr; /* used for both rsCStr and psz */ + syslogTime_t vSyslogTime; + + } val; +} property_t; + +/* object Types/IDs */ +typedef enum { /* IDs of known object "types/classes" */ + OBJNull = 0, /* no valid object (we do not start at zero so we can detect calloc()) */ + OBJMsg = 1, + OBJstrm = 2 +} objID_t; +#define OBJ_NUM_IDS 3 + +typedef enum { /* IDs of base methods supported by all objects - used for jump table, so + * they must start at zero and be incremented. -- rgerahrds, 2008-01-04 + */ + objMethod_CONSTRUCT = 0, + objMethod_DESTRUCT = 1, + objMethod_SERIALIZE = 2, + objMethod_DESERIALIZE = 3, + objMethod_SETPROPERTY = 4, + objMethod_CONSTRUCTION_FINALIZER = 5, + objMethod_DEBUGPRINT = 6 +} objMethod_t; +#define OBJ_NUM_METHODS 7 /* must be updated to contain the max number of methods supported */ + +typedef struct objInfo_s { + objID_t objID; + int iObjVers; + uchar *pszName; + rsRetVal (*objMethods[OBJ_NUM_METHODS])(); +} objInfo_t; + +typedef struct obj { /* the dummy struct that each derived class can be casted to */ + objInfo_t *pObjInfo; +} obj_t; + +/* macros which must be gloablly-visible (because they are used during definition of + * other objects. + */ +#define BEGINobjInstance objInfo_t *pObjInfo + +#define DEFpropSetMeth(obj, prop, dataType)\ + rsRetVal obj##Set##prop(obj##_t *pThis, dataType pVal)\ + { \ + pThis->prop = pVal; \ + return RS_RET_OK; \ + } +#define PROTOTYPEpropSetMeth(obj, prop, dataType)\ + rsRetVal obj##Set##prop(obj##_t *pThis, dataType pVal) +/* class initializer */ +#define PROTOTYPEObjClassInit(objName) rsRetVal objName##ClassInit(void) +#define BEGINObjClassInit(objName, objVers) \ +rsRetVal objName##ClassInit(void) \ +{ \ + DEFiRet; \ + CHKiRet(objInfoConstruct(&pObjInfoOBJ, OBJ##objName, (uchar*) #objName, objVers, \ + (rsRetVal (*)(void*))objName##Construct, (rsRetVal (*)(void*))objName##Destruct)); + +#define ENDObjClassInit(objName) \ + objRegisterObj(OBJ##objName, pObjInfoOBJ); \ +finalize_it: \ + return iRet; \ +} + + +#endif /* #ifndef OBJ_TYPES_H_INCLUDED */ -- cgit