static void ov_member_list_json_parse(void *ov_msg_handle, jsmntok_t *tokens, char *data, void *user_data) { jsmntok_t *t; if ((t = jsmn_tok(tokens, data, "{result"))) { int count = t->size; ov_member_list_t *glp = (ov_member_list_t*) user_data; ov_member_status_t *gs = glp->entries = calloc(count, sizeof(ov_member_status_t)); glp->entry_count = count; t = jsmn_tok(t, data, "["); while (t && count--) { gs->name = jsmn_get_string(t, data, "Member_Name"); gs->id = jsmn_get_int(t, data, "Member_Name_ID"); gs->phone_mobile = jsmn_get_string(t, data, "Phone_Mobile"); gs->email = jsmn_get_string(t, data, "Email"); gs->first_name = jsmn_get_string(t, data, "First_Name"); gs->last_name = jsmn_get_string(t, data, "Last_Name"); gs->contact_means = jsmn_get_int(t, data, "Contact_Means"); gs++; t = jsmn_skip(t); } } }
static void ov_get_file_json_parse(void *ov_msg_handle, jsmntok_t *tokens, char *data, void *user_data) { ov_get_file_param_t *gfp = (ov_get_file_param_t*) user_data; gfp->url = jsmn_get_string(tokens, data, "File"); gfp->id = jsmn_get_int(tokens, data, "File_ID"); }
/** * Create message */ #if NOT_YET /* Wait for return codes to get formalized */ static void ov_create_message_json_parse(void *ov_msg_handle, jsmntok_t *tokens, char *data, void *user_data) { ov_create_message_t *cm = (ov_create_message_t*) user_data; cm->response.code = jsmn_get_int(tokens, data, "code"); cm->response.success = jsmn_get_string(tokens, data, "success"); }
static void ov_get_group_description_json_parse(void *ov_msg_handle, jsmntok_t *tokens, char *data, void *user_data) { jsmntok_t *t; if ((t = jsmn_tok(tokens, data, "{result"))) { ov_group_description_param_t *gdp = (ov_group_description_param_t*)user_data; gdp->description = jsmn_get_string(t, data, "Description"); } }
static void ov_get_group_datastore_json_parse(void *ov_msg_handle, jsmntok_t *tokens, char *data, void *user_data) { jsmntok_t *t; if ((t = jsmn_tok(tokens, data, "{result"))) { ov_group_datastore_param_t *gdp = (ov_group_datastore_param_t*)user_data; gdp->datastore = jsmn_get_string(t, data, "Datastore"); gdp->type = jsmn_get_int(t, data, "Datastore_Type"); } }
static void ov_get_group_details_json_parse(void *ov_msg_handle, jsmntok_t *tokens, char *data, void *user_data) { jsmntok_t *t; if ((t = jsmn_tok(tokens, data, "{result"))) { ov_get_group_details_t *ggd = (ov_get_group_details_t*)user_data; ggd->id = jsmn_get_int (t, data, "Group_ID"); ggd->name = jsmn_get_string(t, data, "Group_Name"); ggd->description = jsmn_get_string(t, data, "Description"); ggd->user_defined = jsmn_get_string(t, data, "User_Defined"); ggd->sent_msgs = jsmn_get_int (t, data, "Sent_Messages"); ggd->received_msgs = jsmn_get_int (t, data, "Received_Messages"); ggd->last_msg_id = jsmn_get_int (t, data, "Last_Message_ID"); ggd->ip_addr = jsmn_get_string(t, data, "IP_Address"); ggd->member_id = jsmn_get_int (t, data, "Member_ID"); if ((ggd->keepalive_url = jsmn_get_string(t, data, "Data_URL"))) { ov_trim(ggd->keepalive_url); } } }
static void ov_get_file_list_json_parse(void *ov_msg_handle, jsmntok_t *tokens, char *data, void *user_data) { jsmntok_t *t; if ((t = jsmn_tok(tokens, data, "{result"))) { int count = t->size; ov_file_list_param_t *gfl = (ov_file_list_param_t*) user_data; ov_file_list_status_t *gf = gfl->entries = calloc(count, sizeof(ov_file_list_status_t)); gfl->entry_count = count; t = jsmn_tok(t, data, "["); while (t && count--) { gf->id = jsmn_get_int(t, data, "File_ID"); gf->date_created = jsmn_get_string(t, data, "Added_Date"); gf->name = jsmn_get_string(t, data, "File_Name"); gf->extension = jsmn_get_string(t, data, "Extension"); gf->member_id = jsmn_get_int(t, data, "Member_ID"); gf->storage_name = jsmn_get_string(t, data, "Storage_Name"); gf++; t = jsmn_skip(t); } } }
static void ov_group_list_json_parse(void *ov_msg_handle, jsmntok_t *tokens, char *data, void *user_data) { jsmntok_t *t; if ((t = jsmn_tok(tokens, data, "{result"))) { int count = t->size; ov_group_list_param_t *glt = (ov_group_list_param_t*) user_data; ov_group_list_status_t *gs = glt->entries = calloc(count, sizeof(ov_group_list_status_t)); glt->entry_count = count; t = jsmn_tok(t, data, "["); while (t && count--) { gs->name = jsmn_get_string(t, data, "Group_Name"); gs->date_created = jsmn_get_string(t, data, "Date_Created"); gs->id = jsmn_get_int(t, data, "Group_ID"); gs->chat_count = jsmn_get_int(t, data, "Chat_Count"); gs->scheduled_count = jsmn_get_int(t, data, "Scheduled_Count"); gs->avatar = jsmn_get_int(t, data, "Avatar"); gs++; t = jsmn_skip(t); } } }
static void ov_get_messages_json_parse(void *ov_msg_handle, jsmntok_t *tokens, char *data, void *user_data) { jsmntok_t *t; ov_get_message_list_t *gml = (ov_get_message_list_t*) user_data; if ((t = jsmn_tok(tokens, data, "{result"))) { int msg_id_max = 0; int count = t->size; ov_get_message_t *gm = gml->messages = count? calloc(count, sizeof(ov_get_message_t)) : NULL; gml->entry_count = count; t = jsmn_tok(t, data, "["); while (t && count--) { gm->message = jsmn_get_string(t, data, "Message"); gm->id = jsmn_get_int(t, data, "Id"); gm->member_id = jsmn_get_int(t, data, "Member_ID"); gm->added = jsmn_get_string(t, data, "Added"); gm->user = jsmn_get_string(t, data, "User"); gm->attach_number = jsmn_get_int(t, data, "Attach_Number"); gm->attach_storage = jsmn_get_string(t, data, "Attach_Storage"); gm->attach_desc = jsmn_get_string(t, data, "Attach_Desc"); gm->first_name = jsmn_get_string(t, data, "First_Name"); gm->last_name = jsmn_get_string(t, data, "Last_Name"); gm->contact_means = jsmn_get_int(t, data, "Contact_Means"); if (msg_id_max < gm->id) { msg_id_max = gm->id; } gm++; t = jsmn_skip(t); } if (gml->msg_id_next < msg_id_max) { gml->msg_id_next = msg_id_max; } } else { gml->entry_count = 0; } }
static void ov_get_rules_json_parse(void *ov_msg_handle, jsmntok_t *tokens, char *data, void *user_data) { jsmntok_t *t; if ((t = jsmn_tok(tokens, data, "{result"))) { int count = t->size; ov_get_rule_list_t *grl = (ov_get_rule_list_t*) user_data; ov_get_rule_t *gr = grl->rules = calloc(count, sizeof(ov_get_rule_t)); ov_rule_t *r; ov_rule_event_t *re; ov_rule_action_t *ra; grl->entry_count = count; t = jsmn_tok(t, data, "["); while (t && count--) { gr->id = jsmn_get_int(t, data, "Rule_ID"); gr->date_created = jsmn_get_string(t, data, "Date_Created"); r = &gr->rule; r->event = re = &gr->event; r->action = ra = &gr->action; r->active = jsmn_get_int(t, data, "Active"); r->direction = jsmn_get_int(t, data, "RINT_1"); r->name = jsmn_get_string(t, data, "Name"); r->description = jsmn_get_string(t, data, "Description"); /* process event info */ switch ((re->type = jsmn_get_int(t, data, "Type"))) { case TYPE_TRIGGER: re->u.trigger.search_text = jsmn_get_string(t, data, "RSTR_1"); break; case TYPE_COUNT: re->u.count.limit = jsmn_get_int(t, data, "RINT_8"); re->u.count.interval = jsmn_get_int(t, data, "RINT_9"); break; default: /* error, skip */ gr->err = 1; goto next; } /* process action info */ switch ((ra->type = jsmn_get_int(t, data, "RINT_2"))) { case TELL_MEMBER: ra->u.member.name = jsmn_get_string(t, data, "RSTR_2"); break; case TELL_GROUP: ra->u.group.name = jsmn_get_string(t, data, "RSTR_2"); /* Get group ID? */ break; case SEND_TO_URL: ra->u.url.name = jsmn_get_string(t, data, "RSTR_2"); break; default: /* error, skip */ gr->err = 1; goto next; } ra->include_member_id = jsmn_get_int(t, data, "RINT_3"); ra->include_group_id = jsmn_get_int(t, data, "RINT_4"); ra->include_original_message = jsmn_get_int(t, data, "RINT_5"); ra->include_member_id = jsmn_get_int(t, data, "RINT_3"); if (jsmn_get_int(t, data, "RINT_6")) { ra->new_message = jsmn_get_string(t, data, "RSTR_3"); } next: gr++; t = jsmn_skip(t); } } }
int main(void) { int toknum; int resultCode; char value[64]; int boolValue=0; value[0]='\0'; jsmnParser.jSMNparser = &jSMNparser; jsmnParser.jSMNtokens = &jSMNtokens[0]; jsmnParser.numOfTokens = CONFIG_JSMN_NUM_TOKENS; jsmnParser.data = JSON_STRING; jsmnParser.lengthOfData = strlen(jsmnParser.data); jsmn_init(jsmnParser.jSMNparser); xjsmn_parse(&jsmnParser); printf("Object: %s\r\n", jsmnParser.data); printf("Length: %zu\r\n", jsmnParser.lengthOfData); printf("Tokens in object: %d\r\n", jsmnParser.resultCode); printf("\r\nPath 1: "string_path"\r\n"); if (jsmn_get_string(&jsmnParser, string_path, &value[0], 64) >= 0) { printf("Test passed.\r\n"); printf("Value 1: %s\r\n", value); } else { printf("Test failed.\r\n"); } printf("\r\nPath 2: "bool_path"\r\n"); if (jsmn_get_bool(&jsmnParser, bool_path, &boolValue) >= 0) { printf("Test passed.\r\n"); printf("Value 2: %s\r\n", (boolValue?"true":"false")); } else { printf("Test failed.\r\n"); } printf("\r\nPath 3: "array_path"\r\n"); if (jsmn_get_string(&jsmnParser, array_path, &value[0], 64) >= 0) { printf("Test passed.\r\n"); printf("Value 3: %s\r\n", value); } else { printf("Test failed.\r\n"); } printf("\r\nPath 4: "wrong_path"\r\n"); if (jsmn_get_string(&jsmnParser, wrong_path, &value[0], 64) <0) { printf("Test passed.\r\n"); } else { printf("Test failed.\r\n"); printf("Value 4: %s\r\n", value); } return (0); }