diff options
author | Matt Jordan <mjordan@digium.com> | 2015-09-23 12:56:07 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2015-09-23 12:56:08 -0500 |
commit | 0d95610ae2e98a07b6dff5aa002d316c6eea2c4f (patch) | |
tree | 9d1fcc5fbd3042bd0e27678eedc347b25554f358 /main | |
parent | 5f15cd93f0b2cb622d54061515b815e3ebbe76b1 (diff) | |
parent | b50e372394bf0950ebbc96793d9594de97282749 (diff) |
Merge "ARI: Add events for Contact and Peer Status changes" into 13
Diffstat (limited to 'main')
-rw-r--r-- | main/stasis_endpoints.c | 78 |
1 files changed, 70 insertions, 8 deletions
diff --git a/main/stasis_endpoints.c b/main/stasis_endpoints.c index e0d0878b3..157f98c04 100644 --- a/main/stasis_endpoints.c +++ b/main/stasis_endpoints.c @@ -124,12 +124,7 @@ struct stasis_topic *ast_endpoint_topic_all_cached(void) return stasis_cp_all_topic_cached(endpoint_cache_all); } -static struct ast_manager_event_blob *peerstatus_to_ami(struct stasis_message *msg); - STASIS_MESSAGE_TYPE_DEFN(ast_endpoint_snapshot_type); -STASIS_MESSAGE_TYPE_DEFN(ast_endpoint_state_type, - .to_ami = peerstatus_to_ami, -); static struct ast_manager_event_blob *peerstatus_to_ami(struct stasis_message *msg) { @@ -166,10 +161,44 @@ static struct ast_manager_event_blob *peerstatus_to_ami(struct stasis_message *m ast_str_buffer(peerstatus_event_string)); } -static struct ast_manager_event_blob *contactstatus_to_ami(struct stasis_message *msg); +static struct ast_json *peerstatus_to_json(struct stasis_message *msg, const struct stasis_message_sanitizer *sanitize) +{ + struct ast_endpoint_blob *obj = stasis_message_data(msg); + struct ast_json *json_endpoint; + struct ast_json *json_peer; + struct ast_json *json_final; + const struct timeval *tv = stasis_message_timestamp(msg); -STASIS_MESSAGE_TYPE_DEFN(ast_endpoint_contact_state_type, - .to_ami = contactstatus_to_ami, + json_endpoint = ast_endpoint_snapshot_to_json(obj->snapshot, NULL); + if (!json_endpoint) { + return NULL; + } + + json_peer = ast_json_object_create(); + if (!json_peer) { + ast_json_unref(json_endpoint); + return NULL; + } + + /* Copy all fields from the blob */ + ast_json_object_update(json_peer, obj->blob); + + json_final = ast_json_pack("{s: s, s: o, s: o, s: o }", + "type", "PeerStatusChange", + "timestamp", ast_json_timeval(*tv, NULL), + "endpoint", json_endpoint, + "peer", json_peer); + if (!json_final) { + ast_json_unref(json_endpoint); + ast_json_unref(json_peer); + } + + return json_final; +} + +STASIS_MESSAGE_TYPE_DEFN(ast_endpoint_state_type, + .to_ami = peerstatus_to_ami, + .to_json = peerstatus_to_json, ); static struct ast_manager_event_blob *contactstatus_to_ami(struct stasis_message *msg) @@ -206,6 +235,39 @@ static struct ast_manager_event_blob *contactstatus_to_ami(struct stasis_message "%s", ast_str_buffer(contactstatus_event_string)); } +static struct ast_json *contactstatus_to_json(struct stasis_message *msg, const struct stasis_message_sanitizer *sanitize) +{ + struct ast_endpoint_blob *obj = stasis_message_data(msg); + struct ast_json *json_endpoint; + struct ast_json *json_final; + const struct timeval *tv = stasis_message_timestamp(msg); + + json_endpoint = ast_endpoint_snapshot_to_json(obj->snapshot, NULL); + if (!json_endpoint) { + return NULL; + } + + 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")), + "roundtrip_usec", ast_json_string_get(ast_json_object_get(obj->blob, "roundtrip_usec"))); + if (!json_final) { + ast_json_unref(json_endpoint); + } + + return json_final; +} + +STASIS_MESSAGE_TYPE_DEFN(ast_endpoint_contact_state_type, + .to_ami = contactstatus_to_ami, + .to_json = contactstatus_to_json +); + static void endpoint_blob_dtor(void *obj) { struct ast_endpoint_blob *event = obj; |