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); }
/*! * \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); }