Source

Target

Commits (3)
Showing with 47 additions and 32 deletions
......@@ -55,6 +55,11 @@ struct _OrtpEventData{
int authTagAlgo;
int sasAlgo;
} zrtp_info;
struct _SrtpInfo{
bool_t is_send; /**< stream direction this is applied too */
int source; /**< the source of the key material as defined in MSSrtpKeySource enum in ms_strp.h */
int suite; /**< the srtp crypto suite used as defined in MSCryptoSuite enum in ms_srtp.h */
} srtp_info;
OrtpSocketType socket_type;
uint32_t received_rtt_character;
bool_t congestion_detected;
......@@ -74,29 +79,34 @@ extern "C"{
ORTP_PUBLIC OrtpEvent * ortp_event_new(OrtpEventType tp);
ORTP_PUBLIC OrtpEventType ortp_event_get_type(const OrtpEvent *ev);
/* type is one of the following*/
#define ORTP_EVENT_STUN_PACKET_RECEIVED 1
#define ORTP_EVENT_PAYLOAD_TYPE_CHANGED 2
#define ORTP_EVENT_TELEPHONE_EVENT 3
#define ORTP_EVENT_RTCP_PACKET_RECEIVED 4 /**<when a RTCP packet is received from far end */
#define ORTP_EVENT_RTCP_PACKET_EMITTED 5 /**<fired when oRTP decides to send an automatic RTCP SR or RR */
#define ORTP_EVENT_ZRTP_ENCRYPTION_CHANGED 6
#define ORTP_EVENT_ZRTP_SAS_READY 7
#define ORTP_EVENT_ICE_CHECK_LIST_PROCESSING_FINISHED 8
#define ORTP_EVENT_ICE_SESSION_PROCESSING_FINISHED 9
#define ORTP_EVENT_ICE_GATHERING_FINISHED 10
#define ORTP_EVENT_ICE_LOSING_PAIRS_COMPLETED 11
#define ORTP_EVENT_ICE_RESTART_NEEDED 12
#define ORTP_EVENT_ICE_CHECK_LIST_DEFAULT_CANDIDATE_VERIFIED 23
#define ORTP_EVENT_DTLS_ENCRYPTION_CHANGED 13
#define ORTP_EVENT_RTT_CHARACTER_RECEIVED 15
#define ORTP_EVENT_CONGESTION_STATE_CHANGED 16
#define ORTP_EVENT_ZRTP_CACHE_MISMATCH 17
#define ORTP_EVENT_ZRTP_PEER_VERSION_OBSOLETE 18
#define ORTP_EVENT_NEW_VIDEO_BANDWIDTH_ESTIMATION_AVAILABLE 19
#define ORTP_EVENT_ICE_DEACTIVATION_NEEDED 20
#define ORTP_EVENT_JITTER_UPDATE_FOR_NACK 21
#define ORTP_EVENT_SOURCE_PACKET_RECONSTRUCTED 22
#define ORTP_EVENT_DO_NOT_USE_RESERVED 23 /* taken by ORTP_EVENT_ICE_CHECK_LIST_DEFAULT_CANDIDATE_VERIFIED */
#define ORTP_EVENT_STUN_PACKET_RECEIVED 1
#define ORTP_EVENT_PAYLOAD_TYPE_CHANGED 2
#define ORTP_EVENT_TELEPHONE_EVENT 3
#define ORTP_EVENT_RTCP_PACKET_RECEIVED 4 /**<when a RTCP packet is received from far end */
#define ORTP_EVENT_RTCP_PACKET_EMITTED 5 /**<fired when oRTP decides to send an automatic RTCP SR or RR */
#define ORTP_EVENT_ZRTP_ENCRYPTION_CHANGED 6
#define ORTP_EVENT_ZRTP_SAS_READY 7
#define ORTP_EVENT_ICE_CHECK_LIST_PROCESSING_FINISHED 8
#define ORTP_EVENT_ICE_SESSION_PROCESSING_FINISHED 9
#define ORTP_EVENT_ICE_GATHERING_FINISHED 10
#define ORTP_EVENT_ICE_LOSING_PAIRS_COMPLETED 11
#define ORTP_EVENT_ICE_RESTART_NEEDED 12
#define ORTP_EVENT_ICE_CHECK_LIST_DEFAULT_CANDIDATE_VERIFIED 25
#define ORTP_EVENT_DTLS_ENCRYPTION_CHANGED 13
#define ORTP_EVENT_RTT_CHARACTER_RECEIVED 15
#define ORTP_EVENT_CONGESTION_STATE_CHANGED 16
#define ORTP_EVENT_ZRTP_CACHE_MISMATCH 17
#define ORTP_EVENT_ZRTP_PEER_VERSION_OBSOLETE 18
#define ORTP_EVENT_ZRTP_PEER_REQUEST_GOCLEAR 19
#define ORTP_EVENT_ZRTP_PEER_ACK_GOCLEAR 20
#define ORTP_EVENT_NEW_VIDEO_BANDWIDTH_ESTIMATION_AVAILABLE 21
#define ORTP_EVENT_ICE_DEACTIVATION_NEEDED 22
#define ORTP_EVENT_JITTER_UPDATE_FOR_NACK 23
#define ORTP_EVENT_SOURCE_PACKET_RECONSTRUCTED 24
#define ORTP_EVENT_DO_NOT_USE_RESERVED 25 /* taken by ORTP_EVENT_ICE_CHECK_LIST_DEFAULT_CANDIDATE_VERIFIED */
#define ORTP_EVENT_SRTP_ENCRYPTION_CHANGED 26 /* srtp status changed - set key material source and crypto suite usesd in stream stats */
ORTP_PUBLIC OrtpEventData * ortp_event_get_data(OrtpEvent *ev);
ORTP_PUBLIC void ortp_event_destroy(OrtpEvent *ev);
......
......@@ -1422,9 +1422,10 @@ static void log_send_error(RtpSession *session, const char *type, mblk_t *m, str
static int rtp_session_rtp_sendto(RtpSession * session, mblk_t * m, struct sockaddr *destaddr, socklen_t destlen, bool_t is_aux){
int error;
RtpSession *send_session = session;
RtpBundle *bundle = session->bundle;
if (session->bundle && !session->is_primary) {
send_session = rtp_bundle_get_primary_session(session->bundle);
if (bundle && !session->is_primary) {
send_session = rtp_bundle_get_primary_session(bundle);
if (!send_session) {
ortp_error("RtpSession [%p] error get no primary session", session);
return -1;
......@@ -1482,11 +1483,14 @@ int rtp_session_rtp_send (RtpSession * session, mblk_t * m){
static int rtp_session_rtcp_sendto(RtpSession * session, mblk_t * m, struct sockaddr *destaddr, socklen_t destlen, bool_t is_aux){
int error=0;
RtpSession *send_session = session;
RtpBundle *bundle = session->bundle;
if (session->bundle && !session->is_primary) {
send_session = rtp_bundle_get_primary_session(session->bundle);
destaddr = (struct sockaddr *)&send_session->rtp.gs.rem_addr;
destlen = send_session->rtp.gs.rem_addrlen;
if (bundle && !session->is_primary) {
send_session = rtp_bundle_get_primary_session(bundle);
if (send_session){
destaddr = (struct sockaddr *)&send_session->rtp.gs.rem_addr;
destlen = send_session->rtp.gs.rem_addrlen;
}else send_session = session;
}
/* Even in RTCP mux, we send through the RTCP RtpTransport, which will itself take in charge to do the sending of the packet
* through the RTP endpoint*/
......@@ -2024,13 +2028,14 @@ void* rtp_session_recvfrom_async(void* obj) {
int rtp_session_rtp_recv (RtpSession * session, uint32_t user_ts) {
mblk_t *mp;
bool_t more_data = TRUE;
RtpBundle *bundle = session->bundle;
if ((session->rtp.gs.socket==(ortp_socket_t)-1) && !rtp_session_using_transport(session, rtp)) return -1; /*session has no sockets for the moment*/
do {
bool_t packet_is_rtp = TRUE;
if (!session->bundle || (session->bundle && session->is_primary)) {
if (!bundle || (bundle && session->is_primary)) {
#if defined(_WIN32) || defined(_WIN32_WCE)
ortp_mutex_lock(&session->rtp.winthread_lock);
if (!session->rtp.is_win_thread_running) {
......@@ -2057,7 +2062,7 @@ int rtp_session_rtp_recv (RtpSession * session, uint32_t user_ts) {
if (mp){
/* we got a packet from a primary transport. If bundle mode is on, it may be dispatched to another session, or
* may be re-qualified as RTCP (rtcp-mux) */
if (session->rtcp_mux || session->bundle){
if (session->rtcp_mux || bundle){
if (rtp_get_version(mp) == 2){
int pt = rtp_get_payload_type(mp);
if (pt >= 64 && pt <= 95){
......@@ -2066,7 +2071,7 @@ int rtp_session_rtp_recv (RtpSession * session, uint32_t user_ts) {
}
}
}
if (session->bundle && rtp_bundle_dispatch(session->bundle, packet_is_rtp, mp)){
if (bundle && rtp_bundle_dispatch(bundle, packet_is_rtp, mp)){
/* the packet has been dispatched to another session. */
mp = NULL;
}
......