Skip to content

Commit e31f1e7

Browse files
committed
added:rtp and rtcp protect and unprotect support
1 parent 648a19c commit e31f1e7

File tree

6 files changed

+261
-10
lines changed

6 files changed

+261
-10
lines changed

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -535,4 +535,80 @@ extern "C" bool ModuleHelp_SRTPCore_Destory();
535535
意思:是否成功
536536
备注:
537537
*********************************************************************/
538-
extern "C" bool ModuleHelp_SRTPCore_Create(LPCXBTR lpszKEYBuffer);
538+
extern "C" bool ModuleHelp_SRTPCore_Create(LPCXBTR lpszKEYBuffer);
539+
/********************************************************************
540+
函数名称:ModuleHelp_SRTPCore_RTPINProtect
541+
函数功能:RTP协议加密函数
542+
参数.一:ptszMSGBuffer
543+
In/Out:In/Out
544+
类型:字符指针
545+
可空:N
546+
意思:输入要加密的数据,输出加密后的数据
547+
参数.二:pInt_MSGLen
548+
In/Out:In/Out
549+
类型:整数型指针
550+
可空:N
551+
意思:输入要加密的大小,输出加密后的大小
552+
返回值
553+
类型:逻辑型
554+
意思:是否成功
555+
备注:
556+
*********************************************************************/
557+
extern "C" bool ModuleHelp_SRTPCore_RTPINProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen);
558+
/********************************************************************
559+
函数名称:ModuleHelp_SRTPCore_RTPUNProtect
560+
函数功能:RTP协议解密函数
561+
参数.一:ptszMSGBuffer
562+
In/Out:In/Out
563+
类型:字符指针
564+
可空:N
565+
意思:输入要解密的数据,输出解密后的数据
566+
参数.二:pInt_MSGLen
567+
In/Out:In/Out
568+
类型:整数型指针
569+
可空:N
570+
意思:输入要解密的大小,输出解密后的大小
571+
返回值
572+
类型:逻辑型
573+
意思:是否成功
574+
备注:
575+
*********************************************************************/
576+
extern "C" bool ModuleHelp_SRTPCore_RTPUNProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen);
577+
/********************************************************************
578+
函数名称:ModuleHelp_SRTPCore_RTCPINProtect
579+
函数功能:RTCP协议加密函数
580+
参数.一:ptszMSGBuffer
581+
In/Out:In/Out
582+
类型:字符指针
583+
可空:N
584+
意思:输入要加密的数据,输出加密后的数据
585+
参数.二:pInt_MSGLen
586+
In/Out:In/Out
587+
类型:整数型指针
588+
可空:N
589+
意思:输入要加密的大小,输出加密后的大小
590+
返回值
591+
类型:逻辑型
592+
意思:是否成功
593+
备注:
594+
*********************************************************************/
595+
extern "C" bool ModuleHelp_SRTPCore_RTCPINProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen);
596+
/********************************************************************
597+
函数名称:ModuleHelp_SRTPCore_RTCPUNProtect
598+
函数功能:RTCP协议解密函数
599+
参数.一:ptszMSGBuffer
600+
In/Out:In/Out
601+
类型:字符指针
602+
可空:N
603+
意思:输入要解密的数据,输出解密后的数据
604+
参数.二:pInt_MSGLen
605+
In/Out:In/Out
606+
类型:整数型指针
607+
可空:N
608+
意思:输入要解密的大小,输出解密后的大小
609+
返回值
610+
类型:逻辑型
611+
意思:是否成功
612+
备注:
613+
*********************************************************************/
614+
extern "C" bool ModuleHelp_SRTPCore_RTCPUNProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen);

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Error.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,10 @@
3535
//////////////////////////////////////////////////////////////////////////
3636
// 导出的RTMP错误
3737
//////////////////////////////////////////////////////////////////////////
38-
#define ERROR_MODULE_HELP_RTMP_NOTFOUND 0xD3001
38+
#define ERROR_MODULE_HELP_RTMP_NOTFOUND 0xD3001
39+
//////////////////////////////////////////////////////////////////////////
40+
// 导出的SRTP错误
41+
//////////////////////////////////////////////////////////////////////////
42+
#define ERROR_MODULE_HELP_SRTP_CREATE 0xD4001
43+
#define ERROR_MODULE_HELP_SRTP_INPROTECT 0xD4002
44+
#define ERROR_MODULE_HELP_SRTP_UNPROTECT 0xD4003

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SRtp/ModuleHelp_SRTPCore.cpp

