⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srtp.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
字号:
/*  The oRTP library is an RTP (Realtime Transport Protocol - rfc3550) stack.  Copyright (C) 2001  Simon MORLAT simon.morlat@linphone.org  This library is free software; you can redistribute it and/or  modify it under the terms of the GNU Lesser General Public  License as published by the Free Software Foundation; either  version 2.1 of the License, or (at your option) any later version.  This library is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  Lesser General Public License for more details.  You should have received a copy of the GNU Lesser General Public  License along with this library; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#if defined(WIN32) || defined(_WIN32_WCE)#include "ortp-config-win32.h"#else#include "ortp-config.h"#endif#include "ortp/ortp.h"#ifdef HAVE_SRTP#undef PACKAGE_NAME #undef PACKAGE_STRING#undef PACKAGE_TARNAME #undef PACKAGE_VERSION#include "ortp/srtp.h"#define SRTP_PAD_BYTES 64 /*?? */static int  srtp_sendto(RtpTransport *t, mblk_t *m, int flags, const struct sockaddr *to, socklen_t tolen){	srtp_t srtp=(srtp_t)t->data;	int slen;	err_status_t err;	/* enlarge the buffer for srtp to write its data */	msgpullup(m,msgdsize(m)+SRTP_PAD_BYTES);	slen=m->b_wptr-m->b_rptr;	err=srtp_protect(srtp,m->b_rptr,&slen);	if (err==err_status_ok){		return sendto(t->session->rtp.socket,m->b_rptr,slen,flags,to,tolen);	}	ortp_error("srtp_protect() failed");	return -1;}static int srtp_recvfrom(RtpTransport *t, mblk_t *m, int flags, struct sockaddr *from, socklen_t *fromlen){	srtp_t srtp=(srtp_t)t->data;	int err;	int slen;	err=recvfrom(t->session->rtp.socket,m->b_wptr,m->b_datap->db_lim-m->b_datap->db_base,flags,from,fromlen);	if (err>0){		/* keep NON-RTP data unencrypted */		rtp_header_t *rtp;		if (err>=RTP_FIXED_HEADER_SIZE)		{			rtp = (rtp_header_t*)m->b_wptr;			if (rtp->version!=2)			{				return err;			}		}		slen=err;		if (srtp_unprotect(srtp,m->b_wptr,&slen)==err_status_ok)			return slen;		else {			ortp_error("srtp_unprotect() failed");			return -1;		}	}	return err;}static int  srtcp_sendto(RtpTransport *t, mblk_t *m, int flags, const struct sockaddr *to, socklen_t tolen){	srtp_t srtp=(srtp_t)t->data;	int slen;	/* enlarge the buffer for srtp to write its data */	msgpullup(m,msgdsize(m)+SRTP_PAD_BYTES);	slen=m->b_wptr-m->b_rptr;	if (srtp_protect_rtcp(srtp,m->b_rptr,&slen)==err_status_ok){		return sendto(t->session->rtcp.socket,m->b_rptr,slen,flags,to,tolen);	}	ortp_error("srtp_protect_rtcp() failed");	return -1;}static int srtcp_recvfrom(RtpTransport *t, mblk_t *m, int flags, struct sockaddr *from, socklen_t *fromlen){	srtp_t srtp=(srtp_t)t->data;	int err;	int slen;	err=recvfrom(t->session->rtcp.socket,m->b_wptr,m->b_datap->db_lim-m->b_datap->db_base,flags,from,fromlen);	if (err>0){		slen=err;		if (srtp_unprotect_rtcp(srtp,m->b_wptr,&slen)==err_status_ok)			return slen;		else {			ortp_error("srtp_unprotect_rtcp() failed");			return -1;		}	}	return err;}ortp_socket_t srtp_getsocket(RtpTransport *t){  return t->session->rtp.socket;}ortp_socket_t srtcp_getsocket(RtpTransport *t){  return t->session->rtcp.socket;}/** * Creates a pair of Secure-RTP/Secure-RTCP RtpTransport's. * oRTP relies on libsrtp (see http://srtp.sf.net ) for secure RTP encryption. * This function creates a RtpTransport object to be used to the RtpSession using * rtp_session_set_transport(). * @srtp: the srtp_t session to be used * **/int srtp_transport_new(srtp_t srtp, RtpTransport **rtpt, RtpTransport **rtcpt ){	if (rtpt) {		(*rtpt)=ortp_new(RtpTransport,1);		(*rtpt)->data=srtp;		(*rtpt)->t_getsocket=srtp_getsocket;		(*rtpt)->t_sendto=srtp_sendto;		(*rtpt)->t_recvfrom=srtp_recvfrom;	}	if (rtcpt) {		(*rtcpt)=ortp_new(RtpTransport,1);		(*rtcpt)->data=srtp;		(*rtcpt)->t_getsocket=srtcp_getsocket;		(*rtcpt)->t_sendto=srtcp_sendto;		(*rtcpt)->t_recvfrom=srtcp_recvfrom;	}	return 0;}err_status_t ortp_srtp_init(void){	return srtp_init();}err_status_t ortp_srtp_create(srtp_t *session, const srtp_policy_t *policy){	int i;	i = srtp_create(session, policy);	return i;}err_status_t ortp_srtp_dealloc(srtp_t session){	return srtp_dealloc(session);}err_status_t ortp_srtp_add_stream(srtp_t session, const srtp_policy_t *policy){	return srtp_add_stream(session, policy);}bool_t ortp_srtp_supported(void){	return TRUE;}#elseint srtp_transport_new(void *i, RtpTransport **rtpt, RtpTransport **rtcpt ){	ortp_error("srtp_transport_new: oRTP has not been compiled with SRTP support.");	return -1;}bool_t ortp_srtp_supported(void){	return FALSE;}int ortp_srtp_create(void *i, const void *policy){	return -1;}int ortp_srtp_dealloc(void *session){	return -1;}int ortp_srtp_add_stream(void *session, const void *policy){	return -1;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -