@@ -12,8 +12,6 @@ XHTHREAD CALLBACK XEngine_UPLoader_HTTPThread(LPVOID lParam)
1212 {
1313 int nListCount = 0 ;
1414 RFCCOMPONENTS_HTTP_PKTCLIENT** ppSt_PKTClient;
15-
16-
1715 // 获取当前队列池中所有触发上传客户端
1816 RfcComponents_HttpServer_GetPoolEx (xhUPHttp, nThreadPos, &ppSt_PKTClient, &nListCount);
1917 for (int i = 0 ; i < nListCount; i++)
@@ -103,19 +101,23 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in
103101 int nPosStart = 0 ;
104102 int nPosEnd = 0 ;
105103 __int64x nPosCount = 0 ;
106-
104+ // 得到长度大小
107105 if (XEngine_APPHelp_RangeFile (lpszClientAddr, &nPosStart, &nPosEnd, &nPosCount, pptszListHdr, nHdrCount, STORAGE_NETTYPE_HTTPUPLOADER))
108106 {
109- // 是否启用了断点续传
110- if (!st_ServiceCfg. st_XStorage . bResumable )
107+ // 是新的还是断点续传的
108+ if (( 0 != nPosStart) || ( 0 != nPosEnd) )
111109 {
112- st_HDRParam.bIsClose = TRUE ;
113- st_HDRParam.nHttpCode = 416 ;
110+ // 是否启用了断点续传
111+ if (!st_ServiceCfg.st_XStorage .bResumable )
112+ {
113+ st_HDRParam.bIsClose = TRUE ;
114+ st_HDRParam.nHttpCode = 416 ;
114115
115- RfcComponents_HttpServer_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
116- XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
117- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T (" 上传客户端:%s,请求断点续传上传文件失败,服务端关闭了此功能,文件:%s,错误:%lX" ), lpszClientAddr, tszFileDir, Session_GetLastError ());
118- return FALSE ;
116+ RfcComponents_HttpServer_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
117+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
118+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T (" 上传客户端:%s,请求断点续传上传文件失败,服务端关闭了此功能,文件:%s,错误:%lX" ), lpszClientAddr, tszFileDir, Session_GetLastError ());
119+ return FALSE ;
120+ }
119121 }
120122 }
121123 RfcComponents_HttpServer_GetRecvModeEx (xhUPHttp, lpszClientAddr, &nRVMode, &nRVCount, &nHDSize);
@@ -168,59 +170,71 @@ BOOL XEngine_Task_HttpUPLoader(LPCTSTR lpszClientAddr, LPCTSTR lpszMsgBuffer, in
168170
169171 OPenSsl_Api_Digest (tszFileDir, tszHashStr, &nHashLen, TRUE , st_ServiceCfg.st_XStorage .nHashMode );
170172 BaseLib_OperatorString_StrToHex ((char *)tszHashStr, nHashLen, st_ProtocolFile.st_ProtocolFile .tszFileHash );
171- // 验证HASH值
172- if (XEngine_APPHelp_VerHash (lpszClientAddr, tszFileDir, st_ProtocolFile.st_ProtocolFile .tszFileHash , pptszListHdr, nHdrCount))
173+ // 处理结果
174+ if (!XEngine_APPHelp_VerHash (lpszClientAddr, tszFileDir, st_ProtocolFile.st_ProtocolFile .tszFileHash , pptszListHdr, nHdrCount))
175+ {
176+ st_HDRParam.bIsClose = TRUE ;
177+ st_HDRParam.nHttpCode = 403 ;
178+ RfcComponents_HttpServer_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
179+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
180+ return FALSE ;
181+ }
182+ BOOL bRet = TRUE ;
183+ if (0 != st_ServiceCfg.st_XSql .nSQLType )
173184 {
174- if (0 ! = st_ServiceCfg.st_XSql .nSQLType )
185+ if (1 = = st_ServiceCfg.st_XSql .nSQLType )
175186 {
176- BOOL bRet = FALSE ;
177- if (1 == st_ServiceCfg.st_XSql .nSQLType )
178- {
179- bRet = XStorage_MySql_FileInsert (&st_ProtocolFile);
180- }
181- else
182- {
183- bRet = XStorage_SQLite_FileInsert (&st_ProtocolFile);
184- }
185- if (bRet)
186- {
187- if (st_ServiceCfg.st_XProxy .st_XProxyPass .bUPPass )
188- {
189- int nPLen = MAX_PATH;
190- int nHttpCode = 0 ;
191- TCHAR tszProxyStr[MAX_PATH];
192- SESSION_STORAGEINFO st_StorageInfo;
193-
194- memset (tszProxyStr, ' \0 ' , MAX_PATH);
195- memset (&st_StorageInfo, ' \0 ' , sizeof (SESSION_STORAGEINFO));
196-
197- Session_UPStroage_GetInfo (lpszClientAddr, &st_StorageInfo);
198- Protocol_StoragePacket_UPDown (st_StorageInfo.tszFileDir , st_StorageInfo.tszClientAddr , st_StorageInfo.ullRWCount , tszProxyStr, &nPLen, st_ProtocolFile.st_ProtocolFile .tszFileHash );
199- APIHelp_HttpRequest_Post (st_ServiceCfg.st_XProxy .st_XProxyPass .tszUPPass , tszProxyStr, &nHttpCode);
200- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_NOTICE, _T (" 上传客户端:%s,请求完成通知返回值:%d,文件:%s,地址:%s" ), lpszClientAddr, nHttpCode, st_StorageInfo.tszFileDir , st_ServiceCfg.st_XProxy .st_XProxyPass .tszUPPass );
201- }
202- st_HDRParam.bIsClose = TRUE ;
203- st_HDRParam.nHttpCode = 200 ;
204- RfcComponents_HttpServer_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
205- XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
206- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T (" 上传客户端:%s,请求上传文件成功,文件名:%s,大小:%d" ), lpszClientAddr, tszFileDir, nRVCount);
207- }
208- else
209- {
210- st_HDRParam.bIsClose = TRUE ;
211- st_HDRParam.nHttpCode = 403 ;
212- RfcComponents_HttpServer_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
213- XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
214- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T (" 上传客户端:%s,请求上传文件失败,插入数据库失败:%s,错误:%lX" ), lpszClientAddr, tszFileDir, XStorageDB_GetLastError ());
215- }
187+ bRet = XStorage_MySql_FileInsert (&st_ProtocolFile);
216188 }
217189 else
190+ {
191+ bRet = XStorage_SQLite_FileInsert (&st_ProtocolFile);
192+ }
193+ if (bRet)
218194 {
219195 st_HDRParam.bIsClose = TRUE ;
220196 st_HDRParam.nHttpCode = 200 ;
221197 RfcComponents_HttpServer_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
222198 XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
223- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 上传客户端:%s,请求上传文件成功,文件名:%s,大小:%d,数据库没有启用,不插入数据库" ), lpszClientAddr, tszFileDir, nRVCount);
199+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T (" 上传客户端:%s,请求上传文件成功,文件名:%s,大小:%d" ), lpszClientAddr, tszFileDir, nRVCount);
200+ }
201+ else
202+ {
203+ st_HDRParam.bIsClose = TRUE ;
204+ st_HDRParam.nHttpCode = 403 ;
205+ RfcComponents_HttpServer_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
206+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
207+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T (" 上传客户端:%s,请求上传文件失败,插入数据库失败:%s,错误:%lX" ), lpszClientAddr, tszFileDir, XStorageDB_GetLastError ());
208+ }
209+ }
210+ else
211+ {
212+ st_HDRParam.bIsClose = TRUE ;
213+ st_HDRParam.nHttpCode = 200 ;
214+ RfcComponents_HttpServer_SendMsgEx (xhUPHttp, tszSDBuffer, &nSDLen, &st_HDRParam);
215+ XEngine_Net_SendMsg (lpszClientAddr, tszSDBuffer, nSDLen, STORAGE_NETTYPE_HTTPUPLOADER);
216+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _T (" 上传客户端:%s,请求上传文件成功,文件名:%s,大小:%d,数据库没有启用,不插入数据库" ), lpszClientAddr, tszFileDir, nRVCount);
217+ }
218+ // PASS代理
219+ if (st_ServiceCfg.st_XProxy .st_XProxyPass .bUPPass && bRet)
220+ {
221+ int nPLen = MAX_PATH;
222+ int nHttpCode = 0 ;
223+ TCHAR tszProxyStr[MAX_PATH];
224+ SESSION_STORAGEINFO st_StorageInfo;
225+
226+ memset (tszProxyStr, ' \0 ' , MAX_PATH);
227+ memset (&st_StorageInfo, ' \0 ' , sizeof (SESSION_STORAGEINFO));
228+
229+ Session_UPStroage_GetInfo (lpszClientAddr, &st_StorageInfo);
230+ Protocol_StoragePacket_UPDown (st_StorageInfo.tszFileDir , st_StorageInfo.tszClientAddr , st_StorageInfo.ullRWCount , tszProxyStr, &nPLen, st_ProtocolFile.st_ProtocolFile .tszFileHash );
231+ if (APIHelp_HttpRequest_Post (st_ServiceCfg.st_XProxy .st_XProxyPass .tszUPPass , tszProxyStr, &nHttpCode))
232+ {
233+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _T (" 上传客户端:%s,请求完成通知返回值:%d,文件:%s,地址:%s" ), lpszClientAddr, nHttpCode, st_StorageInfo.tszFileDir , st_ServiceCfg.st_XProxy .st_XProxyPass .tszUPPass );
234+ }
235+ else
236+ {
237+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _T (" 上传客户端:%s,请求完成通知失败,可能服务器不正确:文件:%s,地址:%s" ), lpszClientAddr, st_StorageInfo.tszFileDir , st_ServiceCfg.st_XProxy .st_XProxyPass .tszUPPass );
224238 }
225239 }
226240 }
0 commit comments