Lines changed: 146 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,6 @@ bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_Create(LPCXBTR lpszKEYBuffer)
8787
std::string m_ServerKey = m_StrServerKey + m_StrServerSalt;
8888

8989
#if 1 == _XENGINE_STREAMMEDIA_BUILDSWITCH_RTC
90-
SRTPCORE_CLIENTINFO st_SRTPCore = {};
91-
srtp_policy_t st_SRTPPolicy = {};
92-
9390
srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80(&st_SRTPPolicy.rtp);
9491
srtp_crypto_policy_set_aes_cm_128_hmac_sha1_80(&st_SRTPPolicy.rtcp);
9592

@@ -100,21 +97,164 @@ bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_Create(LPCXBTR lpszKEYBuffer)
10097

10198
//初始化接受上下文
10299
st_SRTPPolicy.ssrc.type = ssrc_any_inbound;
103-
st_SRTPPolicy.key = (unsigned char*)m_ServerKey.c_str();
100+
st_SRTPPolicy.key = (unsigned char*)m_ClientKey.c_str();
104101

105102
srtp_err_status_t nRet = srtp_err_status_ok;
106103
if (srtp_err_status_ok != (nRet = srtp_create(&st_SRTPCore.pSt_SRTPRecvCtx, &st_SRTPPolicy)))
107104
{
105+
ModuleHelp_IsErrorOccur = true;
106+
ModuleHelp_dwErrorCode = ERROR_MODULE_HELP_SRTP_CREATE;
108107
return false;
109108
}
110-
111109
st_SRTPPolicy.ssrc.type = ssrc_any_outbound;
112-
st_SRTPPolicy.key = (unsigned char*)m_ClientKey.c_str();
110+
st_SRTPPolicy.key = (unsigned char*)m_ServerKey.c_str();
113111

