]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
stasis_endpoint.c: Fix contactstatus_to_json(). 94/3194/1
authorRichard Mudgett <rmudgett@digium.com>
Fri, 8 Jul 2016 16:46:04 +0000 (11:46 -0500)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 13 Jul 2016 19:37:10 +0000 (14:37 -0500)
The roundtrip_usec json member is optional.  If it isn't present then
don't put it into the converted json structure where ast_json_pack()
will choke on it.

Change-Id: I39bb2f86154ef54591270c58bfda8635070f9ea0

main/stasis_endpoints.c

index c31714bf4587cd5435cb2b566fc68cd0792a916b..8cc60506cdeec1b87bfad68579f4288d61795784 100644 (file)
@@ -253,6 +253,7 @@ static struct ast_json *contactstatus_to_json(struct stasis_message *msg, const
        struct ast_endpoint_blob *obj = stasis_message_data(msg);
        struct ast_json *json_endpoint;
        struct ast_json *json_final;
+       const char *rtt;
        const struct timeval *tv = stasis_message_timestamp(msg);
 
        json_endpoint = ast_endpoint_snapshot_to_json(obj->snapshot, NULL);
@@ -260,15 +261,30 @@ static struct ast_json *contactstatus_to_json(struct stasis_message *msg, const
                return NULL;
        }
 
-       json_final = ast_json_pack("{s: s, s: o, s: o, s: { s: s, s: s, s: s, s: s } } ",
-               "type", "ContactStatusChange",
-               "timestamp", ast_json_timeval(*tv, NULL),
-               "endpoint", json_endpoint,
-               "contact_info",
-               "uri", ast_json_string_get(ast_json_object_get(obj->blob, "uri")),
-               "contact_status", ast_json_string_get(ast_json_object_get(obj->blob, "contact_status")),
-               "aor", ast_json_string_get(ast_json_object_get(obj->blob, "aor")),
-               "roundtrip_usec", ast_json_string_get(ast_json_object_get(obj->blob, "roundtrip_usec")));
+       /* The roundtrip time is optional. */
+       rtt = ast_json_string_get(ast_json_object_get(obj->blob, "roundtrip_usec"));
+       if (!ast_strlen_zero(rtt)) {
+               json_final = ast_json_pack("{s: s, s: o, s: o, s: { s: s, s: s, s: s, s: s } } ",
+                       "type", "ContactStatusChange",
+                       "timestamp", ast_json_timeval(*tv, NULL),
+                       "endpoint", json_endpoint,
+                       "contact_info",
+                       "uri", ast_json_string_get(ast_json_object_get(obj->blob, "uri")),
+                       "contact_status", ast_json_string_get(ast_json_object_get(obj->blob,
+                               "contact_status")),
+                       "aor", ast_json_string_get(ast_json_object_get(obj->blob, "aor")),
+                       "roundtrip_usec", rtt);
+       } else {
+               json_final = ast_json_pack("{s: s, s: o, s: o, s: { s: s, s: s, s: s } } ",
+                       "type", "ContactStatusChange",
+                       "timestamp", ast_json_timeval(*tv, NULL),
+                       "endpoint", json_endpoint,
+                       "contact_info",
+                       "uri", ast_json_string_get(ast_json_object_get(obj->blob, "uri")),
+                       "contact_status", ast_json_string_get(ast_json_object_get(obj->blob,
+                               "contact_status")),
+                       "aor", ast_json_string_get(ast_json_object_get(obj->blob, "aor")));
+       }
        if (!json_final) {
                ast_json_unref(json_endpoint);
        }