summaryrefslogtreecommitdiffstats
path: root/runtime/msg.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2013-10-23 15:12:30 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2013-10-23 15:12:30 +0200
commitc0f44743898954aee7f846ce630280a80297b80d (patch)
tree835b801ade35134c9fa1bf7f679500587dbe0d28 /runtime/msg.c
parentddcd6c0a61459d56f8b57a922c1b85b5bfc4215e (diff)
downloadrsyslog-c0f44743898954aee7f846ce630280a80297b80d.tar.gz
rsyslog-c0f44743898954aee7f846ce630280a80297b80d.tar.bz2
rsyslog-c0f44743898954aee7f846ce630280a80297b80d.zip
refactor get.*PropVal() series of functions
Diffstat (limited to 'runtime/msg.c')
-rw-r--r--runtime/msg.c54
1 files changed, 24 insertions, 30 deletions
diff --git a/runtime/msg.c b/runtime/msg.c
index ea14eefa..a0215ab6 100644
--- a/runtime/msg.c
+++ b/runtime/msg.c
@@ -2516,10 +2516,11 @@ static uchar *getNOW(eNOWType eNow, struct syslogTime *t)
/* Get a JSON-Property as string value (used for various types of JSON-based vars) */
-static rsRetVal
-getJSONPropVal(struct json_object *jroot, uchar *propName, int propNameLen, uchar **pRes, rs_size_t *buflen, unsigned short *pbMustBeFreed)
+rsRetVal
+getJSONPropVal(msg_t *pMsg, msgPropDescr_t *pProp, uchar **pRes, rs_size_t *buflen, unsigned short *pbMustBeFreed)
{
uchar *leaf;
+ struct json_object *jroot;
struct json_object *parent;
struct json_object *field;
DEFiRet;
@@ -2527,13 +2528,26 @@ getJSONPropVal(struct json_object *jroot, uchar *propName, int propNameLen, ucha
if(*pbMustBeFreed)
free(*pRes);
*pRes = NULL;
+
+ if(pProp->id == PROP_CEE) {
+ jroot = pMsg->json;
+ } else if(pProp->id == PROP_LOCAL_VAR) {
+ jroot = pMsg->localvars;
+ } else if(pProp->id == PROP_GLOBAL_VAR) {
+ pthread_rwlock_rdlock(&glblVars_rwlock);
+ jroot = global_var_root;
+ } else {
+ DBGPRINTF("msgGetJSONPropVal; invalid property id %d\n",
+ pProp->id);
+ ABORT_FINALIZE(RS_RET_NOT_FOUND);
+ }
if(jroot == NULL) goto finalize_it;
- if(!strcmp((char*)propName, "!")) {
+ if(!strcmp((char*)pProp->name, "!")) {
field = jroot;
} else {
- leaf = jsonPathGetLeaf(propName, propNameLen);
- CHKiRet(jsonPathFindParent(jroot, propName+1, leaf, &parent, 1));
+ leaf = jsonPathGetLeaf(pProp->name, pProp->nameLen);
+ CHKiRet(jsonPathFindParent(jroot, pProp->name, leaf, &parent, 1));
field = json_object_object_get(parent, (char*)leaf);
}
if(field != NULL) {
@@ -2543,6 +2557,8 @@ getJSONPropVal(struct json_object *jroot, uchar *propName, int propNameLen, ucha
}
finalize_it:
+ if(pProp->id == PROP_GLOBAL_VAR)
+ pthread_rwlock_unlock(&glblVars_rwlock);
if(*pRes == NULL) {
/* could not find any value, so set it to empty */
*pRes = (unsigned char*)"";
@@ -2551,28 +2567,6 @@ finalize_it:
RETiRet;
}
-rsRetVal
-getCEEPropVal(msg_t *pM, uchar *propName, int propNameLen, uchar **pRes, rs_size_t *buflen, unsigned short *pbMustBeFreed)
-{
- return getJSONPropVal(pM->json, propName, propNameLen, pRes, buflen, pbMustBeFreed);
-}
-
-rsRetVal
-getLocalVarPropVal(msg_t *pM, uchar *propName, int propNameLen, uchar **pRes, rs_size_t *buflen, unsigned short *pbMustBeFreed)
-{
- return getJSONPropVal(pM->localvars, propName, propNameLen, pRes, buflen, pbMustBeFreed);
-}
-
-rsRetVal
-getGlobalVarPropVal(uchar *propName, int propNameLen, uchar **pRes, rs_size_t *buflen, unsigned short *pbMustBeFreed)
-{
- DEFiRet;
- pthread_rwlock_rdlock(&glblVars_rwlock);
- iRet = getJSONPropVal(global_var_root, propName, propNameLen, pRes, buflen, pbMustBeFreed);
- pthread_rwlock_unlock(&glblVars_rwlock);
- RETiRet;
-}
-
/* Get a JSON-based-variable as native json object */
rsRetVal
@@ -3014,10 +3008,9 @@ uchar *MsgGetProp(msg_t *pMsg, struct templateEntry *pTpe,
}
break;
case PROP_CEE:
- getCEEPropVal(pMsg, pProp->name, pProp->nameLen, &pRes, &bufLen, pbMustBeFreed);
- break;
case PROP_LOCAL_VAR:
- getLocalVarPropVal(pMsg, pProp->name, pProp->nameLen, &pRes, &bufLen, pbMustBeFreed);
+ case PROP_GLOBAL_VAR:
+ getJSONPropVal(pMsg, pProp, &pRes, &bufLen, pbMustBeFreed);
break;
case PROP_SYS_BOM:
if(*pbMustBeFreed == 1)
@@ -4221,6 +4214,7 @@ msgPropDescrDestruct(msgPropDescr_t *pProp)
}
}
+
/* dummy */
rsRetVal msgQueryInterface(void) { return RS_RET_NOT_IMPLEMENTED; }