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;
    }
}
Beispiel #10
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);
        }
    }
}
Beispiel #11
0
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);
}