summaryrefslogtreecommitdiffstats
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/msg.c54
-rw-r--r--runtime/msg.h6
2 files changed, 25 insertions, 35 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; }
diff --git a/runtime/msg.h b/runtime/msg.h
index 3e6bf767..c19e7e36 100644
--- a/runtime/msg.h
+++ b/runtime/msg.h
@@ -196,7 +196,6 @@ rsRetVal msgGetCEEVar(msg_t *pThis, cstr_t *propName, var_t **ppVar);
es_str_t* msgGetCEEVarNew(msg_t *pMsg, char *name);
es_str_t* msgGetLocalVarNew(msg_t *pMsg, char *name);
rsRetVal msgAddJSON(msg_t *pM, uchar *name, struct json_object *json);
-rsRetVal getCEEPropVal(msg_t *pM, uchar *propName, int propNameLen, uchar **pRes, rs_size_t *buflen, unsigned short *pbMustBeFreed);
rsRetVal MsgGetSeverity(msg_t *pThis, int *piSeverity);
rsRetVal MsgDeserialize(msg_t *pMsg, strm_t *pStrm);
@@ -214,11 +213,8 @@ uchar *getProgramName(msg_t *pM, sbool bLockMutex);
uchar *getRcvFrom(msg_t *pM);
rsRetVal propNameToID(uchar *pName, propid_t *pPropID);
uchar *propIDToName(propid_t propID);
-rsRetVal msgGetCEEPropJSON(msg_t *pM, msgPropDescr_t *pProp, struct json_object **pjson);
-rsRetVal getGlobalVarPropVal(uchar *propName, int propNameLen, uchar **pRes, rs_size_t *buflen, unsigned short *pbMustBeFreed);
-rsRetVal msgGetLocalVarJSON(msg_t *pM, msgPropDescr_t *pProp, struct json_object **pjson);
-rsRetVal msgGetGlobalVarJSON(msgPropDescr_t *pProp, struct json_object **pjson);
rsRetVal msgGetJSONPropJSON(msg_t *pMsg, msgPropDescr_t *pProp, struct json_object **pjson);
+rsRetVal getJSONPropVal(msg_t *pMsg, msgPropDescr_t *pProp, uchar **pRes, rs_size_t *buflen, unsigned short *pbMustBeFreed);
rsRetVal msgSetJSONFromVar(msg_t *pMsg, uchar *varname, struct var *var);
rsRetVal msgDelJSON(msg_t *pMsg, uchar *varname);
rsRetVal jsonFind(struct json_object *jroot, uchar *propName, int propNameLen, struct json_object **jsonres);