/* begin implementations */ static json_object *jenc_create_object(struct _v *value) { json_object *object; /* if stored value is string is starting with { and ending with }, then create a json object from it. */ if (value->slen == 0){ object = json_object_new_double(value->val.f); } else if (value->val.s[0] == '{' && value->val.s[strlen(value->val.s) - 1] == '}') { char *parsed_string; size_t memsize = 0; parsed_string = string_remove_backslashes(value->val.s, &memsize); object = json_tokener_parse(parsed_string); string_free(parsed_string, &memsize); } else { object = json_object_new_string(value->val.s); } return object; }
void rest_command(t_rest *const rest, const t_symbol *const sel, const int argc, t_atom *argv) { const char *const req_type = sel->s_name; char path[MAXPDSTRING]; if (rest->common.locked) { post("rest object is performing request and locked."); return; } memset(rest->common.req_type, 0x00, REQUEST_TYPE_LEN); if (argc == 0) { return; } rest->common.locked = 1; strncpy(rest->common.req_type, req_type, REQUEST_TYPE_LEN - 1); if (ctw_check_request_type(rest->common.req_type) != 0){ pd_error(rest, "Request method %s not supported.", rest->common.req_type); rest->common.locked = 0; return; } atom_string(argv, path, MAXPDSTRING); rest->common.complete_url = string_create(&rest->common.complete_url_len, rest->common.base_url_len + strlen(path) + 1); if (rest->common.base_url != NULL) { strcpy(rest->common.complete_url, rest->common.base_url); } strcat(rest->common.complete_url, path); if (argc > 1) { char parameters[MAXPDSTRING]; atom_string(argv + 1, parameters, MAXPDSTRING); if (strlen(parameters)) { char *cleaned_parameters; size_t memsize = 0; cleaned_parameters = string_remove_backslashes(parameters, &memsize); rest->common.parameters = string_create(&rest->common.parameters_len, memsize + 1); strcpy(rest->common.parameters, cleaned_parameters); freebytes(cleaned_parameters, memsize); } } ctw_thread_exec((struct _ctw *)rest, ctw_exec); }