114112
if (srtp_err_status_ok != (nRet = srtp_create(&st_SRTPCore.pSt_SRTPSendCtx, &st_SRTPPolicy)))
115113
{
114+
ModuleHelp_IsErrorOccur = true;
115+
ModuleHelp_dwErrorCode = ERROR_MODULE_HELP_SRTP_CREATE;
116116
return false;
117117
}
118+
#endif
119+
return true;
120+
}
121+
/********************************************************************
122+
函数名称:ModuleHelp_SRTPCore_RTPINProtect
123+
函数功能:RTP协议加密函数
124+
参数.一:ptszMSGBuffer
125+
In/Out:In/Out
126+
类型:字符指针
127+
可空:N
128+
意思:输入要加密的数据,输出加密后的数据
129+
参数.二:pInt_MSGLen
130+
In/Out:In/Out
131+
类型:整数型指针
132+
可空:N
133+
意思:输入要加密的大小,输出加密后的大小
134+
返回值
135+
类型:逻辑型
136+
意思:是否成功
137+
备注:
138+
*********************************************************************/
139+
bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_RTPINProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen)
140+
{
141+
ModuleHelp_IsErrorOccur = false;
142+
143+
#if 1 == _XENGINE_STREAMMEDIA_BUILDSWITCH_RTC
144+
145+
int nRet = srtp_protect(st_SRTPCore.pSt_SRTPRecvCtx, ptszMSGBuffer, pInt_MSGLen);
146+
if (srtp_err_status_ok != nRet)
147+
{
148+
ModuleHelp_IsErrorOccur = true;
149+
ModuleHelp_dwErrorCode = ERROR_MODULE_HELP_SRTP_INPROTECT;
150+
return false;
151+
}
152+
153+
#endif
154+
return true;
155+
}
156+
/********************************************************************
157+
函数名称:ModuleHelp_SRTPCore_RTPUNProtect
158+
函数功能:RTP协议解密函数
159+
参数.一:ptszMSGBuffer
160+
In/Out:In/Out
161+
类型:字符指针
162+
可空:N
163+
意思:输入要解密的数据,输出解密后的数据
164+
参数.二:pInt_MSGLen
165+
In/Out:In/Out
166+
类型:整数型指针
167+
可空:N
168+
意思:输入要解密的大小,输出解密后的大小
169+
返回值
170+
类型:逻辑型
171+
意思:是否成功
172+
备注:
173+
*********************************************************************/
174+
bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_RTPUNProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen)
175+
{
176+
ModuleHelp_IsErrorOccur = false;
177+
178+
#if 1 == _XENGINE_STREAMMEDIA_BUILDSWITCH_RTC
179+
180+
int nRet = srtp_unprotect(st_SRTPCore.pSt_SRTPRecvCtx, ptszMSGBuffer, pInt_MSGLen);
181+
if (srtp_err_status_ok != nRet)
182+
{
183+
ModuleHelp_IsErrorOccur = true;
184+
ModuleHelp_dwErrorCode = ERROR_MODULE_HELP_SRTP_UNPROTECT;
185+
return false;
186+
}
187+
188+
#endif
189+
return true;
190+
}
191+
/********************************************************************
192+
函数名称:ModuleHelp_SRTPCore_RTCPINProtect
193+
函数功能:RTCP协议加密函数
194+
参数.一:ptszMSGBuffer
195+
In/Out:In/Out
196+
类型:字符指针
197+
可空:N
198+
意思:输入要加密的数据,输出加密后的数据
199+
参数.二:pInt_MSGLen
200+
In/Out:In/Out
201+
类型:整数型指针
202+
可空:N
203+
意思:输入要加密的大小,输出加密后的大小
204+
返回值
205+
类型:逻辑型
206+
意思:是否成功
207+
备注:
208+
*********************************************************************/
209+
bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_RTCPINProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen)
210+
{
211+
ModuleHelp_IsErrorOccur = false;
212+
213+
#if 1 == _XENGINE_STREAMMEDIA_BUILDSWITCH_RTC
214+
215+
int nRet = srtp_protect_rtcp(st_SRTPCore.pSt_SRTPRecvCtx, ptszMSGBuffer, pInt_MSGLen);
216+
if (srtp_err_status_ok != nRet)
217+
{
218+
ModuleHelp_IsErrorOccur = true;
219+
ModuleHelp_dwErrorCode = ERROR_MODULE_HELP_SRTP_INPROTECT;
220+
return false;
221+
}
222+
223+
#endif
224+
return true;
225+
}
226+
/********************************************************************
227+
函数名称:ModuleHelp_SRTPCore_RTCPUNProtect
228+
函数功能:RTCP协议解密函数
229+
参数.一:ptszMSGBuffer
230+
In/Out:In/Out
231+
类型:字符指针
232+
可空:N
233+
意思:输入要解密的数据,输出解密后的数据
234+
参数.二:pInt_MSGLen
235+
In/Out:In/Out
236+
类型:整数型指针
237+
可空:N
238+
意思:输入要解密的大小,输出解密后的大小
239+
返回值
240+
类型:逻辑型
241+
意思:是否成功
242+
备注:
243+
*********************************************************************/
244+
bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_RTCPUNProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen)
245+
{
246+
ModuleHelp_IsErrorOccur = false;
247+
248+
#if 1 == _XENGINE_STREAMMEDIA_BUILDSWITCH_RTC
249+
250+
int nRet = srtp_unprotect_rtcp(st_SRTPCore.pSt_SRTPRecvCtx, ptszMSGBuffer, pInt_MSGLen);
251+
if (srtp_err_status_ok != nRet)
252+
{
253+
ModuleHelp_IsErrorOccur = true;
254+
ModuleHelp_dwErrorCode = ERROR_MODULE_HELP_SRTP_UNPROTECT;
255+
return false;
256+
}
257+
118258
#endif
119259
return true;
120260
}

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SRtp/ModuleHelp_SRTPCore.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
// Purpose: SRTP协议帮助处理模块
1111
// History:
1212
*********************************************************************/
13-
1413
typedef struct
1514
{
15+
#if 1 == _XENGINE_STREAMMEDIA_BUILDSWITCH_RTC
1616
srtp_t pSt_SRTPSendCtx;
1717
srtp_t pSt_SRTPRecvCtx;
18+
#endif
1819
}SRTPCORE_CLIENTINFO;
1920

