Example #1
0
static void set_redirecting(struct ast_sip_session *session,
			    pjsip_fromto_hdr *from_info,
			    pjsip_name_addr *to_info)
{
	struct ast_party_redirecting data;
	struct ast_set_party_redirecting update;

	if (!session->channel) {
		return;
	}

	ast_party_redirecting_init(&data);
	memset(&update, 0, sizeof(update));

	if (from_info) {
		set_redirecting_id((pjsip_name_addr*)from_info->uri,
			&data.from, &update.from);
		set_redirecting_reason(from_info, &data.reason);
	} else {
		copy_redirecting_id(&data.from, &session->id, &update.from);
	}

	set_redirecting_id(to_info, &data.to, &update.to);

	ast_set_party_id_all(&update.priv_orig);
	ast_set_party_id_all(&update.priv_from);
	ast_set_party_id_all(&update.priv_to);
	++data.count;

	ast_channel_set_redirecting(session->channel, &data, &update);
	ast_party_redirecting_free(&data);
}
Example #2
0
/*!
 * \internal
 * \brief Queue a connected line update on a session's channel.
 * \param session The session whose channel should have the connected line update queued upon.
 * \param id The identification information to place in the connected line update
 */
static void queue_connected_line_update(struct ast_sip_session *session, const struct ast_party_id *id)
{
	struct ast_party_connected_line connected;
	struct ast_set_party_connected_line update_connected;

	ast_party_connected_line_init(&connected);
	ast_party_id_copy(&connected.id, id);

	memset(&update_connected, 0, sizeof(update_connected));
	update_connected.id.number = 1;
	update_connected.id.name = 1;

	ast_set_party_id_all(&update_connected.priv);
	connected.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
	ast_party_id_copy(&session->id, &connected.id);
	ast_channel_queue_connected_line_update(session->channel, &connected, &update_connected);

	ast_party_connected_line_free(&connected);
}