|
|
|
|
@ -209,24 +209,30 @@ static int create_rtp(struct ast_sip_session *session, struct ast_sip_session_me
|
|
|
|
|
session->endpoint->media.address);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
struct ast_sip_transport *transport =
|
|
|
|
|
ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "transport",
|
|
|
|
|
session->endpoint->transport);
|
|
|
|
|
|
|
|
|
|
if (transport && transport->state) {
|
|
|
|
|
char hoststr[PJ_INET6_ADDRSTRLEN];
|
|
|
|
|
|
|
|
|
|
pj_sockaddr_print(&transport->state->host, hoststr, sizeof(hoststr), 0);
|
|
|
|
|
if (ast_sockaddr_parse(&temp_media_address, hoststr, 0)) {
|
|
|
|
|
ast_debug(1, "Transport %s bound to %s: Using it for RTP media.\n",
|
|
|
|
|
session->endpoint->transport, hoststr);
|
|
|
|
|
media_address = &temp_media_address;
|
|
|
|
|
} else {
|
|
|
|
|
ast_debug(1, "Transport %s bound to %s: Invalid for RTP media.\n",
|
|
|
|
|
session->endpoint->transport, hoststr);
|
|
|
|
|
struct ast_sip_transport *transport;
|
|
|
|
|
|
|
|
|
|
transport = ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "transport",
|
|
|
|
|
session->endpoint->transport);
|
|
|
|
|
if (transport) {
|
|
|
|
|
struct ast_sip_transport_state *trans_state;
|
|
|
|
|
|
|
|
|
|
trans_state = ast_sip_get_transport_state(ast_sorcery_object_get_id(transport));
|
|
|
|
|
if (trans_state) {
|
|
|
|
|
char hoststr[PJ_INET6_ADDRSTRLEN];
|
|
|
|
|
|
|
|
|
|
pj_sockaddr_print(&trans_state->host, hoststr, sizeof(hoststr), 0);
|
|
|
|
|
if (ast_sockaddr_parse(&temp_media_address, hoststr, 0)) {
|
|
|
|
|
ast_debug(1, "Transport %s bound to %s: Using it for RTP media.\n",
|
|
|
|
|
session->endpoint->transport, hoststr);
|
|
|
|
|
media_address = &temp_media_address;
|
|
|
|
|
} else {
|
|
|
|
|
ast_debug(1, "Transport %s bound to %s: Invalid for RTP media.\n",
|
|
|
|
|
session->endpoint->transport, hoststr);
|
|
|
|
|
}
|
|
|
|
|
ao2_ref(trans_state, -1);
|
|
|
|
|
}
|
|
|
|
|
ao2_ref(transport, -1);
|
|
|
|
|
}
|
|
|
|
|
ao2_cleanup(transport);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!(session_media->rtp = ast_rtp_instance_new(session->endpoint->media.rtp.engine, sched, media_address, NULL))) {
|
|
|
|
|
|