Browse Source

Adds URI encoding for json strings in redis.

pull/316/head
Frederic-Philippe Metz 9 years ago
parent
commit
ea9512c520
1 changed files with 42 additions and 31 deletions
  1. +42
    -31
      daemon/redis.c

+ 42
- 31
daemon/redis.c View File

@ -777,6 +777,19 @@ static void redis_delete_call(struct call *c, struct redis *r) {
redis_consume(r);
}
static void json_builder_add_string_value_uri_enc(JsonBuilder *builder, char* tmp) {
json_builder_add_string_value(builder,g_uri_escape_string(tmp,NULL,0));
}
static void json_builder_set_member_name_uri_enc(JsonBuilder *builder, char* tmp) {
json_builder_set_member_name(builder,g_uri_escape_string(tmp,NULL,0));
}
static gboolean json_reader_read_member_uri_enc(JsonReader *root_reader, char* tmp) {
return json_reader_read_member(root_reader, g_uri_unescape_string(tmp,NULL));
}
static char* json_reader_get_string_value_uri_enc(JsonReader *root_reader) {
return (char*)json_reader_get_string_value(root_reader);
}
// stolen from libhiredis
/* Create a reply object */
INLINE redisReply *createReplyObject(int type) {
@ -809,7 +822,7 @@ static int json_get_hash(struct redis_hash *out, struct call* c,
rlog(LOG_ERROR,"Json key too long.");
if (!json_reader_read_member (c->root_reader, key_concatted)) {
if (!json_reader_read_member_uri_enc(c->root_reader, key_concatted)) {
rlog(LOG_ERROR, "Could not read json member: %s",key_concatted);
goto err;
}
@ -824,7 +837,7 @@ static int json_get_hash(struct redis_hash *out, struct call* c,
for (int i=0; i < json_reader_count_members (c->root_reader); ++i) {
if (!json_reader_read_member (c->root_reader, *members)) {
if (!json_reader_read_member_uri_enc (c->root_reader, *members)) {
rlog(LOG_ERROR, "Could not read json member: %s",*members);
goto err3;
}
@ -833,7 +846,7 @@ static int json_get_hash(struct redis_hash *out, struct call* c,
rlog(LOG_ERROR, "Could not create redis reply object (out of memory?)");
goto err3;
}
out->rr->str = (char*)json_reader_get_string_value(c->root_reader);
out->rr->str = json_reader_get_string_value_uri_enc(c->root_reader);
out->rr->len = strlen(out->rr->str);
char* tmp = strdup(*members);
@ -1040,12 +1053,12 @@ static int json_build_list_cb(GQueue *q, struct call *c, const char *key, const
snprintf(key_concatted, 256, "%s-%s-%u",key,callid->s,idx);
if (!json_reader_read_member (c->root_reader, key_concatted))
if (!json_reader_read_member_uri_enc (c->root_reader, key_concatted))
rlog(LOG_ERROR,"Key in json not found:%s",key_concatted);
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.");
const char* value = json_reader_get_string_value(c->root_reader);
const char* value = json_reader_get_string_value_uri_enc(c->root_reader);
if (!value)
rlog(LOG_ERROR,"String in json not found.");
str_init_len(&s, (char*)value , strlen(value));
@ -2056,10 +2069,10 @@ err:
#define JSON_SET_NSTRING(a,b,c,d) do { \
sprintf(tmp,a,b); \
json_builder_set_member_name (builder, tmp); \
json_builder_set_member_name_uri_enc (builder, tmp); \
ZERO(tmp); \
snprintf(tmp,sizeof(tmp), c,d); \
json_builder_add_string_value (builder, tmp); \
json_builder_add_string_value_uri_enc(builder, tmp); \
ZERO(tmp); \
} while (0)
@ -2162,9 +2175,7 @@ static void json_update_dtls_fingerprint(JsonBuilder *builder, const char *pref,
if (!f->hash_func)
return;
json_builder_set_member_name (builder, "hash_func");
json_builder_add_string_value (builder, f->hash_func->name);
JSON_SET_NSTRING("%s","hash_func","%s",f->hash_func->name);
JSON_SET_NSTRING("%s","fingerprint","%s",f->digest);
}
@ -2200,7 +2211,7 @@ char* redis_encode_json(struct call *c) {
json_builder_begin_object (builder);
{
sprintf(tmp,"json-" STR_FORMAT, STR_FMT(&c->callid));
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
ZERO(tmp);
json_builder_begin_object (builder);
@ -2228,7 +2239,7 @@ char* redis_encode_json(struct call *c) {
sfd = l->data;
sprintf(tmp,"sfd-%s-%u",STRSTR(&c->callid),sfd->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
ZERO(tmp);
json_builder_begin_object (builder);
@ -2254,7 +2265,7 @@ char* redis_encode_json(struct call *c) {
mutex_lock(&ps->out_lock);
sprintf(tmp,"stream-%s-%u",STRSTR(&c->callid),ps->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
ZERO(tmp);
json_builder_begin_object (builder);
@ -2294,13 +2305,13 @@ char* redis_encode_json(struct call *c) {
mutex_lock(&ps->out_lock);
sprintf(tmp,"stream_sfds-%s-%u",STRSTR(&c->callid),ps->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
json_builder_begin_array (builder);
ZERO(tmp);
for (k = ps->sfds.head; k; k = k->next) {
sfd = k->data;
sprintf(tmp,"%u",sfd->unique_id);
json_builder_add_string_value (builder, tmp);
json_builder_add_string_value_uri_enc(builder, tmp);
ZERO(tmp);
}
json_builder_end_array (builder);
@ -2314,7 +2325,7 @@ char* redis_encode_json(struct call *c) {
ml = l->data;
sprintf(tmp,"tag-%s-%u",STRSTR(&c->callid),ml->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
ZERO(tmp);
json_builder_begin_object (builder);
@ -2342,13 +2353,13 @@ char* redis_encode_json(struct call *c) {
// -- we do it again here since the jsonbuilder is linear straight forward
k = g_hash_table_get_values(ml->other_tags);
sprintf(tmp,"other_tags-%s-%u",STRSTR(&c->callid),ml->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
json_builder_begin_array (builder);
ZERO(tmp);
for (m = k; m; m = m->next) {
ml2 = m->data;
sprintf(tmp,"%u",ml2->unique_id);
json_builder_add_string_value(builder, tmp);
json_builder_add_string_value_uri_enc(builder, tmp);
ZERO(tmp);
}
json_builder_end_array (builder);
@ -2356,13 +2367,13 @@ char* redis_encode_json(struct call *c) {
g_list_free(k);
sprintf(tmp,"medias-%s-%u",STRSTR(&c->callid),ml->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
json_builder_begin_array (builder);
ZERO(tmp);
for (k = ml->medias.head; k; k = k->next) {
media = k->data;
sprintf(tmp,"%u",media->unique_id);
json_builder_add_string_value (builder, tmp);
json_builder_add_string_value_uri_enc (builder, tmp);
ZERO(tmp);
}
json_builder_end_array (builder);
@ -2373,7 +2384,7 @@ char* redis_encode_json(struct call *c) {
media = l->data;
sprintf(tmp,"media-%s-%u",STRSTR(&c->callid),media->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
ZERO(tmp);
json_builder_begin_object (builder);
@ -2406,32 +2417,32 @@ char* redis_encode_json(struct call *c) {
media = l->data;
sprintf(tmp,"streams-%s-%u",STRSTR(&c->callid),media->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
json_builder_begin_array (builder);
ZERO(tmp);
for (m = media->streams.head; m; m = m->next) {
ps = m->data;
sprintf(tmp,"%u",ps->unique_id);
json_builder_add_string_value (builder, tmp);
json_builder_add_string_value_uri_enc (builder, tmp);
ZERO(tmp);
}
json_builder_end_array (builder);
sprintf(tmp,"maps-%s-%u",STRSTR(&c->callid),media->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
json_builder_begin_array (builder);
ZERO(tmp);
for (m = media->endpoint_maps.head; m; m = m->next) {
ep = m->data;
sprintf(tmp,"%u",ep->unique_id);
json_builder_add_string_value (builder, tmp);
json_builder_add_string_value_uri_enc (builder, tmp);
ZERO(tmp);
}
json_builder_end_array (builder);
k = g_hash_table_get_values(media->rtp_payload_types);
sprintf(tmp,"payload_types-%s-%u",STRSTR(&c->callid),media->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
json_builder_begin_array (builder);
ZERO(tmp);
for (m = k; m; m = m->next) {
@ -2439,7 +2450,7 @@ char* redis_encode_json(struct call *c) {
sprintf(tmp,"%u/%s/%u/%s",
pt->payload_type, STRSTR(&pt->encoding),
pt->clock_rate, STRSTR(&pt->encoding_parameters));
json_builder_add_string_value(builder, tmp);
json_builder_add_string_value_uri_enc(builder, tmp);
}
json_builder_end_array (builder);
@ -2451,7 +2462,7 @@ char* redis_encode_json(struct call *c) {
ep = l->data;
sprintf(tmp,"map-%s-%u",STRSTR(&c->callid),ep->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
ZERO(tmp);
json_builder_begin_object (builder);
@ -2472,18 +2483,18 @@ char* redis_encode_json(struct call *c) {
ep = l->data;
sprintf(tmp,"map_sfds-%s-%u",STRSTR(&c->callid),ep->unique_id);
json_builder_set_member_name (builder, tmp);
json_builder_set_member_name_uri_enc (builder, tmp);
json_builder_begin_array (builder);
ZERO(tmp);
for (m = ep->intf_sfds.head; m; m = m->next) {
il = m->data;
sprintf(tmp,"loc-%u",il->local_intf->unique_id);
json_builder_add_string_value(builder, tmp);
json_builder_add_string_value_uri_enc(builder, tmp);
ZERO(tmp);
for (n = il->list.head; n; n = n->next) {
sfd = n->data;
sprintf(tmp,"%u",sfd->unique_id);
json_builder_add_string_value (builder, tmp);
json_builder_add_string_value_uri_enc (builder, tmp);
ZERO(tmp);
}
}


Loading…
Cancel
Save