summaryrefslogtreecommitdiffstats
path: root/obj-types.h
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2008-01-10 07:17:37 +0000
committerRainer Gerhards <rgerhards@adiscon.com>2008-01-10 07:17:37 +0000
commit2dccfb6780c89cf9ac5e215afd7d2a18ee211840 (patch)
tree907acc029aab9c9936ebb89495cf3261dbff1a81 /obj-types.h
parentc247f4e02771960f5c880dc50a3003f786faefac (diff)
downloadrsyslog-2dccfb6780c89cf9ac5e215afd7d2a18ee211840.tar.gz
rsyslog-2dccfb6780c89cf9ac5e215afd7d2a18ee211840.tar.xz
rsyslog-2dccfb6780c89cf9ac5e215afd7d2a18ee211840.zip
needed to create obj-types.h to break circular references
Diffstat (limited to 'obj-types.h')
-rw-r--r--obj-types.h117
1 files changed, 117 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>.
+ *
+ * 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 */