Beispiel #1
0
int ast_ari_bridges_play_parse_body(
	struct ast_json *body,
	struct ast_ari_bridges_play_args *args)
{
	struct ast_json *field;
	/* Parse query parameters out of it */
	field = ast_json_object_get(body, "media");
	if (field) {
		args->media = ast_json_string_get(field);
	}
	field = ast_json_object_get(body, "lang");
	if (field) {
		args->lang = ast_json_string_get(field);
	}
	field = ast_json_object_get(body, "offsetms");
	if (field) {
		args->offsetms = ast_json_integer_get(field);
	}
	field = ast_json_object_get(body, "skipms");
	if (field) {
		args->skipms = ast_json_integer_get(field);
	}
	field = ast_json_object_get(body, "playbackId");
	if (field) {
		args->playback_id = ast_json_string_get(field);
	}
	return 0;
}
Beispiel #2
0
static void security_event_stasis_cb(struct ast_json *json)
{
	struct ast_str *str;
	struct ast_json *event_type_json;
	enum ast_security_event_type event_type;

	event_type_json = ast_json_object_get(json, "SecurityEvent");
	event_type = ast_json_integer_get(event_type_json);

	ast_assert(event_type >= 0 && event_type < AST_SECURITY_EVENT_NUM_TYPES);

	if (!(str = ast_str_thread_get(&security_event_buf,
			SECURITY_EVENT_BUF_INIT_LEN))) {
		return;
	}

	ast_str_set(&str, 0, "SecurityEvent=\"%s\"",
			ast_security_event_get_name(event_type));

	append_json(&str, json,
			ast_security_event_get_required_ies(event_type), REQUIRED);
	append_json(&str, json,
			ast_security_event_get_optional_ies(event_type), NOT_REQUIRED);

	ast_log_dynamic_level(LOG_SECURITY, "%s\n", ast_str_buffer(str));
}
Beispiel #3
0
int ast_ari_mailboxes_update_parse_body(
	struct ast_json *body,
	struct ast_ari_mailboxes_update_args *args)
{
	struct ast_json *field;
	/* Parse query parameters out of it */
	field = ast_json_object_get(body, "oldMessages");
	if (field) {
		args->old_messages = ast_json_integer_get(field);
	}
	field = ast_json_object_get(body, "newMessages");
	if (field) {
		args->new_messages = ast_json_integer_get(field);
	}
	return 0;
}
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_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);
}
Beispiel #7
0
int ast_ari_bridges_record_parse_body(
	struct ast_json *body,
	struct ast_ari_bridges_record_args *args)
{
	struct ast_json *field;
	/* Parse query parameters out of it */
	field = ast_json_object_get(body, "name");
	if (field) {
		args->name = ast_json_string_get(field);
	}
	field = ast_json_object_get(body, "format");
	if (field) {
		args->format = ast_json_string_get(field);
	}
	field = ast_json_object_get(body, "maxDurationSeconds");
	if (field) {
		args->max_duration_seconds = ast_json_integer_get(field);
	}
	field = ast_json_object_get(body, "maxSilenceSeconds");
	if (field) {
		args->max_silence_seconds = ast_json_integer_get(field);
	}
	field = ast_json_object_get(body, "ifExists");
	if (field) {
		args->if_exists = ast_json_string_get(field);
	}
	field = ast_json_object_get(body, "beep");
	if (field) {
		args->beep = ast_json_is_true(field);
	}
	field = ast_json_object_get(body, "terminateOn");
	if (field) {
		args->terminate_on = ast_json_string_get(field);
	}
	return 0;
}
/**
 * Return the is nonstop dl handle
 * \param j_plan
 * \return
 */
bool is_nonstop_dl_handle(struct ast_json* j_plan)
{
	int ret;

	if(j_plan == NULL) {
		ast_log(LOG_WARNING, "Wrong input parameter.\n");
		return true;
	}

	ret = ast_json_integer_get(ast_json_object_get(j_plan, "dl_end_handle"));
	if(ret == E_PLAN_DL_END_NONSTOP) {
		return true;
	}
	return false;
}
static int check_range(intmax_t minval, intmax_t maxval, struct ast_json *json)
{
	intmax_t v;

	if (!check_type(json, AST_JSON_INTEGER)) {
		return 0;
	}

	v = ast_json_integer_get(json);

	if (v < minval || maxval < v) {
		ast_log(LOG_ERROR, "Value out of range. Expected %jd <= %jd <= %jd\n", minval, v, maxval);
		return 0;
	}
	return 1;
}
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);
}
Beispiel #11
0
static struct ast_manager_event_blob *agent_logoff_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"));
	long logintime = ast_json_integer_get(ast_json_object_get(obj->blob, "logintime"));

	channel_string = ast_manager_build_channel_state_string(obj->snapshot);
	if (!channel_string) {
		return NULL;
	}

	return ast_manager_event_blob_create(EVENT_FLAG_AGENT, "AgentLogoff",
		"%s"
		"Agent: %s\r\n"
		"Logintime: %ld\r\n",
		ast_str_buffer(channel_string), agent, logintime);
}
Beispiel #12
0
struct ast_json* create_dial_plan_info(struct ast_json* j_plan)
{
	struct ast_json* j_res;

	if(j_plan == NULL) {
		ast_log(LOG_WARNING, "Wrong input parameter.\n");
		return NULL;
	}

	j_res = ast_json_pack("{s:I, s:s}",
			"dial_timeout", 	ast_json_integer_get(ast_json_object_get(j_plan, "dial_timeout")),
			"plan_variables",	ast_json_string_get(ast_json_object_get(j_plan, "variables"))? : ""
			);

	if(ast_json_string_get(ast_json_object_get(j_plan, "caller_id")) != NULL) {
		ast_json_object_set(j_res, "callerid", ast_json_ref(ast_json_object_get(j_plan, "caller_id")));
	}

	return j_res;

}
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));
}