|
|
|
|
@ -691,13 +691,12 @@ INLINE void json_builder_add_string_value_uri_enc(JsonBuilder *builder, const ch
|
|
|
|
|
str_uri_encode_len(enc, tmp, len);
|
|
|
|
|
json_builder_add_string_value(builder,enc);
|
|
|
|
|
}
|
|
|
|
|
INLINE char* json_reader_get_string_value_uri_enc(JsonReader *root_reader, int *lenp) {
|
|
|
|
|
const char *str = json_reader_get_string_value(root_reader);
|
|
|
|
|
char *ret;
|
|
|
|
|
int len = str_uri_decode_len(&ret, str, strlen(str));
|
|
|
|
|
if (lenp)
|
|
|
|
|
*lenp = len;
|
|
|
|
|
return ret; // must be free'd
|
|
|
|
|
INLINE str *json_reader_get_string_value_uri_enc(JsonReader *root_reader) {
|
|
|
|
|
const char *s = json_reader_get_string_value(root_reader);
|
|
|
|
|
if (!s)
|
|
|
|
|
return NULL;
|
|
|
|
|
str *out = str_uri_decode_len(s, strlen(s));
|
|
|
|
|
return out; // must be free'd
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int json_get_hash(struct redis_hash *out, struct call* c,
|
|
|
|
|
@ -706,7 +705,6 @@ static int json_get_hash(struct redis_hash *out, struct call* c,
|
|
|
|
|
static unsigned int MAXKEYLENGTH = 512;
|
|
|
|
|
char key_concatted[MAXKEYLENGTH];
|
|
|
|
|
int rc=0;
|
|
|
|
|
str tmpstr;
|
|
|
|
|
|
|
|
|
|
if (!c)
|
|
|
|
|
goto err;
|
|
|
|
|
@ -737,10 +735,10 @@ static int json_get_hash(struct redis_hash *out, struct call* c,
|
|
|
|
|
rlog(LOG_ERROR, "Could not read json member: %s",*members);
|
|
|
|
|
goto err3;
|
|
|
|
|
}
|
|
|
|
|
str_init(&tmpstr,(char*)json_reader_get_string_value_uri_enc(c->root_reader,&tmpstr.len));
|
|
|
|
|
str *val = json_reader_get_string_value_uri_enc(c->root_reader);
|
|
|
|
|
char* tmp = strdup(*members);
|
|
|
|
|
|
|
|
|
|
if (g_hash_table_insert_check(out->ht, tmp, str_dup(&tmpstr)) != TRUE) {
|
|
|
|
|
if (g_hash_table_insert_check(out->ht, tmp, val) != TRUE) {
|
|
|
|
|
ilog(LOG_WARNING,"Key %s already exists", tmp);
|
|
|
|
|
goto err3;
|
|
|
|
|
}
|
|
|
|
|
@ -880,7 +878,6 @@ static int json_build_list_cb(GQueue *q, struct call *c, const char *key,
|
|
|
|
|
unsigned int idx, struct redis_list *list,
|
|
|
|
|
int (*cb)(str *, GQueue *, struct redis_list *, void *), void *ptr)
|
|
|
|
|
{
|
|
|
|
|
str s;
|
|
|
|
|
char key_concatted[256];
|
|
|
|
|
|
|
|
|
|
snprintf(key_concatted, 256, "%s-%u", key, idx);
|
|
|
|
|
@ -890,14 +887,14 @@ static int json_build_list_cb(GQueue *q, struct call *c, const char *key,
|
|
|
|
|
for (int jidx=0; jidx < json_reader_count_elements(c->root_reader); ++jidx) {
|
|
|
|
|
if (!json_reader_read_element(c->root_reader,jidx))
|
|
|
|
|
rlog(LOG_ERROR,"Element in array not found.");
|
|
|
|
|
char *strp = s.s = json_reader_get_string_value_uri_enc(c->root_reader, &s.len);
|
|
|
|
|
if (!strp)
|
|
|
|
|
str *s = json_reader_get_string_value_uri_enc(c->root_reader);
|
|
|
|
|
if (!s)
|
|
|
|
|
rlog(LOG_ERROR,"String in json not found.");
|
|
|
|
|
if (cb(&s, q, list, ptr)) {
|
|
|
|
|
free(s.s);
|
|
|
|
|
if (cb(s, q, list, ptr)) {
|
|
|
|
|
free(s);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
free(strp);
|
|
|
|
|
free(s);
|
|
|
|
|
json_reader_end_element(c->root_reader);
|
|
|
|
|
}
|
|
|
|
|
json_reader_end_member (c->root_reader);
|
|
|
|
|
|