Skip to content

Commit a21057c

Browse files
committed
fixed:protocol judgment is incorrect for rtc
fixed:stun not reply message
1 parent bd43ef0 commit a21057c

File tree

3 files changed

+30
-8
lines changed

3 files changed

+30
-8
lines changed

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientWebRtc.cpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
// Purpose: WEBRTC拉流服务
1111
// History:
1212
*********************************************************************/
13-
int PullStream_ClientProtocol_Dtls(LPCXSTR lpszMSGBuffer, int nMSGLen)
13+
bool PullStream_ClientProtocol_Dtls(LPCXSTR lpszMSGBuffer, int nMSGLen)
1414
{
1515
// DTLS有可能以多种不同的记录层类型开头,这里检查它是否是handshake(0x16)
1616
return nMSGLen >= 13 && lpszMSGBuffer[0] == 0x16;
1717
}
18-
int PullStream_ClientProtocol_Stun(LPCXSTR lpszMSGBuffer, int nMSGLen)
18+
bool PullStream_ClientProtocol_Stun(LPCXSTR lpszMSGBuffer, int nMSGLen)
1919
{
2020
// STUN消息的类型字段(前两位为00)以及魔术cookie字段
21-
return nMSGLen >= 20 && (lpszMSGBuffer[0] & 0xC0) == 0x00 && lpszMSGBuffer[4] == 0x21 && lpszMSGBuffer[5] == 0x12 && lpszMSGBuffer[6] == 0xA4 && lpszMSGBuffer[7] == 0x42;
21+
return (nMSGLen >= 20) && ((lpszMSGBuffer[0] & 0xC0) == 0x00) && (lpszMSGBuffer[4] == 0x21) && (lpszMSGBuffer[5] == 0x12) && ((XBYTE)lpszMSGBuffer[6] == 0xA4) && (lpszMSGBuffer[7] == 0x42);
2222
}
2323
bool PullStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMsgBuffer, int nMsgLen)
2424
{
@@ -67,12 +67,19 @@ bool PullStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, L
6767
int nMSGLen = 0;
6868
XCHAR tszTMPBuffer[1024] = {};
6969
XCHAR tszMSGBuffer[1024] = {};
70+
XCHAR tszICEPass[MAX_PATH] = {};
71+
72+
ModuleSession_PullStream_RTCGet(tszUserStr, NULL, NULL, tszICEPass);
7073

7174
NatProtocol_StunNat_BuildAttr(tszTMPBuffer, &nTMPLen, RFCCOMPONENTS_NATCLIENT_PROTOCOL_STUN_ATTR_USERNAME, tszUserStr, _tcsxlen(tszUserStr));
7275
NatProtocol_StunNat_BuildMapAddress(tszTMPBuffer + nTMPLen, &nTMPLen, st_ServiceConfig.tszIPAddr, st_ServiceConfig.nRTCPort, true);
73-
//NatProtocol_StunNat_BuildMSGIntegrity(tszTMPBuffer + nTMPLen, &nTMPLen, tszTMPBuffer, nTMPLen, );
74-
NatProtocol_StunNat_Packet(tszMSGBuffer, &nMSGLen, (LPCXSTR)st_NatClient.byTokenStr, RFCCOMPONENTS_NATCLIENT_PROTOCOL_STUN_CLASS_FLAGS, RFCCOMPONENTS_NATCLIENT_PROTOCOL_STUN_ATTR_MAPPED_ADDRESS);
76+
//NatProtocol_StunNat_BuildMSGIntegrity(tszTMPBuffer + nTMPLen, &nTMPLen, tszTMPBuffer, nTMPLen, "123456789");
77+
NatProtocol_StunNat_Packet(tszMSGBuffer, &nTMPLen, (LPCXSTR)st_NatClient.byTokenStr, RFCCOMPONENTS_NATCLIENT_PROTOCOL_STUN_CLASS_FLAGS, RFCCOMPONENTS_NATCLIENT_PROTOCOL_STUN_ATTR_MAPPED_ADDRESS);
78+
//NatProtocol_StunNat_BuildFinger(tszMSGBuffer + nTMPLen, &nMSGLen, tszMSGBuffer, nTMPLen);
7579
BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListAttr, nAttrCount);
80+
81+
XEngine_Network_Send(lpszClientAddr, tszMSGBuffer, nMsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_RTC);
82+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("STUN客户端:%s,请求的STUN协议处理成功,请求的用户:%s"), lpszClientAddr, tszUserStr);
7683
}
7784
else
7885
{
@@ -121,7 +128,7 @@ bool PullStream_ClientWebRtc_SDKPacket(XNETHANDLE xhPacket, bool bVideo, XENGINE
121128
if (bVideo)
122129
{
123130
SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("mid"), _X("1"));
124-
SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("rtpmap"), _X("106 oH264/90000"));
131+
SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("rtpmap"), _X("106 H264/90000"));
125132
SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("rtcp-fb"), _X("106 transport-cc"));
126133
SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("rtcp-fb"), _X("106 nack"));
127134
SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("rtcp-fb"), _X("106 nack pli"));
@@ -221,14 +228,16 @@ bool PullStream_ClientWebRtc_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
221228
SDPProtocol_Packet_GetPacket(xhPacket, tszRVBuffer, &nRVLen);
222229
SDPProtocol_Packet_Destory(xhPacket);
223230

