static struct ast_manager_event_blob *contactstatus_to_ami(struct stasis_message *msg) { struct ast_endpoint_blob *obj = stasis_message_data(msg); RAII_VAR(struct ast_str *, contactstatus_event_string, ast_str_create(64), ast_free); const char *value; if (!(value = ast_json_string_get(ast_json_object_get(obj->blob, "uri")))) { return NULL; } ast_str_append(&contactstatus_event_string, 0, "URI: %s\r\n", value); if (!(value = ast_json_string_get(ast_json_object_get(obj->blob, "contact_status")))) { return NULL; } ast_str_append(&contactstatus_event_string, 0, "ContactStatus: %s\r\n", value); if (!(value = ast_json_string_get(ast_json_object_get(obj->blob, "aor")))) { return NULL; } ast_str_append(&contactstatus_event_string, 0, "AOR: %s\r\n", value); if (!(value = ast_json_string_get(ast_json_object_get(obj->blob, "endpoint_name")))) { return NULL; } ast_str_append(&contactstatus_event_string, 0, "EndpointName: %s\r\n", value); if ((value = ast_json_string_get(ast_json_object_get(obj->blob, "roundtrip_usec")))) { ast_str_append(&contactstatus_event_string, 0, "RoundtripUsec: %s\r\n", value); } return ast_manager_event_blob_create(EVENT_FLAG_SYSTEM, "ContactStatus", "%s", ast_str_buffer(contactstatus_event_string)); }
static struct ast_manager_event_blob *system_registry_to_ami(struct stasis_message *message) { struct ast_json_payload *payload = stasis_message_data(message); const char *channeltype; const char *username; const char *domain; const char *status; const char *cause; RAII_VAR(struct ast_str *, cause_string, ast_str_create(32), ast_free); if (!cause_string) { return NULL; } channeltype = ast_json_string_get(ast_json_object_get(payload->json, "channeltype")); username = ast_json_string_get(ast_json_object_get(payload->json, "username")); domain = ast_json_string_get(ast_json_object_get(payload->json, "domain")); status = ast_json_string_get(ast_json_object_get(payload->json, "status")); cause = ast_json_string_get(ast_json_object_get(payload->json, "cause")); if (!ast_strlen_zero(cause)) { ast_str_set(&cause_string, 0, "Cause: %s\r\n", cause); } return ast_manager_event_blob_create(EVENT_FLAG_SYSTEM, "Registry", "ChannelType: %s\r\n" "Username: %s\r\n" "Domain: %s\r\n" "Status: %s\r\n" "%s", channeltype, username, domain, status, ast_str_buffer(cause_string)); }
static struct ast_manager_event_blob *peerstatus_to_ami(struct stasis_message *msg) { struct ast_endpoint_blob *obj = stasis_message_data(msg); RAII_VAR(struct ast_str *, peerstatus_event_string, ast_str_create(64), ast_free); const char *value; /* peer_status is the only *required* thing */ if (!(value = ast_json_string_get(ast_json_object_get(obj->blob, "peer_status")))) { return NULL; } ast_str_append(&peerstatus_event_string, 0, "PeerStatus: %s\r\n", value); if ((value = ast_json_string_get(ast_json_object_get(obj->blob, "cause")))) { ast_str_append(&peerstatus_event_string, 0, "Cause: %s\r\n", value); } if ((value = ast_json_string_get(ast_json_object_get(obj->blob, "address")))) { ast_str_append(&peerstatus_event_string, 0, "Address: %s\r\n", value); } if ((value = ast_json_string_get(ast_json_object_get(obj->blob, "port")))) { ast_str_append(&peerstatus_event_string, 0, "Port: %s\r\n", value); } if ((value = ast_json_string_get(ast_json_object_get(obj->blob, "time")))) { ast_str_append(&peerstatus_event_string, 0, "Time: %s\r\n", value); } return ast_manager_event_blob_create(EVENT_FLAG_SYSTEM, "PeerStatus", "ChannelType: %s\r\n" "Peer: %s/%s\r\n" "%s", obj->snapshot->tech, obj->snapshot->tech, obj->snapshot->resource, ast_str_buffer(peerstatus_event_string)); }
static struct ast_manager_event_blob *varset_to_ami(struct stasis_message *msg) { RAII_VAR(struct ast_str *, channel_event_string, NULL, ast_free); struct ast_channel_blob *obj = stasis_message_data(msg); const char *variable = ast_json_string_get(ast_json_object_get(obj->blob, "variable")); const char *value = ast_json_string_get(ast_json_object_get(obj->blob, "value")); if (obj->snapshot) { channel_event_string = ast_manager_build_channel_state_string(obj->snapshot); } else { channel_event_string = ast_str_create(35); ast_str_set(&channel_event_string, 0, "Channel: none\r\n" "Uniqueid: none\r\n"); } if (!channel_event_string) { return NULL; } return ast_manager_event_blob_create(EVENT_FLAG_DIALPLAN, "VarSet", "%s" "Variable: %s\r\n" "Value: %s\r\n", ast_str_buffer(channel_event_string), variable, value); }
static struct ast_manager_event_blob *call_pickup_to_ami(struct stasis_message *message) { struct ast_multi_channel_blob *contents = stasis_message_data(message); struct ast_channel_snapshot *chan; struct ast_channel_snapshot *target; struct ast_manager_event_blob *res; RAII_VAR(struct ast_str *, channel_str, NULL, ast_free); RAII_VAR(struct ast_str *, target_str, NULL, ast_free); chan = ast_multi_channel_blob_get_channel(contents, "channel"); target = ast_multi_channel_blob_get_channel(contents, "target"); ast_assert(chan != NULL && target != NULL); if (!(channel_str = ast_manager_build_channel_state_string(chan))) { return NULL; } if (!(target_str = ast_manager_build_channel_state_string_prefix(target, "Target"))) { return NULL; } res = ast_manager_event_blob_create(EVENT_FLAG_CALL, "Pickup", "%s" "%s", ast_str_buffer(channel_str), ast_str_buffer(target_str)); return res; }
/*! \brief Handle bridge destruction */ static struct ast_manager_event_blob *bridge_destroy( struct ast_bridge_snapshot *old_snapshot, struct ast_bridge_snapshot *new_snapshot) { if (new_snapshot || !old_snapshot) { return NULL; } return ast_manager_event_blob_create( EVENT_FLAG_CALL, "BridgeDestroy", NO_EXTRA_FIELDS); }
static struct ast_manager_event_blob *cc_monitorfailed_to_ami(struct stasis_message *message) { struct ast_json_payload *payload = stasis_message_data(message); int core_id; const char *callee; core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id")); callee = ast_json_string_get(ast_json_object_get(payload->json, "callee")); return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCMonitorFailed", "CoreID: %d\r\n" "Callee: %s\r\n", core_id, callee); }
static struct ast_manager_event_blob *cc_recallcomplete_to_ami(struct stasis_message *message) { struct ast_json_payload *payload = stasis_message_data(message); int core_id; const char *caller; core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id")); caller = ast_json_string_get(ast_json_object_get(payload->json, "caller")); return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCRecallComplete", "CoreID: %d\r\n" "Caller: %s\r\n", core_id, caller); }
static struct ast_manager_event_blob *agent_login_to_ami(struct stasis_message *msg) { RAII_VAR(struct ast_str *, channel_string, NULL, ast_free); struct ast_channel_blob *obj = stasis_message_data(msg); const char *agent = ast_json_string_get(ast_json_object_get(obj->blob, "agent")); channel_string = ast_manager_build_channel_state_string(obj->snapshot); if (!channel_string) { return NULL; } return ast_manager_event_blob_create(EVENT_FLAG_AGENT, "AgentLogin", "%s" "Agent: %s\r\n", ast_str_buffer(channel_string), agent); }
static struct ast_manager_event_blob *cc_offertimerstart_to_ami(struct stasis_message *message) { struct ast_json_payload *payload = stasis_message_data(message); int core_id; const char *caller; unsigned int expires; core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id")); caller = ast_json_string_get(ast_json_object_get(payload->json, "caller")); expires = ast_json_integer_get(ast_json_object_get(payload->json, "expires")); return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCOfferTimerStart", "CoreID: %d\r\n" "Caller: %s\r\n" "Expires: %u\r\n", core_id, caller, expires); }
static struct ast_manager_event_blob *cc_available_to_ami(struct stasis_message *message) { struct ast_json_payload *payload = stasis_message_data(message); int core_id; const char *callee; const char *service; core_id = ast_json_integer_get(ast_json_object_get(payload->json, "core_id")); callee = ast_json_string_get(ast_json_object_get(payload->json, "callee")); service = ast_json_string_get(ast_json_object_get(payload->json, "service")); return ast_manager_event_blob_create(EVENT_FLAG_CC, "CCAvailable", "CoreID: %d\r\n" "Callee: %s\r\n" "Service: %s\r\n", core_id, callee, service); }
/* \brief Handle video source updates */ static struct ast_manager_event_blob *bridge_video_update( struct ast_bridge_snapshot *old_snapshot, struct ast_bridge_snapshot *new_snapshot) { if (!new_snapshot || !old_snapshot) { return NULL; } if (!strcmp(old_snapshot->video_source_id, new_snapshot->video_source_id)) { return NULL; } return ast_manager_event_blob_create( EVENT_FLAG_CALL, "BridgeVideoSourceUpdate", "BridgePreviousVideoSource: %s\r\n", old_snapshot->video_source_id); }
static struct ast_manager_event_blob *multi_user_event_to_ami( struct stasis_message *message) { RAII_VAR(struct ast_str *, object_string, NULL, ast_free); RAII_VAR(struct ast_str *, body, NULL, ast_free); struct ast_multi_object_blob *multi = stasis_message_data(message); const char *eventname; eventname = ast_json_string_get(ast_json_object_get(multi->blob, "eventname")); body = ast_manager_str_from_json_object(multi->blob, userevent_exclusion_cb); object_string = multi_object_blob_to_ami(multi); if (!object_string || !body) { return NULL; } return ast_manager_event_blob_create(EVENT_FLAG_USER, "UserEvent", "%s" "UserEvent: %s\r\n" "%s", ast_str_buffer(object_string), eventname, ast_str_buffer(body)); }
static struct ast_manager_event_blob *local_message_to_ami(struct stasis_message *message) { struct ast_multi_channel_blob *obj = stasis_message_data(message); struct ast_json *blob = ast_multi_channel_blob_get_json(obj); struct ast_channel_snapshot *local_snapshot_one; struct ast_channel_snapshot *local_snapshot_two; RAII_VAR(struct ast_str *, local_channel_one, NULL, ast_free); RAII_VAR(struct ast_str *, local_channel_two, NULL, ast_free); RAII_VAR(struct ast_str *, event_buffer, NULL, ast_free); const char *event; local_snapshot_one = ast_multi_channel_blob_get_channel(obj, "1"); local_snapshot_two = ast_multi_channel_blob_get_channel(obj, "2"); if (!local_snapshot_one || !local_snapshot_two) { return NULL; } event_buffer = ast_str_create(1024); local_channel_one = ast_manager_build_channel_state_string_prefix(local_snapshot_one, "LocalOne"); local_channel_two = ast_manager_build_channel_state_string_prefix(local_snapshot_two, "LocalTwo"); if (!event_buffer || !local_channel_one || !local_channel_two) { return NULL; } if (stasis_message_type(message) == ast_local_optimization_begin_type()) { struct ast_channel_snapshot *source_snapshot; RAII_VAR(struct ast_str *, source_str, NULL, ast_free); const char *dest_uniqueid; source_snapshot = ast_multi_channel_blob_get_channel(obj, "source"); if (source_snapshot) { source_str = ast_manager_build_channel_state_string_prefix(source_snapshot, "Source"); if (!source_str) { return NULL; } } dest_uniqueid = ast_json_object_get(blob, "dest") == AST_UNREAL_OWNER ? local_snapshot_one->uniqueid : local_snapshot_two->uniqueid; event = "LocalOptimizationBegin"; if (source_str) { ast_str_append(&event_buffer, 0, "%s", ast_str_buffer(source_str)); } ast_str_append(&event_buffer, 0, "DestUniqueId: %s\r\n", dest_uniqueid); ast_str_append(&event_buffer, 0, "Id: %u\r\n", (unsigned int) ast_json_integer_get(ast_json_object_get(blob, "id"))); } else if (stasis_message_type(message) == ast_local_optimization_end_type()) { event = "LocalOptimizationEnd"; ast_str_append(&event_buffer, 0, "Success: %s\r\n", ast_json_integer_get(ast_json_object_get(blob, "success")) ? "Yes" : "No"); ast_str_append(&event_buffer, 0, "Id: %u\r\n", (unsigned int) ast_json_integer_get(ast_json_object_get(blob, "id"))); } else if (stasis_message_type(message) == ast_local_bridge_type()) { event = "LocalBridge"; ast_str_append(&event_buffer, 0, "Context: %s\r\n", ast_json_string_get(ast_json_object_get(blob, "context"))); ast_str_append(&event_buffer, 0, "Exten: %s\r\n", ast_json_string_get(ast_json_object_get(blob, "exten"))); ast_str_append(&event_buffer, 0, "LocalOptimization: %s\r\n", ast_json_is_true(ast_json_object_get(blob, "can_optimize")) ? "Yes" : "No"); } else { return NULL; } return ast_manager_event_blob_create(EVENT_FLAG_CALL, event, "%s" "%s" "%s", ast_str_buffer(local_channel_one), ast_str_buffer(local_channel_two), ast_str_buffer(event_buffer)); }