*** empty log message ***
This commit is contained in:
parent
a83cffe287
commit
a9448cb32e
@ -1,6 +1,6 @@
|
|||||||
0.7.3
|
0.7.3
|
||||||
=====
|
=====
|
||||||
27-Oct-2009: - Make local UA to local UA calls work better with UAs that
|
28-Oct-2009: - Make local UA to local UA calls work better with UAs that
|
||||||
blindly practice symmetric RTP and ignore the SDP media
|
blindly practice symmetric RTP and ignore the SDP media
|
||||||
description completely (did anyone shout X-Lite?)
|
description completely (did anyone shout X-Lite?)
|
||||||
|
|
||||||
|
|||||||
@ -78,7 +78,7 @@ static void sighdl_alm(int sig) {/* just wake up from select() */};
|
|||||||
static void *rtpproxy_main(void *i);
|
static void *rtpproxy_main(void *i);
|
||||||
static void rtpproxy_kill( void );
|
static void rtpproxy_kill( void );
|
||||||
static int rtp_recreate_fdset(void);
|
static int rtp_recreate_fdset(void);
|
||||||
static void match_socket (int rtp_proxytable_idx);
|
static int match_socket (int rtp_proxytable_idx);
|
||||||
static void error_handler (int rtp_proxytable_idx, int socket_type);
|
static void error_handler (int rtp_proxytable_idx, int socket_type);
|
||||||
|
|
||||||
|
|
||||||
@ -262,9 +262,9 @@ static void *rtpproxy_main(void *arg) {
|
|||||||
* have got some data in it (count > 0)
|
* have got some data in it (count > 0)
|
||||||
*/
|
*/
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
/* find the corresponding TX socket */
|
/* send only if I have the matching TX socket, otherwise throw away.
|
||||||
if (rtp_proxytable[i].rtp_con_tx_sock == 0) match_socket(i);
|
* this requires a full 2-way communication to be set up for each
|
||||||
|
* RTP stream... */
|
||||||
if (rtp_proxytable[i].rtp_con_tx_sock != 0) {
|
if (rtp_proxytable[i].rtp_con_tx_sock != 0) {
|
||||||
struct sockaddr_in dst_addr;
|
struct sockaddr_in dst_addr;
|
||||||
|
|
||||||
@ -314,9 +314,9 @@ static void *rtpproxy_main(void *arg) {
|
|||||||
* have got some data in it (count > 0)
|
* have got some data in it (count > 0)
|
||||||
*/
|
*/
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
/* find the corresponding TX socket */
|
/* send only if I have the matching TX socket, otherwise throw away.
|
||||||
if (rtp_proxytable[i].rtp_tx_sock == 0) match_socket(i);
|
* this requires a full 2-way communication to be set up for each
|
||||||
|
* RTP stream... */
|
||||||
if (rtp_proxytable[i].rtp_tx_sock != 0) {
|
if (rtp_proxytable[i].rtp_tx_sock != 0) {
|
||||||
struct sockaddr_in dst_addr;
|
struct sockaddr_in dst_addr;
|
||||||
#ifdef USE_DEJITTER
|
#ifdef USE_DEJITTER
|
||||||
@ -738,6 +738,7 @@ int rtp_relay_start_fwd (osip_call_id_t *callid, client_id_t client_id,
|
|||||||
memcpy(&rtp_proxytable[freeidx].client_id, &client_id, sizeof(client_id_t));
|
memcpy(&rtp_proxytable[freeidx].client_id, &client_id, sizeof(client_id_t));
|
||||||
|
|
||||||
rtp_proxytable[freeidx].direction = rtp_direction;
|
rtp_proxytable[freeidx].direction = rtp_direction;
|
||||||
|
rtp_proxytable[freeidx].call_direction = call_direction;
|
||||||
rtp_proxytable[freeidx].media_stream_no = media_stream_no;
|
rtp_proxytable[freeidx].media_stream_no = media_stream_no;
|
||||||
memcpy(&rtp_proxytable[freeidx].local_ipaddr,
|
memcpy(&rtp_proxytable[freeidx].local_ipaddr,
|
||||||
&local_ipaddr, sizeof(struct in_addr));
|
&local_ipaddr, sizeof(struct in_addr));
|
||||||
@ -770,6 +771,11 @@ int rtp_relay_start_fwd (osip_call_id_t *callid, client_id_t client_id,
|
|||||||
rtp_proxytable[freeidx].remote_ipaddr,
|
rtp_proxytable[freeidx].remote_ipaddr,
|
||||||
rtp_proxytable[freeidx].remote_port + 1);
|
rtp_proxytable[freeidx].remote_port + 1);
|
||||||
|
|
||||||
|
/* try to find the matching socket for return path. This has to be done for
|
||||||
|
* both directions, the new socket and if one found, it must link back. */
|
||||||
|
i=match_socket(freeidx);
|
||||||
|
if (i>=0 && i<RTPPROXY_SIZE) j=match_socket(i);
|
||||||
|
|
||||||
/* prepare FD set for next select operation */
|
/* prepare FD set for next select operation */
|
||||||
rtp_recreate_fdset();
|
rtp_recreate_fdset();
|
||||||
|
|
||||||
@ -1007,8 +1013,9 @@ static void rtpproxy_kill( void ) {
|
|||||||
* matches and cross connects two rtp_proxytable entries
|
* matches and cross connects two rtp_proxytable entries
|
||||||
* (corresponds to the two data directions of one RTP stream
|
* (corresponds to the two data directions of one RTP stream
|
||||||
* within one call).
|
* within one call).
|
||||||
|
* returns the matching rtp_proxytable index of -1 if not found.
|
||||||
*/
|
*/
|
||||||
static void match_socket (int rtp_proxytable_idx) {
|
static int match_socket (int rtp_proxytable_idx) {
|
||||||
int j;
|
int j;
|
||||||
int rtp_direction = rtp_proxytable[rtp_proxytable_idx].direction;
|
int rtp_direction = rtp_proxytable[rtp_proxytable_idx].direction;
|
||||||
int call_direction = rtp_proxytable[rtp_proxytable_idx].call_direction;
|
int call_direction = rtp_proxytable[rtp_proxytable_idx].call_direction;
|
||||||
@ -1058,6 +1065,8 @@ static void match_socket (int rtp_proxytable_idx) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (j >= RTPPROXY_SIZE) j= -1;
|
||||||
|
return j;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user