231+
XCHAR tszTokenStr[MAX_PATH] = {};
224232
XCHAR tszHDRStr[MAX_PATH] = {};
225233
XCHAR tszUserStr[MAX_PATH] = {};
226234

235+
BaseLib_OperatorHandle_CreateStr(tszTokenStr, 10);
227236
_xstprintf(tszUserStr, _X("%s:%s"), st_ServiceConfig.st_XPull.st_PullWebRtc.tszICEUser, tszICEUser);
228-
_xstprintf(tszHDRStr, _X("Location: /rtc/v1/whip/?action=delete&token=6150ecg33&app=live&stream=livestream.flv&session=%s\r\n"), tszUserStr);
237+
_xstprintf(tszHDRStr, _X("Location: /rtc/v1/whip/?action=delete&token=%s&app=live&stream=livestream.flv&session=%s\r\n"), tszTokenStr, tszUserStr);
229238

230239
ModuleSession_PullStream_Insert(tszUserStr, tszSMSAddr, tszPushAddr, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_RTC);
231-
ModuleSession_PullStream_RTCSet(tszUserStr, tszICEUser, tszICEPass, tszHMacStr);
240+
ModuleSession_PullStream_RTCSet(tszUserStr, tszTokenStr, tszICEUser, tszICEPass, tszHMacStr);
232241

233242
st_HDRParam.nHttpCode = 201;
234243
HttpProtocol_Server_SendMsgEx(xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen, tszHDRStr);

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Network.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,5 +316,17 @@ bool XEngine_Network_Send(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMs
316316
}
317317
#endif
318318
}
319+
else if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_RTC == enClientType)
320+
{
321+
int nPort = 0;
322+
XCHAR tszIPPort[128] = {};
323+
_tcsxcpy(tszIPPort, lpszClientAddr);
324+
BaseLib_OperatorIPAddr_SegAddr(tszIPPort, &nPort);
325+
if (!NetCore_UDPSelect_Send(xhRTCSocket, lpszMsgBuffer, nMsgLen, tszIPPort, nPort))
326+
{
327+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("RTC服务端:%s,发送数据失败,错误:%lX"), lpszClientAddr, NetCore_GetLastError());
328+
return false;
329+
}
330+
}
319331
return true;
320332
}

XEngine_Source/XEngine_UserProtocol.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ typedef enum
2222
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_JT1078 = 0x02,
2323
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_RTMP = 0x03,
2424
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_SRT = 0x04,
25+
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_RTC = 0x05,
2526
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_XSTREAM = 0x10,
2627
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_FLV = 0x11,
2728
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_RTMP = 0x12,

0 commit comments

Comments
 (0)