@@ -44,15 +44,23 @@ void XCALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket,
4444{
4545 int nMsgLen = 4096 ;
4646 int nListCount = 0 ;
47- int nNetType = *( int *)lParam ;
47+ int nNetType = 0 ;
4848 __int64u nTimeWait = 0 ;
4949 XCHAR tszMsgBuffer[4096 ];
5050 SESSION_STORAGEINFO st_StorageInfo;
5151
5252 memset (tszMsgBuffer, ' \0 ' , sizeof (tszMsgBuffer));
5353 memset (&st_StorageInfo, ' \0 ' , sizeof (SESSION_STORAGEINFO));
5454
55- Session_DLStroage_GetInfo (lpszClientAddr, &st_StorageInfo);
55+ if (NULL != lParam)
56+ {
57+ nNetType = *(int *)lParam;
58+ }
59+ if (!Session_DLStroage_GetInfo (lpszClientAddr, &st_StorageInfo))
60+ {
61+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 下载客户端:%s,获取用户对应文件内容失败,错误:%lX" ), lpszClientAddr, Session_GetLastError ());
62+ return ;
63+ }
5664 if (st_ServiceCfg.st_XLimit .bLimitMode && st_StorageInfo.nLimit > 0 )
5765 {
5866 __int64u nLimitTime = 0 ;
@@ -104,7 +112,7 @@ void XCALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket,
104112 {
105113 NetCore_TCPXCore_CBSendEx (xhNetDownload, lpszClientAddr);
106114 }
107-
115+ free (lParam);
108116 Session_DLStroage_Delete (lpszClientAddr);
109117 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 下载客户端:%s,文件已经发送完毕,用户已经被移除发送列表" ), lpszClientAddr);
110118 }
@@ -116,18 +124,14 @@ void XCALLBACK XEngine_Download_CBSend(LPCXSTR lpszClientAddr, XSOCKET hSocket,
116124 }
117125 XEngine_Task_SendDownload (lpszClientAddr, tszMsgBuffer, nMsgLen, nNetType);
118126 }
119- }
120- else
121- {
122- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 下载客户端:%s,获取用户对应文件内容失败,错误:%lX" ), lpszClientAddr, Session_GetLastError ());
123- }
124- // 限速,如果没有单独限速,默认全局限速
125- if (st_ServiceCfg.st_XLimit .bLimitMode && (0 == st_StorageInfo.nLimit ))
126- {
127- Session_DLStroage_GetCount (&nListCount);
128- Algorithm_Calculation_SleepFlow (xhLimit, &nTimeWait, st_ServiceCfg.st_XLimit .nMaxDNLoader , nListCount, 4096 );
129- // WINDOWS下sleep_for精度可能不准
130- std::this_thread::sleep_for (std::chrono::microseconds (nTimeWait));
127+ // 限速,如果没有单独限速,默认全局限速
128+ if (st_ServiceCfg.st_XLimit .bLimitMode && (0 == st_StorageInfo.nLimit ))
129+ {
130+ Session_DLStroage_GetCount (&nListCount);
131+ Algorithm_Calculation_SleepFlow (xhLimit, &nTimeWait, st_ServiceCfg.st_XLimit .nMaxDNLoader , nListCount, 4096 );
132+ // WINDOWS下sleep_for精度可能不准
133+ std::this_thread::sleep_for (std::chrono::microseconds (nTimeWait));
134+ }
131135 }
132136}
133137
@@ -326,14 +330,19 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in
326330 }
327331 _xstprintf (tszFieldStr, _X (" FileHash: %s\r\n " ), tszHashStr);
328332 // 不能在send之前调用
333+ HttpProtocol_Server_SendMsgEx (xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , ullSize, tszFieldStr);
334+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, nNetType);
335+ // 发送
329336 bool bRet = false ;
337+ int * pInt_NetType = (int *)malloc (sizeof (int ));
338+ *pInt_NetType = nNetType;
330339 if (STORAGE_NETTYPE_HTTPWEBDAV == nNetType)
331340 {
332- bRet = NetCore_TCPXCore_CBSendEx (xhNetWebdav, lpszClientAddr, XEngine_Download_CBSend, &nNetType );
341+ bRet = NetCore_TCPXCore_CBSendEx (xhNetWebdav, lpszClientAddr, XEngine_Download_CBSend, pInt_NetType );
333342 }
334343 else
335344 {
336- bRet = NetCore_TCPXCore_CBSendEx (xhNetDownload, lpszClientAddr, XEngine_Download_CBSend, &nNetType );
345+ bRet = NetCore_TCPXCore_CBSendEx (xhNetDownload, lpszClientAddr, XEngine_Download_CBSend, pInt_NetType );
337346 }
338347 if (!bRet)
339348 {
@@ -345,8 +354,6 @@ bool XEngine_Task_HttpDownload(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, in
345354 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 下载客户端:%s,设置回调下载失败,文件:%s,错误:%lX" ), lpszClientAddr, tszFileDir, Session_GetLastError ());
346355 return false ;
347356 }
348- HttpProtocol_Server_SendMsgEx (xhDLHttp, tszSDBuffer, &nSDLen, &st_HDRParam, NULL , ullSize, tszFieldStr);
349- XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, nNetType);
350357 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" 下载客户端:%s,请求下载文件成功,文件名:%s,总大小:%llu,发送大小:%llu,范围:%d - %d" ), lpszClientAddr, tszFileDir, ullCount, ullSize, nPosStart, nPosEnd);
351358 return true ;
352359}
0 commit comments