ESL_DECLARE(esl_status_t) esl_event_create_json(esl_event_t **event, const char *json) { esl_event_t *new_event; cJSON *cj, *cjp; if (!(cj = cJSON_Parse(json))) { return ESL_FALSE; } if (esl_event_create(&new_event, ESL_EVENT_CLONE) != ESL_SUCCESS) { cJSON_Delete(cj); return ESL_FALSE; } for (cjp = cj->child; cjp; cjp = cjp->next) { char *name = cjp->string; char *value = cjp->valuestring; if (name && value) { if (!strcasecmp(name, "_body")) { esl_event_add_body(new_event, value, ESL_VA_NONE); } else { if (!strcasecmp(name, "event-name")) { esl_event_del_header(new_event, "event-name"); esl_name_event(value, &new_event->event_id); } esl_event_add_header_string(new_event, ESL_STACK_BOTTOM, name, value); } } else if (name) { if (cjp->type == cJSON_Array) { int i, x = cJSON_GetArraySize(cjp); for (i = 0; i < x; i++) { cJSON *item = cJSON_GetArrayItem(cjp, i); if (item != NULL && item->type == cJSON_String && item->valuestring) { esl_event_add_header_string(new_event, ESL_STACK_PUSH, name, item->valuestring); } } } } } cJSON_Delete(cj); *event = new_event; return ESL_SUCCESS; }
ESL_DECLARE(esl_status_t) esl_event_create_json(esl_event_t **event, const char *json) { esl_event_t *new_event; cJSON *cj, *cjp; if (!(cj = cJSON_Parse(json))) { return ESL_FAIL; } if (esl_event_create(&new_event, ESL_EVENT_CLONE) != ESL_SUCCESS) { cJSON_Delete(cj); return ESL_FAIL; } for (cjp = cj->child; cjp; cjp = cjp->next) { char *name = cjp->string; char *value = cjp->valuestring; if (name && value) { if (!strcasecmp(name, "_body")) { esl_event_add_body(new_event, value); } else { if (!strcasecmp(name, "event-name")) { esl_event_del_header(new_event, "event-name"); } esl_name_event(value, &new_event->event_id); esl_event_add_header_string(new_event, ESL_STACK_BOTTOM, name, value); } } } cJSON_Delete(cj); *event = new_event; return ESL_SUCCESS; }