2021
class CModuleHelp_SRTPCore
@@ -26,6 +27,14 @@ class CModuleHelp_SRTPCore
2627
bool ModuleHelp_SRTPCore_Init();
2728
bool ModuleHelp_SRTPCore_Destory();
2829
bool ModuleHelp_SRTPCore_Create(LPCXBTR lpszKEYBuffer);
30+
bool ModuleHelp_SRTPCore_RTPINProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen);
31+
bool ModuleHelp_SRTPCore_RTPUNProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen);
32+
bool ModuleHelp_SRTPCore_RTCPINProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen);
33+
bool ModuleHelp_SRTPCore_RTCPUNProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen);
2934
protected:
3035
private:
36+
#if 1 == _XENGINE_STREAMMEDIA_BUILDSWITCH_RTC
37+
srtp_policy_t st_SRTPPolicy = {};
38+
#endif
39+
SRTPCORE_CLIENTINFO st_SRTPCore = {};
3140
};

XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,8 @@ EXPORTS
3434

3535
ModuleHelp_SRTPCore_Init
3636
ModuleHelp_SRTPCore_Destory
37-
ModuleHelp_SRTPCore_Create
37+
ModuleHelp_SRTPCore_Create
38+
ModuleHelp_SRTPCore_RTPINProtect
39+
ModuleHelp_SRTPCore_RTPUNProtect
40+
ModuleHelp_SRTPCore_RTCPINProtect
41+
ModuleHelp_SRTPCore_RTCPUNProtect

XEngine_Source/XEngine_ModuleHelp/pch.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,20 @@ extern "C" bool ModuleHelp_SRTPCore_Destory()
160160
extern "C" bool ModuleHelp_SRTPCore_Create(LPCXBTR lpszKEYBuffer)
161161
{
162162
return m_HelpSRtp.ModuleHelp_SRTPCore_Create(lpszKEYBuffer);
163+
}
164+
extern "C" bool ModuleHelp_SRTPCore_RTPINProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen)
165+
{
166+
return m_HelpSRtp.ModuleHelp_SRTPCore_RTPINProtect(ptszMSGBuffer, pInt_MSGLen);
167+
}
168+
extern "C" bool ModuleHelp_SRTPCore_RTPUNProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen)
169+
{
170+
return m_HelpSRtp.ModuleHelp_SRTPCore_RTPUNProtect(ptszMSGBuffer, pInt_MSGLen);
171+
}
172+
extern "C" bool ModuleHelp_SRTPCore_RTCPINProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen)
173+
{
174+
return m_HelpSRtp.ModuleHelp_SRTPCore_RTCPINProtect(ptszMSGBuffer, pInt_MSGLen);
175+
}
176+
extern "C" bool ModuleHelp_SRTPCore_RTCPUNProtect(XCHAR* ptszMSGBuffer, int* pInt_MSGLen)
177+
{
178+
return m_HelpSRtp.ModuleHelp_SRTPCore_RTCPUNProtect(ptszMSGBuffer, pInt_MSGLen);
163179
}

0 commit comments

Comments
 (0)