diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2008-01-11 16:52:19 +0000 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2008-01-11 16:52:19 +0000 |
commit | a80f7776c543d80f773ea6149e73e008f7273186 (patch) | |
tree | 14d313bd62c5d8ff45c7466a6acb63fc0111ebed | |
parent | 19b8d9e239f150127d8af15694f88c20ed88bd25 (diff) | |
download | rsyslog-a80f7776c543d80f773ea6149e73e008f7273186.tar.gz rsyslog-a80f7776c543d80f773ea6149e73e008f7273186.tar.xz rsyslog-a80f7776c543d80f773ea6149e73e008f7273186.zip |
support for de-serializing strm objects added
-rw-r--r-- | msg.c | 2 | ||||
-rw-r--r-- | queue.c | 28 | ||||
-rw-r--r-- | rsyslog.h | 1 | ||||
-rw-r--r-- | stream.c | 40 | ||||
-rw-r--r-- | stream.h | 2 |
5 files changed, 69 insertions, 4 deletions
@@ -2086,7 +2086,7 @@ rsRetVal MsgSetProperty(msg_t *pThis, property_t *pProp) { DEFiRet; - assert(pThis != NULL); + ISOBJ_TYPE_assert(pThis, Msg); assert(pProp != NULL); if(isProp("iProtocolVersion")) { @@ -818,13 +818,39 @@ finalize_it: DEFpropSetMeth(queue, bImmediateShutdown, int); +/* This function can be used as a generic way to set properties. Only the subset + * of properties required to read persisted property bags is supported. This + * functions shall only be called by the property bag reader, thus it is static. + * rgerhards, 2008-01-11 + */ +#define isProp(name) !rsCStrSzStrCmp(pProp->pcsName, (uchar*) name, sizeof(name) - 1) +static rsRetVal queueSetProperty(queue_t *pThis, property_t *pProp) +{ + DEFiRet; + + ISOBJ_TYPE_assert(pThis, queue); + assert(pProp != NULL); + + if(isProp("iQueueSize")) { + pThis->iQueueSize = pProp->val.vInt; + } else if(isProp("qType")) { + if(pThis->qType != pProp->val.vLong) + ABORT_FINALIZE(RS_RET_QTYPE_MISMATCH); + } + +finalize_it: + return iRet; +} +#undef isProp + + /* Initialize the stream class. Must be called as the very first method * before anything else is called inside this class. * rgerhards, 2008-01-09 */ BEGINObjClassInit(queue, 1) //OBJSetMethodHandler(objMethod_SERIALIZE, strmSerialize); - //OBJSetMethodHandler(objMethod_SETPROPERTY, strmSetProperty); + OBJSetMethodHandler(objMethod_SETPROPERTY, queueSetProperty); //OBJSetMethodHandler(objMethod_CONSTRUCTION_FINALIZER, strmConstructFinalize); ENDObjClassInit(strm) @@ -106,6 +106,7 @@ enum rsRetVal_ /** return value. All methods return this if not specified oth RS_RET_VALUE_TOO_LOW = -2035, /**< a provided value is too low */ RS_RET_FILE_PREFIX_MISSING = -2036, /**< a required file prefix (parameter?) is missing */ RS_RET_INVALID_HEADER_RECTYPE = -2037, /**< invalid record type in header or invalid header */ + RS_RET_QTYPE_MISMATCH = -2038, /**< different qType when reading back a property type */ RS_RET_OK_DELETE_LISTENTRY = 1, /**< operation successful, but callee requested the deletion of an entry (special state) */ RS_RET_TERMINATE_NOW = 2, /**< operation successful, function is requested to terminate (mostly used with threads) */ RS_RET_NO_RUN = 3, /**< operation successful, but function does not like to be executed */ @@ -638,6 +638,7 @@ rsRetVal strmSerialize(strm_t *pThis, strm_t *pStrm) objSerializeSCALAR_VAR(pStrm, iMaxFileSize, LONG, l); objSerializeSCALAR(pStrm, iMaxFiles, INT); objSerializeSCALAR(pStrm, iFileNumDigits, INT); + objSerializeSCALAR(pStrm, bDeleteOnClose, INT); CHKiRet(objEndSerialize(pStrm)); @@ -646,13 +647,50 @@ finalize_it: } + +/* This function can be used as a generic way to set properties. + * rgerhards, 2008-01-11 + */ +#define isProp(name) !rsCStrSzStrCmp(pProp->pcsName, (uchar*) name, sizeof(name) - 1) +rsRetVal strmSetProperty(strm_t *pThis, property_t *pProp) +{ + DEFiRet; + + ISOBJ_TYPE_assert(pThis, Msg); + assert(pProp != NULL); + + if(isProp("sType")) { + CHKiRet(strmSetsType(pThis, (strmType_t) pProp->val.vInt)); + } else if(isProp("iCurrFNum")) { + pThis->iCurrFNum = pProp->val.vInt; + } else if(isProp("pszFName")) { + CHKiRet(strmSetFName(pThis, rsCStrGetSzStrNoNULL(pProp->val.vpCStr), rsCStrLen(pProp->val.vpCStr))); + } else if(isProp("tOperationsMode")) { + CHKiRet(strmSettOperationsMode(pThis, pProp->val.vInt)); + } else if(isProp("tOpenMode")) { + CHKiRet(strmSettOpenMode(pThis, pProp->val.vInt)); + } else if(isProp("iMaxFileSize")) { + CHKiRet(strmSetiMaxFileSize(pThis, pProp->val.vLong)); + } else if(isProp("iMaxFiles")) { + CHKiRet(strmSetiMaxFiles(pThis, pProp->val.vInt)); + } else if(isProp("iFileNumDigits")) { + CHKiRet(strmSetiFileNumDigits(pThis, pProp->val.vInt)); + } else if(isProp("bDeleteOnClose")) { + CHKiRet(strmSetiFileNumDigits(pThis, pProp->val.vInt)); + } + +finalize_it: + return iRet; +} +#undef isProp + /* Initialize the stream class. Must be called as the very first method * before anything else is called inside this class. * rgerhards, 2008-01-09 */ BEGINObjClassInit(strm, 1) OBJSetMethodHandler(objMethod_SERIALIZE, strmSerialize); - //OBJSetMethodHandler(objMethod_SETPROPERTY, strmSetProperty); + OBJSetMethodHandler(objMethod_SETPROPERTY, strmSetProperty); OBJSetMethodHandler(objMethod_CONSTRUCTION_FINALIZER, strmConstructFinalize); ENDObjClassInit(strm) @@ -72,6 +72,7 @@ typedef struct strm_s { size_t iMaxFileSize;/* maximum size a file may grow to */ int iMaxFiles; /* maximum number of files if a circular mode is in use */ int iFileNumDigits;/* min number of digits to use in file number (only in circular mode) */ + int bDeleteOnClose; /* set to 1 to auto-delete on close -- be careful with that setting! */ /* dynamic properties, valid only during file open, not to be persistet */ size_t sIOBufSize;/* size of IO buffer */ uchar *pszDir; /* Directory */ @@ -84,7 +85,6 @@ typedef struct strm_s { size_t iBufPtr; /* pointer into current buffer */ int iUngetC; /* char set via UngetChar() call or -1 if none set */ int bInRecord; /* if 1, indicates that we are currently writing a not-yet complete record */ - int bDeleteOnClose; /* set to 1 to auto-delete on close -- be careful with that setting! */ } strm_t; /* prototypes */ |