From c857c51b0b5f57583bd3053f910825424ccfb5f7 Mon Sep 17 00:00:00 2001 From: aymeric Date: Mon, 1 Dec 2008 18:03:25 +0000 Subject: [PATCH] Use same remote address as the SSRC we are listening to. git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@192 3f6dc0c8-ddfe-455d-9043-3cd528dc4637 --- linphone/oRTP/src/rtpparse.c | 18 ++++++++++++++++++ linphone/oRTP/src/rtpsession_inet.c | 6 +++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/linphone/oRTP/src/rtpparse.c b/linphone/oRTP/src/rtpparse.c index 38d6ae06c..6d528b6d5 100644 --- a/linphone/oRTP/src/rtpparse.c +++ b/linphone/oRTP/src/rtpparse.c @@ -137,6 +137,16 @@ void rtp_session_rtp_parse(RtpSession *session, mblk_t *mp, uint32_t local_str_t session->inc_ssrc_candidate=rtp->ssrc; } if (session->inc_same_ssrc_count>SSRC_CHANGED_THRESHOLD){ + + /* store the sender rtp address to do symmetric RTP */ + if (!session->use_connect){ + if (session->rtp.socket>0 && session->symmetric_rtp){ + /* store the sender rtp address to do symmetric RTP */ + memcpy(&session->rtp.rem_addr,addr,addrlen); + session->rtp.rem_addrlen=addrlen; + } + } + session->rcv.ssrc=rtp->ssrc; rtp_signal_table_emit(&session->on_ssrc_changed); }else{ @@ -157,6 +167,14 @@ void rtp_session_rtp_parse(RtpSession *session, mblk_t *mp, uint32_t local_str_t }else{ session->ssrc_set=TRUE; session->rcv.ssrc=rtp->ssrc; + + if (!session->use_connect){ + if (session->rtp.socket>0 && session->symmetric_rtp){ + /* store the sender rtp address to do symmetric RTP */ + memcpy(&session->rtp.rem_addr,addr,addrlen); + session->rtp.rem_addrlen=addrlen; + } + } } /* update some statistics */ diff --git a/linphone/oRTP/src/rtpsession_inet.c b/linphone/oRTP/src/rtpsession_inet.c index cd8084d36..0a9927bff 100644 --- a/linphone/oRTP/src/rtpsession_inet.c +++ b/linphone/oRTP/src/rtpsession_inet.c @@ -901,10 +901,10 @@ rtp_session_rtp_recv (RtpSession * session, uint32_t user_ts) &addrlen); if (error > 0){ if (session->symmetric_rtp && !sock_connected){ - /* store the sender rtp address to do symmetric RTP */ - memcpy(&session->rtp.rem_addr,&remaddr,addrlen); - session->rtp.rem_addrlen=addrlen; if (session->use_connect){ + /* store the sender rtp address to do symmetric RTP */ + memcpy(&session->rtp.rem_addr,&remaddr,addrlen); + session->rtp.rem_addrlen=addrlen; if (try_connect(sockfd,(struct sockaddr*)&remaddr,addrlen)) session->flags|=RTP_SOCKET_CONNECTED; }