|
|
|
|
@ -712,8 +712,10 @@ static int json_get_hash(struct redis_hash *out,
|
|
|
|
|
} else {
|
|
|
|
|
rc = snprintf(key_concatted, MAXKEYLENGTH, "%s-%u",key,id);
|
|
|
|
|
}
|
|
|
|
|
if (rc>=MAXKEYLENGTH)
|
|
|
|
|
if (rc>=MAXKEYLENGTH) {
|
|
|
|
|
rlog(LOG_ERROR,"Json key too long.");
|
|
|
|
|
goto err;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!json_reader_read_member(root_reader, key_concatted)) {
|
|
|
|
|
rlog(LOG_ERROR, "Could not read json member: %s",key_concatted);
|
|
|
|
|
@ -726,8 +728,9 @@ static int json_get_hash(struct redis_hash *out,
|
|
|
|
|
|
|
|
|
|
gchar **members = json_reader_list_members(root_reader);
|
|
|
|
|
gchar **orig_members = members;
|
|
|
|
|
int nmemb = json_reader_count_members (root_reader);
|
|
|
|
|
|
|
|
|
|
for (int i=0; i < json_reader_count_members (root_reader); ++i) {
|
|
|
|
|
for (int i=0; i < nmemb; ++i) {
|
|
|
|
|
|
|
|
|
|
if (!json_reader_read_member(root_reader, *members)) {
|
|
|
|
|
rlog(LOG_ERROR, "Could not read json member: %s",*members);
|
|
|
|
|
@ -880,14 +883,21 @@ static int json_build_list_cb(GQueue *q, struct call *c, const char *key,
|
|
|
|
|
|
|
|
|
|
snprintf(key_concatted, 256, "%s-%u", key, idx);
|
|
|
|
|
|
|
|
|
|
if (!json_reader_read_member(root_reader, key_concatted))
|
|
|
|
|
if (!json_reader_read_member(root_reader, key_concatted)) {
|
|
|
|
|
rlog(LOG_ERROR,"Key in json not found:%s",key_concatted);
|
|
|
|
|
for (int jidx=0; jidx < json_reader_count_elements(root_reader); ++jidx) {
|
|
|
|
|
if (!json_reader_read_element(root_reader,jidx))
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
int nmemb = json_reader_count_elements(root_reader);
|
|
|
|
|
for (int jidx=0; jidx < nmemb; ++jidx) {
|
|
|
|
|
if (!json_reader_read_element(root_reader,jidx)) {
|
|
|
|
|
rlog(LOG_ERROR,"Element in array not found.");
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
str *s = json_reader_get_string_value_uri_enc(root_reader);
|
|
|
|
|
if (!s)
|
|
|
|
|
if (!s) {
|
|
|
|
|
rlog(LOG_ERROR,"String in json not found.");
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if (cb(s, q, list, ptr)) {
|
|
|
|
|
free(s);
|
|
|
|
|
return -1;
|
|
|
|
|
@ -1154,7 +1164,7 @@ static int rbl_cb_plts(str *s, GQueue *q, struct redis_list *list, void *ptr) {
|
|
|
|
|
g_hash_table_replace(med->rtp_payload_types, &pt->payload_type, pt);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
static int json_medias(struct redis *r, struct call *c, struct redis_list *medias, JsonReader *root_reader) {
|
|
|
|
|
static int json_medias(struct call *c, struct redis_list *medias, JsonReader *root_reader) {
|
|
|
|
|
unsigned int i;
|
|
|
|
|
struct redis_hash *rh;
|
|
|
|
|
struct call_media *med;
|
|
|
|
|
@ -1317,7 +1327,7 @@ static int json_link_streams(struct call *c, struct redis_list *streams,
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int json_link_medias(struct redis *r, struct call *c, struct redis_list *medias,
|
|
|
|
|
static int json_link_medias(struct call *c, struct redis_list *medias,
|
|
|
|
|
struct redis_list *streams, struct redis_list *maps, struct redis_list *tags, JsonReader *root_reader)
|
|
|
|
|
{
|
|
|
|
|
unsigned int i;
|
|
|
|
|
@ -1366,7 +1376,7 @@ static int rbl_cb_intf_sfds(str *s, GQueue *q, struct redis_list *list, void *pt
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int json_link_maps(struct redis *r, struct call *c, struct redis_list *maps,
|
|
|
|
|
static int json_link_maps(struct call *c, struct redis_list *maps,
|
|
|
|
|
struct redis_list *sfds, JsonReader *root_reader)
|
|
|
|
|
{
|
|
|
|
|
unsigned int i;
|
|
|
|
|
@ -1467,7 +1477,7 @@ static void json_restore_call(struct redis *r, struct callmaster *m, const str *
|
|
|
|
|
if (redis_tags(c, &tags))
|
|
|
|
|
goto err8;
|
|
|
|
|
err = "failed to create medias";
|
|
|
|
|
if (json_medias(r, c, &medias, root_reader))
|
|
|
|
|
if (json_medias(c, &medias, root_reader))
|
|
|
|
|
goto err8;
|
|
|
|
|
err = "failed to create maps";
|
|
|
|
|
if (redis_maps(c, &maps))
|
|
|
|
|
@ -1483,10 +1493,10 @@ static void json_restore_call(struct redis *r, struct callmaster *m, const str *
|
|
|
|
|
if (json_link_tags(c, &tags, &medias, root_reader))
|
|
|
|
|
goto err8;
|
|
|
|
|
err = "failed to link medias";
|
|
|
|
|
if (json_link_medias(r, c, &medias, &streams, &maps, &tags, root_reader))
|
|
|
|
|
if (json_link_medias(c, &medias, &streams, &maps, &tags, root_reader))
|
|
|
|
|
goto err8;
|
|
|
|
|
err = "failed to link maps";
|
|
|
|
|
if (json_link_maps(r, c, &maps, &sfds, root_reader))
|
|
|
|
|
if (json_link_maps(c, &maps, &sfds, root_reader))
|
|
|
|
|
goto err8;
|
|
|
|
|
|
|
|
|
|
// presence of this key determines whether we were recording at all
|
|
|
|
|
|