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_dup(esl_event_t **event, esl_event_t *todup) { esl_event_header_t *hp; if (esl_event_create_subclass(event, ESL_EVENT_CLONE, todup->subclass_name) != ESL_SUCCESS) { return ESL_FAIL; } (*event)->event_id = todup->event_id; (*event)->event_user_data = todup->event_user_data; (*event)->bind_user_data = todup->bind_user_data; for (hp = todup->headers; hp; hp = hp->next) { esl_event_add_header_string(*event, ESL_STACK_BOTTOM, hp->name, hp->value); } if (todup->body) { (*event)->body = DUP(todup->body); } (*event)->key = todup->key; return ESL_SUCCESS; }
ESL_DECLARE(void) esl_event_merge(esl_event_t *event, esl_event_t *tomerge) { esl_event_header_t *hp; esl_assert(tomerge && event); for (hp = tomerge->headers; hp; hp = hp->next) { if (hp->idx) { int i; for(i = 0; i < hp->idx; i++) { esl_event_add_header_string(event, ESL_STACK_PUSH, hp->name, hp->array[i]); } } else { esl_event_add_header_string(event, ESL_STACK_BOTTOM, hp->name, hp->value); } } }
bool ESLevent::addHeader(const char *header_name, const char *value) { this_check(false); if (event) { return esl_event_add_header_string(event, ESL_STACK_BOTTOM, header_name, value) == ESL_SUCCESS ? true : false; } else { esl_log(ESL_LOG_ERROR, "Trying to addHeader an event that does not exist!\n"); } return false; }
ESL_DECLARE(int) esl_event_add_array(esl_event_t *event, const char *var, const char *val) { char *data; char **array; int max = 0; int len; const char *p; int i; if (strlen(val) < 8) { return -1; } p = val + 7; max = 1; while((p = strstr(p, "|:"))) { max++; p += 2; } if (!max) { return -2; } data = strdup(val + 7); len = (sizeof(char *) * max) + 1; array = malloc(len); esl_assert(array); memset(array, 0, len); esl_separate_string_string(data, "|:", array, max); for(i = 0; i < max; i++) { esl_event_add_header_string(event, ESL_STACK_PUSH, var, array[i]); } free(array); free(data); return 0; }
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; }
ESL_DECLARE(esl_status_t) esl_event_set_priority(esl_event_t *event, esl_priority_t priority) { event->priority = priority; esl_event_add_header_string(event, ESL_STACK_TOP, "priority", esl_priority_name(priority)); return ESL_SUCCESS; }