/** * @brief Send a ZRTP packet via RTP transport modifiers. * * ZRTP calls this method to send a ZRTP packet via the RTP session. * * @param[in] clientData Pointer to our ZrtpContext structure used to retrieve RTP session * @param[in] data Points to ZRTP message to send. * @param[in] length The length in bytes of the data * @return 0 on success */ static int32_t ms_zrtp_sendDataZRTP (void *clientData, const uint8_t* data, uint16_t length ){ MSZrtpContext *userData = (MSZrtpContext *)clientData; RtpSession *session = userData->stream_sessions->rtp_session; RtpTransport *rtpt=NULL; mblk_t *msg; ms_message("ZRTP Send packet type %.8s on rtp session [%p]", data+16, session); /* get RTP transport from session */ rtp_session_get_transports(session,&rtpt,NULL); /* generate message from raw data */ msg = rtp_session_create_packet_raw(data, length); meta_rtp_transport_modifier_inject_packet(rtpt, userData->rtp_modifier, msg , 0); freemsg(msg); return 0; }
/** * Send a DTLS packet via RTCP. * * DTLS calls this method to send a DTLS packet via the RTCP session. * * @param ctx * Pointer to the MSDtlsSrtpContext structure. * @param data * Points to DTLS message to send. * @param length * The length in bytes of the data * @return * length of data sent */ static int ms_dtls_srtp_rtcp_sendData (void *ctx, const unsigned char *data, size_t length ){ MSDtlsSrtpContext *context = (MSDtlsSrtpContext *)ctx; RtpSession *session = context->stream_sessions->rtp_session; RtpTransport *rtcpt=NULL; mblk_t *msg; int ret; ms_message("DTLS Send RTCP packet len %d sessions: %p rtp session %p", (int)length, context->stream_sessions, context->stream_sessions->rtp_session); /* get RTCP transport from session */ rtp_session_get_transports(session,NULL,&rtcpt); /* generate message from raw data */ msg = rtp_session_create_packet_raw((uint8_t *)data, length); ret = meta_rtp_transport_modifier_inject_packet(rtcpt, context->rtcp_modifier, msg , 0); freemsg(msg); return ret; }