From 5d56423a56631b4375fe1ccb80e876d5492634c9 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 27 Jun 2024 10:51:25 +0800 Subject: [PATCH 01/46] delete:mistake tips on app --- .../XEngineAuthorizeApp.aps | Bin 106988 -> 125636 bytes .../XEngineAuthorizeApp.rc | Bin 38878 -> 38572 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index 3f2745f24017de2b69ae42e70fc25b607fa5f87d..fd8fca75f835f886c52b3660918e5a37080ec846 100644 GIT binary patch delta 11894 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 delta 1885 zcmb7@dq~q!6vxl`P3N#QA*;2PF0fd&=6XjEz3ib*TV|;}(6Tmz9?QZkBF!ucBUZoa zKt(7-1&JC364;y?k>v_ zZBx5aRN4zD@5#?xZ#Z^nn5BiW+B4IUgmKm~&p@Hle~Oo!#g zCP!?x2}}-4&SFS`bXWp;P+8Ko?ZnCx=Ub}8x}P^ZIrx3wwJb|kF2CIY4%o{57RZN% zV1rax#c?r|uv^GcWr@g{l4*j9yo(N?L&r^J@U^PBs_$$O?BT}=yJ0RQ^CKqO!zo+9 z%&9wJJA0+9elL*>N|rpD*?GL*uFD&IEC5jeylD$>T0JXtHXR!uBBzh~N z^&E+FI@W?|^yL{lffmdXPD(4D3^9S$5TkFybqI~6ZP=S=T)?X>gr!_yKA&4E$5vPY z%UD@C&f|DBWHUnz-55{hov2Zs;_5`bayk(H0&zWI*JKGl#qd6yZ8*bUz!iQ^Qx zQ?+`OZnV!%H@j5;N&KajLk=wBF&J#;9{AUZ&`1N3@Ioy@BL@oVq6f)K8=w9u4f3tR zT)AhH_J8*NLfyZ1rJQ6ikJL$K{vAp%t+VYuqqI$V=B_?cR0@^ z4l#EoD!#T_<3*)(M>lGXUZphOSgkQ>mcmNndYCR!N?Qb7tCY40I-rzx3VOzDg>}0G uU8!s>d*OwF&Hy=6zQb%h3GKoq#J}gGq^B#Gq^HDGPIPv$mt2} znRT$6H+^Byr`Yp#zbjV+83aWDW%C%)88U%nDnmSjBSQd#CqpohUBplZ6io)QTFO9r zbp3P~nj+_ Date: Mon, 1 Jul 2024 14:20:56 +0800 Subject: [PATCH 02/46] fixed:Problem with client login protocol parsing failure after setting up encrypted communication --- .../XEngine_AuthorizeService/Authorize_Net.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp index 80b86d1..56e5781 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Net.cpp @@ -164,15 +164,7 @@ bool XEngine_SendMsg(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, } else if (XENGINE_AUTH_APP_NETTYPE_TCP == nNetType) { - if (NULL == lpszPass) - { - NetCore_TCPXCore_SendEx(xhTCPSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen); - } - else - { - OPenSsl_XCrypto_Encoder(lpszMsgBuffer, &nMsgLen, (XBYTE*)ptszMsgBuffer, lpszPass); - NetCore_TCPXCore_SendEx(xhTCPSocket, lpszClientAddr, ptszMsgBuffer, nMsgLen); - } + NetCore_TCPXCore_SendEx(xhTCPSocket, lpszClientAddr, lpszMsgBuffer, nMsgLen); } else { -- Gitee From 04f17648cdaf288c78909ade8ddf405d1c919347 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 1 Jul 2024 14:42:06 +0800 Subject: [PATCH 03/46] improved:encrypted comm --- .../Authorize_APPClient.cpp | 179 +++++++++++++++--- 1 file changed, 153 insertions(+), 26 deletions(-) diff --git a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp index 841966b..9017d17 100644 --- a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp +++ b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp @@ -39,7 +39,7 @@ using namespace std; bool bRun = true; bool bLogin = true; bool bTimeOut = true; -bool bEncrypto = false; +bool bEncrypto = true; XNETHANDLE xhToken = 0; int nDYCode = 0; @@ -123,10 +123,27 @@ int AuthClient_Register() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_Register:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + if (bEncrypto) + { + XCHAR tszENBuffer[2048] = {}; + XCHAR tszDEBuffer[2048] = {}; + + nMsgLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); + APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); + printf("AuthClient_Register:\n%s\n", tszDEBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } + else + { + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + + printf("AuthClient_Register:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } return 0; } int AuthClient_Pay() @@ -142,10 +159,26 @@ int AuthClient_Pay() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_Pay:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + if (bEncrypto) + { + XCHAR tszENBuffer[2048] = {}; + XCHAR tszDEBuffer[2048] = {}; + + nMsgLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); + APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); + printf("AuthClient_Pay:\n%s\n", tszDEBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } + else + { + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_Pay:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } return 0; } int AuthClient_DynamicCode() @@ -155,15 +188,29 @@ int AuthClient_DynamicCode() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; APIClient_Http_Request(_X("GET"), lpszUrl, NULL, NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_DynamicCode:\n%s\n", ptszMsgBuffer); Json::Value st_JsonRoot; JSONCPP_STRING st_JsonError; Json::CharReaderBuilder st_ReaderBuilder; std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (bEncrypto) { - return 0; + XCHAR tszDEBuffer[2048] = {}; + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); + if (!pSt_JsonReader->parse(tszDEBuffer, tszDEBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + return 0; + } + printf("AuthClient_DynamicCode:\n%s\n", tszDEBuffer); + } + else + { + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + return 0; + } + printf("AuthClient_DynamicCode:\n%s\n", ptszMsgBuffer); } XCHAR tszDCodeStr[64]; XCHAR tszTokenStr[64]; @@ -242,17 +289,31 @@ int AuthClient_Notice() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - APIClient_Http_Request(_X("GET"), lpszUrl, NULL, NULL, &ptszMsgBuffer, &nMsgLen); - Json::Value st_JsonRoot; Json::Value st_JsonObject; JSONCPP_STRING st_JsonError; Json::CharReaderBuilder st_ReaderBuilder; std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + + APIClient_Http_Request(_X("GET"), lpszUrl, NULL, NULL, &ptszMsgBuffer, &nMsgLen); + if (bEncrypto) + { + XCHAR tszDEBuffer[2048] = {}; + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); + if (!pSt_JsonReader->parse(tszDEBuffer, tszDEBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + return 0; + } + } + else { - return 0; + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + return 0; + } } + for (unsigned int i = 0; i < st_JsonRoot["Array"].size(); i++) { XCHAR tszMsgBuffer[2048]; @@ -286,9 +347,26 @@ int AuthClient_GetPass() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_GetPass:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + + if (bEncrypto) + { + XCHAR tszENBuffer[2048] = {}; + XCHAR tszDEBuffer[2048] = {}; + + nMsgLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); + APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); + printf("AuthClient_GetPass:\n%s\n", tszDEBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } + else + { + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_GetPass:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } return 0; } @@ -304,9 +382,26 @@ int AuthClient_GetTime() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_GetTime:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + + if (bEncrypto) + { + XCHAR tszENBuffer[2048] = {}; + XCHAR tszDEBuffer[2048] = {}; + + nMsgLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); + APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); + printf("AuthClient_GetTime:\n%s\n", tszDEBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } + else + { + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_GetTime:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } return 0; } @@ -326,10 +421,26 @@ int AuthClient_Delete() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_Delete:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + if (bEncrypto) + { + XCHAR tszENBuffer[2048] = {}; + XCHAR tszDEBuffer[2048] = {}; + + nMsgLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); + APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); + printf("AuthClient_Delete:\n%s\n", tszDEBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } + else + { + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_Delete:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } return 0; } int AuthClient_Try() @@ -344,10 +455,26 @@ int AuthClient_Try() int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); - printf("AuthClient_Try:\n%s\n", ptszMsgBuffer); - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + if (bEncrypto) + { + XCHAR tszENBuffer[2048] = {}; + XCHAR tszDEBuffer[2048] = {}; + + nMsgLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENBuffer, lpszPass); + APIClient_Http_Request(_X("POST"), lpszUrl, tszENBuffer, NULL, &ptszMsgBuffer, &nMsgLen); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDEBuffer, lpszPass); + printf("AuthClient_Try:\n%s\n", tszDEBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } + else + { + APIClient_Http_Request(_X("POST"), lpszUrl, st_JsonRoot.toStyledString().c_str(), NULL, &ptszMsgBuffer, &nMsgLen); + printf("AuthClient_Try:\n%s\n", ptszMsgBuffer); + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + } return 0; } int main() -- Gitee From 6c070dc47d7d5a870935eeca1a1fa8e4f22f59ac Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 1 Jul 2024 14:51:16 +0800 Subject: [PATCH 04/46] added:encrypted support for client module --- .../AuthClient_Define.h | 14 ++- .../AuthClient_HTTPVer/AuthClient_HTTPVer.cpp | 99 +++++++++++++++---- .../AuthClient_HTTPVer/AuthClient_HTTPVer.h | 4 +- 3 files changed, 92 insertions(+), 25 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Client/AuthClient_Define.h b/XEngine_Source/AuthorizeModule_Client/AuthClient_Define.h index 60ae015..04a3515 100644 --- a/XEngine_Source/AuthorizeModule_Client/AuthClient_Define.h +++ b/XEngine_Source/AuthorizeModule_Client/AuthClient_Define.h @@ -104,6 +104,11 @@ extern "C" bool AuthClient_Connector_Login(LPCXSTR lpszUser, LPCXSTR lpszPass, i 类型:常量字符指针 可空:N 意思:服务器地址 + 参数.二:lpszPass + In/Out:In + 类型:常量字符指针 + 可空:Y + 意思:输入密码,如果服务端设置了密码客户端也必须使用加密通信 返回值 类型:逻辑型 意思:是否成功 @@ -123,16 +128,21 @@ extern "C" bool AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr); 类型:整数型指针 可空:N 意思:输出动态码 - 参数.二:pxhToken + 参数.三:pxhToken In/Out:Out 类型:整数型指针 可空:N 意思:输出绑定的句柄 - 参数.三:pInt_Timeout + 参数.四:pInt_Timeout In/Out:Out 类型:整数型指针 可空:Y 意思:输出动态码超时时间 + 参数.五:lpszPass + In/Out:In + 类型:常量字符指针 + 可空:Y + 意思:输入密码,如果服务端设置了密码客户端也必须使用加密通信 返回值 类型:逻辑型 意思:是否成功 diff --git a/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp b/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp index d571e21..5e8caed 100644 --- a/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp +++ b/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.cpp @@ -28,12 +28,17 @@ CAuthClient_HTTPVer::~CAuthClient_HTTPVer() 类型:常量字符指针 可空:N 意思:函数的API地址,需要输入完整的URL + 参数.二:lpszPass + In/Out:In + 类型:常量字符指针 + 可空:Y + 意思:输入密码,如果服务端设置了密码客户端也必须使用加密通信 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr) +bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr, LPCXSTR lpszPass /* = NULL */) { AuthClient_IsErrorOccur = true; @@ -44,6 +49,7 @@ bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr) return false; } #if (1 == _XAUTH_BUILD_SWITCH_CLIENT_HTTP) + int nHTTPCode = 0; XCHAR tszJsonStr[MAX_PATH] = {}; Json::Value st_JsonRoot; @@ -61,18 +67,45 @@ bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr) //请求 int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; - APIClient_Http_Request(_X("POST"), lpszURLAddr, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); - st_JsonRoot.clear(); - st_JsonObject.clear(); - //解析回复 - std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + + if (NULL != lpszPass) { - AuthClient_IsErrorOccur = true; - AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - return false; + XCHAR tszENCodec[2048] = {}; + XCHAR tszDECodec[2048] = {}; + + nMsgLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nMsgLen, (XBYTE*)tszENCodec, lpszPass); + APIClient_Http_Request(_X("POST"), lpszURLAddr, tszENCodec, &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDECodec, lpszPass); + st_JsonRoot.clear(); + st_JsonObject.clear(); + //解析回复 + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(tszDECodec, tszDECodec + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return false; + } + } + else + { + APIClient_Http_Request(_X("POST"), lpszURLAddr, st_JsonRoot.toStyledString().c_str(), &nHTTPCode, &ptszMsgBuffer, &nMsgLen); + st_JsonRoot.clear(); + st_JsonObject.clear(); + //解析回复 + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return false; + } } + if (0 != st_JsonRoot["code"].asInt()) { AuthClient_IsErrorOccur = true; @@ -97,22 +130,27 @@ bool CAuthClient_HTTPVer::AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr) 类型:整数型指针 可空:N 意思:输出动态码 - 参数.二:pxhToken + 参数.三:pxhToken In/Out:Out 类型:整数型指针 可空:N 意思:输出绑定的句柄 - 参数.三:pInt_Timeout + 参数.四:pInt_Timeout In/Out:Out 类型:整数型指针 可空:Y 意思:输出动态码超时时间 + 参数.五:lpszPass + In/Out:In + 类型:常量字符指针 + 可空:Y + 意思:输入密码,如果服务端设置了密码客户端也必须使用加密通信 返回值 类型:逻辑型 意思:是否成功 备注: *********************************************************************/ -bool CAuthClient_HTTPVer::AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout /* = NULL */) +bool CAuthClient_HTTPVer::AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout /* = NULL */, LPCXSTR lpszPass /* = NULL */) { AuthClient_IsErrorOccur = true; @@ -130,16 +168,35 @@ bool CAuthClient_HTTPVer::AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* //请求 int nMsgLen = 0; XCHAR* ptszMsgBuffer = NULL; + APIClient_Http_Request(_X("GET"), lpszURLAddr, NULL, &nHTTPCode, &ptszMsgBuffer, &nMsgLen); - //解析回复 - std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); - if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + if (NULL != lpszPass) { - AuthClient_IsErrorOccur = true; - AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); - return false; + XCHAR tszDECodec[2048] = {}; + OPenSsl_XCrypto_Decoder(ptszMsgBuffer, &nMsgLen, tszDECodec, lpszPass); + + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(tszDECodec, tszDECodec + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return false; + } } + else + { + //解析回复 + std::unique_ptr const pSt_JsonReader(st_ReaderBuilder.newCharReader()); + if (!pSt_JsonReader->parse(ptszMsgBuffer, ptszMsgBuffer + nMsgLen, &st_JsonRoot, &st_JsonError)) + { + AuthClient_IsErrorOccur = true; + AuthClient_dwErrorCode = ERROR_AUTHORIZE_MODULE_HTTPVER_PARSE; + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszMsgBuffer); + return false; + } + } + if (0 != st_JsonRoot["code"].asInt()) { AuthClient_IsErrorOccur = true; diff --git a/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.h b/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.h index 626b0db..aff8887 100644 --- a/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.h +++ b/XEngine_Source/AuthorizeModule_Client/AuthClient_HTTPVer/AuthClient_HTTPVer.h @@ -17,8 +17,8 @@ public: CAuthClient_HTTPVer(); ~CAuthClient_HTTPVer(); public: - bool AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr); - bool AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout = NULL); + bool AuthClient_HTTPVer_TryRequest(LPCXSTR lpszURLAddr, LPCXSTR lpszPass = NULL); + bool AuthClient_HTTPVer_GetDCode(LPCXSTR lpszURLAddr, int* pInt_DYCode, XNETHANDLE* pxhToken, int* pInt_Timeout = NULL, LPCXSTR lpszPass = NULL); protected: private: }; \ No newline at end of file -- Gitee From 99ab9451b6333542d4a8154bd3ba796e6d6471a3 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 5 Jul 2024 14:05:56 +0800 Subject: [PATCH 05/46] update:readme --- README.en.md | 10 ++++++---- README.md | 12 +++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/README.en.md b/README.en.md index 32076aa..3ac2be3 100644 --- a/README.en.md +++ b/README.en.md @@ -19,12 +19,17 @@ Stable and reliable: based on C/C++, the core framework has been verified for 10 Flexible authentication: supports third-party authentication and authorization, supports distributed authentication and authorization, and can use its own user password system more functions: support various types of authorization +#### Choose the Right One +Most products on the market either charge fees, update slowly, or lack complete functionality. They also lack technical support. With our product, you don't need to worry about these issues at all. +Our product is completely free and offers both free and paid technical support. It is rich in features and allows for custom development. You can start using our product now and experience the best and open-source time service available. + #### Version difference V3 version, the protocol is basically reimplemented. It is no longer compatible with the V2 protocol. V3 is basically changed to the HTTP interface for management. The compatibility is better. Please check the documentation for more. V2 Version can be update to V3,V3 DB Compatible with V2 Databse ## Software feature -A simple and high-performance cross-platform network authentication and authorization server developed and implemented based on XEngine +Our feature list not only includes the following but also has many features in development. +You can refer to this webpage to learn about the features we plan to support in the future: https://github.com/libxengine/XEngine_Authorize/issues feature list: 1. support http.websocket protocols 2. Support Encrypto communication @@ -127,9 +132,6 @@ Database update Use Navicat and other database software to open the judgment tab After modification, directly copy the database to the new version to overwrite, and modify your configuration file 3.11->3.12 A new time field has been added to the user table, please refer to the SQL file -## Authorization instructions -Use this software must be open source and indicate the source,If you want closed source and commercial,Then need to be authorized by the author. - ## Follow us If you think this software is helpful to you, please give us a START and wechat qr scan to follow us diff --git a/README.md b/README.md index 042a95e..01258e5 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,17 @@ c c++network Authorize service 灵活验证:支持第三方验证授权,支持分布式验证授权,可以使用自己的用户密码系统 功能丰富:支持各种类型授权,支持时间和次数等等模式 +#### 选择对的 +目前市面上的大多数产品不是收费就是产品更新慢,或者功能不全。没有技术支持。使用我们的产品你完全不需要有这方便的担心。 +我们的产品完全免费,提供免费技术支持和收费技术支持。功能丰富多样,还可以自主开发。现在,你就可以使用我们的产品并且体验目前最好的并且开源的授时服务. + #### 版本区别 V3版本后协议基本重新实现,不在兼容V2协议,V3基本改为HTTP接口进行管理.兼容性更好.请查看文档获取更多. V2可以直接升级到V3版本,因为数据库并没有修改,直接替换程序即可.数据库兼容V2版本 -## 软件特性 -基于XEngine开发并实现的一套简洁高性能跨平台网络验证授权服务器 +## 软件特性 +我们的功能列表不仅包括下面的,还有很多待开发的功能正在计划中。 +你可以参考这个网页了解我们未来支持的功能列表:https://github.com/libxengine/XEngine_Authorize/issues 软件特性: 1. 支持TCP,WEBSOCKET协议 2. 支持加密通信 @@ -141,9 +146,6 @@ V3版本为全新版本,为了适应过多环境要求开发 ## 视频教程 你也可以观看视频教程来了解我们的代码框架情况:https://www.bilibili.com/video/BV1iF4m177aG -## 授权说明 -使用此软件必须开源并且注明出处,如果想闭源商用,那么需要经过作者授权. - ## 关注我们 如果你觉得这个软件对你有帮助,请你给我们一个START吧 也可以通过微信关注我们 -- Gitee From c9011ba2e7d0c36c43a3ede9f282c955005a7066 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 5 Jul 2024 14:11:11 +0800 Subject: [PATCH 06/46] update:docment --- XEngine_Docment/Docment_en.docx | Bin 144782 -> 144805 bytes XEngine_Docment/Docment_zh.docx | Bin 147903 -> 147848 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index e5e5cb272438a8932715aa2963504848eee61122..92fa662855c02eadb5124ef218e3e99ab79939e3 100644 GIT binary patch delta 112557 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

sH0^LI&aDPt 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 z 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

uYO`vwYX;cL5MreS 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 -- Gitee From 4cedc7e49e4058e8f1e7ca99648132a7eec685fb Mon Sep 17 00:00:00 2001 From: Tina0595 <2825103297@qq.com> Date: Sat, 6 Jul 2024 21:23:41 +0800 Subject: [PATCH 07/46] mysql --- .../XEngine_Config/XEngine_Config.json | 11 +- .../AuthorizeModule_Configure/Config_Define.h | 18 +- .../ModuleConfigure_Json.cpp | 15 +- .../AuthorizeModule_Database.def | 100 +- .../AuthorizeModule_Database.vcxproj | 6 +- .../AuthorizeModule_Database.vcxproj.filters | 26 +- .../DBModule_MySQL/DBModule_MySQL.cpp | 2015 +++++++++++++++++ .../DBModule_MySQL/DBModule_MySQL.h | 61 + .../DBModule_SQLite.cpp} | 144 +- .../DBModule_SQLite.h} | 64 +- .../Database_Define.h | 601 ++++- .../AuthorizeModule_Database/Makefile | 8 +- .../AuthorizeModule_Database/pch.cpp | 234 +- .../AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp | 11 +- .../AuthorizeHTTP_Announcement.cpp | 36 +- .../AuthorizeHTTP_Banned.cpp | 36 +- .../AuthorizeHTTP_Client.cpp | 31 +- .../AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp | 29 +- .../AuthorizeHTTP_Serial.cpp | 51 +- .../AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp | 27 +- .../AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp | 94 +- .../XEngine_AuthorizeService/Authorize_Hdr.h | 2 + .../Authorize_HttpTask.cpp | 14 +- .../Authorize_TCPTask.cpp | 41 +- .../Authorize_Task.cpp | 9 +- .../XEngine_AuthorizeService | Bin 0 -> 811704 bytes .../XEngine_AuthorizeService.cpp | 42 +- 27 files changed, 3404 insertions(+), 322 deletions(-) create mode 100644 XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp create mode 100644 XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h rename XEngine_Source/AuthorizeModule_Database/{Database_SQLite/Database_SQLite.cpp => DBModule_SQLite/DBModule_SQLite.cpp} (94%) rename XEngine_Source/AuthorizeModule_Database/{Database_SQLite/Database_SQLite.h => DBModule_SQLite/DBModule_SQLite.h} (55%) create mode 100644 XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 977c10c..4d95f24 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -40,8 +40,13 @@ "bEnable":false, "nPass":123123 }, - "XSQL":{ - "tszSQLFile":"./XEngine_DataBase/SQL_User.db" + "XSql":{ + "nSQLType":1, + "SQLAddr": "127.0.0.1", + "SQLPort": 3306, + "SQLUser": "root", + "SQLPass": "123123", + "SQLFile":"./XEngine_DataBase/SQL_User.db" }, "XLog":{ "tszLogFile":"./XEngine_XLog/XEngine_Authorize.log", @@ -54,4 +59,4 @@ "tszServiceName":"XEngine_Authorize", "tszAPIUrl":"http://app.xyry.org:5501/api?function=machine" } -} \ No newline at end of file +} diff --git a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h index fa980f6..687982a 100644 --- a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h +++ b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h @@ -15,6 +15,8 @@ ////////////////////////////////////////////////////////////////////////// typedef struct { + XCHAR tszIPAddr[128]; + XCHAR tszTopic[128]; int nTCPPort; //TCP端口 int nWSPort; //WEBSOCKET端口 int nHTTPPort; //HTTP管理端口 @@ -64,8 +66,20 @@ typedef struct int nPassword; //密码 }st_XCrypto; struct - { - XCHAR tszSQLite[MAX_PATH]; //数据库文件位置 + { + int nDBType; + struct + { + XCHAR tszSQLAddr[128]; //数据库地址 + XCHAR tszSQLUser[128]; //数据库账号 + XCHAR tszSQLPass[128]; //数据库密码 + XCHAR tszDBName[128]; //数据库名 + int nSQLPort; //数据库端口 + }st_MYSQL; + struct + { + XCHAR tszSQLite[MAX_PATH]; //数据库文件位置 + }st_SQLite; }st_XSql; struct { diff --git a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 9eff1c2..33d79e2 100644 --- a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -147,14 +147,23 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE pSt_ServerConfig->st_XCrypto.bEnable = st_JsonXCrypto["bEnable"].asBool(); pSt_ServerConfig->st_XCrypto.nPassword = st_JsonXCrypto["nPass"].asInt(); //数据库配置 - if (st_JsonRoot["XSQL"].empty() || (1 != st_JsonRoot["XSQL"].size())) + printf("%d\n", st_JsonRoot["XSql"].size()); + if (st_JsonRoot["XSql"].empty() || (6 != st_JsonRoot["XSql"].size())) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_AUTHORIZE_MODULE_CONFIGURE_XSQL; return false; } - Json::Value st_JsonXSQL = st_JsonRoot["XSQL"]; - _tcsxcpy(pSt_ServerConfig->st_XSql.tszSQLite, st_JsonXSQL["tszSQLFile"].asCString()); + Json::Value st_JsonXSql = st_JsonRoot["XSql"]; + + pSt_ServerConfig->st_XSql.nDBType = st_JsonXSql["nSQLType"].asInt(); + + _tcsxcpy(pSt_ServerConfig->st_XSql.st_SQLite.tszSQLite, st_JsonXSql["SQLFile"].asCString()); + + pSt_ServerConfig->st_XSql.st_MYSQL.nSQLPort = st_JsonXSql["SQLPort"].asInt(); + _tcsxcpy(pSt_ServerConfig->st_XSql.st_MYSQL.tszSQLAddr, st_JsonXSql["SQLAddr"].asCString()); + _tcsxcpy(pSt_ServerConfig->st_XSql.st_MYSQL.tszSQLUser, st_JsonXSql["SQLUser"].asCString()); + _tcsxcpy(pSt_ServerConfig->st_XSql.st_MYSQL.tszSQLPass, st_JsonXSql["SQLPass"].asCString()); //日志配置 if (st_JsonRoot["XLog"].empty() || (4 != st_JsonRoot["XLog"].size())) { diff --git a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def index eed0328..ca0bf35 100644 --- a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def +++ b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.def @@ -3,36 +3,70 @@ LIBRARY EXPORTS DBModule_GetLastError - Database_SQLite_Init - Database_SQLite_Destroy - - Database_SQLite_UserDelete - Database_SQLite_UserRegister - Database_SQLite_UserQuery - Database_SQLite_UserPay - Database_SQLite_UserLeave - Database_SQLite_UserSet - Database_SQLite_UserList - - Database_SQLite_SerialInsert - Database_SQLite_SerialDelete - Database_SQLite_SerialQuery - Database_SQLite_SerialQueryAll - Database_SQLite_SerialPush - - Database_SQLite_TryInsert - Database_SQLite_TryQuery - Database_SQLite_TryDelete - Database_SQLite_TryClear - Database_SQLite_TrySet - Database_SQLite_TryList - - Database_SQLite_BannedInsert - Database_SQLite_BannedDelete - Database_SQLite_BannedList - Database_SQLite_BannedExist - Database_SQLite_BannedUPDate - - Database_SQLite_AnnouncementInsert - Database_SQLite_AnnouncementDelete - Database_SQLite_AnnouncementList \ No newline at end of file + DBModule_SQLite_Init + DBModule_SQLite_Destroy + + DBModule_SQLite_UserDelete + DBModule_SQLite_UserRegister + DBModule_SQLite_UserQuery + DBModule_SQLite_UserPay + DBModule_SQLite_UserLeave + DBModule_SQLite_UserSet + DBModule_SQLite_UserList + + DBModule_SQLite_SerialInsert + DBModule_SQLite_SerialDelete + DBModule_SQLite_SerialQuery + DBModule_SQLite_SerialQueryAll + DBModule_SQLite_SerialPush + + DBModule_SQLite_TryInsert + DBModule_SQLite_TryQuery + DBModule_SQLite_TryDelete + DBModule_SQLite_TryClear + DBModule_SQLite_TrySet + DBModule_SQLite_TryList + + DBModule_SQLite_BannedInsert + DBModule_SQLite_BannedDelete + DBModule_SQLite_BannedList + DBModule_SQLite_BannedExist + DBModule_SQLite_BannedUPDate + + DBModule_SQLite_AnnouncementInsert + DBModule_SQLite_AnnouncementDelete + DBModule_SQLite_AnnouncementList + + DBModule_MySQL_Init + DBModule_MySQL_Destroy + + DBModule_MySQL_UserDelete + DBModule_MySQL_UserRegister + DBModule_MySQL_UserQuery + DBModule_MySQL_UserPay + DBModule_MySQL_UserLeave + DBModule_MySQL_UserSet + DBModule_MySQL_UserList + + DBModule_MySQL_SerialInsert + DBModule_MySQL_SerialDelete + DBModule_MySQL_SerialQuery + DBModule_MySQL_SerialQueryAll + DBModule_MySQL_SerialPush + + DBModule_MySQL_TryInsert + DBModule_MySQL_TryQuery + DBModule_MySQL_TryDelete + DBModule_MySQL_TryClear + DBModule_MySQL_TrySet + DBModule_MySQL_TryList + + DBModule_MySQL_BannedInsert + DBModule_MySQL_BannedDelete + DBModule_MySQL_BannedList + DBModule_MySQL_BannedExist + DBModule_MySQL_BannedUPDate + + DBModule_MySQL_AnnouncementInsert + DBModule_MySQL_AnnouncementDelete + DBModule_MySQL_AnnouncementList \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj index d5e9218..b71286a 100644 --- a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj +++ b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj @@ -161,12 +161,14 @@ - + + - + + Create diff --git a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj.filters b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj.filters index 6cbd88b..1218446 100644 --- a/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj.filters +++ b/XEngine_Source/AuthorizeModule_Database/AuthorizeModule_Database.vcxproj.filters @@ -13,10 +13,16 @@ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - + + {e8a2076d-4bed-4439-9493-1a33b0f6fd2b} + + + {dc9f7cbb-dd1b-4430-99ee-15793188c3a0} + + {bb64f825-b769-444e-b078-90c2727b694f} - + {be64df35-6ef0-4c8c-b95a-444977d7d1c4} @@ -27,15 +33,18 @@ 头文件 - - 头文件\Database_SQLite - 头文件 头文件 + + 头文件\DBModule_MySQL + + + 头文件\DBModule_SQLite + @@ -44,8 +53,11 @@ 源文件 - - 源文件\Database_SQLite + + 源文件\DBModule_MySQL + + + 源文件\DBModule_SQLite diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp new file mode 100644 index 0000000..46ce206 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp @@ -0,0 +1,2015 @@ +#include "pch.h" +#include "DBModule_MySQL.h" +/******************************************************************** +// Created: 2022/05/26 11:01:13 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\Database_MySQL\Database_MySQL.cpp +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\Database_MySQL +// File Base: Database_SQLite +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 数据库管理器 +// History: +*********************************************************************/ +CDBModule_MySQL::CDBModule_MySQL() +{ + m_bChange = false; + xhData = 0; +} + +CDBModule_MySQL::~CDBModule_MySQL() +{ +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:DBModule_MySQL_Init +函数功能:初始化数据库管理器 + 参数.一:pSt_DBConnector + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:数据MYSQL数据库连接信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_Init(DATABASE_MYSQL_CONNECTINFO* pSt_DBConnector, bool bIsChange) +{ + SQLPacket_IsErrorOccur = false; + m_bChange = bIsChange; + if (NULL == pSt_DBConnector) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + _tcsxcpy(pSt_DBConnector->tszDBName, _X("XEngine_Authorize")); //设置库名 + if (!DataBase_MySQL_Connect(&xhData, pSt_DBConnector)) //连接数据库 + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_Destroy +函数功能:销毁数据库管理器 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_Destroy() +{ + SQLPacket_IsErrorOccur = false; + + DataBase_MySQL_Close(xhData); + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_UserDelete +函数功能:删除一个用户从数据库中 + 参数.一:lpszUserName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要删除的用户 +返回值 + 类型:逻辑型 + 意思:是否删除成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_UserDelete(LPCXSTR lpszUserName) +{ + SQLPacket_IsErrorOccur = false; + XCHAR tszSQLStatement[1024]; //SQL语句 + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("delete from `Authorize_User` where UserName = '%s'"), lpszUserName); + //执行 + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXEC; + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_UserRegister +函数功能:用户注册处理数据库语句函数 + 参数.一:pSt_UserInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要插入的用户数据 +返回值 + 类型:逻辑型 + 意思:是否插入成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_UserRegister(AUTHREG_USERTABLE* pSt_UserInfo) +{ + SQLPacket_IsErrorOccur = false; + XCHAR tszSQLStatement[1024]; //SQL语句 + memset(tszSQLStatement, '\0', 1024); + + if (DBModule_MySQL_UserQuery(pSt_UserInfo->st_UserInfo.tszUserName)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; + return false; + } + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_User`(UserName, Password, LeftTime, EmailAddr, HardCode, CardSerialType, PhoneNumber, IDCard, nUserLevel, CreateTime) values('%s','%s','%s','%s','%s','%d',%lld,%lld,%d,NOW())"), pSt_UserInfo->st_UserInfo.tszUserName, pSt_UserInfo->st_UserInfo.tszUserPass, pSt_UserInfo->tszLeftTime, pSt_UserInfo->st_UserInfo.tszEMailAddr, pSt_UserInfo->tszHardCode, pSt_UserInfo->enSerialType, pSt_UserInfo->st_UserInfo.nPhoneNumber, pSt_UserInfo->st_UserInfo.nIDNumber, pSt_UserInfo->st_UserInfo.nUserLevel); + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_INSERT; + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_UserQuery +函数功能:查询用户相对应的值 + 参数.一:lpszUserName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要查询的指定用户 + 参数.二:pSt_UserInfo + In/Out:Out + 类型:数据结构指针 + 可空:Y + 意思:如果为空NULL,那么将只判断此用户是否存在 +返回值 + 类型:逻辑型 + 意思:是否查询成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo) +{ + SQLPacket_IsErrorOccur = false; + //查询 + XNETHANDLE xhTable = 0; + __int64u nColumn = 0; + __int64u nRow = 0; + + XCHAR tszSQLStatement[1024]; //SQL语句 + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("select * from `Authorize_User` where UserName = '%s'"), lpszUserName); + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + return false; + } + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + return false; + } + XCHAR** pptszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + if (NULL != pSt_UserInfo) + { + memset(pSt_UserInfo, '\0', sizeof(AUTHREG_USERTABLE)); + + //ID + int nFliedValue = 0; + + //用户名 + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) + { + //printf("索引:%d 用户名:%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->st_UserInfo.tszUserName, pptszResult[nFliedValue]); + } + + //密码 + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) + { + //printf("索引:%d 密码:%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->st_UserInfo.tszUserPass, pptszResult[nFliedValue]); + } + + //过期时间 + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) + { + //printf("索引:%d 过期时间:%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->tszLeftTime, pptszResult[nFliedValue]); + } + + //电子邮件 + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) + { + //printf("索引:%d 电子邮件:%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->st_UserInfo.tszEMailAddr, pptszResult[nFliedValue]); + } + + //硬件码 + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) + { + //printf("索引:%d 硬件码:%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->tszHardCode, pptszResult[nFliedValue]); + } + + //充值卡类型 + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) + { + //printf("索引:%d 充值卡类型:%s\n", nFliedValue, pptszResult[nFliedValue]); + pSt_UserInfo->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(pptszResult[nFliedValue]); + } + + //QQ号 + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) + { + //printf("索引:%d QQ号:%s\n", nFliedValue, pptszResult[nFliedValue]); + pSt_UserInfo->st_UserInfo.nPhoneNumber = _ttxoll(pptszResult[nFliedValue]); + } + + //身份证ID + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) + { + //printf("索引:%d 身份证ID:%s\n", nFliedValue, pptszResult[nFliedValue]); + pSt_UserInfo->st_UserInfo.nIDNumber = _ttxoll(pptszResult[nFliedValue]); + } + + //用户级别 -1表示封禁 + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) + { + //printf("索引:%d 用户级别 -1表示封禁:%s\n", nFliedValue, pptszResult[nFliedValue]); + pSt_UserInfo->st_UserInfo.nUserLevel = _ttxoi(pptszResult[nFliedValue]); + } + + //登录日期 + nFliedValue++; + if (NULL != pptszResult[nFliedValue] && _tcsxlen(pptszResult[nFliedValue]) > 0) + { + //printf("索引:%d 登录日期:%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->st_UserInfo.tszLoginTime, pptszResult[nFliedValue]); + } + //注册日期 + nFliedValue++; + if (NULL != pptszResult[nFliedValue]) + { + //printf("索引:%d 注册日期:%s\n", nFliedValue, pptszResult[nFliedValue]); + _tcsxcpy(pSt_UserInfo->st_UserInfo.tszCreateTime, pptszResult[nFliedValue]); + } + + } + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_UserPay +函数功能:用户充值函数 + 参数.一:lpszUserName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要充值的用户名 + 参数.二:lpszSerialName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:充值使用的序列号 +返回值 + 类型:逻辑型 + 意思:是否成功充值 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName) +{ + SQLPacket_IsErrorOccur = false; + + AUTHREG_SERIALTABLE st_SerialTable; + AUTHREG_USERTABLE st_UserTable; + XCHAR tszSQLStatement[1024]; //SQL语句 + + memset(tszSQLStatement, '\0', 1024); + memset(&st_SerialTable, '\0', sizeof(st_SerialTable)); + memset(&st_UserTable, '\0', sizeof(st_UserTable)); + //参数检查 + if ((NULL == lpszUserName) || (NULL == lpszSerialName)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + //查询充值卡是否存在 + if (!DBModule_MySQL_SerialQuery(lpszSerialName, &st_SerialTable)) + { + return false; + } + //充值卡是否被使用 + if (st_SerialTable.bIsUsed) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_ISUSED; + return false; + } + //查询用户信息 + if (!DBModule_MySQL_UserQuery(lpszUserName, &st_UserTable)) + { + return false; + } + //分析插入方式 + switch (st_SerialTable.enSerialType) + { + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + if (!DBModule_MySQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + { + return false; + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + if (!DBModule_MySQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + { + return false; + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + if (!DBModule_MySQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + { + return false; + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + if (!DBModule_MySQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + { + return false; + } + break; + default: + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTSUPPORT; + return false; + } + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_Serial` SET UserName = '%s',bIsUsed = '1' WHERE SerialNumber = '%s'"), lpszUserName, lpszSerialName); + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_UPDATAUSEDNAME; + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_UserLeave +函数功能:用户离开处理事件 + 参数.一:pSt_TimeProtocol + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:离开的用户信息 +返回值 + 类型:逻辑型 + 意思:是否处理成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; //SQL语句 + memset(tszSQLStatement, '\0', 1024); + + + if ((ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == pSt_TimeProtocol->enSerialType) || (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == pSt_TimeProtocol->enSerialType)) + { + //天数卡只有剩余时间没有的时候才需要做处理 + if (pSt_TimeProtocol->nTimeLeft <= 0) + { + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '0' WHERE UserName = '%s'"), pSt_TimeProtocol->tszUserName); + } + } + if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == pSt_TimeProtocol->enSerialType) + { + //分钟卡必须要有在线时间才能计算 + if (pSt_TimeProtocol->nTimeLeft <= 0) + { + pSt_TimeProtocol->nTimeLeft = 0; + } + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%lld' WHERE UserName = '%s'"), pSt_TimeProtocol->nTimeLeft, pSt_TimeProtocol->tszUserName); + } + else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == pSt_TimeProtocol->enSerialType) + { + //次数卡不需要在线时间,直接减去一次就可以了 + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%lld' WHERE UserName = '%s'"), _ttxoll(pSt_TimeProtocol->tszLeftTime), pSt_TimeProtocol->tszUserName); + } + else + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_UNKNOWTYPE; + return false; + } + //更新用户剩余时间 + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_UPDATA; + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_UserSet +函数功能:设置用户信息 + 参数.一:pSt_UserTable + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要设置的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; //SQL语句 + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET Password = '%s',LeftTime = '%s',EmailAddr = '%s',HardCode = '%s',CardSerialType = '%d',PhoneNumber = '%lld',IDCard = '%lld',nUserLevel = '%d',UPTime = NOW(),CreateTime = '%s' WHERE UserName = '%s'"), pSt_UserTable->st_UserInfo.tszUserPass, pSt_UserTable->tszLeftTime, pSt_UserTable->st_UserInfo.tszEMailAddr, pSt_UserTable->tszHardCode, pSt_UserTable->enSerialType, pSt_UserTable->st_UserInfo.nPhoneNumber, pSt_UserTable->st_UserInfo.nIDNumber, pSt_UserTable->st_UserInfo.nUserLevel/*, pSt_UserTable->st_UserInfo.tszLoginTime*/, pSt_UserTable->st_UserInfo.tszCreateTime, pSt_UserTable->st_UserInfo.tszUserName); + + //printf("22设置用户信息(SQL):%s\n", tszSQLStatement); + //更新用户剩余时间 + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_UserList +函数功能:获取用户列表 + 参数.一:pppSt_UserInfo + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出用户列表,内存由用户释放 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型 + 可空:N + 意思:输出列表个数 + 参数.三:nPosStart + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入起始位置 + 参数.四:nPosEnd + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入结束位置 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + SQLPacket_IsErrorOccur = false; + + //查询 + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + char** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL语句 + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("SELECT * FROM `Authorize_User` LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + return false; + } + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTUSER; + return false; + } + *pInt_ListCount = nRow; + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_UserInfo, (int)nRow, sizeof(AUTHREG_USERTABLE)); + + for (int i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + //ID + int nFliedValue = 0; + nFliedValue++; + //用户名 + _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszUserName, ppszResult[nFliedValue]); + //密码 + nFliedValue++; + _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszUserPass, ppszResult[nFliedValue]); + //过期时间 + nFliedValue++; + _tcsxcpy((*pppSt_UserInfo)[i]->tszLeftTime, ppszResult[nFliedValue]); + //电子邮件 + nFliedValue++; + _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszEMailAddr, ppszResult[nFliedValue]); + //硬件码 + nFliedValue++; + _tcsxcpy((*pppSt_UserInfo)[i]->tszHardCode, ppszResult[nFliedValue]); + //充值卡类型 + nFliedValue++; + (*pppSt_UserInfo)[i]->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + //QQ号 + nFliedValue++; + (*pppSt_UserInfo)[i]->st_UserInfo.nPhoneNumber = _ttxoll(ppszResult[nFliedValue]); + //身份证ID + nFliedValue++; + (*pppSt_UserInfo)[i]->st_UserInfo.nIDNumber = _ttxoll(ppszResult[nFliedValue]); + //用户级别 -1表示封禁 + nFliedValue++; + (*pppSt_UserInfo)[i]->st_UserInfo.nUserLevel = _ttxoi(ppszResult[nFliedValue]); + //登录日期 + nFliedValue++; + if (NULL != ppszResult[nFliedValue] && _tcsxlen(ppszResult[nFliedValue]) > 0) + { + _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszLoginTime, ppszResult[nFliedValue]); + } + //注册日期 + nFliedValue++; + _tcsxcpy((*pppSt_UserInfo)[i]->st_UserInfo.tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + } + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_SerialInsert +函数功能:插入一个序列号到数据库 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要插入的序列号 +返回值 + 类型:逻辑型 + 意思:是否插入成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_SerialInsert(LPCXSTR lpszSerialNumber) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; //SQL语句 + memset(tszSQLStatement, '\0', 1024); + + if (DBModule_MySQL_SerialQuery(lpszSerialNumber)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; + return false; + } + ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enAuthSerialType; + XENGINE_LIBTIMER st_AuthTimer; + memset(&st_AuthTimer, '\0', sizeof(st_AuthTimer)); + + if (!Authorize_Serial_GetType(lpszSerialNumber, &enAuthSerialType, &st_AuthTimer)) + { + return false; + } + if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == enAuthSerialType) + { + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_Serial` values(NULL,'NOT','%s','%d','%d',0,NOW())"), lpszSerialNumber, st_AuthTimer.wSecond, enAuthSerialType); + } + else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == enAuthSerialType) + { + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_Serial` values(NULL,'NOT','%s','%d','%d',0,NOW())"), lpszSerialNumber, st_AuthTimer.wDay, enAuthSerialType); + } + else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == enAuthSerialType) + { + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_Serial` values(NULL,'NOT','%s','%d','%d',0,NOW())"), lpszSerialNumber, st_AuthTimer.wFlags, enAuthSerialType); + } + else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == enAuthSerialType) + { + XCHAR tszLeftTime[MAX_PATH]; + memset(tszLeftTime, '\0', MAX_PATH); + _xstprintf(tszLeftTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_AuthTimer.wYear, st_AuthTimer.wMonth, st_AuthTimer.wDay, st_AuthTimer.wHour, st_AuthTimer.wMinute, st_AuthTimer.wSecond); + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_Serial` values(NULL,'NOT','%s','%s','%d',0,NOW())"), lpszSerialNumber, tszLeftTime, enAuthSerialType); + } + else + { + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_Serial` values(NULL,'NOT','%s',0,'%d',0,NOW())"), lpszSerialNumber, enAuthSerialType); + } + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_ISFAILED; + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_SerialDelete +函数功能:从数据库删除指定序列号 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要删除的序列号 +返回值 + 类型:逻辑型 + 意思:是否删除成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_SerialDelete(LPCXSTR lpszSerialNumber) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; //SQL语句 + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("delete from `Authorize_Serial` where SerialNumber = '%s'"), lpszSerialNumber); + //执行 + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_ISFAILED; + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_SerialQuery +函数功能:查询一个指定的序列号信息 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要查询的序列号 + 参数.二:pSt_SerialTable + In/Out:Out + 类型:数据结构指针 + 可空:Y + 意思:导出查询到的信息,如果为NULL,此参数将不起作用 +返回值 + 类型:逻辑型 + 意思:是否查询成功,如果第二个参数为NULL,那么将只返回是否有这个序列号 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable) +{ + SQLPacket_IsErrorOccur = false; + XCHAR tszSQLStatement[1024]; //SQL语句 + char** ppszResult = NULL; + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("select * from `Authorize_Serial` where SerialNumber = '%s'"), lpszSerialNumber); + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + return false; + } + + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_SERIAL; + return false; + } + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + if (NULL != pSt_SerialTable) + { + memset(pSt_SerialTable, '\0', sizeof(AUTHREG_SERIALTABLE)); + //ID + int nFliedValue = 0; + //使用者 + nFliedValue++; + _tcsxcpy(pSt_SerialTable->tszUserName, ppszResult[nFliedValue]); + //序列号 + nFliedValue++; + _tcsxcpy(pSt_SerialTable->tszSerialNumber, ppszResult[nFliedValue]); + //超时时间 + nFliedValue++; + _tcsxcpy(pSt_SerialTable->tszMaxTime, ppszResult[nFliedValue]); + //序列卡类型 + nFliedValue++; + pSt_SerialTable->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + //是否已经使用 + nFliedValue++; + pSt_SerialTable->bIsUsed = _ttxoi(ppszResult[nFliedValue]); + //超时时间 + nFliedValue++; + _tcsxcpy(pSt_SerialTable->tszCreateTime, ppszResult[nFliedValue]); + } + + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_SerialQueryAll +函数功能:查询序列卡表中的所有序列号 + 参数.一:pppSt_SerialTable + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出序列卡列表 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:Y + 意思:输出多少张卡 + 参数.三:nPosStart + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入起始位置 + 参数.四:nPosEnd + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入结束位置 +返回值 + 类型:逻辑型 + 意思:是否查询成功 +备注:参数一需要调用基础库的释放内存函数进行内存释放 +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + SQLPacket_IsErrorOccur = false; + + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + char** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL语句 + + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("SELECT * FROM `Authorize_Serial` LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_GETTABLE; + return false; + } + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NONE; + return false; + } + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_SerialTable, (int)nRow, sizeof(AUTHREG_SERIALTABLE)); + + *pInt_ListCount = nRow; + + for (int i = 0; i < nRow; i++) + { + // 获取数据库结果 + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + int nFliedValue = 0; + //ID + nFliedValue++; + //使用者 + _tcsxcpy((*pppSt_SerialTable)[i]->tszUserName, ppszResult[nFliedValue]); + nFliedValue++; + //序列号 + _tcsxcpy((*pppSt_SerialTable)[i]->tszSerialNumber, ppszResult[nFliedValue]); + nFliedValue++; + //超时时间 + _tcsxcpy((*pppSt_SerialTable)[i]->tszMaxTime, ppszResult[nFliedValue]); + nFliedValue++; + //序列卡类型 + (*pppSt_SerialTable)[i]->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //是否已经使用 + (*pppSt_SerialTable)[i]->bIsUsed = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //创建时间 + _tcsxcpy((*pppSt_SerialTable)[i]->tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + } + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_SerialPush +函数功能:插入一条指定的序列号信息到服务器 + 参数.一:pSt_SerialTable + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; //SQL语句 + memset(tszSQLStatement, '\0', 1024); + + if (DBModule_MySQL_SerialQuery(pSt_SerialTable->tszSerialNumber)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; + return false; + } + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_Serial` values(NULL,'%s','%s','%s',%d,%d,'%s')"), pSt_SerialTable->tszUserName, pSt_SerialTable->tszSerialNumber, pSt_SerialTable->tszMaxTime, pSt_SerialTable->enSerialType, pSt_SerialTable->bIsUsed, pSt_SerialTable->tszCreateTime); + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_ISFAILED; + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_TryInsert +函数功能:网络使用模式插入一条数据 + 参数.一:pSt_AuthVer + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_AuthVer) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024]; + AUTHREG_TEMPVER st_AuthVer; + + memset(tszSQLStatement, '\0', 1024); + memset(&st_AuthVer, '\0', sizeof(AUTHREG_TEMPVER)); + //验证是否存在 + _tcsxcpy(st_AuthVer.tszVSerial, pSt_AuthVer->tszVSerial); + if (DBModule_MySQL_TryQuery(&st_AuthVer)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; + return false; + } + //插入数据库 + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_TempVer`(tszVSerial,nVMode,nVTime,nLTime,CreateTime) VALUES('%s',%d,%d,%d,NOW())"), pSt_AuthVer->tszVSerial, pSt_AuthVer->enVMode, pSt_AuthVer->nVTime, pSt_AuthVer->nVTime); + + //printf("网络使用模式插入一条数据:SQL语句%s\n", tszSQLStatement); + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_TryQuery +函数功能:试用序列号查询函数 + 参数.一:pSt_AuthVer + In/Out:In/Out + 类型:数据结构指针 + 可空:N + 意思:输入序列号,输出获取到的内容 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_AuthVer) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XNETHANDLE xhTable = 0; + __int64u nColumn = 0; + __int64u nRow = 0; + XCHAR** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL语句 + + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("SELECT * FROM `Authorize_TempVer` WHERE tszVSerial = '%s'"), pSt_AuthVer->tszVSerial); + + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NONE; + return false; + } + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + //ID + int nFliedValue = 0; + nFliedValue++; + //序列号 + nFliedValue++; + + //试用类型 + if (NULL != ppszResult[nFliedValue]) + { + pSt_AuthVer->enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + } + + //试用时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + pSt_AuthVer->nVTime = _ttxoi(ppszResult[nFliedValue]); + } + + //剩余时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + pSt_AuthVer->nLTime = _ttxoi(ppszResult[nFliedValue]); + } + + //注册时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + _tcsxcpy(pSt_AuthVer->tszVDate, ppszResult[nFliedValue]); + } + + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_TryDelete +函数功能:删除一条指定的试用数据 + 参数.一:lpszSerial + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要删除的序列号 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_TryDelete(LPCXSTR lpszSerial) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == lpszSerial) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("DELETE FROM `Authorize_TempVer` WHERE tszVSerial = '%s'"), lpszSerial); + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_TryClear +函数功能:清理函数,自动清理过期数据 + 参数.一:nThanValue + In/Out:In + 类型:整数型 + 可空:N + 意思:清理用于判断需要大于此的值 + 参数.二:enVMode + In/Out:In + 类型:枚举型 + 可空:Y + 意思:判断注册类型,默认不判断全部执行 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode) +{ + SQLPacket_IsErrorOccur = false; + + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + XCHAR** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL语句 + + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("SELECT * FROM `Authorize_TempVer`")); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + list stl_ListVer; + //轮训所有内容 + for (int i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + int nFliedValue = 0; + AUTHREG_TEMPVER st_AuthVer; + memset(&st_AuthVer, '\0', sizeof(AUTHREG_TEMPVER)); + //ID + nFliedValue++; + //序列号 + _tcsxcpy(st_AuthVer.tszVSerial, ppszResult[nFliedValue]); + nFliedValue++; + //模式 + st_AuthVer.enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //测试时间 + st_AuthVer.nVTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //测试时间 + st_AuthVer.nLTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcsxcpy(st_AuthVer.tszVDate, ppszResult[nFliedValue]); + + stl_ListVer.push_back(st_AuthVer); + } + DataBase_MySQL_FreeResult(xhData, xhTable); + //清理 + list::const_iterator stl_ListIterator = stl_ListVer.begin(); + for (; stl_ListIterator != stl_ListVer.end(); stl_ListIterator++) + { + //判断是不是不关心注册的模式直接清理 + if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW == enVerMode) + { + if (nThanValue > stl_ListIterator->nVTime) + { + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("DELETE FROM `Authorize_TempVer` WHERE tszVSerial = '%s'"), stl_ListIterator->tszVSerial); + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + } + } + else + { + if (enVerMode == stl_ListIterator->enVMode) + { + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("DELETE FROM `Authorize_TempVer` WHERE tszVSerial = '%s'"), stl_ListIterator->tszVSerial); + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + } + } + } + stl_ListVer.clear(); + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_TrySet +函数功能:设置用户信息函数 + 参数.一:pSt_AuthVer + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要更新的用户信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_TrySet(AUTHREG_TEMPVER* pSt_AuthVer) +{ + SQLPacket_IsErrorOccur = false; + + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_TempVer` SET nVMode = '%d',nVTime = '%d',nLTime = '%d',CreateTime = '%s' WHERE tszVSerial = '%s'"), pSt_AuthVer->enVMode, pSt_AuthVer->nVTime, pSt_AuthVer->nLTime, pSt_AuthVer->tszVDate, pSt_AuthVer->tszVSerial); + //更新用户表 + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_TryList +函数功能:请求试用期列表 + 参数.一:pppSt_AuthVer + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出获取到的列表 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出列表个数 + 参数.三:nPosStart + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查询起始编号 + 参数.四:nPosEnd + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查询结束编号 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + SQLPacket_IsErrorOccur = false; + + XNETHANDLE xhTable = 0; + __int64u nColumn = 0; + __int64u nRow = 0; + XCHAR** ppszResult = NULL; + XCHAR tszSQLStr[1024]; //SQL语句 + + memset(tszSQLStr, '\0', 1024); + _xstprintf(tszSQLStr, _X("SELECT * FROM `Authorize_TempVer` LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStr, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_AuthVer, (int)nRow, sizeof(AUTHREG_TEMPVER)); + + //轮训所有内容 + for (int i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + int nFliedValue = 0; + //ID + (*pppSt_AuthVer)[i]->nID = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //是否启用 + _tcsxcpy((*pppSt_AuthVer)[i]->tszVSerial, ppszResult[nFliedValue]); + nFliedValue++; + //类型 + (*pppSt_AuthVer)[i]->enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //时间 + (*pppSt_AuthVer)[i]->nVTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //时间 + (*pppSt_AuthVer)[i]->nLTime = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcsxcpy((*pppSt_AuthVer)[i]->tszVDate, ppszResult[nFliedValue]); + nFliedValue++; + } + *pInt_ListCount = nRow; + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_BannedInsert +函数功能:黑名单列表插入 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_BannedInsert(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_Banned) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + //存在直接返回 + if (DBModule_MySQL_BannedExist(pSt_Banned)) + { + return true; + } + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + //处理的类型 + if (_tcsxlen(pSt_Banned->tszUserName) > 0) + { + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_BannedUser`(bEnable,tszUserName,tszLeftTime,tszCreateTime) VALUES(%d,'%s','%s',NOW())"), pSt_Banned->bEnable, pSt_Banned->tszUserName, pSt_Banned->tszLeftTime); + } + else + { + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_BannedAddr`(bEnable,tszIPAddr,tszLeftTime,tszCreateTime) VALUES(%d,'%s','%s',NOW())"), pSt_Banned->bEnable, pSt_Banned->tszIPAddr, pSt_Banned->tszLeftTime); + } + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_BannedDelete +函数功能:黑名单列表删除 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_BannedDelete(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_Banned) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + //处理的类型 + if (_tcsxlen(pSt_Banned->tszUserName) > 0) + { + _xstprintf(tszSQLStatement, _X("DELETE FROM `Authorize_BannedUser` WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); + } + else + { + _xstprintf(tszSQLStatement, _X("DELETE FROM `Authorize_BannedAddr` WHERE tszIPAddr = '%s'"), pSt_Banned->tszIPAddr); + } + + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_BannedList +函数功能:黑名单列表查询 + 参数.一:pppSt_BannedUser + In/Out:Out + 类型:三级指针 + 可空:N + 意思:禁用的用户名列表 + 参数.二:pInt_UserCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出用户禁用列表个数 + 参数.三:pppSt_BannedAddr + In/Out:Out + 类型:三级指针 + 可空:N + 意思:禁用的IP地址列表 + 参数.四:pInt_AddrCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出地址禁用列表个数 + 参数.五:nPosStart + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查找起始位置 + 参数.六:nPosEnd + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查找结束位置 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd) +{ + SQLPacket_IsErrorOccur = false; + //查询 + XNETHANDLE xhTable = 0; + __int64u nColumn = 0; + __int64u nRow = 0; + + XCHAR** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL语句 + + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("SELECT * FROM `Authorize_BannedAddr` LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + list stl_ListAddr; + //轮训所有内容 + for (int i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + int nFliedValue = 0; + + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + //ID + st_Banned.nID = _ttxoll(ppszResult[nFliedValue]); + nFliedValue++; + //是否启用 + st_Banned.bEnable = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //地址 + _tcsxcpy(st_Banned.tszIPAddr, ppszResult[nFliedValue]); + nFliedValue++; + //过期时间 + _tcsxcpy(st_Banned.tszLeftTime, ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcsxcpy(st_Banned.tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + + stl_ListAddr.push_back(st_Banned); + } + DataBase_MySQL_FreeResult(xhData, xhTable); + //用户列表 + xhTable = 0; + nRow = 0; + nColumn = 0; + ppszResult = NULL; + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("SELECT * FROM `Authorize_BannedUser` LIMIT %d,%d"), nPosStart, nPosEnd - nPosStart); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + list stl_ListUser; + //轮训所有内容 + for (int i = 0; i < nRow; i++) + { + AUTHREG_BANNED st_Banned; + memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); + + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + int nFliedValue = 0; + + //ID + st_Banned.nID = _ttxoll(ppszResult[nFliedValue]); + nFliedValue++; + //是否启用 + st_Banned.bEnable = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //用户名 + _tcsxcpy(st_Banned.tszUserName, ppszResult[nFliedValue]); + nFliedValue++; + //过期时间 + _tcsxcpy(st_Banned.tszLeftTime, ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcsxcpy(st_Banned.tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + + stl_ListUser.push_back(st_Banned); + } + DataBase_MySQL_FreeResult(xhData, xhTable); + //导出 + *pInt_AddrCount = stl_ListAddr.size(); + *pInt_UserCount = stl_ListUser.size(); + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_BannedAddr, stl_ListAddr.size(), sizeof(AUTHREG_BANNED)); + BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_BannedUser, stl_ListUser.size(), sizeof(AUTHREG_BANNED)); + + list::const_iterator stl_ListIterator = stl_ListAddr.begin(); + for (int i = 0; stl_ListIterator != stl_ListAddr.end(); stl_ListIterator++, i++) + { + (*pppSt_BannedAddr)[i]->nID = stl_ListIterator->nID; + (*pppSt_BannedAddr)[i]->bEnable = stl_ListIterator->bEnable; + _tcsxcpy((*pppSt_BannedAddr)[i]->tszIPAddr, stl_ListIterator->tszIPAddr); + _tcsxcpy((*pppSt_BannedAddr)[i]->tszLeftTime, stl_ListIterator->tszLeftTime); + _tcsxcpy((*pppSt_BannedAddr)[i]->tszCreateTime, stl_ListIterator->tszCreateTime); + } + stl_ListIterator = stl_ListUser.begin(); + for (int i = 0; stl_ListIterator != stl_ListUser.end(); stl_ListIterator++, i++) + { + (*pppSt_BannedUser)[i]->nID = stl_ListIterator->nID; + (*pppSt_BannedUser)[i]->bEnable = stl_ListIterator->bEnable; + _tcsxcpy((*pppSt_BannedUser)[i]->tszUserName, stl_ListIterator->tszUserName); + _tcsxcpy((*pppSt_BannedUser)[i]->tszLeftTime, stl_ListIterator->tszLeftTime); + _tcsxcpy((*pppSt_BannedUser)[i]->tszCreateTime, stl_ListIterator->tszCreateTime); + } + + stl_ListAddr.clear(); + stl_ListUser.clear(); + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_BannedExist +函数功能:名单是否存在黑名单列表 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = false; + XCHAR** ppszResult = nullptr; + XLONG* pInt_Length = nullptr; + + //判断用户名是否存在 + if (_tcsxlen(pSt_Banned->tszUserName) > 0) + { + __int64u nRow = 0; + __int64u nColumn = 0; + XNETHANDLE xhTable = 0; + + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); + + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + DataBase_MySQL_FreeResult(xhData, xhTable); + return false; + } + + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + //ID + int nFliedValue = 0; + if (NULL != ppszResult[nFliedValue]) { + pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); + } + //是否启用 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); + } + + //地址 + nFliedValue++; + + //过期时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + } + + //注册时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + } + + DataBase_MySQL_FreeResult(xhData, xhTable); + } + + //判断IP地址是否存在 + if (_tcsxlen(pSt_Banned->tszIPAddr) > 0) + { + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + ppszResult = nullptr; + pInt_Length = nullptr; + + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', 1024); + + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedAddr WHERE tszIPAddr = '%s'"), pSt_Banned->tszIPAddr); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + DataBase_MySQL_FreeResult(xhData, xhTable); + return false; + } + //printf("测试2 行:%d 列:%d\n", nRow, nColumn); + + if (nRow <= 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + DataBase_MySQL_FreeResult(xhData, xhTable); + return false; + } + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + + //ID + int nFliedValue = 0; + if (NULL != ppszResult[nFliedValue]) + { + //printf("索引:%d ID:%s\n", nFliedValue, ppszResult[nFliedValue]); + pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); + } + + //是否启用 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + //printf("索引:%d 是否启用:%s\n", nFliedValue, ppszResult[nFliedValue]); + pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); + } + + //地址 + nFliedValue++; + + //过期时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + //printf("索引:%d 过期时间:%s\n", nFliedValue, ppszResult[nFliedValue]); + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + } + + + //注册时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + //printf("索引:%d 注册时间:%s\n", nFliedValue, ppszResult[nFliedValue]); + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + } + + DataBase_MySQL_FreeResult(xhData, xhTable); + } + //处理是否被禁用 + if (!pSt_Banned->bEnable) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; + return false; + } + if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer > 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; + return false; + } + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_BannedUPDate +函数功能:更新名单列表信息 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_BannedUPDate(AUTHREG_BANNED* pSt_Banned) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_Banned) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + //处理的类型 + if (_tcsxlen(pSt_Banned->tszUserName) > 0) + { + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_BannedUser` SET bEnable = %d,tszLeftTime = '%s' WHERE tszUserName = '%s'"), pSt_Banned->bEnable, pSt_Banned->tszLeftTime, pSt_Banned->tszUserName); + } + else + { + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_BannedAddr` SET bEnable = %d,tszLeftTime = '%s' WHERE tszIPAddr = '%s'"), pSt_Banned->bEnable, pSt_Banned->tszLeftTime, pSt_Banned->tszIPAddr); + } + //插入数据库 + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_AnnouncementInsert +函数功能:公告插入 + 参数.一:pSt_Announcement + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_Announcement) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[8192]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + + _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_Announcement`(tszContext,tszCreateTime) VALUES('%s',NOW())"), pSt_Announcement->tszContext); + + //插入数据库 + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_AnnouncementDelete +函数功能:公告删除 + 参数.一:pSt_Announcement + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要删除的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement) +{ + SQLPacket_IsErrorOccur = false; + + if (NULL == pSt_Announcement) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + return false; + } + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + + _xstprintf(tszSQLStatement, _X("DELETE FROM `Authorize_Announcement` WHERE ID = %lld"), pSt_Announcement->nID); + //插入数据库 + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:DBModule_MySQL_AnnouncementList +函数功能:列举所有公告 + 参数.一:ppppSt_Announcement + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出列举数据 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:导出数据个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount) +{ + SQLPacket_IsErrorOccur = false; + XNETHANDLE xhTable = 0; + __int64u nRow = 0; + __int64u nColumn = 0; + XCHAR** ppszResult = NULL; + XCHAR tszSQLStatement[1024]; //SQL语句 + memset(tszSQLStatement, '\0', 1024); + _xstprintf(tszSQLStatement, _X("SELECT * FROM `Authorize_Announcement`")); + + if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = DataBase_GetLastError(); + return false; + } + *pInt_ListCount = nRow; + if (NULL == ppppSt_Announcement) + { + return true; + } + BaseLib_OperatorMemory_Malloc((XPPPMEM)ppppSt_Announcement, (int)nRow, sizeof(AUTHREG_ANNOUNCEMENT)); + + //轮训所有内容 + for (int i = 0; i < nRow; i++) + { + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + int nFliedValue = 0; + (*ppppSt_Announcement)[i]->nID = _ttxoll(ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*ppppSt_Announcement)[i]->tszContext, ppszResult[nFliedValue]); + nFliedValue++; + _tcsxcpy((*ppppSt_Announcement)[i]->tszCreateTime, ppszResult[nFliedValue]); + nFliedValue++; + + } + DataBase_MySQL_FreeResult(xhData, xhTable); + return true; +} + +////////////////////////////////////////////////////////////////////////// +// 保护函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:DBModule_MySQL_UserPayTime +函数功能:日期方式充值方式 + 参数.一:lpszUserName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:充值的用户 + 参数.二:lpszUserTime + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:用户以前的超时时间 + 参数.三:lpszCardTime + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:充值卡时间 + 参数.四:en_AuthSerialType + In/Out:In + 类型:枚举型 + 可空:N + 意思:充值卡的充值类型 + 参数.五:en_AuthUserType + In/Out:In + 类型:枚举型 + 可空:N + 意思:用户表中以前的充值卡类型 +返回值 + 类型:逻辑型 + 意思:是否成功充值 +备注: +*********************************************************************/ +bool CDBModule_MySQL::DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType) +{ + SQLPacket_IsErrorOccur = false; + XCHAR tszSQLStatement[1024]; + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + //判断和以前的充值卡是否匹配。 + if (en_AuthSerialType != en_AuthUserType) + { + //如果不等于,需要重写 + if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW != en_AuthUserType) + { + //判断是否允许改写。 + if (!m_bChange) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH; + return false; + } + } + //更新用户表的充值卡类型 + memset(tszSQLStatement, '\0', sizeof(tszSQLStatement)); + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET CardSerialType = '%d' WHERE UserName = '%s'"), en_AuthSerialType, lpszUserName); + //执行用户表更新,因为序列卡类型被改变,所以需要更新。 + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_UPDATATYPE; + return false; + } + //处理卡类型 + switch (en_AuthSerialType) + { + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + { + //如果是分钟卡 + //如果当前的充值卡类型不匹配,那么他以前的充值内容全部都会被删除! + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); //更新用户表的过期时间 + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + { + //如果是天数卡 + //更新用户表的过期时间 + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); //更新用户表的过期时间 + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + { + //如果是次数卡 + //更新用户表的过期时间 + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + { + XCHAR tszTime[128]; + XENGINE_LIBTIMER st_AuthTime; + ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_GeneraterSerialType; + + memset(tszTime, '\0', sizeof(tszTime)); + memset(&st_AuthTime, '\0', sizeof(XENGINE_LIBTIMER)); + //获取重置卡类型和时间 + if (!Authorize_Serial_GetType(lpszCardTime, &en_GeneraterSerialType, &st_AuthTime)) + { + return false; + } + _xstprintf(tszTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_AuthTime.wYear, st_AuthTime.wMonth, st_AuthTime.wDay, st_AuthTime.wHour, st_AuthTime.wMinute, st_AuthTime.wSecond); + //更新用户表的过期时间 + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%s' WHERE UserName = '%s'"), tszTime, lpszUserName); + } + break; + default: + break; + } + } + else + { + switch (en_AuthSerialType) + { + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + { + int nCardTime = _ttxoi(lpszCardTime); + nCardTime += _ttxoi(lpszUserTime); //我们把用户以前的时间也加上 + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //更新用户表的过期时间 + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + { + int nCardTime = _ttxoi(lpszCardTime); + nCardTime += _ttxoi(lpszUserTime); //我们把用户以前的时间也加上 + //更新用户表的过期时间 + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + { + //如果是次数卡 + int nCardTime = _ttxoi(lpszCardTime); + nCardTime += _ttxoi(lpszUserTime); //我们把用户以前的时间也加上 + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //更新用户表的过期时间 + } + break; + case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + { + //自定义卡,无法相加 + XCHAR tszTime[128]; + XENGINE_LIBTIMER st_AuthTime; + ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_GeneraterSerialType; + + memset(tszTime, '\0', sizeof(tszTime)); + memset(&st_AuthTime, '\0', sizeof(XENGINE_LIBTIMER)); + //获取重置卡类型和时间 + if (!Authorize_Serial_GetType(lpszCardTime, &en_GeneraterSerialType, &st_AuthTime)) + { + return false; + } + _xstprintf(tszTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_AuthTime.wYear, st_AuthTime.wMonth, st_AuthTime.wDay, st_AuthTime.wHour, st_AuthTime.wMinute, st_AuthTime.wSecond); + //更新用户表的过期时间 + _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%s' WHERE UserName = '%s'"), tszTime, lpszUserName); + } + break; + default: + break; + } + } + //更新用户表的过期时间 + if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_UPDATA; + return false; + } + return true; +} + diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h new file mode 100644 index 0000000..eea88f3 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h @@ -0,0 +1,61 @@ +#pragma once +/******************************************************************** +// Created: 2022/05/26 11:01:06 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\Database_MySQL\Database_MySQL.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\Database_MySQL +// File Base: Database_MySQL +// File Ext: h +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 数据库管理器 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// AuthReg_UserTable内容:ID 用户名 密码 注册日期 剩余时间 硬件码 注册文件密码 QQ 身份证 +// AuthReg_SerialTable内容:ID 使用者 序列号 使用时间 最大可允许时间 是否使用 +////////////////////////////////////////////////////////////////////////// +class CDBModule_MySQL +{ +public: + CDBModule_MySQL(); + ~CDBModule_MySQL(); +public: + bool DBModule_MySQL_Init(DATABASE_MYSQL_CONNECTINFO* pSt_DBConnector, bool bIsChange = true); //初始化 + bool DBModule_MySQL_Destroy(); //销毁 +public: + bool DBModule_MySQL_UserDelete(LPCXSTR lpszUserName); //删除用户 + bool DBModule_MySQL_UserRegister(AUTHREG_USERTABLE* pSt_UserInfo); //用户注册 + bool DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo = NULL); //用户查询 + bool DBModule_MySQL_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName); //充值卡充值 + bool DBModule_MySQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol); //用户离开更新表 + bool DBModule_MySQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable); //设置用户信息 + bool DBModule_MySQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd); //获取用户列表 +public: + bool DBModule_MySQL_SerialInsert(LPCXSTR lpszSerialNumber); //插入序列卡 + bool DBModule_MySQL_SerialDelete(LPCXSTR lpszSerialNumber); //删除一个序列号 + bool DBModule_MySQL_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable = NULL); //按照卡号或者用户查询 + bool DBModule_MySQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd);//查询所有序列卡 + bool DBModule_MySQL_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable);//插入一条指定的序列号信息到服务器 +public: + bool DBModule_MySQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); //网络使用模式插入一条数据 + bool DBModule_MySQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); //试用序列号查询函数 + bool DBModule_MySQL_TryDelete(LPCXSTR lpszSerial); //删除一条指定的试用数据 + bool DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); //清理函数,自动清理过期数据 + bool DBModule_MySQL_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); //设置用户信息函数 + bool DBModule_MySQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); //请求试用期列表 +public: + bool DBModule_MySQL_BannedInsert(AUTHREG_BANNED* pSt_Banned); //黑名单列表插入 + bool DBModule_MySQL_BannedDelete(AUTHREG_BANNED* pSt_Banned); //黑名单列表删除 + bool DBModule_MySQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd); //黑名单列表查询 + bool DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned); //名单是否存在黑名单列表 + bool DBModule_MySQL_BannedUPDate(AUTHREG_BANNED* pSt_Banned); //更新名单列表信息 +public: + bool DBModule_MySQL_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement); //公告插入 + bool DBModule_MySQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); //公告删除 + bool DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); //列举所有公告 +protected: + bool DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType); //日期方式充值方式 +private: + bool m_bChange; + XNETHANDLE xhData; //数据库句柄 +}; diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp similarity index 94% rename from XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp rename to XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp index e5c42f0..08c33ef 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp @@ -1,5 +1,5 @@ #include "pch.h" -#include "Database_SQLite.h" +#include "DBModule_SQLite.h" /******************************************************************** // Created: 2022/05/26 11:01:13 // File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\Database_SQLite\Database_SQLite.cpp @@ -11,11 +11,11 @@ // Purpose: 数据库管理器 // History: *********************************************************************/ -CDatabase_SQLite::CDatabase_SQLite() +CDBModule_SQLite::CDBModule_SQLite() { m_bChange = false; } -CDatabase_SQLite::~CDatabase_SQLite() +CDBModule_SQLite::~CDBModule_SQLite() { } @@ -23,7 +23,7 @@ CDatabase_SQLite::~CDatabase_SQLite() // 公有函数 ////////////////////////////////////////////////////////////////////////// /******************************************************************** -函数名称:Database_SQLite_Init +函数名称:DBModule_SQLite_Init 函数功能:初始化数据库服务 参数.一:lpszSQLFile In/Out:In @@ -40,7 +40,7 @@ CDatabase_SQLite::~CDatabase_SQLite() 意思:是否成功 备注:先初始化数据库服务,在初始化网络服务,才可以使用本验证服务器! *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_Init(LPCXSTR lpszSQLFile, bool bIsChange /* = true */) +bool CDBModule_SQLite::DBModule_SQLite_Init(LPCXSTR lpszSQLFile, bool bIsChange /* = true */) { SQLPacket_IsErrorOccur = false; m_bChange = bIsChange; @@ -54,14 +54,14 @@ bool CDatabase_SQLite::Database_SQLite_Init(LPCXSTR lpszSQLFile, bool bIsChange return true; } /******************************************************************** -函数名称:Database_SQLite_Destroy +函数名称:DBModule_SQLite_Destroy 函数功能:销毁数据库服务 返回值 类型:逻辑型 意思:是否销毁成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_Destroy() +bool CDBModule_SQLite::DBModule_SQLite_Destroy() { SQLPacket_IsErrorOccur = false; @@ -74,7 +74,7 @@ bool CDatabase_SQLite::Database_SQLite_Destroy() return true; } /******************************************************************** -函数名称:Database_SQLite_UserDelete +函数名称:DBModule_SQLite_UserDelete 函数功能:删除一个用户从数据库中 参数.一:lpszUserName In/Out:In @@ -86,7 +86,7 @@ bool CDatabase_SQLite::Database_SQLite_Destroy() 意思:是否删除成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_UserDelete(LPCXSTR lpszUserName) +bool CDBModule_SQLite::DBModule_SQLite_UserDelete(LPCXSTR lpszUserName) { SQLPacket_IsErrorOccur = false; XCHAR tszSQLStatement[1024]; //SQL语句 @@ -102,7 +102,7 @@ bool CDatabase_SQLite::Database_SQLite_UserDelete(LPCXSTR lpszUserName) return true; } /******************************************************************** -函数名称:Database_SQLite_UserRegister +函数名称:DBModule_SQLite_UserRegister 函数功能:用户注册处理数据库语句函数 参数.一:pSt_UserInfo In/Out:In @@ -114,13 +114,13 @@ bool CDatabase_SQLite::Database_SQLite_UserDelete(LPCXSTR lpszUserName) 意思:是否插入成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_UserRegister(AUTHREG_USERTABLE* pSt_UserInfo) +bool CDBModule_SQLite::DBModule_SQLite_UserRegister(AUTHREG_USERTABLE* pSt_UserInfo) { SQLPacket_IsErrorOccur = false; XCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - if (Database_SQLite_UserQuery(pSt_UserInfo->st_UserInfo.tszUserName)) + if (DBModule_SQLite_UserQuery(pSt_UserInfo->st_UserInfo.tszUserName)) { SQLPacket_IsErrorOccur = true; SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; @@ -136,7 +136,7 @@ bool CDatabase_SQLite::Database_SQLite_UserRegister(AUTHREG_USERTABLE* pSt_UserI return true; } /******************************************************************** -函数名称:Database_SQLite_UserQuery +函数名称:DBModule_SQLite_UserQuery 函数功能:查询用户相对应的值 参数.一:lpszUserName In/Out:In @@ -153,7 +153,7 @@ bool CDatabase_SQLite::Database_SQLite_UserRegister(AUTHREG_USERTABLE* pSt_UserI 意思:是否查询成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo /* = NULL */) +bool CDBModule_SQLite::DBModule_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo /* = NULL */) { SQLPacket_IsErrorOccur = false; XCHAR tszSQLStatement[1024]; //SQL语句 @@ -223,7 +223,7 @@ bool CDatabase_SQLite::Database_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_U return true; } /******************************************************************** -函数名称:Database_SQLite_UserPay +函数名称:DBModule_SQLite_UserPay 函数功能:用户充值函数 参数.一:lpszUserName In/Out:In @@ -240,7 +240,7 @@ bool CDatabase_SQLite::Database_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_U 意思:是否成功充值 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName) +bool CDBModule_SQLite::DBModule_SQLite_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName) { SQLPacket_IsErrorOccur = false; @@ -259,7 +259,7 @@ bool CDatabase_SQLite::Database_SQLite_UserPay(LPCXSTR lpszUserName, LPCXSTR lps return false; } //查询充值卡是否存在 - if (!Database_SQLite_SerialQuery(lpszSerialName, &st_SerialTable)) + if (!DBModule_SQLite_SerialQuery(lpszSerialName, &st_SerialTable)) { return false; } @@ -271,7 +271,7 @@ bool CDatabase_SQLite::Database_SQLite_UserPay(LPCXSTR lpszUserName, LPCXSTR lps return false; } //查询用户信息 - if (!Database_SQLite_UserQuery(lpszUserName, &st_UserTable)) + if (!DBModule_SQLite_UserQuery(lpszUserName, &st_UserTable)) { return false; } @@ -279,25 +279,25 @@ bool CDatabase_SQLite::Database_SQLite_UserPay(LPCXSTR lpszUserName, LPCXSTR lps switch (st_SerialTable.enSerialType) { case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: - if (!Database_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + if (!DBModule_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; } break; case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: - if (!Database_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + if (!DBModule_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; } break; case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: - if (!Database_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + if (!DBModule_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; } break; case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: - if (!Database_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) + if (!DBModule_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; } @@ -317,7 +317,7 @@ bool CDatabase_SQLite::Database_SQLite_UserPay(LPCXSTR lpszUserName, LPCXSTR lps return true; } /******************************************************************** -函数名称:Database_SQLite_UserLeave +函数名称:DBModule_SQLite_UserLeave 函数功能:用户离开处理事件 参数.一:pSt_TimeProtocol In/Out:In @@ -329,7 +329,7 @@ bool CDatabase_SQLite::Database_SQLite_UserPay(LPCXSTR lpszUserName, LPCXSTR lps 意思:是否处理成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol) +bool CDBModule_SQLite::DBModule_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol) { SQLPacket_IsErrorOccur = false; @@ -374,7 +374,7 @@ bool CDatabase_SQLite::Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_Time return true; } /******************************************************************** -函数名称:Database_SQLite_UserSet +函数名称:DBModule_SQLite_UserSet 函数功能:设置用户信息 参数.一:pSt_UserTable In/Out:In @@ -386,7 +386,7 @@ bool CDatabase_SQLite::Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_Time 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable) +bool CDBModule_SQLite::DBModule_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable) { SQLPacket_IsErrorOccur = false; @@ -404,7 +404,7 @@ bool CDatabase_SQLite::Database_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable) return true; } /******************************************************************** -函数名称:Database_SQLite_UserList +函数名称:DBModule_SQLite_UserList 函数功能:获取用户列表 参数.一:pppSt_UserInfo In/Out:Out @@ -431,7 +431,7 @@ bool CDatabase_SQLite::Database_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable) 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd) +bool CDBModule_SQLite::DBModule_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd) { SQLPacket_IsErrorOccur = false; @@ -502,7 +502,7 @@ bool CDatabase_SQLite::Database_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserI return true; } /******************************************************************** -函数名称:Database_SQLite_SerialInsert +函数名称:DBModule_SQLite_SerialInsert 函数功能:插入一个序列号到数据库 参数.一:lpszSerialNumber In/Out:In @@ -514,14 +514,14 @@ bool CDatabase_SQLite::Database_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserI 意思:是否插入成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_SerialInsert(LPCXSTR lpszSerialNumber) +bool CDBModule_SQLite::DBModule_SQLite_SerialInsert(LPCXSTR lpszSerialNumber) { SQLPacket_IsErrorOccur = false; XCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - if (Database_SQLite_SerialQuery(lpszSerialNumber)) + if (DBModule_SQLite_SerialQuery(lpszSerialNumber)) { SQLPacket_IsErrorOccur = true; SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; @@ -568,7 +568,7 @@ bool CDatabase_SQLite::Database_SQLite_SerialInsert(LPCXSTR lpszSerialNumber) return true; } /******************************************************************** -函数名称:Database_SQLite_SerialDelete +函数名称:DBModule_SQLite_SerialDelete 函数功能:从数据库删除指定序列号 参数.一:lpszSerialNumber In/Out:In @@ -580,7 +580,7 @@ bool CDatabase_SQLite::Database_SQLite_SerialInsert(LPCXSTR lpszSerialNumber) 意思:是否删除成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_SerialDelete(LPCXSTR lpszSerialNumber) +bool CDBModule_SQLite::DBModule_SQLite_SerialDelete(LPCXSTR lpszSerialNumber) { SQLPacket_IsErrorOccur = false; @@ -597,7 +597,7 @@ bool CDatabase_SQLite::Database_SQLite_SerialDelete(LPCXSTR lpszSerialNumber) return true; } /******************************************************************** -函数名称:Database_SQLite_SerialQuery +函数名称:DBModule_SQLite_SerialQuery 函数功能:查询一个指定的序列号信息 参数.一:lpszSerialNumber In/Out:In @@ -614,7 +614,7 @@ bool CDatabase_SQLite::Database_SQLite_SerialDelete(LPCXSTR lpszSerialNumber) 意思:是否查询成功,如果第二个参数为NULL,那么将只返回是否有这个序列号 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable /* = NULL */) +bool CDBModule_SQLite::DBModule_SQLite_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable /* = NULL */) { SQLPacket_IsErrorOccur = false; XCHAR tszSQLStatement[1024]; //SQL语句 @@ -665,7 +665,7 @@ bool CDatabase_SQLite::Database_SQLite_SerialQuery(LPCXSTR lpszSerialNumber, LPA return true; } /******************************************************************** -函数名称:Database_SQLite_SerialQueryAll +函数名称:DBModule_SQLite_SerialQueryAll 函数功能:查询序列卡表中的所有序列号 参数.一:pppSt_SerialTable In/Out:Out @@ -692,7 +692,7 @@ bool CDatabase_SQLite::Database_SQLite_SerialQuery(LPCXSTR lpszSerialNumber, LPA 意思:是否查询成功 备注:参数一需要调用基础库的释放内存函数进行内存释放 *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd) +bool CDBModule_SQLite::DBModule_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd) { SQLPacket_IsErrorOccur = false; @@ -747,7 +747,7 @@ bool CDatabase_SQLite::Database_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE*** ppp return true; } /******************************************************************** -函数名称:Database_SQLite_SerialPush +函数名称:DBModule_SQLite_SerialPush 函数功能:插入一条指定的序列号信息到服务器 参数.一:pSt_SerialTable In/Out:In @@ -759,14 +759,14 @@ bool CDatabase_SQLite::Database_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE*** ppp 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable) +bool CDBModule_SQLite::DBModule_SQLite_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable) { SQLPacket_IsErrorOccur = false; XCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - if (Database_SQLite_SerialQuery(pSt_SerialTable->tszSerialNumber)) + if (DBModule_SQLite_SerialQuery(pSt_SerialTable->tszSerialNumber)) { SQLPacket_IsErrorOccur = true; SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; @@ -783,7 +783,7 @@ bool CDatabase_SQLite::Database_SQLite_SerialPush(AUTHREG_SERIALTABLE* pSt_Seria return true; } /******************************************************************** -函数名称:Database_SQLite_TryInsert +函数名称:DBModule_SQLite_TryInsert 函数功能:网络使用模式插入一条数据 参数.一:pSt_AuthVer In/Out:In @@ -795,7 +795,7 @@ bool CDatabase_SQLite::Database_SQLite_SerialPush(AUTHREG_SERIALTABLE* pSt_Seria 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer) +bool CDBModule_SQLite::DBModule_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer) { SQLPacket_IsErrorOccur = false; @@ -813,7 +813,7 @@ bool CDatabase_SQLite::Database_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer) //验证是否存在 _tcsxcpy(st_AuthVer.tszVSerial, pSt_AuthVer->tszVSerial); - if (Database_SQLite_TryQuery(&st_AuthVer)) + if (DBModule_SQLite_TryQuery(&st_AuthVer)) { SQLPacket_IsErrorOccur = true; SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; @@ -830,7 +830,7 @@ bool CDatabase_SQLite::Database_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer) return true; } /******************************************************************** -函数名称:Database_SQLite_TryQuery +函数名称:DBModule_SQLite_TryQuery 函数功能:试用序列号查询函数 参数.一:pSt_AuthVer In/Out:In/Out @@ -842,7 +842,7 @@ bool CDatabase_SQLite::Database_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer) 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) +bool CDBModule_SQLite::DBModule_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) { SQLPacket_IsErrorOccur = false; @@ -892,7 +892,7 @@ bool CDatabase_SQLite::Database_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) return true; } /******************************************************************** -函数名称:Database_SQLite_TryDelete +函数名称:DBModule_SQLite_TryDelete 函数功能:删除一条指定的试用数据 参数.一:lpszSerial In/Out:In @@ -904,7 +904,7 @@ bool CDatabase_SQLite::Database_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_TryDelete(LPCXSTR lpszSerial) +bool CDBModule_SQLite::DBModule_SQLite_TryDelete(LPCXSTR lpszSerial) { SQLPacket_IsErrorOccur = false; @@ -928,7 +928,7 @@ bool CDatabase_SQLite::Database_SQLite_TryDelete(LPCXSTR lpszSerial) return true; } /******************************************************************** -函数名称:Database_SQLite_TryClear +函数名称:DBModule_SQLite_TryClear 函数功能:清理函数,自动清理过期数据 参数.一:nThanValue In/Out:In @@ -945,7 +945,7 @@ bool CDatabase_SQLite::Database_SQLite_TryDelete(LPCXSTR lpszSerial) 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVMode /* = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW */) +bool CDBModule_SQLite::DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVMode /* = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW */) { SQLPacket_IsErrorOccur = false; @@ -1030,7 +1030,7 @@ bool CDatabase_SQLite::Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONE return true; } /******************************************************************** -函数名称:Database_SQLite_TrySet +函数名称:DBModule_SQLite_TrySet 函数功能:设置用户信息函数 参数.一:pSt_AuthVer In/Out:In @@ -1042,7 +1042,7 @@ bool CDatabase_SQLite::Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONE 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer) +bool CDBModule_SQLite::DBModule_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer) { SQLPacket_IsErrorOccur = false; @@ -1060,7 +1060,7 @@ bool CDatabase_SQLite::Database_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer) return true; } /******************************************************************** -函数名称:Database_SQLite_TryList +函数名称:DBModule_SQLite_TryList 函数功能:请求试用期列表 参数.一:pppSt_AuthVer In/Out:Out @@ -1087,7 +1087,7 @@ bool CDatabase_SQLite::Database_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer) 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart, int nPosEnd) +bool CDBModule_SQLite::DBModule_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart, int nPosEnd) { SQLPacket_IsErrorOccur = false; @@ -1134,7 +1134,7 @@ bool CDatabase_SQLite::Database_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, return true; } /******************************************************************** -函数名称:Database_SQLite_BannedInsert +函数名称:DBModule_SQLite_BannedInsert 函数功能:黑名单列表插入 参数.一:pSt_Banned In/Out:In @@ -1146,7 +1146,7 @@ bool CDatabase_SQLite::Database_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned) +bool CDBModule_SQLite::DBModule_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned) { SQLPacket_IsErrorOccur = false; @@ -1157,7 +1157,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned) return false; } //存在直接返回 - if (Database_SQLite_BannedExist(pSt_Banned)) + if (DBModule_SQLite_BannedExist(pSt_Banned)) { return true; } @@ -1182,7 +1182,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned) return true; } /******************************************************************** -函数名称:Database_SQLite_BannedDelete +函数名称:DBModule_SQLite_BannedDelete 函数功能:黑名单列表删除 参数.一:pSt_Banned In/Out:In @@ -1194,7 +1194,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned) 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned) +bool CDBModule_SQLite::DBModule_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned) { SQLPacket_IsErrorOccur = false; @@ -1225,7 +1225,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned) return true; } /******************************************************************** -函数名称:Database_SQLite_BannedList +函数名称:DBModule_SQLite_BannedList 函数功能:黑名单列表查询 参数.一:pppSt_BannedUser In/Out:Out @@ -1262,7 +1262,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned) 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd) +bool CDBModule_SQLite::DBModule_SQLite_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd) { SQLPacket_IsErrorOccur = false; @@ -1374,7 +1374,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_Banned return true; } /******************************************************************** -函数名称:Database_SQLite_BannedExist +函数名称:DBModule_SQLite_BannedExist 函数功能:名单是否存在黑名单列表 参数.一:pSt_Banned In/Out:In @@ -1386,7 +1386,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_Banned 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) +bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) { SQLPacket_IsErrorOccur = false; //判断用域名是否存在 @@ -1493,7 +1493,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) return true; } /******************************************************************** -函数名称:Database_SQLite_BannedUPDate +函数名称:DBModule_SQLite_BannedUPDate 函数功能:更新名单列表信息 参数.一:pSt_Banned In/Out:In @@ -1505,7 +1505,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_BannedUPDate(AUTHREG_BANNED* pSt_Banned) +bool CDBModule_SQLite::DBModule_SQLite_BannedUPDate(AUTHREG_BANNED* pSt_Banned) { SQLPacket_IsErrorOccur = false; @@ -1536,7 +1536,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedUPDate(AUTHREG_BANNED* pSt_Banned) return true; } /******************************************************************** -函数名称:Database_SQLite_AnnouncementInsert +函数名称:DBModule_SQLite_AnnouncementInsert 函数功能:公告插入 参数.一:pSt_Announcement In/Out:In @@ -1548,7 +1548,7 @@ bool CDatabase_SQLite::Database_SQLite_BannedUPDate(AUTHREG_BANNED* pSt_Banned) 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement) +bool CDBModule_SQLite::DBModule_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement) { SQLPacket_IsErrorOccur = false; @@ -1572,7 +1572,7 @@ bool CDatabase_SQLite::Database_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* return true; } /******************************************************************** -函数名称:Database_SQLite_AnnouncementDelete +函数名称:DBModule_SQLite_AnnouncementDelete 函数功能:公告删除 参数.一:pSt_Announcement In/Out:In @@ -1584,7 +1584,7 @@ bool CDatabase_SQLite::Database_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement) +bool CDBModule_SQLite::DBModule_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement) { SQLPacket_IsErrorOccur = false; @@ -1608,7 +1608,7 @@ bool CDatabase_SQLite::Database_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* return true; } /******************************************************************** -函数名称:Database_SQLite_AnnouncementList +函数名称:DBModule_SQLite_AnnouncementList 函数功能:列举所有公告 参数.一:ppppSt_Announcement In/Out:Out @@ -1625,7 +1625,7 @@ bool CDatabase_SQLite::Database_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* 意思:是否成功 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount) +bool CDBModule_SQLite::DBModule_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount) { SQLPacket_IsErrorOccur = false; @@ -1669,7 +1669,7 @@ bool CDatabase_SQLite::Database_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** // 保护函数 ////////////////////////////////////////////////////////////////////////// /******************************************************************** -函数名称:Database_SQLite_UserPayTime +函数名称:DBModule_SQLite_UserPayTime 函数功能:日期方式充值方式 参数.一:lpszUserName In/Out:In @@ -1701,7 +1701,7 @@ bool CDatabase_SQLite::Database_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** 意思:是否成功充值 备注: *********************************************************************/ -bool CDatabase_SQLite::Database_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType) +bool CDBModule_SQLite::DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType) { SQLPacket_IsErrorOccur = false; diff --git a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h similarity index 55% rename from XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h rename to XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h index 5f8a66f..417c673 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_SQLite/Database_SQLite.h +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h @@ -14,47 +14,47 @@ // AuthReg_UserTable内容:ID 用户名 密码 注册日期 剩余时间 硬件码 注册文件密码 QQ 身份证 // AuthReg_SerialTable内容:ID 使用者 序列号 使用时间 最大可允许时间 是否使用 ////////////////////////////////////////////////////////////////////////// -class CDatabase_SQLite +class CDBModule_SQLite { public: - CDatabase_SQLite(); - ~CDatabase_SQLite(); + CDBModule_SQLite(); + ~CDBModule_SQLite(); public: - bool Database_SQLite_Init(LPCXSTR lpszSQLFile, bool bIsChange = true); //初始化 - bool Database_SQLite_Destroy(); //销毁 + bool DBModule_SQLite_Init(LPCXSTR lpszSQLFile, bool bIsChange = true); //初始化 + bool DBModule_SQLite_Destroy(); //销毁 public: - bool Database_SQLite_UserDelete(LPCXSTR lpszUserName); //删除用户 - bool Database_SQLite_UserRegister(AUTHREG_USERTABLE*pSt_UserInfo); //用户注册 - bool Database_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo = NULL); //用户查询 - bool Database_SQLite_UserPay(LPCXSTR lpszUserName,LPCXSTR lpszSerialName); //充值卡充值 - bool Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol); //用户离开更新表 - bool Database_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable); - bool Database_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd); + bool DBModule_SQLite_UserDelete(LPCXSTR lpszUserName); //删除用户 + bool DBModule_SQLite_UserRegister(AUTHREG_USERTABLE*pSt_UserInfo); //用户注册 + bool DBModule_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo = NULL); //用户查询 + bool DBModule_SQLite_UserPay(LPCXSTR lpszUserName,LPCXSTR lpszSerialName); //充值卡充值 + bool DBModule_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol); //用户离开更新表 + bool DBModule_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable); + bool DBModule_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd); public: - bool Database_SQLite_SerialInsert(LPCXSTR lpszSerialNumber); //插入序列卡 - bool Database_SQLite_SerialDelete(LPCXSTR lpszSerialNumber); //删除一个序列号 - bool Database_SQLite_SerialQuery(LPCXSTR lpszSerialNumber,LPAUTHREG_SERIALTABLE pSt_SerialTable = NULL); //按照卡号或者用户查询 - bool Database_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE ***pppSt_SerialTable,int *pInt_ListCount, int nPosStart, int nPosEnd);//查询所有序列卡 - bool Database_SQLite_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable); + bool DBModule_SQLite_SerialInsert(LPCXSTR lpszSerialNumber); //插入序列卡 + bool DBModule_SQLite_SerialDelete(LPCXSTR lpszSerialNumber); //删除一个序列号 + bool DBModule_SQLite_SerialQuery(LPCXSTR lpszSerialNumber,LPAUTHREG_SERIALTABLE pSt_SerialTable = NULL); //按照卡号或者用户查询 + bool DBModule_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE ***pppSt_SerialTable,int *pInt_ListCount, int nPosStart, int nPosEnd);//查询所有序列卡 + bool DBModule_SQLite_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable); public: - bool Database_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); - bool Database_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); - bool Database_SQLite_TryDelete(LPCXSTR lpszSerial); - bool Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); - bool Database_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); - bool Database_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); + bool DBModule_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); + bool DBModule_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); + bool DBModule_SQLite_TryDelete(LPCXSTR lpszSerial); + bool DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); + bool DBModule_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); + bool DBModule_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); public: - bool Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned); - bool Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned); - bool Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd); - bool Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned); - bool Database_SQLite_BannedUPDate(AUTHREG_BANNED* pSt_Banned); + bool DBModule_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned); + bool DBModule_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned); + bool DBModule_SQLite_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd); + bool DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned); + bool DBModule_SQLite_BannedUPDate(AUTHREG_BANNED* pSt_Banned); public: - bool Database_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement); - bool Database_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); - bool Database_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); + bool DBModule_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement); + bool DBModule_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); + bool DBModule_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); protected: - bool Database_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType); + bool DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType); private: bool m_bChange; XNETHANDLE xhData; //数据库句柄 diff --git a/XEngine_Source/AuthorizeModule_Database/Database_Define.h b/XEngine_Source/AuthorizeModule_Database/Database_Define.h index dd02840..7f77743 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_Define.h +++ b/XEngine_Source/AuthorizeModule_Database/Database_Define.h @@ -18,7 +18,7 @@ extern "C" XLONG DBModule_GetLastError(int *pInt_SysError = NULL); /* 数据库服务导出函数 */ /************************************************************************/ /******************************************************************** -函数名称:Database_SQLite_Init +函数名称:DBModule_SQLite_Init 函数功能:初始化数据库服务 参数.一:lpszSQLFile In/Out:In @@ -35,18 +35,18 @@ extern "C" XLONG DBModule_GetLastError(int *pInt_SysError = NULL); 意思:是否成功 备注:先初始化数据库服务,在初始化网络服务,才可以使用本验证服务器! *********************************************************************/ -extern "C" bool Database_SQLite_Init(LPCXSTR lpszSQLFile, bool bIsChange = true); +extern "C" bool DBModule_SQLite_Init(LPCXSTR lpszSQLFile, bool bIsChange = true); /******************************************************************** -函数名称:Database_SQLite_Destroy +函数名称:DBModule_SQLite_Destroy 函数功能:销毁数据库服务 返回值 类型:逻辑型 意思:是否销毁成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_Destroy(); +extern "C" bool DBModule_SQLite_Destroy(); /******************************************************************** -函数名称:Database_SQLite_UserDelete +函数名称:DBModule_SQLite_UserDelete 函数功能:删除一个用户从数据库中 参数.一:lpszUserName In/Out:In @@ -58,9 +58,9 @@ extern "C" bool Database_SQLite_Destroy(); 意思:是否删除成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_UserDelete(LPCXSTR lpszUserName); +extern "C" bool DBModule_SQLite_UserDelete(LPCXSTR lpszUserName); /******************************************************************** -函数名称:Database_SQLite_UserRegister +函数名称:DBModule_SQLite_UserRegister 函数功能:用户注册处理数据库语句函数 参数.一:pSt_UserInfo In/Out:In @@ -72,9 +72,9 @@ extern "C" bool Database_SQLite_UserDelete(LPCXSTR lpszUserName); 意思:是否插入成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_UserRegister(AUTHREG_USERTABLE * pSt_UserInfo); +extern "C" bool DBModule_SQLite_UserRegister(AUTHREG_USERTABLE * pSt_UserInfo); /******************************************************************** -函数名称:Database_SQLite_UserQuery +函数名称:DBModule_SQLite_UserQuery 函数功能:查询用户相对应的值 参数.一:lpszUserName In/Out:In @@ -91,9 +91,9 @@ extern "C" bool Database_SQLite_UserRegister(AUTHREG_USERTABLE * pSt_UserInfo); 意思:是否查询成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_UserQuery(LPCXSTR lpszUserName,AUTHREG_USERTABLE *pSt_UserInfo); +extern "C" bool DBModule_SQLite_UserQuery(LPCXSTR lpszUserName,AUTHREG_USERTABLE *pSt_UserInfo); /******************************************************************** -函数名称:Database_SQLite_UserPay +函数名称:DBModule_SQLite_UserPay 函数功能:用户充值函数 参数.一:lpszUserName In/Out:In @@ -110,9 +110,9 @@ extern "C" bool Database_SQLite_UserQuery(LPCXSTR lpszUserName,AUTHREG_USERTABLE 意思:是否成功充值 备注: *********************************************************************/ -extern "C" bool Database_SQLite_UserPay(LPCXSTR lpszUserName,LPCXSTR lpszSerialName); +extern "C" bool DBModule_SQLite_UserPay(LPCXSTR lpszUserName,LPCXSTR lpszSerialName); /******************************************************************** -函数名称:Database_SQLite_UserLeave +函数名称:DBModule_SQLite_UserLeave 函数功能:用户离开处理事件 参数.一:pSt_TimeProtocol In/Out:In @@ -124,9 +124,9 @@ extern "C" bool Database_SQLite_UserPay(LPCXSTR lpszUserName,LPCXSTR lpszSerialN 意思:是否处理成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME * pSt_TimeProtocol); +extern "C" bool DBModule_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME * pSt_TimeProtocol); /******************************************************************** -函数名称:Database_SQLite_UserSet +函数名称:DBModule_SQLite_UserSet 函数功能:设置用户信息 参数.一:pSt_UserTable In/Out:In @@ -138,9 +138,9 @@ extern "C" bool Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME * pSt_TimeProtoc 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable); +extern "C" bool DBModule_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable); /******************************************************************** -函数名称:Database_SQLite_UserList +函数名称:DBModule_SQLite_UserList 函数功能:获取用户列表 参数.一:pppSt_UserInfo In/Out:Out @@ -167,9 +167,9 @@ extern "C" bool Database_SQLite_UserSet(AUTHREG_USERTABLE* pSt_UserTable); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd); +extern "C" bool DBModule_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd); /******************************************************************** -函数名称:Database_SQLite_SerialInsert +函数名称:DBModule_SQLite_SerialInsert 函数功能:插入一个序列号到数据库 参数.一:lpszSerialNumber In/Out:In @@ -181,9 +181,9 @@ extern "C" bool Database_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, in 意思:是否插入成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_SerialInsert(LPCXSTR lpszSerialNumber); +extern "C" bool DBModule_SQLite_SerialInsert(LPCXSTR lpszSerialNumber); /******************************************************************** -函数名称:Database_SQLite_SerialDelete +函数名称:DBModule_SQLite_SerialDelete 函数功能:从数据库删除指定序列号 参数.一:lpszSerialNumber In/Out:In @@ -195,9 +195,9 @@ extern "C" bool Database_SQLite_SerialInsert(LPCXSTR lpszSerialNumber); 意思:是否删除成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_SerialDelete(LPCXSTR lpszSerialNumber); +extern "C" bool DBModule_SQLite_SerialDelete(LPCXSTR lpszSerialNumber); /******************************************************************** -函数名称:Database_SQLite_SerialQuery +函数名称:DBModule_SQLite_SerialQuery 函数功能:查询一个指定的序列号信息 参数.一:lpszSerialNumber In/Out:In @@ -214,9 +214,9 @@ extern "C" bool Database_SQLite_SerialDelete(LPCXSTR lpszSerialNumber); 意思:是否查询成功,如果第二个参数为NULL,那么将只返回是否有这个序列号 备注: *********************************************************************/ -extern "C" bool Database_SQLite_SerialQuery(LPCXSTR lpszSerialNumber,LPAUTHREG_SERIALTABLE pSt_SerialTable); +extern "C" bool DBModule_SQLite_SerialQuery(LPCXSTR lpszSerialNumber,LPAUTHREG_SERIALTABLE pSt_SerialTable); /******************************************************************** -函数名称:Database_SQLite_SerialQueryAll +函数名称:DBModule_SQLite_SerialQueryAll 函数功能:查询序列卡表中的所有序列号 参数.一:pppSt_SerialTable In/Out:Out @@ -243,9 +243,9 @@ extern "C" bool Database_SQLite_SerialQuery(LPCXSTR lpszSerialNumber,LPAUTHREG_S 意思:是否查询成功 备注:参数一需要调用基础库的释放内存函数进行内存释放 *********************************************************************/ -extern "C" bool Database_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE * **pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd); +extern "C" bool DBModule_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE * **pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd); /******************************************************************** -函数名称:Database_SQLite_SerialPush +函数名称:DBModule_SQLite_SerialPush 函数功能:插入一条指定的序列号信息到服务器 参数.一:pSt_SerialTable In/Out:In @@ -257,9 +257,9 @@ extern "C" bool Database_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE * **pppSt_Ser 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable); +extern "C" bool DBModule_SQLite_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable); /******************************************************************** -函数名称:Database_SQLite_TryInsert +函数名称:DBModule_SQLite_TryInsert 函数功能:网络使用模式插入一条数据 参数.一:pSt_AuthVer In/Out:In @@ -271,9 +271,9 @@ extern "C" bool Database_SQLite_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable) 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); +extern "C" bool DBModule_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); /******************************************************************** -函数名称:Database_SQLite_TryQuery +函数名称:DBModule_SQLite_TryQuery 函数功能:试用序列号查询函数 参数.一:pSt_AuthVer In/Out:In/Out @@ -285,9 +285,9 @@ extern "C" bool Database_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); +extern "C" bool DBModule_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); /******************************************************************** -函数名称:Database_SQLite_TryDelete +函数名称:DBModule_SQLite_TryDelete 函数功能:删除一条指定的试用数据 参数.一:lpszSerial In/Out:In @@ -299,9 +299,9 @@ extern "C" bool Database_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_TryDelete(LPCXSTR lpszSerial); +extern "C" bool DBModule_SQLite_TryDelete(LPCXSTR lpszSerial); /******************************************************************** -函数名称:Database_SQLite_TryClear +函数名称:DBModule_SQLite_TryClear 函数功能:清理函数,自动清理过期数据 参数.一:nThanValue In/Out:In @@ -318,9 +318,9 @@ extern "C" bool Database_SQLite_TryDelete(LPCXSTR lpszSerial); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); +extern "C" bool DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); /******************************************************************** -函数名称:Database_SQLite_TrySet +函数名称:DBModule_SQLite_TrySet 函数功能:设置用户信息函数 参数.一:pSt_AuthVer In/Out:In @@ -332,9 +332,9 @@ extern "C" bool Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUT 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); +extern "C" bool DBModule_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); /******************************************************************** -函数名称:Database_SQLite_TryList +函数名称:DBModule_SQLite_TryList 函数功能:请求试用期列表 参数.一:pppSt_AuthVer In/Out:Out @@ -361,9 +361,9 @@ extern "C" bool Database_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); +extern "C" bool DBModule_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); /******************************************************************** -函数名称:Database_SQLite_BannedInsert +函数名称:DBModule_SQLite_BannedInsert 函数功能:黑名单列表插入 参数.一:pSt_Banned In/Out:In @@ -375,9 +375,9 @@ extern "C" bool Database_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* p 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned); +extern "C" bool DBModule_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned); /******************************************************************** -函数名称:Database_SQLite_BannedDelete +函数名称:DBModule_SQLite_BannedDelete 函数功能:黑名单列表删除 参数.一:pSt_Banned In/Out:In @@ -389,9 +389,9 @@ extern "C" bool Database_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned); +extern "C" bool DBModule_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned); /******************************************************************** -函数名称:Database_SQLite_BannedList +函数名称:DBModule_SQLite_BannedList 函数功能:黑名单列表查询 参数.一:pppSt_BannedUser In/Out:Out @@ -428,9 +428,9 @@ extern "C" bool Database_SQLite_BannedDelete(AUTHREG_BANNED* pSt_Banned); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd); +extern "C" bool DBModule_SQLite_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd); /******************************************************************** -函数名称:Database_SQLite_BannedExist +函数名称:DBModule_SQLite_BannedExist 函数功能:名单是否存在黑名单列表 参数.一:pSt_Banned In/Out:In @@ -442,9 +442,9 @@ extern "C" bool Database_SQLite_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, i 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned); +extern "C" bool DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned); /******************************************************************** -函数名称:Database_SQLite_BannedUPDate +函数名称:DBModule_SQLite_BannedUPDate 函数功能:更新名单列表信息 参数.一:pSt_Banned In/Out:In @@ -456,9 +456,9 @@ extern "C" bool Database_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_BannedUPDate(AUTHREG_BANNED* pSt_Banned); +extern "C" bool DBModule_SQLite_BannedUPDate(AUTHREG_BANNED* pSt_Banned); /******************************************************************** -函数名称:Database_SQLite_AnnouncementInsert +函数名称:DBModule_SQLite_AnnouncementInsert 函数功能:公告插入 参数.一:pSt_Announcement In/Out:In @@ -470,9 +470,9 @@ extern "C" bool Database_SQLite_BannedUPDate(AUTHREG_BANNED* pSt_Banned); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement); +extern "C" bool DBModule_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement); /******************************************************************** -函数名称:Database_SQLite_AnnouncementDelete +函数名称:DBModule_SQLite_AnnouncementDelete 函数功能:公告删除 参数.一:pSt_Announcement In/Out:In @@ -484,9 +484,9 @@ extern "C" bool Database_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Ann 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); +extern "C" bool DBModule_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); /******************************************************************** -函数名称:Database_SQLite_AnnouncementList +函数名称:DBModule_SQLite_AnnouncementList 函数功能:列举所有公告 参数.一:ppppSt_Announcement In/Out:Out @@ -503,4 +503,493 @@ extern "C" bool Database_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Ann 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Database_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); \ No newline at end of file +extern "C" bool DBModule_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); + +/************************************************************************/ +/* MYSQL数据库服务导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:DBModule_MySQL_Init +函数功能:初始化数据库管理器 + 参数.一:pSt_DBConnector + In/Out:In + 类型:数据结构指针 + 参数.二:bIsChange + In/Out:In + 类型:逻辑型 + 可空:Y + 意思:是否允许更改用户充值类型 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注:先初始化数据库服务,在初始化网络服务,才可以使用本验证服务器! +*********************************************************************/ +extern "C" bool DBModule_MySQL_Init(DATABASE_MYSQL_CONNECTINFO* pSt_DBConnector, bool bIsChange = true); +/******************************************************************** +函数名称:DBModule_MySQL_Destroy +函数功能:销毁数据库服务 +返回值 + 类型:逻辑型 + 意思:是否销毁成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_Destroy(); +/******************************************************************** +函数名称:DBModule_MySQL_UserDelete +函数功能:删除一个用户从数据库中 + 参数.一:lpszUserName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要删除的用户 +返回值 + 类型:逻辑型 + 意思:是否删除成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_UserDelete(LPCXSTR lpszUserName); +/******************************************************************** +函数名称:DBModule_MySQL_UserRegister +函数功能:用户注册处理数据库语句函数 + 参数.一:pSt_UserInfo + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要插入的用户数据 +返回值 + 类型:逻辑型 + 意思:是否插入成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_UserRegister(AUTHREG_USERTABLE* pSt_UserInfo); +/******************************************************************** +函数名称:DBModule_MySQL_UserQuery +函数功能:查询用户相对应的值 + 参数.一:lpszUserName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要查询的指定用户 + 参数.二:pSt_UserInfo + In/Out:Out + 类型:数据结构指针 + 可空:Y + 意思:如果为空NULL,那么将只判断此用户是否存在 +返回值 + 类型:逻辑型 + 意思:是否查询成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo); +/******************************************************************** +函数名称:DBModule_MySQL_UserPay +函数功能:用户充值函数 + 参数.一:lpszUserName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要充值的用户名 + 参数.二:lpszSerialName + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:充值使用的序列号 +返回值 + 类型:逻辑型 + 意思:是否成功充值 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName); +/******************************************************************** +函数名称:DBModule_MySQL_UserLeave +函数功能:用户离开处理事件 + 参数.一:pSt_TimeProtocol + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:离开的用户信息 +返回值 + 类型:逻辑型 + 意思:是否处理成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol); +/******************************************************************** +函数名称:DBModule_MySQL_UserSet +函数功能:设置用户信息 + 参数.一:pSt_UserTable + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要设置的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable); +/******************************************************************** +函数名称:DBModule_MySQL_UserList +函数功能:获取用户列表 + 参数.一:pppSt_UserInfo + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出用户列表,内存由用户释放 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型 + 可空:N + 意思:输出列表个数 + 参数.三:nPosStart + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入起始位置 + 参数.四:nPosEnd + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入结束位置 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd); +/******************************************************************** +函数名称:DBModule_MySQL_SerialInsert +函数功能:插入一个序列号到数据库 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要插入的序列号 +返回值 + 类型:逻辑型 + 意思:是否插入成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_SerialInsert(LPCXSTR lpszSerialNumber); +/******************************************************************** +函数名称:DBModule_MySQL_SerialDelete +函数功能:从数据库删除指定序列号 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要删除的序列号 +返回值 + 类型:逻辑型 + 意思:是否删除成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_SerialDelete(LPCXSTR lpszSerialNumber); +/******************************************************************** +函数名称:DBModule_MySQL_SerialQuery +函数功能:查询一个指定的序列号信息 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要查询的序列号 + 参数.二:pSt_SerialTable + In/Out:Out + 类型:数据结构指针 + 可空:Y + 意思:导出查询到的信息,如果为NULL,此参数将不起作用 +返回值 + 类型:逻辑型 + 意思:是否查询成功,如果第二个参数为NULL,那么将只返回是否有这个序列号 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable); +/******************************************************************** +函数名称:DBModule_MySQL_SerialQueryAll +函数功能:查询序列卡表中的所有序列号 + 参数.一:pppSt_SerialTable + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出序列卡列表 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:Y + 意思:输出多少张卡 + 参数.三:nPosStart + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入起始位置 + 参数.四:nPosEnd + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入结束位置 +返回值 + 类型:逻辑型 + 意思:是否查询成功 +备注:参数一需要调用基础库的释放内存函数进行内存释放 +*********************************************************************/ +extern "C" bool DBModule_MySQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd); +/******************************************************************** +函数名称:DBModule_MySQL_SerialPush +函数功能:插入一条指定的序列号信息到服务器 + 参数.一:pSt_SerialTable + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable); +/******************************************************************** +函数名称:DBModule_MySQL_TryInsert +函数功能:网络使用模式插入一条数据 + 参数.一:pSt_AuthVer + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); +/******************************************************************** +函数名称:DBModule_MySQL_TryQuery +函数功能:试用序列号查询函数 + 参数.一:pSt_AuthVer + In/Out:In/Out + 类型:数据结构指针 + 可空:N + 意思:输入序列号,输出获取到的内容 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); +/******************************************************************** +函数名称:DBModule_MySQL_TryDelete +函数功能:删除一条指定的试用数据 + 参数.一:lpszSerial + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要删除的序列号 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_TryDelete(LPCXSTR lpszSerial); +/******************************************************************** +函数名称:DBModule_MySQL_TryClear +函数功能:清理函数,自动清理过期数据 + 参数.一:nThanValue + In/Out:In + 类型:整数型 + 可空:N + 意思:清理用于判断需要大于此的值 + 参数.二:enVerMode + In/Out:In + 类型:枚举型 + 可空:Y + 意思:判断注册类型,默认不判断全部执行 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); +/******************************************************************** +函数名称:DBModule_MySQL_TrySet +函数功能:设置用户信息函数 + 参数.一:pSt_AuthVer + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要更新的用户信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); +/******************************************************************** +函数名称:DBModule_MySQL_TryList +函数功能:请求试用期列表 + 参数.一:pppSt_AuthVer + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出获取到的列表 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出列表个数 + 参数.三:nPosStart + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查询起始编号 + 参数.四:nPosEnd + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查询结束编号 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); +/******************************************************************** +函数名称:DBModule_MySQL_BannedInsert +函数功能:黑名单列表插入 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_BannedInsert(AUTHREG_BANNED* pSt_Banned); +/******************************************************************** +函数名称:DBModule_MySQL_BannedDelete +函数功能:黑名单列表删除 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_BannedDelete(AUTHREG_BANNED* pSt_Banned); +/******************************************************************** +函数名称:DBModule_MySQL_BannedList +函数功能:黑名单列表查询 + 参数.一:pppSt_BannedUser + In/Out:Out + 类型:三级指针 + 可空:N + 意思:禁用的用户名列表 + 参数.二:pInt_UserCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出用户禁用列表个数 + 参数.三:pppSt_BannedAddr + In/Out:Out + 类型:三级指针 + 可空:N + 意思:禁用的IP地址列表 + 参数.四:pInt_AddrCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出地址禁用列表个数 + 参数.五:nPosStart + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查找起始位置 + 参数.六:nPosEnd + In/Out:In + 类型:整数型 + 可空:N + 意思:输入查找结束位置 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd); +/******************************************************************** +函数名称:DBModule_MySQL_BannedExist +函数功能:名单是否存在黑名单列表 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned); +/******************************************************************** +函数名称:DBModule_MySQL_BannedUPDate +函数功能:更新名单列表信息 + 参数.一:pSt_Banned + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要操作的数据 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_BannedUPDate(AUTHREG_BANNED* pSt_Banned); +/******************************************************************** +函数名称:DBModule_MySQL_AnnouncementInsert +函数功能:公告插入 + 参数.一:pSt_Announcement + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要插入的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement); +/******************************************************************** +函数名称:DBModule_MySQL_AnnouncementDelete +函数功能:公告删除 + 参数.一:pSt_Announcement + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要删除的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); +/******************************************************************** +函数名称:DBModule_MySQL_AnnouncementList +函数功能:列举所有公告 + 参数.一:ppppSt_Announcement + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出列举数据 + 参数.二:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:导出数据个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); diff --git a/XEngine_Source/AuthorizeModule_Database/Makefile b/XEngine_Source/AuthorizeModule_Database/Makefile index 2e02eb4..69def22 100644 --- a/XEngine_Source/AuthorizeModule_Database/Makefile +++ b/XEngine_Source/AuthorizeModule_Database/Makefile @@ -10,7 +10,7 @@ LOADHDR = -I ./ LOADSO = LIB = -lXEngine_BaseLib -lHelpComponents_DataBase -lHelpComponents_Authorize LIBEX = -OBJECTS = Database_SQLite.o pch.o +OBJECTS = DBModule_SQLite.o DBModule_MySQL.o pch.o ifeq ($(RELEASE),1) FLAGS = -c @@ -51,8 +51,10 @@ endif all:$(OBJECTS) $(CC) $(DEBUG) $(OBJECTS) -o libAuthorizeModule_Database.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) -Database_SQLite.o:./Database_SQLite/Database_SQLite.cpp - $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./Database_SQLite/Database_SQLite.cpp +DBModule_SQLite.o:./DBModule_SQLite/DBModule_SQLite.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./DBModule_SQLite/DBModule_SQLite.cpp +DBModule_MySQL.o:./DBModule_MySQL/DBModule_MySQL.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./DBModule_MySQL/DBModule_MySQL.cpp pch.o:pch.cpp $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) pch.cpp diff --git a/XEngine_Source/AuthorizeModule_Database/pch.cpp b/XEngine_Source/AuthorizeModule_Database/pch.cpp index 7b844cf..390f698 100644 --- a/XEngine_Source/AuthorizeModule_Database/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Database/pch.cpp @@ -1,5 +1,6 @@ #include "pch.h" -#include "Database_SQLite/Database_SQLite.h" +#include "DBModule_SQLite/DBModule_SQLite.h" +#include "DBModule_MySQL/DBModule_MySQL.h" /******************************************************************** // Created: 2022/05/26 11:02:23 // File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_Database\pch.cpp @@ -14,7 +15,8 @@ bool SQLPacket_IsErrorOccur = false; XLONG SQLPacket_dwErrorCode = 0; ////////////////////////////////////////////////////////////////////////// -CDatabase_SQLite m_SQLAuth; +CDBModule_SQLite m_DBSQLite; +CDBModule_MySQL m_DBMySQL; ////////////////////////////////////////////////////////////////////////// // 导出的函数 ////////////////////////////////////////////////////////////////////////// @@ -29,115 +31,231 @@ extern "C" XLONG DBModule_GetLastError(int* pInt_SysError) /************************************************************************/ /* 数据库服务导出函数 */ /************************************************************************/ -extern "C" bool Database_SQLite_Init(LPCXSTR lpszSQLFile, bool bIsChange) +extern "C" bool DBModule_SQLite_Init(LPCXSTR lpszSQLFile, bool bIsChange) { - return m_SQLAuth.Database_SQLite_Init(lpszSQLFile, bIsChange); + return m_DBSQLite.DBModule_SQLite_Init(lpszSQLFile, bIsChange); } -extern "C" bool Database_SQLite_Destroy() +extern "C" bool DBModule_SQLite_Destroy() { - return m_SQLAuth.Database_SQLite_Destroy(); + return m_DBSQLite.DBModule_SQLite_Destroy(); } -extern "C" bool Database_SQLite_UserDelete(LPCXSTR lpszUserName) +extern "C" bool DBModule_SQLite_UserDelete(LPCXSTR lpszUserName) { - return m_SQLAuth.Database_SQLite_UserDelete(lpszUserName); + return m_DBSQLite.DBModule_SQLite_UserDelete(lpszUserName); } -extern "C" bool Database_SQLite_UserRegister(AUTHREG_USERTABLE * pSt_UserInfo) +extern "C" bool DBModule_SQLite_UserRegister(AUTHREG_USERTABLE * pSt_UserInfo) { - return m_SQLAuth.Database_SQLite_UserRegister(pSt_UserInfo); + return m_DBSQLite.DBModule_SQLite_UserRegister(pSt_UserInfo); } -extern "C" bool Database_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE * pSt_UserInfo) +extern "C" bool DBModule_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE * pSt_UserInfo) { - return m_SQLAuth.Database_SQLite_UserQuery(lpszUserName, pSt_UserInfo); + return m_DBSQLite.DBModule_SQLite_UserQuery(lpszUserName, pSt_UserInfo); } -extern "C" bool Database_SQLite_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName) +extern "C" bool DBModule_SQLite_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName) { - return m_SQLAuth.Database_SQLite_UserPay(lpszUserName, lpszSerialName); + return m_DBSQLite.DBModule_SQLite_UserPay(lpszUserName, lpszSerialName); } -extern "C" bool Database_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME * pSt_TimeProtocol) +extern "C" bool DBModule_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME * pSt_TimeProtocol) { - return m_SQLAuth.Database_SQLite_UserLeave(pSt_TimeProtocol); + return m_DBSQLite.DBModule_SQLite_UserLeave(pSt_TimeProtocol); } -extern "C" bool Database_SQLite_UserSet(AUTHREG_USERTABLE * pSt_UserTable) +extern "C" bool DBModule_SQLite_UserSet(AUTHREG_USERTABLE * pSt_UserTable) { - return m_SQLAuth.Database_SQLite_UserSet(pSt_UserTable); + return m_DBSQLite.DBModule_SQLite_UserSet(pSt_UserTable); } -extern "C" bool Database_SQLite_UserList(AUTHREG_USERTABLE * **pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd) +extern "C" bool DBModule_SQLite_UserList(AUTHREG_USERTABLE * **pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd) { - return m_SQLAuth.Database_SQLite_UserList(pppSt_UserInfo, pInt_ListCount, nPosStart, nPosEnd); + return m_DBSQLite.DBModule_SQLite_UserList(pppSt_UserInfo, pInt_ListCount, nPosStart, nPosEnd); } -extern "C" bool Database_SQLite_SerialInsert(LPCXSTR lpszSerialNumber) +extern "C" bool DBModule_SQLite_SerialInsert(LPCXSTR lpszSerialNumber) { - return m_SQLAuth.Database_SQLite_SerialInsert(lpszSerialNumber); + return m_DBSQLite.DBModule_SQLite_SerialInsert(lpszSerialNumber); } -extern "C" bool Database_SQLite_SerialDelete(LPCXSTR lpszSerialNumber) +extern "C" bool DBModule_SQLite_SerialDelete(LPCXSTR lpszSerialNumber) { - return m_SQLAuth.Database_SQLite_SerialDelete(lpszSerialNumber); + return m_DBSQLite.DBModule_SQLite_SerialDelete(lpszSerialNumber); } -extern "C" bool Database_SQLite_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable) +extern "C" bool DBModule_SQLite_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable) { - return m_SQLAuth.Database_SQLite_SerialQuery(lpszSerialNumber, pSt_SerialTable); + return m_DBSQLite.DBModule_SQLite_SerialQuery(lpszSerialNumber, pSt_SerialTable); } -extern "C" bool Database_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE * **pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd) +extern "C" bool DBModule_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE * **pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd) { - return m_SQLAuth.Database_SQLite_SerialQueryAll(pppSt_SerialTable, pInt_ListCount, nPosStart, nPosEnd); + return m_DBSQLite.DBModule_SQLite_SerialQueryAll(pppSt_SerialTable, pInt_ListCount, nPosStart, nPosEnd); } -extern "C" bool Database_SQLite_SerialPush(AUTHREG_SERIALTABLE * pSt_SerialTable) +extern "C" bool DBModule_SQLite_SerialPush(AUTHREG_SERIALTABLE * pSt_SerialTable) { - return m_SQLAuth.Database_SQLite_SerialPush(pSt_SerialTable); + return m_DBSQLite.DBModule_SQLite_SerialPush(pSt_SerialTable); } -extern "C" bool Database_SQLite_TryInsert(AUTHREG_TEMPVER * pSt_AuthVer) +extern "C" bool DBModule_SQLite_TryInsert(AUTHREG_TEMPVER * pSt_AuthVer) { - return m_SQLAuth.Database_SQLite_TryInsert(pSt_AuthVer); + return m_DBSQLite.DBModule_SQLite_TryInsert(pSt_AuthVer); } -extern "C" bool Database_SQLite_TryQuery(AUTHREG_TEMPVER * pSt_AuthVer) +extern "C" bool DBModule_SQLite_TryQuery(AUTHREG_TEMPVER * pSt_AuthVer) { - return m_SQLAuth.Database_SQLite_TryQuery(pSt_AuthVer); + return m_DBSQLite.DBModule_SQLite_TryQuery(pSt_AuthVer); } -extern "C" bool Database_SQLite_TryDelete(LPCXSTR lpszSerial) +extern "C" bool DBModule_SQLite_TryDelete(LPCXSTR lpszSerial) { - return m_SQLAuth.Database_SQLite_TryDelete(lpszSerial); + return m_DBSQLite.DBModule_SQLite_TryDelete(lpszSerial); } -extern "C" bool Database_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode) +extern "C" bool DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode) { - return m_SQLAuth.Database_SQLite_TryClear(nThanValue, enVerMode); + return m_DBSQLite.DBModule_SQLite_TryClear(nThanValue, enVerMode); } -extern "C" bool Database_SQLite_TrySet(AUTHREG_TEMPVER * pSt_AuthVer) +extern "C" bool DBModule_SQLite_TrySet(AUTHREG_TEMPVER * pSt_AuthVer) { - return m_SQLAuth.Database_SQLite_TrySet(pSt_AuthVer); + return m_DBSQLite.DBModule_SQLite_TrySet(pSt_AuthVer); } -extern "C" bool Database_SQLite_TryList(AUTHREG_TEMPVER * **pppSt_AuthVer, int* pInt_ListCount, int nPosStart, int nPosEnd) +extern "C" bool DBModule_SQLite_TryList(AUTHREG_TEMPVER * **pppSt_AuthVer, int* pInt_ListCount, int nPosStart, int nPosEnd) { - return m_SQLAuth.Database_SQLite_TryList(pppSt_AuthVer, pInt_ListCount, nPosStart, nPosEnd); + return m_DBSQLite.DBModule_SQLite_TryList(pppSt_AuthVer, pInt_ListCount, nPosStart, nPosEnd); } -extern "C" bool Database_SQLite_BannedInsert(AUTHREG_BANNED * pSt_Banned) +extern "C" bool DBModule_SQLite_BannedInsert(AUTHREG_BANNED * pSt_Banned) { - return m_SQLAuth.Database_SQLite_BannedInsert(pSt_Banned); + return m_DBSQLite.DBModule_SQLite_BannedInsert(pSt_Banned); } -extern "C" bool Database_SQLite_BannedDelete(AUTHREG_BANNED * pSt_Banned) +extern "C" bool DBModule_SQLite_BannedDelete(AUTHREG_BANNED * pSt_Banned) { - return m_SQLAuth.Database_SQLite_BannedDelete(pSt_Banned); + return m_DBSQLite.DBModule_SQLite_BannedDelete(pSt_Banned); } -extern "C" bool Database_SQLite_BannedList(AUTHREG_BANNED * **pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED * **pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd) +extern "C" bool DBModule_SQLite_BannedList(AUTHREG_BANNED * **pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED * **pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd) { - return m_SQLAuth.Database_SQLite_BannedList(pppSt_BannedUser, pInt_UserCount, pppSt_BannedAddr, pInt_AddrCount, nPosStart, nPosEnd); + return m_DBSQLite.DBModule_SQLite_BannedList(pppSt_BannedUser, pInt_UserCount, pppSt_BannedAddr, pInt_AddrCount, nPosStart, nPosEnd); } -extern "C" bool Database_SQLite_BannedExist(AUTHREG_BANNED * pSt_Banned) +extern "C" bool DBModule_SQLite_BannedExist(AUTHREG_BANNED * pSt_Banned) { - return m_SQLAuth.Database_SQLite_BannedExist(pSt_Banned); + return m_DBSQLite.DBModule_SQLite_BannedExist(pSt_Banned); } -extern "C" bool Database_SQLite_BannedUPDate(AUTHREG_BANNED * pSt_Banned) +extern "C" bool DBModule_SQLite_BannedUPDate(AUTHREG_BANNED * pSt_Banned) { - return m_SQLAuth.Database_SQLite_BannedUPDate(pSt_Banned); + return m_DBSQLite.DBModule_SQLite_BannedUPDate(pSt_Banned); } -extern "C" bool Database_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT * pSt_Announcement) +extern "C" bool DBModule_SQLite_AnnouncementInsert(AUTHREG_ANNOUNCEMENT * pSt_Announcement) { - return m_SQLAuth.Database_SQLite_AnnouncementInsert(pSt_Announcement); + return m_DBSQLite.DBModule_SQLite_AnnouncementInsert(pSt_Announcement); } -extern "C" bool Database_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT * pSt_Announcement) +extern "C" bool DBModule_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT * pSt_Announcement) { - return m_SQLAuth.Database_SQLite_AnnouncementDelete(pSt_Announcement); + return m_DBSQLite.DBModule_SQLite_AnnouncementDelete(pSt_Announcement); } -extern "C" bool Database_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT * **ppppSt_Announcement, int* pInt_ListCount) +extern "C" bool DBModule_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT * **ppppSt_Announcement, int* pInt_ListCount) { - return m_SQLAuth.Database_SQLite_AnnouncementList(ppppSt_Announcement, pInt_ListCount); + return m_DBSQLite.DBModule_SQLite_AnnouncementList(ppppSt_Announcement, pInt_ListCount); +} + +/************************************************************************/ +/* MYSQL数据库服务导出函数 */ +/************************************************************************/ +extern "C" bool DBModule_MySQL_Init(DATABASE_MYSQL_CONNECTINFO* pSt_DBConnector, bool bIsChange) +{ + return m_DBMySQL.DBModule_MySQL_Init(pSt_DBConnector, bIsChange); +} +extern "C" bool DBModule_MySQL_Destroy() +{ + return m_DBMySQL.DBModule_MySQL_Destroy(); +} +extern "C" bool DBModule_MySQL_UserDelete(LPCXSTR lpszUserName) +{ + return m_DBMySQL.DBModule_MySQL_UserDelete(lpszUserName); +} +extern "C" bool DBModule_MySQL_UserRegister(AUTHREG_USERTABLE* pSt_UserInfo) +{ + return m_DBMySQL.DBModule_MySQL_UserRegister(pSt_UserInfo); +} +extern "C" bool DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USERTABLE* pSt_UserInfo) +{ + return m_DBMySQL.DBModule_MySQL_UserQuery(lpszUserName, pSt_UserInfo); +} +extern "C" bool DBModule_MySQL_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszSerialName) +{ + return m_DBMySQL.DBModule_MySQL_UserPay(lpszUserName, lpszSerialName); +} +extern "C" bool DBModule_MySQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimeProtocol) +{ + return m_DBMySQL.DBModule_MySQL_UserLeave(pSt_TimeProtocol); +} +extern "C" bool DBModule_MySQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable) +{ + return m_DBMySQL.DBModule_MySQL_UserSet(pSt_UserTable); +} +extern "C" bool DBModule_MySQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInfo, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + return m_DBMySQL.DBModule_MySQL_UserList(pppSt_UserInfo, pInt_ListCount, nPosStart, nPosEnd); +} +extern "C" bool DBModule_MySQL_SerialInsert(LPCXSTR lpszSerialNumber) +{ + return m_DBMySQL.DBModule_MySQL_SerialInsert(lpszSerialNumber); +} +extern "C" bool DBModule_MySQL_SerialDelete(LPCXSTR lpszSerialNumber) +{ + return m_DBMySQL.DBModule_MySQL_SerialDelete(lpszSerialNumber); +} +extern "C" bool DBModule_MySQL_SerialQuery(LPCXSTR lpszSerialNumber, LPAUTHREG_SERIALTABLE pSt_SerialTable) +{ + return m_DBMySQL.DBModule_MySQL_SerialQuery(lpszSerialNumber, pSt_SerialTable); +} +extern "C" bool DBModule_MySQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + return m_DBMySQL.DBModule_MySQL_SerialQueryAll(pppSt_SerialTable, pInt_ListCount, nPosStart, nPosEnd); +} +extern "C" bool DBModule_MySQL_SerialPush(AUTHREG_SERIALTABLE* pSt_SerialTable) +{ + return m_DBMySQL.DBModule_MySQL_SerialPush(pSt_SerialTable); +} +extern "C" bool DBModule_MySQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer) +{ + return m_DBMySQL.DBModule_MySQL_TryInsert(pSt_AuthVer); +} +extern "C" bool DBModule_MySQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) +{ + return m_DBMySQL.DBModule_MySQL_TryQuery(pSt_AuthVer); +} +extern "C" bool DBModule_MySQL_TryDelete(LPCXSTR lpszSerial) +{ + return m_DBMySQL.DBModule_MySQL_TryDelete(lpszSerial); +} +extern "C" bool DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode) +{ + return m_DBMySQL.DBModule_MySQL_TryClear(nThanValue, enVerMode); +} +extern "C" bool DBModule_MySQL_TrySet(AUTHREG_TEMPVER* pSt_AuthVer) +{ + return m_DBMySQL.DBModule_MySQL_TrySet(pSt_AuthVer); +} +extern "C" bool DBModule_MySQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart, int nPosEnd) +{ + return m_DBMySQL.DBModule_MySQL_TryList(pppSt_AuthVer, pInt_ListCount, nPosStart, nPosEnd); +} +extern "C" bool DBModule_MySQL_BannedInsert(AUTHREG_BANNED* pSt_Banned) +{ + return m_DBMySQL.DBModule_MySQL_BannedInsert(pSt_Banned); +} +extern "C" bool DBModule_MySQL_BannedDelete(AUTHREG_BANNED* pSt_Banned) +{ + return m_DBMySQL.DBModule_MySQL_BannedDelete(pSt_Banned); +} +extern "C" bool DBModule_MySQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUser, int* pInt_UserCount, AUTHREG_BANNED*** pppSt_BannedAddr, int* pInt_AddrCount, int nPosStart, int nPosEnd) +{ + return m_DBMySQL.DBModule_MySQL_BannedList(pppSt_BannedUser, pInt_UserCount, pppSt_BannedAddr, pInt_AddrCount, nPosStart, nPosEnd); +} +extern "C" bool DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) +{ + return m_DBMySQL.DBModule_MySQL_BannedExist(pSt_Banned); +} +extern "C" bool DBModule_MySQL_BannedUPDate(AUTHREG_BANNED* pSt_Banned) +{ + return m_DBMySQL.DBModule_MySQL_BannedUPDate(pSt_Banned); +} +extern "C" bool DBModule_MySQL_AnnouncementInsert(AUTHREG_ANNOUNCEMENT* pSt_Announcement) +{ + return m_DBMySQL.DBModule_MySQL_AnnouncementInsert(pSt_Announcement); +} +extern "C" bool DBModule_MySQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement) +{ + return m_DBMySQL.DBModule_MySQL_AnnouncementDelete(pSt_Announcement); +} +extern "C" bool DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount) +{ + return m_DBMySQL.DBModule_MySQL_AnnouncementList(ppppSt_Announcement, pInt_ListCount); } \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp index f7d2290..9ac2150 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Get/AuthorizeHTTP_Token.cpp @@ -68,7 +68,16 @@ bool XEngine_AuthorizeHTTP_Token(LPCXSTR lpszClientAddr, XCHAR** pptszList, int return false; } } - if (!Database_SQLite_UserQuery(tszUserName, &st_UserTable)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_UserQuery(tszUserName, &st_UserTable); + } + else + { + bSuccess = DBModule_MySQL_UserQuery(tszUserName, &st_UserTable); + } + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Announcement.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Announcement.cpp index 0f1e9ce..3721652 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Announcement.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Announcement.cpp @@ -23,7 +23,14 @@ bool XEngine_AuthorizeHTTP_Announcement(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIN AUTHREG_ANNOUNCEMENT st_Announcement; memset(&st_Announcement, '\0', sizeof(AUTHREG_ANNOUNCEMENT)); - Database_SQLite_AnnouncementList(NULL, &nListCount); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_AnnouncementList(NULL, &nListCount); + } + else + { + DBModule_MySQL_AnnouncementList(NULL, &nListCount); + } if (nListCount > 10) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 510, "server limited"); @@ -32,7 +39,14 @@ bool XEngine_AuthorizeHTTP_Announcement(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIN return false; } Protocol_Parse_HttpParseAnnouncement(lpszMsgBuffer, nMsgLen, &st_Announcement); - Database_SQLite_AnnouncementInsert(&st_Announcement); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_AnnouncementInsert(&st_Announcement); + } + else + { + DBModule_MySQL_AnnouncementInsert(&st_Announcement); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,插入公告成功,公告信息:%s"), lpszClientAddr, st_Announcement.tszContext); @@ -43,7 +57,14 @@ bool XEngine_AuthorizeHTTP_Announcement(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIN memset(&st_Announcement, '\0', sizeof(AUTHREG_ANNOUNCEMENT)); Protocol_Parse_HttpParseAnnouncement(lpszMsgBuffer, nMsgLen, &st_Announcement); - Database_SQLite_AnnouncementDelete(&st_Announcement); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_AnnouncementDelete(&st_Announcement); + } + else + { + DBModule_MySQL_AnnouncementDelete(&st_Announcement); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,删除公告成功.删除公告ID:%lld"), lpszClientAddr, st_Announcement.nID); @@ -53,7 +74,14 @@ bool XEngine_AuthorizeHTTP_Announcement(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIN int nListCount = 0; AUTHREG_ANNOUNCEMENT** ppSt_Announcement; - Database_SQLite_AnnouncementList(&ppSt_Announcement, &nListCount); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_AnnouncementList(&ppSt_Announcement, &nListCount); + } + else + { + DBModule_MySQL_AnnouncementList(&ppSt_Announcement, &nListCount); + } Protocol_Packet_HttpAnnouncement(tszSDBuffer, &nSDLen, &ppSt_Announcement, nListCount); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_Announcement, nListCount); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp index f066df2..20ae19b 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp @@ -17,7 +17,14 @@ bool XEngine_AuthorizeHTTP_Banned(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); Protocol_Parse_HttpParseBanned(lpszMsgBuffer, nMsgLen, &st_Banned); - Database_SQLite_BannedInsert(&st_Banned); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_BannedInsert(&st_Banned); + } + else + { + DBModule_MySQL_BannedInsert(&st_Banned); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,插入禁用列表成功,禁用的用户:%s,禁用的IP地址:%s"), lpszClientAddr, st_Banned.tszUserName, st_Banned.tszIPAddr); @@ -28,7 +35,14 @@ bool XEngine_AuthorizeHTTP_Banned(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); Protocol_Parse_HttpParseBanned(lpszMsgBuffer, nMsgLen, &st_Banned); - Database_SQLite_BannedDelete(&st_Banned); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_BannedDelete(&st_Banned); + } + else + { + DBModule_MySQL_BannedDelete(&st_Banned); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,删除禁用列表成功,删除禁用的用户:%s,删除禁用的IP地址:%s"), lpszClientAddr, st_Banned.tszUserName, st_Banned.tszIPAddr); @@ -44,7 +58,14 @@ bool XEngine_AuthorizeHTTP_Banned(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L Protocol_Parse_HttpParseBanned2(lpszMsgBuffer, nMsgLen, &nPosStart, &nPosEnd); - Database_SQLite_BannedList(&ppSt_BannedUser, &nCountUser, &ppSt_BannedAddr, &nCountAddr, nPosStart, nPosEnd); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_BannedList(&ppSt_BannedUser, &nCountUser, &ppSt_BannedAddr, &nCountAddr, nPosStart, nPosEnd); + } + else + { + DBModule_MySQL_BannedList(&ppSt_BannedUser, &nCountUser, &ppSt_BannedAddr, &nCountAddr, nPosStart, nPosEnd); + } Protocol_Packet_HttpBanned(tszSDBuffer, &nSDLen, &ppSt_BannedUser, nCountUser, &ppSt_BannedAddr, nCountAddr); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_BannedAddr, nCountAddr); @@ -57,7 +78,14 @@ bool XEngine_AuthorizeHTTP_Banned(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); Protocol_Parse_HttpParseBanned(lpszMsgBuffer, nMsgLen, &st_Banned); - Database_SQLite_BannedUPDate(&st_Banned); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_BannedUPDate(&st_Banned); + } + else + { + DBModule_MySQL_BannedUPDate(&st_Banned); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,修改禁用列表成功,修改的用户:%s,修改的IP地址:%s"), lpszClientAddr, st_Banned.tszUserName, st_Banned.tszIPAddr); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Client.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Client.cpp index c4f257b..f1d1ecb 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Client.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Client.cpp @@ -17,7 +17,16 @@ bool XEngine_AuthorizeHTTP_Client(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); Protocol_Parse_HttpParseUser(lpszMsgBuffer, nMsgLen, &st_UserTable.st_UserInfo); - if (!Database_SQLite_UserQuery(st_UserTable.st_UserInfo.tszUserName, &st_UserTable)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_UserQuery(st_UserTable.st_UserInfo.tszUserName, &st_UserTable); + } + else + { + bSuccess = DBModule_MySQL_UserQuery(st_UserTable.st_UserInfo.tszUserName, &st_UserTable); + } + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "not found client"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -63,7 +72,14 @@ bool XEngine_AuthorizeHTTP_Client(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L if (!bOnline) { //只有bOnline不是在线列表的时候才执行 - Database_SQLite_UserList(&ppSt_UserInfo, &nOffCount, nPosStart, nPosEnd); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_UserList(&ppSt_UserInfo, &nOffCount, nPosStart, nPosEnd); + } + else + { + DBModule_MySQL_UserList(&ppSt_UserInfo, &nOffCount, nPosStart, nPosEnd); + } } Protocol_Packet_HttpClientList(ptszMsgBuffer, &nSDLen, &ppSt_ListClient, nOnCount, &ppSt_UserInfo, nOffCount); @@ -104,7 +120,16 @@ bool XEngine_AuthorizeHTTP_Client(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); Protocol_Parse_HttpParseTable(lpszMsgBuffer, nMsgLen, &st_UserTable); - if (!Database_SQLite_UserSet(&st_UserTable)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_UserSet(&st_UserTable); + } + else + { + bSuccess = DBModule_MySQL_UserSet(&st_UserTable); + } + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "not found client"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp index 94935d1..4dcafaf 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Pass.cpp @@ -19,7 +19,16 @@ bool XEngine_AuthorizeHTTP_Pass(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC memset(&st_UserTable, '\0', sizeof(AUTHREG_USERTABLE)); Protocol_Parse_HttpParseAuth(lpszMsgBuffer, nMsgLen, &st_UserAuth); - if (!Database_SQLite_UserQuery(st_UserAuth.tszUserName, &st_UserTable)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_UserQuery(st_UserAuth.tszUserName, &st_UserTable); + } + else + { + bSuccess = DBModule_MySQL_UserQuery(st_UserAuth.tszUserName, &st_UserTable); + } + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user notfound"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -43,7 +52,14 @@ bool XEngine_AuthorizeHTTP_Pass(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC memset(&st_ProtocolTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); Protocol_Parse_HttpParseTime(lpszMsgBuffer, nMsgLen, &st_ProtocolTime); - Database_SQLite_UserLeave(&st_ProtocolTime); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_UserLeave(&st_ProtocolTime); + } + else + { + DBModule_MySQL_UserLeave(&st_ProtocolTime); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -55,7 +71,14 @@ bool XEngine_AuthorizeHTTP_Pass(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC memset(&st_ProtocolTime, '\0', sizeof(AUTHREG_PROTOCOL_TIME)); Protocol_Parse_HttpParseTime(lpszMsgBuffer, nMsgLen, &st_ProtocolTime); - Database_SQLite_UserLeave(&st_ProtocolTime); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_UserLeave(&st_ProtocolTime); + } + else + { + DBModule_MySQL_UserLeave(&st_ProtocolTime); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("PASS客户端:%s,用户名:%s,超时通知成功"), lpszClientAddr, st_ProtocolTime.tszUserName); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp index 97bd0df..0e54d5d 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp @@ -32,7 +32,14 @@ bool XEngine_AuthorizeHTTP_Serial(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L return false; } AUTHREG_SERIALTABLE** ppSt_SerialTable; - Database_SQLite_SerialQueryAll(&ppSt_SerialTable, &nListCount, nPosStart, nPosEnd); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_SerialQueryAll(&ppSt_SerialTable, &nListCount, nPosStart, nPosEnd); + } + else + { + DBModule_MySQL_SerialQueryAll(&ppSt_SerialTable, &nListCount, nPosStart, nPosEnd); + } Protocol_Packet_HttpSerialList(ptszMsgBuffer, &nSDLen, &ppSt_SerialTable, nListCount); BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_SerialTable, nListCount); XEngine_Client_TaskSend(lpszClientAddr, ptszMsgBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -93,9 +100,19 @@ bool XEngine_AuthorizeHTTP_Serial(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L return false; } //导入序列卡 - for (int i = 0; i < nSerialCount; i++) + if (0 == st_AuthConfig.st_XSql.nDBType) + { + for (int i = 0; i < nSerialCount; i++) //导入序列卡 + { + DBModule_SQLite_SerialInsert(pptszSerialNumber[i]); + } + } + else { - Database_SQLite_SerialInsert(pptszSerialNumber[i]); + for (int i = 0; i < nSerialCount; i++) + { + DBModule_MySQL_SerialInsert(pptszSerialNumber[i]); + } } BaseLib_OperatorMemory_Free((XPPPMEM)&pptszSerialNumber, nSerialCount); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); @@ -108,9 +125,19 @@ bool XEngine_AuthorizeHTTP_Serial(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L AUTHREG_SERIALTABLE** ppSt_SerialTable; Protocol_Parse_HttpParseSerial(lpszMsgBuffer, nMsgLen, &ppSt_SerialTable, &nListCount); - for (int i = 0; i < nListCount; i++) + if (0 == st_AuthConfig.st_XSql.nDBType) { - Database_SQLite_SerialDelete(ppSt_SerialTable[i]->tszSerialNumber); + for (int i = 0; i < nListCount; i++) + { + DBModule_SQLite_SerialDelete(ppSt_SerialTable[i]->tszSerialNumber); + } + } + else + { + for (int i = 0; i < nListCount; i++) + { + DBModule_MySQL_SerialDelete(ppSt_SerialTable[i]->tszSerialNumber); + } } BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_SerialTable, nListCount); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); @@ -123,9 +150,19 @@ bool XEngine_AuthorizeHTTP_Serial(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L AUTHREG_SERIALTABLE** ppSt_SerialTable; Protocol_Parse_HttpParseSerial(lpszMsgBuffer, nMsgLen, &ppSt_SerialTable, &nListCount); - for (int i = 0; i < nListCount; i++) + if (0 == st_AuthConfig.st_XSql.nDBType) { - Database_SQLite_SerialPush(ppSt_SerialTable[i]); + for (int i = 0; i < nListCount; i++) + { + DBModule_SQLite_SerialPush(ppSt_SerialTable[i]); + } + } + else + { + for (int i = 0; i < nListCount; i++) + { + DBModule_MySQL_SerialPush(ppSt_SerialTable[i]); + } } BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_SerialTable, nListCount); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp index 86d7089..ac5b3ba 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Try.cpp @@ -29,7 +29,14 @@ bool XEngine_AuthorizeHTTP_Try(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPCX int nListCount = 0; AUTHREG_TEMPVER** ppSt_AuthVer; - Database_SQLite_TryList(&ppSt_AuthVer, &nListCount); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_TryList(&ppSt_AuthVer, &nListCount); + } + else + { + DBModule_MySQL_TryList(&ppSt_AuthVer, &nListCount); + } Protocol_Packet_HttpTryList(ptszMsgBuffer, &nSDLen, &ppSt_AuthVer, nListCount); BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_AuthVer, nListCount); XEngine_Client_TaskSend(lpszClientAddr, ptszMsgBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -43,7 +50,14 @@ bool XEngine_AuthorizeHTTP_Try(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPCX memset(&st_VERTemp, '\0', sizeof(AUTHREG_TEMPVER)); Protocol_Parse_HttpParseTry(lpszMsgBuffer, nMsgLen, &st_VERTemp); - Database_SQLite_TryDelete(st_VERTemp.tszVSerial); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_TryDelete(st_VERTemp.tszVSerial); + } + else + { + DBModule_MySQL_TryDelete(st_VERTemp.tszVSerial); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,序列号:%s,临时验证删除成功"), lpszClientAddr, st_VERTemp.tszVSerial); @@ -54,7 +68,14 @@ bool XEngine_AuthorizeHTTP_Try(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPCX memset(&st_VERTemp, '\0', sizeof(AUTHREG_TEMPVER)); Protocol_Parse_HttpParseTry(lpszMsgBuffer, nMsgLen, &st_VERTemp); - Database_SQLite_TrySet(&st_VERTemp); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_TrySet(&st_VERTemp); + } + else + { + DBModule_MySQL_TrySet(&st_VERTemp); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,序列号:%s,临时验证修改成功"), lpszClientAddr, st_VERTemp.tszVSerial); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp index 6654cee..81188f5 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp @@ -36,7 +36,14 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC } BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListClient, nListCount); - Database_SQLite_UserDelete(st_UserInfo.tszUserName); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_UserDelete(st_UserInfo.tszUserName); + } + else + { + DBModule_MySQL_UserDelete(st_UserInfo.tszUserName); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,请求删除用户:%s 成功,在线用户数:%d"), lpszClientAddr, st_UserInfo.tszUserName, nListCount); @@ -60,7 +67,16 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); _tcsxcpy(st_Banned.tszUserName, st_UserTable.st_UserInfo.tszUserName); - if (Database_SQLite_BannedExist(&st_Banned)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_BannedExist(&st_Banned); + } + else + { + bSuccess = DBModule_MySQL_BannedExist(&st_Banned); + } + if (bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "user name is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -85,7 +101,16 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,注册失败,没有设置用户和密码"), lpszClientAddr); return false; } - if (!Database_SQLite_UserRegister(&st_UserTable)) + bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_UserRegister(&st_UserTable); + } + else + { + bSuccess = DBModule_MySQL_UserRegister(&st_UserTable); + } + if (!bSuccess) { XLONG dwRet = DBModule_GetLastError(); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, dwRet, "user register is failed"); @@ -113,14 +138,30 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC return false; } Protocol_Parse_HttpParsePay(lpszMsgBuffer, nMsgLen, &st_UserPay); - if (!Database_SQLite_UserPay(st_UserPay.tszUserName, st_UserPay.tszSerialNumber)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_UserPay(st_UserPay.tszUserName, st_UserPay.tszSerialNumber); + } + else + { + bSuccess = DBModule_MySQL_UserPay(st_UserPay.tszUserName, st_UserPay.tszSerialNumber); + } + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "Serial number not available"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,充值失败,无法继续,错误:%X"), lpszClientAddr, st_UserPay.tszUserName, DBModule_GetLastError()); return false; } - Database_SQLite_UserQuery(st_UserPay.tszUserName, &st_UserInfo); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_UserQuery(st_UserPay.tszUserName, &st_UserInfo); + } + else + { + DBModule_MySQL_UserQuery(st_UserPay.tszUserName, &st_UserInfo); + } Session_Authorize_SetUser(&st_UserInfo); Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -144,7 +185,16 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC return false; } Protocol_Parse_HttpParseUser(lpszMsgBuffer, nMsgLen, &st_UserInfo); - if (!Database_SQLite_UserQuery(st_UserInfo.tszUserName, &st_UserTable)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_UserQuery(st_UserInfo.tszUserName, &st_UserTable); + } + else + { + bSuccess = DBModule_MySQL_UserQuery(st_UserInfo.tszUserName, &st_UserTable); + } + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 404, "user not found"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -200,7 +250,17 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC return false; } Protocol_Parse_HttpParseTry(lpszMsgBuffer, nMsgLen, &st_VERTemp); - if (Database_SQLite_TryQuery(&st_VERTemp)) + bool bSuccess = false; + //判断是使用哪个数据库 + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_TryQuery(&st_VERTemp); + } + else + { + bSuccess = DBModule_MySQL_TryQuery(&st_VERTemp); + } + if (bSuccess) { __int64x nTimeSpan = 0; //根据方式来计算剩余时间 @@ -231,7 +291,14 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC //是否超过 if (nTimeSpan >= 0) { - Database_SQLite_TrySet(&st_VERTemp); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_TrySet(&st_VERTemp); + } + else + { + DBModule_MySQL_TrySet(&st_VERTemp); + } Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,序列号:%s,类型:%s,临时验证成功,剩余时间:%lld"), lpszClientAddr, st_VERTemp.tszVSerial, lpszXSerialType[st_VERTemp.enVMode], nTimeSpan); @@ -256,7 +323,16 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端:%s,序列号:%s,临时验证插入失败,因为服务器关闭了此功能"), lpszClientAddr, st_VERTemp.tszVSerial); return false; } - if (!Database_SQLite_TryInsert(&st_VERTemp)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_TryInsert(&st_VERTemp); + } + else + { + bSuccess = DBModule_MySQL_TryInsert(&st_VERTemp); + } + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 500, "Internal Server Error"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h index 78d426d..34784b8 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h @@ -40,6 +40,8 @@ using namespace std; #include #include #include +#include +#include #include "../../XAuth_Protocol.h" #include "../../AuthorizeModule_Configure/Config_Define.h" #include "../../AuthorizeModule_Configure/Config_Error.h" diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index 1240c6b..fa73a14 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -59,11 +59,20 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int AUTHREG_BANNED st_Banned; memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); - _tcsxcpy(st_Banned.tszIPAddr, lpszClientAddr); BaseLib_OperatorIPAddr_SegAddr(st_Banned.tszIPAddr); + //是否在黑名单 - if (Database_SQLite_BannedExist(&st_Banned)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_BannedExist(&st_Banned); //IP地址是否在黑名单 + } + else + { + bSuccess = DBModule_MySQL_BannedExist(&st_Banned);//IP地址是否在黑名单 + } + if (bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "ip address is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -253,7 +262,6 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int LPCXSTR lpszFuncName = _X("api"); LPCXSTR lpszAPIVerNotice = _X("notice"); LPCXSTR lpszAPIVerDCode = _X("dcode"); - memset(tszUrlName, '\0', sizeof(tszUrlName)); HttpProtocol_ServerHelp_GetParament(pSt_HTTPParament->tszHttpUri, &pptszList, &nListCount, tszUrlName); if ((nListCount < 1) || (0 != _tcsxnicmp(lpszFuncName, tszUrlName, _tcsxlen(lpszFuncName)))) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index af26d11..b4cb4ac 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -61,7 +61,16 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n _tcsxcpy(st_Banned.tszIPAddr, lpszClientAddr); BaseLib_OperatorIPAddr_SegAddr(st_Banned.tszIPAddr); //是否在黑名单 - if (Database_SQLite_BannedExist(&st_Banned)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_BannedExist(&st_Banned); //是否在黑名单 + } + else + { + bSuccess = DBModule_MySQL_BannedExist(&st_Banned);//是否在黑名单 + } + if (bSuccess) { pSt_ProtocolHdr->wReserve = 423; Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); @@ -132,7 +141,16 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n } else { - if (!Database_SQLite_UserQuery(st_AuthProtocol.tszUserName, &st_UserTable)) + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_UserQuery(st_AuthProtocol.tszUserName, &st_UserTable); + } + else + { + bSuccess = DBModule_MySQL_UserQuery(st_AuthProtocol.tszUserName, &st_UserTable); + } + if (!bSuccess) { pSt_ProtocolHdr->wReserve = 251; Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); @@ -268,7 +286,15 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n __int64x nTime = _ttxoll(st_UserTable.tszLeftTime) - 1; _xstprintf(st_UserTable.tszLeftTime, _X("%lld"), nTime); - Database_SQLite_UserSet(&st_UserTable); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_UserSet(&st_UserTable); + } + else + { + DBModule_MySQL_UserSet(&st_UserTable); + } + } else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == st_UserTable.enSerialType) { @@ -278,7 +304,14 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n __int64x nTime = _ttxoll(st_UserTable.tszLeftTime) - 1; _xstprintf(st_UserTable.tszLeftTime, _X("%lld"), nTime); BaseLib_OperatorTime_TimeToStr(st_UserTable.st_UserInfo.tszLoginTime); - Database_SQLite_UserSet(&st_UserTable); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_UserSet(&st_UserTable); + } + else + { + DBModule_MySQL_UserSet(&st_UserTable); + } } } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp index 40e8fc8..d2caceb 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp @@ -52,7 +52,14 @@ void CALLBACK XEngine_TaskEvent_Client(LPCXSTR lpszUserAddr, LPCXSTR lpszUserNam _tcsxcpy(st_AuthTime.tszUserName, lpszUserName); _tcsxcpy(st_AuthTime.tszUserAddr, lpszUserAddr); - Database_SQLite_UserLeave(&st_AuthTime); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_UserLeave(&st_AuthTime); + } + else + { + DBModule_MySQL_UserLeave(&st_AuthTime); + } } void CALLBACK XEngine_TaskEvent_Token(XNETHANDLE xhToken, XPVOID lParam) { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService new file mode 100644 index 0000000000000000000000000000000000000000..e4e0990bab9209081b0d00ece2aeaa90027cee30 GIT binary patch literal 811704 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 literal 0 HcmV?d00001 diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp index ef866c7..db0ce74 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp @@ -50,7 +50,14 @@ void ServiceApp_Stop(int signo) Session_Authorize_Destroy(); Session_Token_Destroy(); AuthHelp_DynamicCode_Destory(); - Database_SQLite_Destroy(); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_Destroy();//销毁DB数据库服务 + } + else + { + DBModule_MySQL_Destroy();// 销毁MYsql数据库服务 + } exit(0); } } @@ -139,13 +146,25 @@ int main(int argc, char** argv) } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化内存池成功")); - if (!Database_SQLite_Init(st_AuthConfig.st_XSql.tszSQLite)) + /*********** 初始化 MySql/DB数据库 ***********/ + if (0 == st_AuthConfig.st_XSql.nDBType) + { //SQLite数据库 + if (!DBModule_SQLite_Init(st_AuthConfig.st_XSql.st_SQLite.tszSQLite)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化DB数据库服务失败,错误:%lX"), DBModule_GetLastError()); + goto XENGINE_EXITAPP; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化DB数据库服务成功,数据库:%s"), st_AuthConfig.st_XSql.st_SQLite.tszSQLite); + } + else { - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化数据库服务失败,错误:%lX"), DBModule_GetLastError()); - goto XENGINE_EXITAPP; + if (!DBModule_MySQL_Init((DATABASE_MYSQL_CONNECTINFO *)&st_AuthConfig.st_XSql.st_MYSQL)) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化MySql数据库失败,错误:%lX"), DBModule_GetLastError()); + goto XENGINE_EXITAPP; + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化MySql数据库服务成功,数据库:%s"), st_AuthConfig.st_XSql.st_MYSQL.tszDBName); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,初始化数据库服务成功,数据库:%s"), st_AuthConfig.st_XSql.tszSQLite); - if (!Session_Authorize_Init(XEngine_TaskEvent_Client)) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,初始化会话客户端服务失败,错误:%lX"), Session_GetLastError()); @@ -295,10 +314,8 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,信息报告给API服务器没有启用")); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,功能开关选项,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,动态验证:%d,多端登录:%d,临时试用:%d"), st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchDCode, st_FunSwitch.bSwitchMulti, st_FunSwitch.bSwitchTry); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("所有服务成功启动,网络验证服务运行中,XEngien版本:%s%s,发行版本次数:%d,当前运行版本:%s。。。"), BaseLib_OperatorVer_XNumberStr(), BaseLib_OperatorVer_XTypeStr(), st_AuthConfig.st_XVer.pStl_ListVer->size(), st_AuthConfig.st_XVer.pStl_ListVer->front().c_str()); - while (true) { std::this_thread::sleep_for(std::chrono::seconds(1)); @@ -332,7 +349,14 @@ XENGINE_EXITAPP: Session_Authorize_Destroy(); Session_Token_Destroy(); AuthHelp_DynamicCode_Destory(); - Database_SQLite_Destroy(); + if (0 == st_AuthConfig.st_XSql.nDBType) + { + DBModule_SQLite_Destroy(); + } + else + { + DBModule_MySQL_Destroy(); + } } #ifdef _WINDOWS WSACleanup(); -- Gitee From 5d6aeb6bb2ad09b3fc629a837285bbd5dce31185 Mon Sep 17 00:00:00 2001 From: Tina0595 <2825103297@qq.com> Date: Sat, 6 Jul 2024 22:01:04 +0800 Subject: [PATCH 08/46] mysql --- XEngine_SQL/mysql.sql | 150 ++++++++++++++++++ .../ModuleConfigure_Json.cpp | 1 - .../DBModule_MySQL/DBModule_MySQL.cpp | 18 --- 3 files changed, 150 insertions(+), 19 deletions(-) create mode 100644 XEngine_SQL/mysql.sql diff --git a/XEngine_SQL/mysql.sql b/XEngine_SQL/mysql.sql new file mode 100644 index 0000000..a148690 --- /dev/null +++ b/XEngine_SQL/mysql.sql @@ -0,0 +1,150 @@ +/* + Navicat Premium Data Transfer + + Source Server : 本地mysql + Source Server Type : MySQL + Source Server Version : 50726 + Source Host : localhost:3306 + Source Schema : xengine_authorize + + Target Server Type : MySQL + Target Server Version : 50726 + File Encoding : 65001 + + Date: 04/07/2024 20:51:48 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for Authorize_Announcement +-- ---------------------------- +DROP TABLE IF EXISTS `Authorize_Announcement`; +CREATE TABLE `Authorize_Announcement` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `tszContext` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, + `tszCreateTime` date NULL DEFAULT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of Authorize_Announcement +-- ---------------------------- + + +-- ---------------------------- +-- Table structure for Authorize_BannedAddr +-- ---------------------------- +DROP TABLE IF EXISTS `Authorize_BannedAddr`; +CREATE TABLE `Authorize_BannedAddr` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `bEnable` tinyint(4) NOT NULL, + `tszIPAddr` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `tszLeftTime` date NULL DEFAULT NULL, + `tszCreateTime` date NOT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of Authorize_BannedAddr +-- ---------------------------- + +-- ---------------------------- +-- Table structure for Authorize_BannedUser +-- ---------------------------- +DROP TABLE IF EXISTS `Authorize_BannedUser`; +CREATE TABLE `Authorize_BannedUser` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `bEnable` tinyint(1) NOT NULL, + `tszUserName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `tszLeftTime` date NULL DEFAULT NULL, + `tszCreateTime` date NOT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of Authorize_BannedUser +-- ---------------------------- + + +-- ---------------------------- +-- Table structure for Authorize_Serial +-- ---------------------------- +DROP TABLE IF EXISTS `Authorize_Serial`; +CREATE TABLE `Authorize_Serial` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `UserName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, + `SerialNumber` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, + `MaxTime` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL, + `CardSerialType` int(11) NULL DEFAULT NULL, + `bIsUsed` tinyint(1) NULL DEFAULT NULL, + `CreateTime` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of Authorize_Serial +-- ---------------------------- + +-- ---------------------------- +-- Table structure for Authorize_TempVer +-- ---------------------------- +DROP TABLE IF EXISTS `Authorize_TempVer`; +CREATE TABLE `Authorize_TempVer` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `tszVSerial` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `nVMode` int(11) NOT NULL, + `nVTime` int(11) NOT NULL, + `nLTime` int(11) NOT NULL, + `CreateTime` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of Authorize_TempVer +-- ---------------------------- + +-- ---------------------------- +-- Table structure for Authorize_User +-- ---------------------------- +DROP TABLE IF EXISTS `Authorize_User`; +CREATE TABLE `Authorize_User` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `UserName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名', + `Password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码', + `LeftTime` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '剩余时间', + `EmailAddr` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '电子邮件', + `HardCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '设备SN', + `CardSerialType` int(11) NOT NULL, + `PhoneNumber` bigint(20) NOT NULL COMMENT '电话号码', + `IDCard` bigint(20) NOT NULL COMMENT '身份证', + `nUserLevel` int(11) NOT NULL COMMENT '用户等级,数字越小越高', + `UPTime` datetime NULL DEFAULT NULL COMMENT '登录时间', + `CreateTime` datetime NOT NULL COMMENT '注册时间', + PRIMARY KEY (`ID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of Authorize_User +-- ---------------------------- +INSERT INTO `Authorize_User` VALUES (1, 'admin', '123123aa', '0', '486179@qq.com', 'DAFD2A2DAD', 1, 13699430000, 511025198881118888, 0, '2022-09-21 15:06:45', '2022-09-21 15:06:45'); +-- ---------------------------- +-- Table structure for Sqlite_Sequence +-- ---------------------------- +DROP TABLE IF EXISTS `Sqlite_Sequence`; +CREATE TABLE `Sqlite_Sequence` ( + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, + `seq` int(11) NULL DEFAULT NULL +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of Sqlite_Sequence +-- ---------------------------- +INSERT INTO `Sqlite_Sequence` VALUES ('Authorize_BannedUser', 6); +INSERT INTO `Sqlite_Sequence` VALUES ('Authorize_BannedAddr', 5); +INSERT INTO `Sqlite_Sequence` VALUES ('Authorize_TempVer', 1); +INSERT INTO `Sqlite_Sequence` VALUES ('Authorize_Serial', 10); +INSERT INTO `Sqlite_Sequence` VALUES ('Authorize_User', 5); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 33d79e2..dd051b0 100644 --- a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -147,7 +147,6 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE pSt_ServerConfig->st_XCrypto.bEnable = st_JsonXCrypto["bEnable"].asBool(); pSt_ServerConfig->st_XCrypto.nPassword = st_JsonXCrypto["nPass"].asInt(); //数据库配置 - printf("%d\n", st_JsonRoot["XSql"].size()); if (st_JsonRoot["XSql"].empty() || (6 != st_JsonRoot["XSql"].size())) { Config_IsErrorOccur = true; diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp index 46ce206..89094b4 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp @@ -188,7 +188,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - //printf("索引:%d 用户名:%s\n", nFliedValue, pptszResult[nFliedValue]); _tcsxcpy(pSt_UserInfo->st_UserInfo.tszUserName, pptszResult[nFliedValue]); } @@ -196,7 +195,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - //printf("索引:%d 密码:%s\n", nFliedValue, pptszResult[nFliedValue]); _tcsxcpy(pSt_UserInfo->st_UserInfo.tszUserPass, pptszResult[nFliedValue]); } @@ -204,7 +202,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - //printf("索引:%d 过期时间:%s\n", nFliedValue, pptszResult[nFliedValue]); _tcsxcpy(pSt_UserInfo->tszLeftTime, pptszResult[nFliedValue]); } @@ -212,7 +209,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - //printf("索引:%d 电子邮件:%s\n", nFliedValue, pptszResult[nFliedValue]); _tcsxcpy(pSt_UserInfo->st_UserInfo.tszEMailAddr, pptszResult[nFliedValue]); } @@ -220,7 +216,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - //printf("索引:%d 硬件码:%s\n", nFliedValue, pptszResult[nFliedValue]); _tcsxcpy(pSt_UserInfo->tszHardCode, pptszResult[nFliedValue]); } @@ -228,7 +223,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - //printf("索引:%d 充值卡类型:%s\n", nFliedValue, pptszResult[nFliedValue]); pSt_UserInfo->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(pptszResult[nFliedValue]); } @@ -236,7 +230,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - //printf("索引:%d QQ号:%s\n", nFliedValue, pptszResult[nFliedValue]); pSt_UserInfo->st_UserInfo.nPhoneNumber = _ttxoll(pptszResult[nFliedValue]); } @@ -244,7 +237,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - //printf("索引:%d 身份证ID:%s\n", nFliedValue, pptszResult[nFliedValue]); pSt_UserInfo->st_UserInfo.nIDNumber = _ttxoll(pptszResult[nFliedValue]); } @@ -252,7 +244,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - //printf("索引:%d 用户级别 -1表示封禁:%s\n", nFliedValue, pptszResult[nFliedValue]); pSt_UserInfo->st_UserInfo.nUserLevel = _ttxoi(pptszResult[nFliedValue]); } @@ -260,14 +251,12 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue] && _tcsxlen(pptszResult[nFliedValue]) > 0) { - //printf("索引:%d 登录日期:%s\n", nFliedValue, pptszResult[nFliedValue]); _tcsxcpy(pSt_UserInfo->st_UserInfo.tszLoginTime, pptszResult[nFliedValue]); } //注册日期 nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - //printf("索引:%d 注册日期:%s\n", nFliedValue, pptszResult[nFliedValue]); _tcsxcpy(pSt_UserInfo->st_UserInfo.tszCreateTime, pptszResult[nFliedValue]); } @@ -449,7 +438,6 @@ bool CDBModule_MySQL::DBModule_MySQL_UserSet(AUTHREG_USERTABLE* pSt_UserTable) _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET Password = '%s',LeftTime = '%s',EmailAddr = '%s',HardCode = '%s',CardSerialType = '%d',PhoneNumber = '%lld',IDCard = '%lld',nUserLevel = '%d',UPTime = NOW(),CreateTime = '%s' WHERE UserName = '%s'"), pSt_UserTable->st_UserInfo.tszUserPass, pSt_UserTable->tszLeftTime, pSt_UserTable->st_UserInfo.tszEMailAddr, pSt_UserTable->tszHardCode, pSt_UserTable->enSerialType, pSt_UserTable->st_UserInfo.nPhoneNumber, pSt_UserTable->st_UserInfo.nIDNumber, pSt_UserTable->st_UserInfo.nUserLevel/*, pSt_UserTable->st_UserInfo.tszLoginTime*/, pSt_UserTable->st_UserInfo.tszCreateTime, pSt_UserTable->st_UserInfo.tszUserName); - //printf("22设置用户信息(SQL):%s\n", tszSQLStatement); //更新用户剩余时间 if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) { @@ -894,7 +882,6 @@ bool CDBModule_MySQL::DBModule_MySQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer) //插入数据库 _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_TempVer`(tszVSerial,nVMode,nVTime,nLTime,CreateTime) VALUES('%s',%d,%d,%d,NOW())"), pSt_AuthVer->tszVSerial, pSt_AuthVer->enVMode, pSt_AuthVer->nVTime, pSt_AuthVer->nVTime); - //printf("网络使用模式插入一条数据:SQL语句%s\n", tszSQLStatement); if (!DataBase_MySQL_Execute(xhData, tszSQLStatement)) { SQLPacket_IsErrorOccur = true; @@ -1593,7 +1580,6 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) DataBase_MySQL_FreeResult(xhData, xhTable); return false; } - //printf("测试2 行:%d 列:%d\n", nRow, nColumn); if (nRow <= 0) { @@ -1609,7 +1595,6 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) int nFliedValue = 0; if (NULL != ppszResult[nFliedValue]) { - //printf("索引:%d ID:%s\n", nFliedValue, ppszResult[nFliedValue]); pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); } @@ -1617,7 +1602,6 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) nFliedValue++; if (NULL != ppszResult[nFliedValue]) { - //printf("索引:%d 是否启用:%s\n", nFliedValue, ppszResult[nFliedValue]); pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); } @@ -1628,7 +1612,6 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) nFliedValue++; if (NULL != ppszResult[nFliedValue]) { - //printf("索引:%d 过期时间:%s\n", nFliedValue, ppszResult[nFliedValue]); _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); } @@ -1637,7 +1620,6 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) nFliedValue++; if (NULL != ppszResult[nFliedValue]) { - //printf("索引:%d 注册时间:%s\n", nFliedValue, ppszResult[nFliedValue]); _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); } -- Gitee From 5056a3edf632159540330f2c7f25ee795cf61a2f Mon Sep 17 00:00:00 2001 From: Tina0595 <2825103297@qq.com> Date: Sun, 7 Jul 2024 21:43:33 +0800 Subject: [PATCH 09/46] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=BB=91=E5=90=8D?= =?UTF-8?q?=E5=8D=95=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- XEngine_SQL/mysql.sql | 8 +- .../DBModule_MySQL/DBModule_MySQL.cpp | 112 ++++++++------- .../DBModule_SQLite/DBModule_SQLite.cpp | 129 ++++++++++-------- .../AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp | 2 +- .../Authorize_HttpTask.cpp | 2 +- .../Authorize_TCPTask.cpp | 3 +- 6 files changed, 137 insertions(+), 119 deletions(-) diff --git a/XEngine_SQL/mysql.sql b/XEngine_SQL/mysql.sql index a148690..22e774e 100644 --- a/XEngine_SQL/mysql.sql +++ b/XEngine_SQL/mysql.sql @@ -41,8 +41,8 @@ CREATE TABLE `Authorize_BannedAddr` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `bEnable` tinyint(4) NOT NULL, `tszIPAddr` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `tszLeftTime` date NULL DEFAULT NULL, - `tszCreateTime` date NOT NULL, + `tszLeftTime` datetime NULL DEFAULT NULL, + `tszCreateTime` datetime NOT NULL, PRIMARY KEY (`ID`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; @@ -58,8 +58,8 @@ CREATE TABLE `Authorize_BannedUser` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `bEnable` tinyint(1) NOT NULL, `tszUserName` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, - `tszLeftTime` date NULL DEFAULT NULL, - `tszCreateTime` date NOT NULL, + `tszLeftTime` datetime NULL DEFAULT NULL, + `tszCreateTime` datetime NOT NULL, PRIMARY KEY (`ID`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp index 89094b4..088db2c 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp @@ -1519,43 +1519,49 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) return false; } - if (nRow <= 0) + if (nRow > 0) { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; - DataBase_MySQL_FreeResult(xhData, xhTable); - return false; - } - - ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); + ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); - //ID - int nFliedValue = 0; - if (NULL != ppszResult[nFliedValue]) { - pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); - } - //是否启用 - nFliedValue++; - if (NULL != ppszResult[nFliedValue]) { - pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); - } - - //地址 - nFliedValue++; + //ID + int nFliedValue = 0; + if (NULL != ppszResult[nFliedValue]) { + pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); + } + //是否启用 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); + } + //地址 + nFliedValue++; + //过期时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + } - //过期时间 - nFliedValue++; - if (NULL != ppszResult[nFliedValue]) { - _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); - } + //注册时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) { + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + } - //注册时间 - nFliedValue++; - if (NULL != ppszResult[nFliedValue]) { - _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + //如果启用 且 tszLeftTime 大于 0 + if (pSt_Banned->bEnable && _tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) //如果没有超过禁用时间 直接返回 说明存在黑名单 不在执行判断IP地址 + { + return true; + } + } } - DataBase_MySQL_FreeResult(xhData, xhTable); } @@ -1584,7 +1590,7 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) if (nRow <= 0) { SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_PARAMENT; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTUSER; DataBase_MySQL_FreeResult(xhData, xhTable); return false; } @@ -1622,31 +1628,31 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) { _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); } - - DataBase_MySQL_FreeResult(xhData, xhTable); - } - //处理是否被禁用 - if (!pSt_Banned->bEnable) - { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; - return false; - } - if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) - { - __int64x nTimer = 0; - XCHAR tszStrTime[128]; - memset(tszStrTime, '\0', sizeof(tszStrTime)); - BaseLib_OperatorTime_TimeToStr(tszStrTime); - BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); - if (nTimer > 0) + //处理是否被禁用 + if (!pSt_Banned->bEnable) { SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; return false; } + if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) + { + return true; + } + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; + } + DataBase_MySQL_FreeResult(xhData, xhTable); } - return true; + + return false; } /******************************************************************** 函数名称:DBModule_MySQL_BannedUPDate diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp index 08c33ef..9aae3ef 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp @@ -1389,7 +1389,7 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedList(AUTHREG_BANNED*** pppSt_Banned bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) { SQLPacket_IsErrorOccur = false; - //判断用域名是否存在 + //判断用户名是否存在 if (_tcsxlen(pSt_Banned->tszUserName) > 0) { int nRow = 0; @@ -1405,28 +1405,39 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) SQLPacket_dwErrorCode = DataBase_GetLastError(); return false; } - if (nRow <= 0) + if (nRow > 0) { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH; - DataBase_SQLite_FreeTable(ppszResult); - return false; + int nFliedValue = nColumn; + //ID + pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); + nFliedValue++; + //是否启用 + pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //地址 + nFliedValue++; + //过期时间 + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + + //如果启用 且 tszLeftTime 大于 0 + if (pSt_Banned->bEnable && _tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) //如果没有超过禁用时间 直接返回 说明存在黑名单 不在执行判断IP地址 + { + return true; + } + } } - int nFliedValue = nColumn; - //ID - pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); - nFliedValue++; - //是否启用 - pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); - nFliedValue++; - //地址 - nFliedValue++; - //过期时间 - _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); - nFliedValue++; - //注册时间 - _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); - DataBase_SQLite_FreeTable(ppszResult); + DataBase_SQLite_FreeTable(ppszResult); } //判断IP地址是否存在 if (_tcsxlen(pSt_Banned->tszIPAddr) > 0) @@ -1437,7 +1448,7 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) XCHAR tszSQLStatement[1024]; memset(tszSQLStatement, '\0', 1024); - _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedAddr WHERE tszIPAddr = '%s'"), pSt_Banned->tszIPAddr); + _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedAddr WHERE tszIPAddr = '%s'"), pSt_Banned->tszIPAddr); if (!DataBase_SQLite_GetTable(xhData, tszSQLStatement, &ppszResult, &nRow, &nColumn)) { SQLPacket_IsErrorOccur = true; @@ -1447,50 +1458,50 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) if (nRow <= 0) { SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTMATCH; - DataBase_SQLite_FreeTable(ppszResult); + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTUSER; return false; } + int nFliedValue = nColumn; - //ID + //ID pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); - nFliedValue++; - //是否启用 + nFliedValue++; + //是否启用 pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); - nFliedValue++; - //地址 - nFliedValue++; - //过期时间 - _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); - nFliedValue++; - //注册时间 - _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); - DataBase_SQLite_FreeTable(ppszResult); - } - //处理是否被禁用 - if (!pSt_Banned->bEnable) - { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; - return false; - } - if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) - { - __int64x nTimer = 0; - XCHAR tszStrTime[128]; - memset(tszStrTime, '\0', sizeof(tszStrTime)); + nFliedValue++; + //地址 + nFliedValue++; + //过期时间 + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); - BaseLib_OperatorTime_TimeToStr(tszStrTime); - BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); - if (nTimer > 0) - { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; - return false; - } + //处理是否被禁用 + if (!pSt_Banned->bEnable) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; + return false; + } + if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) + { + return true; + } + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; + } + DataBase_SQLite_FreeTable(ppszResult); } - - return true; + return false; } /******************************************************************** 函数名称:DBModule_SQLite_BannedUPDate diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp index 81188f5..8d637ca 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp @@ -80,7 +80,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "user name is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,注册失败,用户名已经被禁用!"), lpszClientAddr, st_Banned.tszUserName); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,用户名:%s,注册失败,用户名或IP地址已经被禁用!"), lpszClientAddr, st_Banned.tszUserName); return false; } //填充写入数据 diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index fa73a14..a286baa 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -76,7 +76,7 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "ip address is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,IP地址被禁用!"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,用户名或IP地址被禁用!"), lpszClientAddr); return false; } if (0 == _tcsxnicmp(lpszMethodPost, pSt_HTTPParament->tszHttpMethod, _tcsxlen(lpszMethodPost))) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index b4cb4ac..77ff159 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -59,6 +59,7 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); _tcsxcpy(st_Banned.tszIPAddr, lpszClientAddr); + _tcsxcpy(st_Banned.tszUserName, lpszMsgBuffer); BaseLib_OperatorIPAddr_SegAddr(st_Banned.tszIPAddr); //是否在黑名单 bool bSuccess = false; @@ -75,7 +76,7 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n pSt_ProtocolHdr->wReserve = 423; Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,IP地址被禁用!"), lpszClientAddr); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,用户名或IP地址被禁用!"), lpszClientAddr); return false; } -- Gitee From 43ce841c7f6e68b69604bcf6d06ee29cbc1188e1 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 8 Jul 2024 17:12:04 +0800 Subject: [PATCH 10/46] fixed:banned process is incorrect --- .../DBModule_MySQL/DBModule_MySQL.cpp | 163 +++++++++--------- .../DBModule_SQLite/DBModule_SQLite.cpp | 111 ++++++------ .../AuthorizeModule_Database/Database_Error.h | 3 +- .../Authorize_TCPTask.cpp | 51 +++--- 4 files changed, 166 insertions(+), 162 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp index 088db2c..19e6d94 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp @@ -1496,8 +1496,6 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUs bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) { SQLPacket_IsErrorOccur = false; - XCHAR** ppszResult = nullptr; - XLONG* pInt_Length = nullptr; //判断用户名是否存在 if (_tcsxlen(pSt_Banned->tszUserName) > 0) @@ -1511,7 +1509,6 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) _xstprintf(tszSQLStatement, _X("SELECT * FROM Authorize_BannedUser WHERE tszUserName = '%s'"), pSt_Banned->tszUserName); - if (!DataBase_MySQL_ExecuteQuery(xhData, &xhTable, tszSQLStatement, &nRow, &nColumn)) { SQLPacket_IsErrorOccur = true; @@ -1521,58 +1518,67 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) if (nRow > 0) { - ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); - + XCHAR** ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); //ID int nFliedValue = 0; - if (NULL != ppszResult[nFliedValue]) { + if (NULL != ppszResult[nFliedValue]) + { pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); } //是否启用 nFliedValue++; - if (NULL != ppszResult[nFliedValue]) { + if (NULL != ppszResult[nFliedValue]) + { pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); } //地址 nFliedValue++; //过期时间 nFliedValue++; - if (NULL != ppszResult[nFliedValue]) { + if (NULL != ppszResult[nFliedValue]) + { _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); } - //注册时间 nFliedValue++; - if (NULL != ppszResult[nFliedValue]) { + if (NULL != ppszResult[nFliedValue]) + { _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); } - //如果启用 且 tszLeftTime 大于 0 - if (pSt_Banned->bEnable && _tcsxlen(pSt_Banned->tszLeftTime) > 0) + if (pSt_Banned->bEnable) { - __int64x nTimer = 0; - XCHAR tszStrTime[128]; - memset(tszStrTime, '\0', sizeof(tszStrTime)); - BaseLib_OperatorTime_TimeToStr(tszStrTime); - BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); - if (nTimer < 0) //如果没有超过禁用时间 直接返回 说明存在黑名单 不在执行判断IP地址 + if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszTimeEnd[128]; + memset(tszTimeEnd, '\0', sizeof(tszTimeEnd)); + BaseLib_OperatorTime_TimeToStr(tszTimeEnd); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszTimeEnd, &nTimer, 3); + //如果没有超过禁用时间 直接返回 说明存在黑名单 不在执行判断IP地址 + if (nTimer < 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_BANNED; + return false; + } + } + else { - return true; + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_BANNED; + return false; } } } DataBase_MySQL_FreeResult(xhData, xhTable); } - //判断IP地址是否存在 if (_tcsxlen(pSt_Banned->tszIPAddr) > 0) { XNETHANDLE xhTable = 0; __int64u nRow = 0; __int64u nColumn = 0; - ppszResult = nullptr; - pInt_Length = nullptr; XCHAR tszSQLStatement[1024]; memset(tszSQLStatement, '\0', 1024); @@ -1587,72 +1593,63 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedExist(AUTHREG_BANNED* pSt_Banned) return false; } - if (nRow <= 0) - { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTUSER; - DataBase_MySQL_FreeResult(xhData, xhTable); - return false; - } - ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); - pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); - - //ID - int nFliedValue = 0; - if (NULL != ppszResult[nFliedValue]) - { - pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); - } - - //是否启用 - nFliedValue++; - if (NULL != ppszResult[nFliedValue]) - { - pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); - } - - //地址 - nFliedValue++; - - //过期时间 - nFliedValue++; - if (NULL != ppszResult[nFliedValue]) - { - _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); - } - - - //注册时间 - nFliedValue++; - if (NULL != ppszResult[nFliedValue]) - { - _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); - } - //处理是否被禁用 - if (!pSt_Banned->bEnable) - { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; - return false; - } - if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + if (nRow > 0) { - __int64x nTimer = 0; - XCHAR tszStrTime[128]; - memset(tszStrTime, '\0', sizeof(tszStrTime)); - BaseLib_OperatorTime_TimeToStr(tszStrTime); - BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); - if (nTimer < 0) + XCHAR** ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); + //ID + int nFliedValue = 0; + if (NULL != ppszResult[nFliedValue]) { - return true; + pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); + } + //是否启用 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); + } + //地址 + nFliedValue++; + //过期时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + } + //注册时间 + nFliedValue++; + if (NULL != ppszResult[nFliedValue]) + { + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + } + //处理是否被禁用 + if (pSt_Banned->bEnable) + { + if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_BANNED; + return false; + } + } + else + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; + return false; + } } - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; } DataBase_MySQL_FreeResult(xhData, xhTable); } - - return false; + return true; } /******************************************************************** 函数名称:DBModule_MySQL_BannedUPDate diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp index 9aae3ef..2f6fb0c 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp @@ -1421,19 +1421,29 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) nFliedValue++; //注册时间 _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); - //如果启用 且 tszLeftTime 大于 0 - if (pSt_Banned->bEnable && _tcsxlen(pSt_Banned->tszLeftTime) > 0) + if (pSt_Banned->bEnable) { - __int64x nTimer = 0; - XCHAR tszStrTime[128]; - memset(tszStrTime, '\0', sizeof(tszStrTime)); - - BaseLib_OperatorTime_TimeToStr(tszStrTime); - BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); - if (nTimer < 0) //如果没有超过禁用时间 直接返回 说明存在黑名单 不在执行判断IP地址 + if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_BANNED; + return false; + } + } + else { - return true; + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_BANNED; + return false; } } } @@ -1455,53 +1465,52 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedExist(AUTHREG_BANNED* pSt_Banned) SQLPacket_dwErrorCode = DataBase_GetLastError(); return false; } - if (nRow <= 0) - { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTUSER; - return false; - } - - int nFliedValue = nColumn; - //ID - pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); - nFliedValue++; - //是否启用 - pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); - nFliedValue++; - //地址 - nFliedValue++; - //过期时间 - _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); - nFliedValue++; - //注册时间 - _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); - - //处理是否被禁用 - if (!pSt_Banned->bEnable) - { - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE; - return false; - } - if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + if (nRow > 0) { - __int64x nTimer = 0; - XCHAR tszStrTime[128]; - memset(tszStrTime, '\0', sizeof(tszStrTime)); - - BaseLib_OperatorTime_TimeToStr(tszStrTime); - BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); - if (nTimer < 0) + int nFliedValue = nColumn; + //ID + pSt_Banned->nID = _ttxoll(ppszResult[nFliedValue]); + nFliedValue++; + //是否启用 + pSt_Banned->bEnable = _ttxoi(ppszResult[nFliedValue]); + nFliedValue++; + //地址 + nFliedValue++; + //过期时间 + _tcsxcpy(pSt_Banned->tszLeftTime, ppszResult[nFliedValue]); + nFliedValue++; + //注册时间 + _tcsxcpy(pSt_Banned->tszCreateTime, ppszResult[nFliedValue]); + + //处理是否被禁用 + if (pSt_Banned->bEnable) + { + if (_tcsxlen(pSt_Banned->tszLeftTime) > 0) + { + __int64x nTimer = 0; + XCHAR tszStrTime[128]; + memset(tszStrTime, '\0', sizeof(tszStrTime)); + + BaseLib_OperatorTime_TimeToStr(tszStrTime); + BaseLib_OperatorTimeSpan_GetForStr(pSt_Banned->tszLeftTime, tszStrTime, &nTimer, 3); + if (nTimer < 0) + { + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; + return false; + } + } + } + else { - return true; + SQLPacket_IsErrorOccur = true; + SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; + return false; } - SQLPacket_IsErrorOccur = true; - SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT; } DataBase_SQLite_FreeTable(ppszResult); } - return false; + return true; } /******************************************************************** 函数名称:DBModule_SQLite_BannedUPDate diff --git a/XEngine_Source/AuthorizeModule_Database/Database_Error.h b/XEngine_Source/AuthorizeModule_Database/Database_Error.h index def1314..aa6e198 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_Error.h +++ b/XEngine_Source/AuthorizeModule_Database/Database_Error.h @@ -35,4 +35,5 @@ #define ERROR_AUTHORIZE_MODULE_DATABASE_UNKNOWTYPE 0x0030017 //无法识别的卡的类型,无法正确处理离开消息 #define ERROR_AUTHORIZE_MODULE_DATABASE_NONE 0x0030018 //获取失败,没有任何记录 #define ERROR_AUTHORIZE_MODULE_DATABASE_NOTENABLE 0x0030019 //没有启用.不禁用 -#define ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT 0x0030020 //超过禁用时间 \ No newline at end of file +#define ERROR_AUTHORIZE_MODULE_DATABASE_TIMELEFT 0x0030020 //超过禁用时间 +#define ERROR_AUTHORIZE_MODULE_DATABASE_BANNED 0x0030021 //被禁用 \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index 77ff159..5b2d68a 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -52,33 +52,8 @@ XHTHREAD CALLBACK XEngine_AuthService_TCPThread(XPVOID lParam) bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_PROTOCOLHDR* pSt_ProtocolHdr, int nNetType) { int nSDLen = 0; - XCHAR tszSDBuffer[2048]; - memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); - - AUTHREG_BANNED st_Banned; - memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); - - _tcsxcpy(st_Banned.tszIPAddr, lpszClientAddr); - _tcsxcpy(st_Banned.tszUserName, lpszMsgBuffer); - BaseLib_OperatorIPAddr_SegAddr(st_Banned.tszIPAddr); - //是否在黑名单 - bool bSuccess = false; - if (0 == st_AuthConfig.st_XSql.nDBType) - { - bSuccess = DBModule_SQLite_BannedExist(&st_Banned); //是否在黑名单 - } - else - { - bSuccess = DBModule_MySQL_BannedExist(&st_Banned);//是否在黑名单 - } - if (bSuccess) - { - pSt_ProtocolHdr->wReserve = 423; - Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); - XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,用户名或IP地址被禁用!"), lpszClientAddr); - return false; - } + XCHAR tszSDBuffer[2048] = {}; + AUTHREG_BANNED st_Banned = {}; if (XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQLOGIN == pSt_ProtocolHdr->unOperatorCode) { @@ -89,6 +64,28 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n memset(&st_AuthProtocol, '\0', sizeof(XENGINE_PROTOCOL_USERAUTH)); memcpy(&st_AuthProtocol, lpszMsgBuffer, sizeof(XENGINE_PROTOCOL_USERAUTH)); + _tcsxcpy(st_Banned.tszIPAddr, lpszClientAddr); + _tcsxcpy(st_Banned.tszUserName, st_AuthProtocol.tszUserName); + BaseLib_OperatorIPAddr_SegAddr(st_Banned.tszIPAddr); + //是否在黑名单 + bool bSuccess = false; + if (0 == st_AuthConfig.st_XSql.nDBType) + { + bSuccess = DBModule_SQLite_BannedExist(&st_Banned); //是否在黑名单 + } + else + { + bSuccess = DBModule_MySQL_BannedExist(&st_Banned);//是否在黑名单 + } + if (!bSuccess) + { + pSt_ProtocolHdr->wReserve = 423; + Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, nNetType); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("客户端:%s,登录连接被阻止,用户名或IP地址被禁用!"), lpszClientAddr); + return false; + } + pSt_ProtocolHdr->unPacketSize = 0; pSt_ProtocolHdr->unOperatorCode = XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPLOGIN; //是否允许登录 -- Gitee From c5eb75416456ffe813db09d2ab66890c1a891b61 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 8 Jul 2024 17:12:32 +0800 Subject: [PATCH 11/46] modify:disable crypt for client --- XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp index 9017d17..1d40810 100644 --- a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp +++ b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp @@ -39,7 +39,7 @@ using namespace std; bool bRun = true; bool bLogin = true; bool bTimeOut = true; -bool bEncrypto = true; +bool bEncrypto = false; XNETHANDLE xhToken = 0; int nDYCode = 0; -- Gitee From 5e774e9f1cb4dc0b575729d1481d750c67ad638a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 8 Jul 2024 17:13:20 +0800 Subject: [PATCH 12/46] modify:configure use default sqlite --- XEngine_Release/XEngine_Config/XEngine_Config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 4d95f24..72ba01f 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -41,7 +41,7 @@ "nPass":123123 }, "XSql":{ - "nSQLType":1, + "nSQLType":0, "SQLAddr": "127.0.0.1", "SQLPort": 3306, "SQLUser": "root", -- Gitee From 7a1168ae86b229774715e0437fce18ef7d131fe5 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 9 Jul 2024 09:39:28 +0800 Subject: [PATCH 13/46] fixed:problem that banned of the http --- .../XEngine_AuthorizeService/Authorize_HttpTask.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index a286baa..c85dcdd 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -72,7 +72,7 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { bSuccess = DBModule_MySQL_BannedExist(&st_Banned);//IP地址是否在黑名单 } - if (bSuccess) + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "ip address is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); -- Gitee From 05e6f94cf3cba20e2cd266d70561ca5d38734865 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 9 Jul 2024 13:54:17 +0800 Subject: [PATCH 14/46] added:authorize module from xengine --- .../AuthorizeModule_CDKey.def | 17 + .../AuthorizeModule_CDKey.vcxproj | 178 +++ .../AuthorizeModule_CDKey.vcxproj.filters | 68 + .../AuthorizeModule_CDKey.vcxproj.user | 4 + .../Authorize_CDKey/Authorize_CDKey.cpp | 1251 +++++++++++++++++ .../Authorize_CDKey/Authorize_CDKey.h | 30 + .../Authorize_Serial/Authorize_Serial.cpp | 509 +++++++ .../Authorize_Serial/Authorize_Serial.h | 35 + .../AuthorizeModule_CDKey/CDKey_Define.h | 288 ++++ .../AuthorizeModule_CDKey/CDKey_Error.h | 35 + XEngine_Source/AuthorizeModule_CDKey/Makefile | 72 + .../AuthorizeModule_CDKey/dllmain.cpp | 19 + .../AuthorizeModule_CDKey/framework.h | 5 + XEngine_Source/AuthorizeModule_CDKey/pch.cpp | 80 ++ XEngine_Source/AuthorizeModule_CDKey/pch.h | 53 + XEngine_Source/AuthorizeModule_Client/pch.h | 2 - .../DBModule_MySQL/DBModule_MySQL.cpp | 42 +- .../DBModule_MySQL/DBModule_MySQL.h | 2 +- .../DBModule_SQLite/DBModule_SQLite.cpp | 44 +- .../DBModule_SQLite/DBModule_SQLite.h | 2 +- .../Database_Define.h | 4 +- .../AuthorizeModule_Database/Makefile | 4 +- XEngine_Source/AuthorizeModule_Database/pch.h | 18 +- .../Protocol_Packet/Protocol_Packet.cpp | 2 +- .../Protocol_Parse/Protocol_Parse.cpp | 8 +- XEngine_Source/AuthorizeModule_Protocol/pch.h | 4 +- .../Session_Authorize/Session_Authorize.cpp | 6 +- XEngine_Source/AuthorizeModule_Session/pch.h | 4 +- XEngine_Source/Makefile | 5 +- XEngine_Source/XAuth_Protocol.h | 105 +- XEngine_Source/XEngine.sln | 16 +- .../XEngineAuthorizeApp.aps | Bin 125636 -> 106728 bytes .../XEngine_AuthorizeApp/pch.h | 2 - .../AuthorizeHTTP_CDKey.cpp | 18 +- .../AuthorizeHTTP_Serial.cpp | 8 +- .../AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp | 6 +- .../XEngine_AuthorizeService/Authorize_Hdr.h | 9 +- .../Authorize_TCPTask.cpp | 14 +- .../XEngine_AuthorizeService/Makefile | 6 +- .../XEngine_AuthorizeService | Bin 811704 -> 0 bytes XEngine_Source/XEngine_Depend | 2 +- 41 files changed, 2876 insertions(+), 101 deletions(-) create mode 100644 XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.def create mode 100644 XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj create mode 100644 XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj.filters create mode 100644 XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj.user create mode 100644 XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp create mode 100644 XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.h create mode 100644 XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp create mode 100644 XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.h create mode 100644 XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h create mode 100644 XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h create mode 100644 XEngine_Source/AuthorizeModule_CDKey/Makefile create mode 100644 XEngine_Source/AuthorizeModule_CDKey/dllmain.cpp create mode 100644 XEngine_Source/AuthorizeModule_CDKey/framework.h create mode 100644 XEngine_Source/AuthorizeModule_CDKey/pch.cpp create mode 100644 XEngine_Source/AuthorizeModule_CDKey/pch.h delete mode 100644 XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService diff --git a/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.def b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.def new file mode 100644 index 0000000..b128231 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.def @@ -0,0 +1,17 @@ +LIBRARY + +EXPORTS + Authorize_GetLastError + + Authorize_Serial_Creator + Authorize_Serial_Create + Authorize_Serial_GetType + + Authorize_CDKey_WriteKey + Authorize_CDKey_ReadKey + Authorize_CDKey_WriteMemory + Authorize_CDKey_ReadMemory + Authorize_CDKey_BuildKeyTime + Authorize_CDKey_GetLeftTimer + Authorize_CDKey_WriteTime + Authorize_CDKey_ReadTime \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj new file mode 100644 index 0000000..4caeecc --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj @@ -0,0 +1,178 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {02a75bd0-416e-4aef-bf34-bd85bd86384f} + AuthorizeModuleCDKey + 10.0 + + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(XEngine_Include);..\AuthorizeModule_CDKey;$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + + + + Level3 + true + WIN32;_DEBUG;AUTHORIZEMODULECDKEY_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + AuthorizeModule_CDKey.def + + + + + Level3 + true + true + true + WIN32;NDEBUG;AUTHORIZEMODULECDKEY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + AuthorizeModule_CDKey.def + + + + + Level3 + true + _DEBUG;AUTHORIZEMODULECDKEY_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + false + AuthorizeModule_CDKey.def + + + + + Level3 + true + true + true + NDEBUG;AUTHORIZEMODULECDKEY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + Use + pch.h + + + Windows + true + true + true + false + AuthorizeModule_CDKey.def + + + + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + + + + \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj.filters b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj.filters new file mode 100644 index 0000000..03c0f6a --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj.filters @@ -0,0 +1,68 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {0a186122-00ae-4ad3-91b5-8a6fdf3950bc} + + + {c4ce44ad-ed56-48d6-92d8-49f68b1029d4} + + + {a33f91ec-f718-45b9-9ec5-d4f93a6482d0} + + + {39fc0e03-6422-475a-be30-30d77154b7d1} + + + + + 头文件 + + + 头文件 + + + 头文件\Authorize_CDKey + + + 头文件\Authorize_Serial + + + 头文件 + + + 头文件 + + + + + 源文件 + + + 源文件 + + + 源文件\Authorize_CDKey + + + 源文件\Authorize_Serial + + + + + 源文件 + + + \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj.user b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp new file mode 100644 index 0000000..ba7949e --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp @@ -0,0 +1,1251 @@ +#include "pch.h" +#include "Authorize_CDKey.h" +/******************************************************************** +// Created: 2024/07/08 17:30:39 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\Authorize_CDKey\Authorize_CDKey.cpp +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\Authorize_CDKey +// File Base: Authorize_CDKey +// File Ext: cpp +// Project: XEngine +// Author: qyt +// Purpose: 本地验证实现 +// History: +*********************************************************************/ +CAuthorize_CDKey::CAuthorize_CDKey() +{ +} +CAuthorize_CDKey::~CAuthorize_CDKey() +{ + +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:Authorize_CDKey_WriteKey +函数功能:写一个CDKey文件 + 参数.一:lpszFileKey + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要操作的文件路径 + 参数.二:pSt_AuthLocal + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要写入的文件信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注:写入读取必须是明文,建议你加密处理CDKEY,通过OPENSSL模块,来加解密,在读写 +*********************************************************************/ +bool CAuthorize_CDKey::Authorize_CDKey_WriteKey(LPCXSTR lpszFileKey, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal) +{ + Authorize_IsErrorOccur = false; + + if ((NULL == lpszFileKey) || (NULL == pSt_AuthLocal)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + //添加连接信息文本 + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("Connection"), _X("tszAddr"), pSt_AuthLocal->tszAddr)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_CONNECT; + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey, _X("Connection"), _X("nPort"), pSt_AuthLocal->nPort)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_CONNECT; + return false; + } + //添加程序名称文本 + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AppInfo"), _X("tszAppName"), pSt_AuthLocal->st_AuthAppInfo.tszAppName)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_APPINFO; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey,_X("AppInfo"), _X("tszAppVer"), pSt_AuthLocal->st_AuthAppInfo.tszAppVer)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_APPINFO; + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey, _X("AppInfo"), _X("nExecTime"), pSt_AuthLocal->st_AuthAppInfo.nExecTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_APPINFO; + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey,_X("AppInfo"), _X("bInit"), pSt_AuthLocal->st_AuthAppInfo.bInit)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_APPINFO; + return false; + } + //更新使用时间 + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + XCHAR tszTimeStart[64]; + XCHAR tszTimeEnd[64]; + __int64x nUsedTime = 0; + + memset(tszTimeStart, '\0', sizeof(tszTimeStart)); + memset(tszTimeEnd, '\0', sizeof(tszTimeEnd)); + BaseLib_OperatorTime_TimeToStr(tszTimeEnd); + BaseLib_OperatorTimeSpan_GetForStr(pSt_AuthLocal->st_AuthRegInfo.tszStartTime, tszTimeEnd, &nUsedTime, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_SECOND); + pSt_AuthLocal->st_AuthRegInfo.nHasTime -= nUsedTime; + } + //添加注册信息 + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey,_X("AuthReg"), _X("nHasTime"), pSt_AuthLocal->st_AuthRegInfo.nHasTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey,_X("AuthReg"), _X("enHWType"), pSt_AuthLocal->st_AuthRegInfo.enHWType)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey,_X("AuthReg"), _X("enRegType"), pSt_AuthLocal->st_AuthRegInfo.enRegType)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey,_X("AuthReg"), _X("enSerialType"), pSt_AuthLocal->st_AuthRegInfo.enSerialType)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey,_X("AuthReg"), _X("enVModeType"), pSt_AuthLocal->st_AuthRegInfo.enVModeType)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey,_X("AuthReg"), _X("tszHardware"), pSt_AuthLocal->st_AuthRegInfo.tszHardware)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + BaseLib_OperatorTime_TimeToStr(pSt_AuthLocal->st_AuthRegInfo.tszCreateTime); + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey,_X("AuthReg"), _X("tszCreateTime"), pSt_AuthLocal->st_AuthRegInfo.tszCreateTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey,_X("AuthReg"), _X("tszRegisterTime"), pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey,_X("AuthReg"), _X("tszLeftTime"), pSt_AuthLocal->st_AuthRegInfo.tszLeftTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey,_X("AuthReg"), _X("tszStartTime"), pSt_AuthLocal->st_AuthRegInfo.tszStartTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey,_X("AuthReg"), _X("tszExpiryTime"), pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + //临时序列号 + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszTimeSerial"), pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey, _X("AuthSerial"), _X("nTimeCount"), pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeCount)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey, _X("AuthSerial"), _X("nTimeNow"), pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszDataSerial"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszDataTime"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszUNLimitSerial"), pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; + return false; + } + //自定义用户信息 + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthUser"), _X("tszUserName"), pSt_AuthLocal->st_AuthUserInfo.tszUserName)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_USER; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthUser"), _X("tszUserContact"), pSt_AuthLocal->st_AuthUserInfo.tszUserContact)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_USER; + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthUser"), _X("tszCustom"), pSt_AuthLocal->st_AuthUserInfo.tszCustom)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_USER; + return false; + } + return true; +} +/******************************************************************** +函数名称:Authorize_CDKey_ReadKey +函数功能:读一个数据文件 + 参数.一:lpszFileKey + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要操作的文件路径 + 参数.二:pSt_AuthLocal + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:导出获取到的文件信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAuthorize_CDKey::Authorize_CDKey_ReadKey(LPCXSTR lpszFileKey, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal) +{ + Authorize_IsErrorOccur = false; + + if ((NULL == lpszFileKey) || (NULL == pSt_AuthLocal)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + //添加连接信息文本 + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("Connection"), _X("tszAddr"), pSt_AuthLocal->tszAddr) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_CONNECT; + return false; + } + pSt_AuthLocal->nPort = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("Connection"), _X("nPort")); + //添加程序名称文本 + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AppInfo"), _X("tszAppName"), pSt_AuthLocal->st_AuthAppInfo.tszAppName) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_APPINFO; + return false; + } + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AppInfo"), _X("tszAppVer"), pSt_AuthLocal->st_AuthAppInfo.tszAppVer) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_APPINFO; + return false; + } + pSt_AuthLocal->st_AuthAppInfo.nExecTime = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("nExecTime")); + pSt_AuthLocal->st_AuthAppInfo.bInit = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("bInit")); + //添加注册信息 + pSt_AuthLocal->st_AuthRegInfo.enHWType = (ENUM_AUTHORIZE_MODULE_HW_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enHWType")); + pSt_AuthLocal->st_AuthRegInfo.enRegType = (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enRegType")); + pSt_AuthLocal->st_AuthRegInfo.enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enSerialType")); + pSt_AuthLocal->st_AuthRegInfo.enVModeType = (ENUM_AUTHORIZE_MODULE_VERMODE_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enVModeType")); + pSt_AuthLocal->st_AuthRegInfo.nHasTime = BaseLib_OperatorFile_ReadInt64FromFile(lpszFileKey, _X("AuthReg"), _X("nHasTime")); + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthReg"), _X("tszHardware"), pSt_AuthLocal->st_AuthRegInfo.tszHardware) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthReg"), _X("tszCreateTime"), pSt_AuthLocal->st_AuthRegInfo.tszCreateTime) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthReg"), _X("tszRegisterTime"), pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime) < 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthReg"), _X("tszLeftTime"), pSt_AuthLocal->st_AuthRegInfo.tszLeftTime) < 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthReg"), _X("tszStartTime"), pSt_AuthLocal->st_AuthRegInfo.tszStartTime) < 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + //设置启动时间 + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + XENGINE_LIBTIMER st_EndTimer; + XENGINE_LIBTIMER st_StartTime; + + memset(&st_EndTimer, '\0', sizeof(XENGINE_LIBTIMER)); + memset(&st_StartTime, '\0', sizeof(XENGINE_LIBTIMER)); + + BaseLib_OperatorTime_GetSysTime(&st_EndTimer); + BaseLib_OperatorTime_StrToTime(pSt_AuthLocal->st_AuthRegInfo.tszStartTime, &st_StartTime); + if ((st_EndTimer.wYear != st_StartTime.wYear) || (st_EndTimer.wMonth != st_StartTime.wMonth) || (st_EndTimer.wDay != st_StartTime.wDay)) + { + pSt_AuthLocal->st_AuthRegInfo.nHasTime--; + } + BaseLib_OperatorTime_TimeToStr(pSt_AuthLocal->st_AuthRegInfo.tszStartTime); + } + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + memset(pSt_AuthLocal->st_AuthRegInfo.tszStartTime, '\0', sizeof(pSt_AuthLocal->st_AuthRegInfo.tszStartTime)); + BaseLib_OperatorTime_TimeToStr(pSt_AuthLocal->st_AuthRegInfo.tszStartTime); + } + + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthReg"), _X("tszExpiryTime"), pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime) < 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG; + return false; + } + //临时序列号 + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszTimeSerial"), pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; + return false; + } + pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeCount = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthSerial"), _X("nTimeCount")); + pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthSerial"), _X("nTimeNow")); + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszDataSerial"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; + return false; + } + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszDataTime"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; + return false; + } + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszUNLimitSerial"), pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; + return false; + } + //用户信息 + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthUser"), _X("tszUserName"), pSt_AuthLocal->st_AuthUserInfo.tszUserName) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_USER; + return false; + } + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthUser"), _X("tszUserContact"), pSt_AuthLocal->st_AuthUserInfo.tszUserContact) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_USER; + return false; + } + if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthUser"), _X("tszCustom"), pSt_AuthLocal->st_AuthUserInfo.tszCustom) < 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_USER; + return false; + } + return true; +} +/******************************************************************** +函数名称:Authorize_CDKey_WriteMemory +函数功能:写配置信息到内存 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:写到的内存 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:写到的内存大小 + 参数.三:pSt_AuthLocal + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要写的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAuthorize_CDKey::Authorize_CDKey_WriteMemory(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal) +{ + Authorize_IsErrorOccur = false; + + if ((NULL == ptszMsgBuffer) || (NULL == pInt_MsgLen) || (NULL == pSt_AuthLocal)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + int nMsgLen = 0; + //添加连接信息文本 + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("Connection"), _X("tszAddr"), pSt_AuthLocal->tszAddr, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("Connection"), _X("nPort"), pSt_AuthLocal->nPort, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + //添加程序名称文本 + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AppInfo"), _X("tszAppName"), pSt_AuthLocal->st_AuthAppInfo.tszAppName, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AppInfo"), _X("tszAppVer"), pSt_AuthLocal->st_AuthAppInfo.tszAppVer, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AppInfo"), _X("nExecTime"), pSt_AuthLocal->st_AuthAppInfo.nExecTime, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AppInfo"), _X("bInit"), pSt_AuthLocal->st_AuthAppInfo.bInit, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + //更新使用时间 + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + XCHAR tszTimeStart[64]; + XCHAR tszTimeEnd[64]; + __int64x nUsedTime = 0; + + memset(tszTimeStart, '\0', sizeof(tszTimeStart)); + memset(tszTimeEnd, '\0', sizeof(tszTimeEnd)); + BaseLib_OperatorTime_TimeToStr(tszTimeEnd); + BaseLib_OperatorTimeSpan_GetForStr(pSt_AuthLocal->st_AuthRegInfo.tszStartTime, tszTimeEnd, &nUsedTime, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_SECOND); + pSt_AuthLocal->st_AuthRegInfo.nHasTime -= nUsedTime; + } + //添加注册信息 + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("nHasTime"), pSt_AuthLocal->st_AuthRegInfo.nHasTime, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("enHWType"), pSt_AuthLocal->st_AuthRegInfo.enHWType, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("enRegType"), pSt_AuthLocal->st_AuthRegInfo.enRegType, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("enSerialType"), pSt_AuthLocal->st_AuthRegInfo.enSerialType, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("enVModeType"), pSt_AuthLocal->st_AuthRegInfo.enVModeType, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszHardware"), pSt_AuthLocal->st_AuthRegInfo.tszHardware, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + BaseLib_OperatorTime_TimeToStr(pSt_AuthLocal->st_AuthRegInfo.tszCreateTime); + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszCreateTime"), pSt_AuthLocal->st_AuthRegInfo.tszCreateTime, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszRegisterTime"), pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszLeftTime"), pSt_AuthLocal->st_AuthRegInfo.tszLeftTime, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszStartTime"), pSt_AuthLocal->st_AuthRegInfo.tszStartTime, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszExpiryTime"), pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + //临时序列号 + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszTimeSerial"), pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("nTimeCount"), pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeCount, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("nTimeNow"), pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszDataSerial"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszDataTime"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszUNLimitSerial"), pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + //用户信息 + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthUser"), _X("tszUserName"), pSt_AuthLocal->st_AuthUserInfo.tszUserName, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthUser"), _X("tszUserContact"), pSt_AuthLocal->st_AuthUserInfo.tszUserContact, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthUser"), _X("tszCustom"), pSt_AuthLocal->st_AuthUserInfo.tszCustom, ptszMsgBuffer, &nMsgLen)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + *pInt_MsgLen = nMsgLen; + return true; +} +/******************************************************************** +函数名称:Authorize_CDKey_ReadMemory +函数功能:内存配置文件读取 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要读取配置的内存 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入读取内存大小 + 参数.三:pSt_AuthLocal + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出读取到的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAuthorize_CDKey::Authorize_CDKey_ReadMemory(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal) +{ + Authorize_IsErrorOccur = false; + + if ((NULL == lpszMsgBuffer) || (NULL == pSt_AuthLocal)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + //添加连接信息文本 + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("Connection"), _X("tszAddr"), pSt_AuthLocal->tszAddr)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("Connection"), _X("nPort"), &pSt_AuthLocal->nPort)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + //添加程序名称文本 + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AppInfo"), _X("tszAppName"), pSt_AuthLocal->st_AuthAppInfo.tszAppName)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AppInfo"), _X("tszAppVer"), pSt_AuthLocal->st_AuthAppInfo.tszAppVer)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("bInit"), (int*)&pSt_AuthLocal->st_AuthAppInfo.bInit); + BaseLib_OperatorFile_ReadInt64FromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("nExecTime"), &pSt_AuthLocal->st_AuthAppInfo.nExecTime); + //添加注册信息 + BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("enHWType"), (int*)&pSt_AuthLocal->st_AuthRegInfo.enHWType); + BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("enRegType"), (int*)&pSt_AuthLocal->st_AuthRegInfo.enRegType); + BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("enSerialType"), (int*)&pSt_AuthLocal->st_AuthRegInfo.enSerialType); + BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("enVModeType"), (int*)&pSt_AuthLocal->st_AuthRegInfo.enVModeType); + BaseLib_OperatorFile_ReadInt64FromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("nHasTime"), &pSt_AuthLocal->st_AuthRegInfo.nHasTime); + + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszHardware"), pSt_AuthLocal->st_AuthRegInfo.tszHardware)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszCreateTime"), pSt_AuthLocal->st_AuthRegInfo.tszCreateTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszRegisterTime"), pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszLeftTime"), pSt_AuthLocal->st_AuthRegInfo.tszLeftTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszStartTime"), pSt_AuthLocal->st_AuthRegInfo.tszStartTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + //设置启动时间 + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + XENGINE_LIBTIMER st_EndTimer; + XENGINE_LIBTIMER st_StartTime; + + memset(&st_EndTimer, '\0', sizeof(XENGINE_LIBTIMER)); + memset(&st_StartTime, '\0', sizeof(XENGINE_LIBTIMER)); + + BaseLib_OperatorTime_GetSysTime(&st_EndTimer); + BaseLib_OperatorTime_StrToTime(pSt_AuthLocal->st_AuthRegInfo.tszStartTime, &st_StartTime); + if ((st_EndTimer.wYear != st_StartTime.wYear) || (st_EndTimer.wMonth != st_StartTime.wMonth) || (st_EndTimer.wDay != st_StartTime.wDay)) + { + pSt_AuthLocal->st_AuthRegInfo.nHasTime--; + } + BaseLib_OperatorTime_TimeToStr(pSt_AuthLocal->st_AuthRegInfo.tszStartTime); + } + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + memset(pSt_AuthLocal->st_AuthRegInfo.tszStartTime, '\0', sizeof(pSt_AuthLocal->st_AuthRegInfo.tszStartTime)); + BaseLib_OperatorTime_TimeToStr(pSt_AuthLocal->st_AuthRegInfo.tszStartTime); + } + + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("tszExpiryTime"), pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + //序列号信息 + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszTimeSerial"), pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("nTimeCount"), &pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeCount)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("nTimeNow"), &pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszDataSerial"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszDataTime"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszUNLimitSerial"), pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + //用户信息 + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthUser"), _X("tszUserName"), pSt_AuthLocal->st_AuthUserInfo.tszUserName)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthUser"), _X("tszUserContact"), pSt_AuthLocal->st_AuthUserInfo.tszUserContact)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthUser"), _X("tszCustom"), pSt_AuthLocal->st_AuthUserInfo.tszCustom)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = BaseLib_GetLastError(); + return false; + } + return true; +} +/******************************************************************** +函数名称:Authorize_CDKey_BuildKeyTime +函数功能:构造注册的时间结构体信息 + 参数.一:pSt_AuthLocal + In/Out:In + 类型:结构体指针 + 可空:N + 意思:要构造的结构体 + 参数.二:nDayTimer + In/Out:In + 类型:整数型 + 可空:Y + 意思:可用时间或者次数.非自定义时间需要设置此值 + 参数.三:pSt_DayTimer + In/Out:In + 类型:结构体指针 + 可空:Y + 意思:如果是自定义时间,这个参数需要设置,其他类型请设置参数二 +返回值 + 类型:逻辑型 + 意思:是否构造成功 +备注:此函数会修改st_AuthRegInfo的时间信息成员 +*********************************************************************/ +bool CAuthorize_CDKey::Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, __int64x nDayTimer /* = 0 */, XENGINE_LIBTIMER* pSt_DayTimer /* = NULL */) +{ + Authorize_IsErrorOccur = false; + + XENGINE_LIBTIMER st_StartTimer; + XENGINE_LIBTIMER st_EndTimer; + + memset(&st_StartTimer, '\0', sizeof(XENGINE_LIBTIMER)); + memset(&st_EndTimer, '\0', sizeof(XENGINE_LIBTIMER)); + + BaseLib_OperatorTime_GetSysTime(&st_StartTimer); //获取系统时间 + _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_StartTimer.wYear, st_StartTimer.wMonth, st_StartTimer.wDay, st_StartTimer.wHour, st_StartTimer.wMinute, st_StartTimer.wSecond); + //判断注册时间方式 + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + //按照到期时间计算 + BaseLib_OperatorTimeSpan_GetForStu(&st_StartTimer, pSt_DayTimer, &pSt_AuthLocal->st_AuthRegInfo.nHasTime, 3); + _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszLeftTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), pSt_DayTimer->wYear, pSt_DayTimer->wMonth, pSt_DayTimer->wDay, pSt_DayTimer->wHour, pSt_DayTimer->wMinute, pSt_DayTimer->wSecond); + } + else + { + pSt_AuthLocal->st_AuthRegInfo.nHasTime = nDayTimer; + _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszLeftTime, _X("%lld"), nDayTimer); + } + return true; +} +/******************************************************************** +函数名称:Authorize_CDKey_GetLeftTimer +函数功能:验证CDKey + 参数.一:pSt_AuthLocal + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入Authorize_CDKey_ReadKey获取到的值 + 参数.二:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:Y + 意思:如果CDKEY带序列号,可以输入序列号进行验证(优先序列号验证,失败进行常规CDKEY验证) +返回值 + 类型:逻辑型 + 意思:是否成功 +备注:无限制版本不做验证 + 其他验证nHasTime将被设置还拥有时间 +*********************************************************************/ +bool CAuthorize_CDKey::Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, LPCXSTR lpszSerialNumber /* = NULL */) +{ + Authorize_IsErrorOccur = false; + + if (NULL == pSt_AuthLocal) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + bool bSerial = false; + //是否输入了序列号,那么进行序列号验证,每次验证都需要序列号 + if (NULL != lpszSerialNumber) + { + if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial, lpszSerialNumber, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial))) + { + //次数验证 + pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow++; + if (pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow <= pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeCount) + { + bSerial = true; + } + } + else if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial, lpszSerialNumber, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial))) + { + __int64x nTimeDay = 0; + XCHAR tszTimeEnd[128]; + memset(tszTimeEnd, '\0', sizeof(tszTimeEnd)); + //过期时间 + BaseLib_OperatorTime_TimeToStr(tszTimeEnd); + BaseLib_OperatorTimeSpan_GetForStr(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime, tszTimeEnd, &nTimeDay, 3); + if (nTimeDay > 0) + { + bSerial = true; + } + } + else if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial, lpszSerialNumber, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial))) + { + //无限制 + bSerial = true; + } + else + { + bSerial = false; + } + } + //如果本地序列号验证失败,或者没有启用,进行常规CDKEY验证 + if (!bSerial) + { + //验证CDKEY本身情况 + XENGINE_LIBTIMER st_StartTimer; + XENGINE_LIBTIMER st_EndTimer; + XENGINE_LIBTIMER st_SysTimer; + + memset(&st_StartTimer, '\0', sizeof(XENGINE_LIBTIMER)); + memset(&st_EndTimer, '\0', sizeof(XENGINE_LIBTIMER)); + memset(&st_SysTimer, '\0', sizeof(XENGINE_LIBTIMER)); + + if (pSt_AuthLocal->st_AuthRegInfo.enRegType <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTREG; + return false; + } + //处理注册类型 + if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNLIMIT == pSt_AuthLocal->st_AuthRegInfo.enRegType) + { + return true; + } + else if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNKNOW == pSt_AuthLocal->st_AuthRegInfo.enRegType) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_UNKNOW; + return false; + } + else if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_TEMP == pSt_AuthLocal->st_AuthRegInfo.enRegType) + { + if (_tcsxlen(pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime) > 1) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_TEMP; + return false; + } + else + { + _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_SysTimer.wYear, st_SysTimer.wMonth, st_SysTimer.wDay, st_SysTimer.wHour, st_SysTimer.wMinute, st_SysTimer.wSecond); + } + } + else if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_EXPIRED == pSt_AuthLocal->st_AuthRegInfo.enRegType) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_EXPIRED; + return false; + } + else + { + //其他类型的注册机制 + if (pSt_AuthLocal->st_AuthRegInfo.nHasTime <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTHASTIME; + return false; + } + BaseLib_OperatorTime_GetSysTime(&st_SysTimer); + //转换时间格式 + _stxscanf(pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_StartTimer.wYear, &st_StartTimer.wMonth, &st_StartTimer.wDay, &st_StartTimer.wHour, &st_StartTimer.wMinute, &st_StartTimer.wSecond); + //计算超时时间 + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + _stxscanf(pSt_AuthLocal->st_AuthRegInfo.tszStartTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_EndTimer.wYear, &st_EndTimer.wMonth, &st_EndTimer.wDay, &st_EndTimer.wHour, &st_EndTimer.wMinute, &st_EndTimer.wSecond); + __int64x nUsedTime = 0; + BaseLib_OperatorTimeSpan_GetForStu(&st_SysTimer, &st_EndTimer, &nUsedTime, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_SECOND); + pSt_AuthLocal->st_AuthRegInfo.nHasTime -= nUsedTime; + } + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + //在启动的时候已经计算过了,不需要在做计算 + } + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + pSt_AuthLocal->st_AuthRegInfo.nHasTime--; + } + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + _stxscanf(pSt_AuthLocal->st_AuthRegInfo.tszLeftTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_EndTimer.wYear, &st_EndTimer.wMonth, &st_EndTimer.wDay, &st_EndTimer.wHour, &st_EndTimer.wMinute, &st_EndTimer.wSecond); + BaseLib_OperatorTimeSpan_GetForStu(&st_SysTimer, &st_EndTimer, &pSt_AuthLocal->st_AuthRegInfo.nHasTime, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_SECOND); + } + else + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTSUPPORT; + return false; + } + if (pSt_AuthLocal->st_AuthRegInfo.nHasTime <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_TIMEOUT; + pSt_AuthLocal->st_AuthRegInfo.enRegType = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_EXPIRED; + _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_SysTimer.wYear, st_SysTimer.wMonth, st_SysTimer.wDay, st_SysTimer.wHour, st_SysTimer.wMinute, st_SysTimer.wSecond); + return false; + } + } + } + pSt_AuthLocal->st_AuthAppInfo.nExecTime++; + return true; +} +/******************************************************************** +函数名称:Authorize_CDKey_WriteTime +函数功能:记录一次执行时间 + 参数.一:lpszFileKey + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要操作的文件 + 参数.二:nCount + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入最大允许记录个数,0不限制 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注:记录次数越多,文件越大.读取需要的内存就越多 +*********************************************************************/ +bool CAuthorize_CDKey::Authorize_CDKey_WriteTime(LPCXSTR lpszFileKey, int nCount /* = 0 */) +{ + Authorize_IsErrorOccur = false; + + if (NULL == lpszFileKey) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + //添加执行信息 + bool bFound = false; + LPCXSTR lpszTimeStr = _X("[TimeList]"); + FILE* pSt_File = _xtfopen(lpszFileKey, _X("r+")); + if (NULL == pSt_File) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_OPENFILE; + return false; + } + XCHAR tszMsgBuffer[MAX_PATH]; + memset(tszMsgBuffer, '\0', MAX_PATH); + //查找是否有时间列表字段 + while (1) + { + if (NULL == fgets(tszMsgBuffer, MAX_PATH, pSt_File)) + { + break; + } + if (0 == _tcsxncmp(lpszTimeStr, tszMsgBuffer, _tcsxlen(lpszTimeStr))) + { + bFound = true; + break; + } + } + //设置文件指针 + if (bFound) + { + //如果设置了最大个数 + if (nCount > 0) + { + int nListCount = 0; + XCHAR** pptszListTime; + //读取现有的 + Authorize_CDKey_ReadTime(lpszFileKey, &pptszListTime, &nListCount); + //是否大于14 >= 10 + if (nListCount >= nCount) + { + long lFSize = ftell(pSt_File); + //需要截断文件 + fclose(pSt_File); + int hFile = _xtopen(lpszFileKey, O_RDWR | O_CREAT, S_IREAD | S_IWRITE); +#ifdef _MSC_BUILD + if (0 != _chsize_s(hFile, lFSize)) +#else + if (0 != ftruncate(hFile, lFSize)) +#endif + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SETFILE; + return false; + } + _close(hFile); + //重新打开文件 + pSt_File = _xtfopen(lpszFileKey, _X("r+")); + fseek(pSt_File, 0, SEEK_END); + //从我们要保留的地方开始轮训 + for (int i = (nListCount - nCount + 1); i < nListCount; i++) + { + fwrite(pptszListTime[i], 1, _tcsxlen(pptszListTime[i]), pSt_File); + fwrite(_X("|"), 1, 1, pSt_File); + } + } + else + { + //在末尾添加 + fseek(pSt_File, -1, SEEK_END); + XCHAR cChar = fgetc(pSt_File); + if (cChar == '\n') + { + fseek(pSt_File, -2, SEEK_END); + } + else + { + fseek(pSt_File, 0, SEEK_END); + } + } + } + else + { + //在末尾添加 + fseek(pSt_File, -1, SEEK_END); + XCHAR cChar = fgetc(pSt_File); + if (cChar == '\n') + { + fseek(pSt_File, -2, SEEK_END); + } + else + { + fseek(pSt_File, 0, SEEK_END); + } + } + } + else + { + fseek(pSt_File, 0, SEEK_END); + if (tszMsgBuffer[_tcsxlen(tszMsgBuffer) - 1] != '\n') + { + fwrite(_X("\n"), 1, 1, pSt_File); + } + fwrite(lpszTimeStr, 1, _tcsxlen(lpszTimeStr), pSt_File); + fwrite(_X("\n"), 1, 1, pSt_File); + } + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); +#ifdef _MSC_BUILD + _xstprintf(tszMsgBuffer, _X("%lld|"), time(NULL)); +#else + _xstprintf(tszMsgBuffer, _X("%ld|"), time(NULL)); +#endif + //追加 + fwrite(tszMsgBuffer, 1, _tcsxlen(tszMsgBuffer), pSt_File); + fclose(pSt_File); + return true; +} +/******************************************************************** +函数名称:Authorize_CDKey_ReadTime +函数功能:读取记录的时间列表信息 + 参数.一:lpszFileKey + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要读取的文件 + 参数.二:ppptszTimeList + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出时间信息列表 + 参数.三:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAuthorize_CDKey::Authorize_CDKey_ReadTime(LPCXSTR lpszFileKey, XCHAR*** ppptszTimeList, int* pInt_ListCount) +{ + Authorize_IsErrorOccur = false; + + if ((NULL == lpszFileKey) || (NULL == pInt_ListCount)) + { + return false; + } + bool bFound = false; + LPCXSTR lpszTimeStr = _X("[TimeList]"); + FILE* pSt_File = _xtfopen(lpszFileKey, _X("rb")); + if (NULL == pSt_File) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_OPENFILE; + return false; + } + XCHAR tszMsgBuffer[MAX_PATH]; + //查找是否有时间列表字段 + while (1) + { + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); + if (NULL == fgets(tszMsgBuffer, MAX_PATH, pSt_File)) + { + break; + } + if (0 == _tcsxncmp(lpszTimeStr, tszMsgBuffer, _tcsxlen(lpszTimeStr))) + { + bFound = true; + break; + } + } + //设置文件指针 + if (!bFound) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_TIMELIST; + return false; + } + list stl_ListTime; + struct stat st_FileStat; + stat(lpszFileKey, &st_FileStat); + //申请足够的内存 + XCHAR* ptszMsgBuffer = (XCHAR*)malloc(st_FileStat.st_size); + if (NULL == ptszMsgBuffer) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_MALLOC; + return false; + } + memset(ptszMsgBuffer, '\0', st_FileStat.st_size); + if (fread(ptszMsgBuffer, 1, st_FileStat.st_size, pSt_File) <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_READ; + free(ptszMsgBuffer); + ptszMsgBuffer = NULL; + return false; + } + //申请内存 + XCHAR* ptszTokStr = _tcsxtok(ptszMsgBuffer, _X("|")); + while (NULL != ptszTokStr) + { + if (_tcsxlen(ptszTokStr) > 4) + { + stl_ListTime.push_back(ptszTokStr); + } + ptszTokStr = _tcsxtok(NULL, _X("|")); + } + fclose(pSt_File); + free(ptszMsgBuffer); + ptszMsgBuffer = NULL; + //导出 + *pInt_ListCount = (int)stl_ListTime.size(); + BaseLib_OperatorMemory_Malloc((XPPPMEM)ppptszTimeList, *pInt_ListCount, 64); + list::const_iterator stl_ListIterator = stl_ListTime.begin(); + for (int i = 0; stl_ListIterator != stl_ListTime.end(); stl_ListIterator++, i++) + { + _tcsxcpy((*ppptszTimeList)[i], stl_ListIterator->c_str()); + } + stl_ListTime.clear(); + return true; +} \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.h b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.h new file mode 100644 index 0000000..08ea0e1 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.h @@ -0,0 +1,30 @@ +#pragma once +/******************************************************************** +// Created: 2024/07/08 17:27:26 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\Authorize_CDKey\Authorize_CDKey.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\Authorize_CDKey +// File Base: Authorize_CDKey +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: 本地授权服务 +// History: +*********************************************************************/ + +class CAuthorize_CDKey +{ +public: + CAuthorize_CDKey(); + ~CAuthorize_CDKey(); +public: + bool Authorize_CDKey_WriteKey(LPCXSTR lpszFileKey, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal); + bool Authorize_CDKey_ReadKey(LPCXSTR lpszFileKey, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal); + bool Authorize_CDKey_WriteMemory(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal); + bool Authorize_CDKey_ReadMemory(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal); +public: + bool Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, __int64x nDayTimer = 0, XENGINE_LIBTIMER* pSt_DayTimer = NULL); + bool Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, LPCXSTR lpszSerialNumber = NULL); + bool Authorize_CDKey_WriteTime(LPCXSTR lpszFileKey, int nCount = 0); + bool Authorize_CDKey_ReadTime(LPCXSTR lpszFileKey, XCHAR*** ppptszTimeList, int* pInt_ListCount); +private: +}; diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp new file mode 100644 index 0000000..c068c96 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp @@ -0,0 +1,509 @@ +#include "pch.h" +#include "Authorize_Serial.h" +/******************************************************************** +// Created: 2024/07/08 17:30:53 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\Authorize_Serial\Authorize_Serial.cpp +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\Authorize_Serial +// File Base: Authorize_Serial +// File Ext: cpp +// Project: XEngine +// Author: qyt +// Purpose: 序列卡生成器 +// History: +*********************************************************************/ +CAuthorize_Serial::CAuthorize_Serial() +{ + memset(tszTimerSecond, '\0', sizeof(tszTimerSecond)); + memset(tszTimerDay, '\0', sizeof(tszTimerDay)); + memset(tszTimerTime, '\0', sizeof(tszTimerTime)); + memset(tszTimerCustom, '\0', sizeof(tszTimerCustom)); + + _tcsxcpy(tszTimerSecond, _X("XYRYS")); + _tcsxcpy(tszTimerDay, _X("XYRYD")); + _tcsxcpy(tszTimerTime, _X("XYRYT")); + _tcsxcpy(tszTimerCustom, _X("XYRYC")); +} +CAuthorize_Serial::~CAuthorize_Serial() +{ + +} +////////////////////////////////////////////////////////////////////////// +// 公有函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:Authorize_Serial_Creator +函数功能:开始生成指定的序列号 + 参数.一:ppptszSerialNumber + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出序列卡列表,根据nCardNumber 来确定列表个数 + 参数.二:lpszUserHeader + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:自定义头,长度为6,填充5 比如 XHEAD + 参数.三:nCardNumber + In/Out:In + 类型:整数型 + 可空:N + 意思:要生成多少张卡,生成多了,此函数会阻塞程序,那么请放置线程中运行 + 参数.四:nFieldNumber + In/Out:In + 类型:整数型 + 可空:N + 意思:卡的段数,AAAAA-BBBBB-CCCCC-DDDDD-EEEEE,不包含三段自定义头,总字段:3 + nFieldNumber + 参数.五:pSt_CustomTimer + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:如果第五个参数为自定义日期,那么这个参数必须赋值。如果第五个参数为天数卡,这个结构体的nDay 必须赋值,表明拥有几天。 + 如果是分钟卡,那么这个值的nMinute必须有值,表示拥有的分钟.如果是次数卡,那么这个值的wFlags必须有值,表示拥有的次数,其他类型可以为NULL + 参数.六:enSerialType + In/Out:In + 类型:枚举型 + 可空:Y + 意思:要生成的卡类型 +返回值 + 类型:逻辑型 + 意思:是否生成成功 +备注:输入的时间不能超过99999,多天卡现在由用户直接使用pSt_CustomTimer参数指定,不在内部指定了 +*********************************************************************/ +bool CAuthorize_Serial::Authorize_Serial_Creator(XCHAR*** ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER* pSt_CustomTimer, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType /* = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY */) +{ + Authorize_IsErrorOccur = false; + //参数检查 + if ((NULL == ppptszSerialNumber) || (NULL == lpszUserHeader)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + BaseLib_OperatorMemory_Malloc((XPPPMEM)ppptszSerialNumber, nCardNumber, MAX_PATH); + srand((unsigned int)time(NULL)); //取随机因子 + + for (int i = 0; i < nCardNumber; i++) + { + XCHAR tszSerialNumber[MAX_PATH]; + memset(tszSerialNumber, '\0', MAX_PATH); + //检查生成类型 + switch (enSerialType) + { + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND: + { + if (NULL == pSt_CustomTimer) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + XCHAR tszFillBuffer[10]; + XCHAR tszDayBuffer[10]; + memset(tszFillBuffer, '\0', sizeof(tszFillBuffer)); + memset(tszDayBuffer, '\0', sizeof(tszDayBuffer)); + + Authorize_Serial_RandomWord(tszFillBuffer); + _xstprintf(tszDayBuffer, _X("%d"), pSt_CustomTimer->wSecond); + memcpy(tszFillBuffer + (_tcsxlen(tszFillBuffer) - _tcsxlen(tszDayBuffer)), tszDayBuffer, _tcsxlen(tszDayBuffer)); + + _xstprintf(tszSerialNumber, _X("%s-%s-%s"), lpszUserHeader, tszTimerSecond, tszFillBuffer); + if (!Authorize_Serial_Fill(tszSerialNumber, nFieldNumber)) + { + return false; + } + } + break; + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY: + { + if (NULL == pSt_CustomTimer) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + XCHAR tszFillBuffer[10]; + XCHAR tszDayBuffer[10]; + memset(tszFillBuffer, '\0', sizeof(tszFillBuffer)); + memset(tszDayBuffer, '\0', sizeof(tszDayBuffer)); + + Authorize_Serial_RandomWord(tszFillBuffer); + _xstprintf(tszDayBuffer, _X("%d"), pSt_CustomTimer->wDay); + memcpy(tszFillBuffer + (_tcsxlen(tszFillBuffer) - _tcsxlen(tszDayBuffer)), tszDayBuffer, _tcsxlen(tszDayBuffer)); + + _xstprintf(tszSerialNumber, _X("%s-%s-%s"), lpszUserHeader, tszTimerDay, tszFillBuffer); + if (!Authorize_Serial_Fill(tszSerialNumber, nFieldNumber)) + { + return false; + } + } + break; + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME: + XCHAR tszFillBuffer[10]; + XCHAR tszTimeBuffer[10]; + memset(tszFillBuffer, '\0', sizeof(tszFillBuffer)); + memset(tszTimeBuffer, '\0', sizeof(tszTimeBuffer)); + + Authorize_Serial_RandomWord(tszFillBuffer); + _xstprintf(tszTimeBuffer, _X("%d"), pSt_CustomTimer->wFlags); + memcpy(tszFillBuffer + (_tcsxlen(tszFillBuffer) - _tcsxlen(tszTimeBuffer)), tszTimeBuffer, _tcsxlen(tszTimeBuffer)); + + _xstprintf(tszSerialNumber, _X("%s-%s-%s"), lpszUserHeader, tszTimerTime, tszFillBuffer); + if (!Authorize_Serial_Fill(tszSerialNumber, nFieldNumber)) + { + return false; + } + break; + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM: + if (NULL == pSt_CustomTimer) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + XCHAR tszTimer[128]; + memset(tszTimer, '\0', 128); + + if ((pSt_CustomTimer->wHour > 0) || (pSt_CustomTimer->wMinute > 0) || (pSt_CustomTimer->wSecond > 0)) + { + _xstprintf(tszTimer, _X("%04d%02d%02d-%02d%02d%02d"), pSt_CustomTimer->wYear, pSt_CustomTimer->wMonth, pSt_CustomTimer->wDay, pSt_CustomTimer->wHour, pSt_CustomTimer->wMinute, pSt_CustomTimer->wSecond); + nFieldNumber--; + } + else + { + _xstprintf(tszTimer, _X("%04d%02d%02d"), pSt_CustomTimer->wYear, pSt_CustomTimer->wMonth, pSt_CustomTimer->wDay); + } + _xstprintf(tszSerialNumber, _X("%s-%s-%s"), lpszUserHeader, tszTimerCustom, tszTimer); + if (!Authorize_Serial_Fill(tszSerialNumber, nFieldNumber)) + { + return false; + } + break; + default: + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTSUPPORT; + return false; + } + _tcsxcpy((*ppptszSerialNumber)[i], tszSerialNumber); + } + return true; +} +/******************************************************************** +函数名称:Authorize_Serial_Creator +函数功能:创建自定义无类型序列号 + 参数.一:ppptszSerialNumber + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出序列卡列表,根据nCardNumber 来确定列表个数 + 参数.二:lpszUserHeader + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:自定义头,长度为6,填充5 比如 XHEAD + 参数.三:nCardNumber + In/Out:In + 类型:整数型 + 可空:N + 意思:要生成多少张卡,生成多了,此函数会阻塞程序,那么请放置线程中运行 + 参数.四:nFieldNumber + In/Out:In + 类型:整数型 + 可空:N + 意思:卡的段数,AAAAA-BBBBB-CCCCC-DDDDD-EEEEE +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +bool CAuthorize_Serial::Authorize_Serial_Create(XCHAR*** ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber) +{ + Authorize_IsErrorOccur = false; + //参数检查 + if ((NULL == ppptszSerialNumber) || (NULL == lpszUserHeader)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + BaseLib_OperatorMemory_Malloc((XPPPMEM)ppptszSerialNumber, nCardNumber, MAX_PATH); + srand((unsigned int)time(NULL)); //取随机因子 + + for (int i = 0; i < nCardNumber; i++) + { + XCHAR tszSerialNumber[MAX_PATH]; + memset(tszSerialNumber, '\0', MAX_PATH);; + + _xstprintf(tszSerialNumber, _X("%s"), lpszUserHeader); + if (!Authorize_Serial_Fill(tszSerialNumber, nFieldNumber)) + { + return false; + } + _tcsxcpy((*ppptszSerialNumber)[i], tszSerialNumber); + } + return true; +} +/******************************************************************** +函数名称:Authorize_Serial_GetType +函数功能:获取一个序列号的类型 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要获取的缓冲区 + 参数.二:penSerialType + In/Out:Out + 类型:枚举型 + 可空:Y + 意思:导出此卡的类型 + 参数.三:pSt_CustomTimer + In/Out:Out + 类型:数据结构指针 + 可空:Y + 意思:如果不是自定义类型或者天数卡,或者次数卡,这个参数将不起作用 +返回值 + 类型:逻辑型 + 意思:是否获取成功 +备注: +*********************************************************************/ +bool CAuthorize_Serial::Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE* penSerialType, XENGINE_LIBTIMER* pSt_CustomTimer /* = NULL */) +{ + Authorize_IsErrorOccur = false; + + if (NULL == penSerialType) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + + XCHAR tszBuffer[6]; + XCHAR tszBuffertemp[6]; + XCHAR tszTimeData[128]; + XCHAR tszTimeTime[128]; + + memset(tszBuffer, '\0', 6); + memset(tszBuffertemp, '\0', 6); + memset(tszTimeData, '\0', sizeof(tszTimeData)); + memset(tszTimeTime, '\0', sizeof(tszTimeTime)); + //获取指定内容 + if (4 != _stxscanf(lpszSerialNumber, _X("%[^-]-%[^-]-%[^-]-%[^-]"), tszBuffertemp, tszBuffer, tszTimeData, tszTimeTime)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_BUFFER; + return false; + } + //匹配类型 + if (0 == _tcsxncmp(tszTimerSecond, tszBuffer, 5)) + { + if (NULL == pSt_CustomTimer) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + unsigned int i = 0; + for (i = 0; i < _tcsxlen(tszTimeData); i++) + { + if (0 != isdigit(tszTimeData[i])) + { + break; + } + } + XCHAR tszIntBuffer[64]; + memset(tszIntBuffer, '\0', sizeof(tszIntBuffer)); + memcpy(tszIntBuffer, tszTimeData + i, _tcsxlen(tszTimeData) - i); + pSt_CustomTimer->wSecond = _ttxoi(tszIntBuffer); + + *penSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND; + } + else if (0 == _tcsxncmp(tszTimerDay, tszBuffer, 5)) + { + if (NULL == pSt_CustomTimer) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + unsigned int i = 0; + for (i = 0; i < _tcsxlen(tszTimeData); i++) + { + if (0 != isdigit(tszTimeData[i])) + { + break; + } + } + XCHAR tszIntBuffer[64]; + memset(tszIntBuffer, '\0', sizeof(tszIntBuffer)); + memcpy(tszIntBuffer, tszTimeData + i, _tcsxlen(tszTimeData) - i); + pSt_CustomTimer->wDay = _ttxoi(tszIntBuffer); + + *penSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY; + } + else if (0 == _tcsxncmp(tszTimerTime, tszBuffer, 5)) + { + if (NULL == pSt_CustomTimer) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + unsigned int i = 0; + for (i = 0; i < _tcsxlen(tszTimeData); i++) + { + if (0 != isdigit(tszTimeData[i])) + { + break; + } + } + XCHAR tszIntBuffer[64]; + memset(tszIntBuffer, '\0', sizeof(tszIntBuffer)); + memcpy(tszIntBuffer, tszTimeData + i, _tcsxlen(tszTimeData) - i); + pSt_CustomTimer->wFlags = _ttxoi(tszIntBuffer); + + *penSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME; + } + else if (0 == _tcsxncmp(tszTimerCustom, tszBuffer, 5)) + { + *penSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM; + if (NULL == pSt_CustomTimer) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + if (3 != _stxscanf(tszTimeData, _X("%04d%02d%02d"), &pSt_CustomTimer->wYear, &pSt_CustomTimer->wMonth, &pSt_CustomTimer->wDay)) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_CUSTOM; + return false; + } + if (3 != _stxscanf(tszTimeTime, _X("%02d%02d%02d"), &pSt_CustomTimer->wHour, &pSt_CustomTimer->wMinute, &pSt_CustomTimer->wSecond)) + { + pSt_CustomTimer->wHour = 0; + pSt_CustomTimer->wMinute = 0; + pSt_CustomTimer->wSecond = 0; + } + } + else + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_UNKNOW; + return false; + } + return true; +} +////////////////////////////////////////////////////////////////////////// +// 保护函数 +////////////////////////////////////////////////////////////////////////// +/******************************************************************** +函数名称:Authorize_Serial_Fill +函数功能:填充缓冲区 + 参数.一:ptszFillBuffer + In/Out:In/Out + 类型:字符指针 + 可空:N + 意思:输入填充了头和序列号类型的缓冲区 HEARD-XYRYD + 参数.二:nCardNumer + In/Out:In + 类型:整数型 + 可空:N + 意思:要生成的卡的段数 +返回值 + 类型:逻辑型 + 意思:是否生成成功 +备注: +*********************************************************************/ +bool CAuthorize_Serial::Authorize_Serial_Fill(XCHAR *ptszFillBuffer, int nCardNumer) +{ + Authorize_IsErrorOccur = false; + + int nPosType = 0; + + for (int i = 0; i < nCardNumer; i++) + { + XCHAR tszRandom[6]; + memset(tszRandom, '\0', 6); + if (0 == nPosType) + { + Authorize_Serial_Random(tszRandom); + _tcsxcat(ptszFillBuffer, _X("-")); + _tcsxcat(ptszFillBuffer, tszRandom); + nPosType = 1; + } + else if (1 == nPosType) + { + Authorize_Serial_RandomWord(tszRandom); + _tcsxcat(ptszFillBuffer, _X("-")); + _tcsxcat(ptszFillBuffer, tszRandom); + nPosType = 2; + } + else + { + Authorize_Serial_RandomNumber(tszRandom); + _tcsxcat(ptszFillBuffer, _X("-")); + _tcsxcat(ptszFillBuffer, tszRandom); + nPosType = 0; + } + } + return true; +} +/******************************************************************** +函数名称:Authorize_Serial_Random +函数功能:取随机字母数字 + 参数.一:ptszFillBuffer + In/Out:In/Out + 类型:字符指针 + 可空:N + 意思:输入已经初始化为0的字符串,内存空间为6,导出生成成功的字符串 +返回值 + 类型:逻辑型 + 意思:是否生成成功 +备注: +*********************************************************************/ +bool CAuthorize_Serial::Authorize_Serial_Random(XCHAR *ptszFillBuffer) +{ + Authorize_IsErrorOccur = false; + + BaseLib_OperatorHandle_CreateStr(ptszFillBuffer, 6, 0, 1); + return true; +} +/******************************************************************** +函数名称:Authorize_Serial_RandomWord +函数功能:取随机字母,大写 + 参数.一:ptszFillBuffer + In/Out:In/Out + 类型:字符指针 + 可空:N + 意思:输入已经初始化为0的字符串,内存空间为6,导出生成成功的字符串 +返回值 + 类型:逻辑型 + 意思:是否生成成功 +备注: +*********************************************************************/ +bool CAuthorize_Serial::Authorize_Serial_RandomWord(XCHAR *ptszFillBuffer) +{ + Authorize_IsErrorOccur = false; + + BaseLib_OperatorHandle_CreateStr(ptszFillBuffer, 1, 2, 1); + return true; +} +/******************************************************************** +函数名称:Authorize_Serial_RandomNumber +函数功能:取随机数 + 参数.一:ptszFillBuffer + In/Out:In/Out + 类型:字符指针 + 可空:N + 意思:输入已经初始化为0的字符串,内存空间为6,导出生成成功的字符串 +返回值 + 类型:逻辑型 + 意思:是否生成成功 +备注: +*********************************************************************/ +bool CAuthorize_Serial::Authorize_Serial_RandomNumber(XCHAR *ptszFilleBuffer) +{ + Authorize_IsErrorOccur = false; + + BaseLib_OperatorHandle_CreateStr(ptszFilleBuffer, 1, 1); + return true; +} diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.h b/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.h new file mode 100644 index 0000000..b09e53f --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.h @@ -0,0 +1,35 @@ +#pragma once +/******************************************************************** +// Created: 2024/07/08 17:30:06 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\Authorize_Serial\Authorize_Serial.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\Authorize_Serial +// File Base: Authorize_Serial +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: 序列卡生成器 +// History: +*********************************************************************/ + + +class CAuthorize_Serial +{ +public: + CAuthorize_Serial(); + ~CAuthorize_Serial(); +public: + bool Authorize_Serial_Creator(XCHAR*** ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER* pSt_CustomTimer, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY); + bool Authorize_Serial_Create(XCHAR*** ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber); + bool Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE* penSerialType, XENGINE_LIBTIMER* pSt_CustomTimer = NULL); +protected: + bool Authorize_Serial_Fill(XCHAR *ptszFillBuffer, int nCardNumer); //填充后面的字段 +protected: + bool Authorize_Serial_Random(XCHAR *ptszFillBuffer); //取随机字母数字 + bool Authorize_Serial_RandomWord(XCHAR *ptszFillBuffer); //随机取单词 + bool Authorize_Serial_RandomNumber(XCHAR *ptszFilleBuffer); //取随机数 +private: + XCHAR tszTimerSecond[6]; //按照秒钟时间格式 + XCHAR tszTimerDay[6]; //按照天的时间格式 + XCHAR tszTimerTime[6]; //次数卡 + XCHAR tszTimerCustom[32]; //自定义到期时间 +}; diff --git a/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h new file mode 100644 index 0000000..6f43dc8 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h @@ -0,0 +1,288 @@ +#pragma once +/******************************************************************** +// Created: 2024/07/08 17:30:14 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\Authorize_Define.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey +// File Base: Authorize_Define +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: CDKEY授权验证服务 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 导出函数 +////////////////////////////////////////////////////////////////////////// +extern "C" XLONG Authorize_GetLastError(int *pInt_SysError = NULL); +/************************************************************************/ +/* 序列卡导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:Authorize_Serial_Creator +函数功能:开始生成指定的序列号 + 参数.一:ppptszSerialNumber + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出序列卡列表,根据nCardNumber 来确定列表个数 + 参数.二:lpszUserHeader + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:自定义头,长度为6,填充5 比如 XHEAD + 参数.三:nCardNumber + In/Out:In + 类型:整数型 + 可空:N + 意思:要生成多少张卡,生成多了,此函数会阻塞程序,那么请放置线程中运行 + 参数.四:nFieldNumber + In/Out:In + 类型:整数型 + 可空:N + 意思:卡的段数,AAAAA-BBBBB-CCCCC-DDDDD-EEEEE,不包含三段自定义头,总字段:3 + nFieldNumber + 参数.五:pSt_CustomTimer + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:如果第五个参数为自定义日期,那么这个参数必须赋值。如果第五个参数为天数卡,这个结构体的nDay 必须赋值,表明拥有几天。 + 如果是分钟卡,那么这个值的nMinute必须有值,表示拥有的分钟.如果是次数卡,那么这个值的wFlags必须有值,表示拥有的次数,其他类型可以为NULL + 参数.六:enSerialType + In/Out:In + 类型:枚举型 + 可空:Y + 意思:要生成的卡类型 +返回值 + 类型:逻辑型 + 意思:是否生成成功 +备注:输入的时间不能超过99999,多天卡现在由用户直接使用pSt_CustomTimer参数指定,不在内部指定了 +*********************************************************************/ +extern "C" bool Authorize_Serial_Creator(XCHAR * **ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER * pSt_CustomTimer, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY); +/******************************************************************** +函数名称:Authorize_Serial_Create +函数功能:创建自定义无类型序列号 + 参数.一:ppptszSerialNumber + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出序列卡列表,根据nCardNumber 来确定列表个数 + 参数.二:lpszUserHeader + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:自定义头,长度为6,填充5 比如 XHEAD + 参数.三:nCardNumber + In/Out:In + 类型:整数型 + 可空:N + 意思:要生成多少张卡,生成多了,此函数会阻塞程序,那么请放置线程中运行 + 参数.四:nFieldNumber + In/Out:In + 类型:整数型 + 可空:N + 意思:卡的段数,AAAAA-BBBBB-CCCCC-DDDDD-EEEEE +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Authorize_Serial_Create(XCHAR*** ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber); +/******************************************************************** +函数名称:Authorize_Serial_GetType +函数功能:获取一个序列号的类型 + 参数.一:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要获取的缓冲区 + 参数.二:penSerialType + In/Out:Out + 类型:枚举型 + 可空:Y + 意思:导出此卡的类型 + 参数.三:pSt_CustomTimer + In/Out:Out + 类型:数据结构指针 + 可空:Y + 意思:如果不是自定义类型或者天数卡,或者次数卡,这个参数将不起作用 +返回值 + 类型:逻辑型 + 意思:是否获取成功 +备注: +*********************************************************************/ +extern "C" bool Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE* penSerialType, XENGINE_LIBTIMER* pSt_CustomTimer = NULL); +/************************************************************************/ +/* 本地授权导出函数 */ +/************************************************************************/ +/******************************************************************** +函数名称:Authorize_CDKey_WriteKey +函数功能:写一个CDKey文件 + 参数.一:lpszFileKey + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要操作的文件路径 + 参数.二:pSt_AuthLocal + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:要写入的文件信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注:写入读取必须是明文,建议你加密处理CDKEY,通过OPENSSL模块,来加解密,在读写 +*********************************************************************/ +extern "C" bool Authorize_CDKey_WriteKey(LPCXSTR lpszFileKey, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal); +/******************************************************************** +函数名称:Authorize_CDKey_ReadKey +函数功能:读一个数据文件 + 参数.一:lpszFileKey + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:要操作的文件路径 + 参数.二:pSt_AuthLocal + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:导出获取到的文件信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Authorize_CDKey_ReadKey(LPCXSTR lpszFileKey, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal); +/******************************************************************** +函数名称:Authorize_CDKey_WriteMemory +函数功能:写配置信息到内存 + 参数.一:ptszMsgBuffer + In/Out:Out + 类型:字符指针 + 可空:N + 意思:写到的内存 + 参数.二:pInt_MsgLen + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:写到的内存大小 + 参数.三:pSt_AuthLocal + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入要写的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Authorize_CDKey_WriteMemory(XCHAR* ptszMsgBuffer, int* pInt_MsgLen, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal); +/******************************************************************** +函数名称:Authorize_CDKey_ReadMemory +函数功能:内存配置文件读取 + 参数.一:lpszMsgBuffer + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要读取配置的内存 + 参数.二:nMsgLen + In/Out:In + 类型:整数型 + 可空:N + 意思:输入读取内存大小 + 参数.三:pSt_AuthLocal + In/Out:Out + 类型:数据结构指针 + 可空:N + 意思:输出读取到的信息 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Authorize_CDKey_ReadMemory(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal); +/******************************************************************** +函数名称:Authorize_CDKey_BuildKeyTime +函数功能:构造注册的时间结构体信息 + 参数.一:pSt_AuthLocal + In/Out:In + 类型:结构体指针 + 可空:N + 意思:要构造的结构体 + 参数.二:nDayTimer + In/Out:In + 类型:整数型 + 可空:Y + 意思:可用时间或者次数.非自定义时间需要设置此值 + 参数.三:pSt_DayTimer + In/Out:In + 类型:结构体指针 + 可空:Y + 意思:如果是自定义时间,这个参数需要设置,其他类型请设置参数二 +返回值 + 类型:逻辑型 + 意思:是否构造成功 +备注:此函数会修改st_AuthRegInfo的时间信息成员 +*********************************************************************/ +extern "C" bool Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, __int64x nDayTimer = 0, XENGINE_LIBTIMER* pSt_DayTimer = NULL); +/******************************************************************** +函数名称:Authorize_CDKey_GetLeftTimer +函数功能:验证CDKey + 参数.一:pSt_AuthLocal + In/Out:In + 类型:数据结构指针 + 可空:N + 意思:输入Authorize_CDKey_ReadKey获取到的值 + 参数.二:lpszSerialNumber + In/Out:In + 类型:常量字符指针 + 可空:Y + 意思:如果CDKEY带序列号,可以输入序列号进行验证(优先序列号验证,失败进行常规CDKEY验证) +返回值 + 类型:逻辑型 + 意思:是否成功 +备注:无限制版本不做验证 + 其他验证nHasTime将被设置还拥有时间 +*********************************************************************/ +extern "C" bool Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL * pSt_AuthLocal, LPCXSTR lpszSerialNumber = NULL); +/******************************************************************** +函数名称:Authorize_CDKey_WriteTime +函数功能:记录一次执行时间 + 参数.一:lpszFileKey + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要操作的文件 + 参数.二:nCount + In/Out:In + 类型:整数型 + 可空:Y + 意思:输入最大允许记录个数,0不限制 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注:记录次数越多,文件越大.读取需要的内存就越多 +*********************************************************************/ +extern "C" bool Authorize_CDKey_WriteTime(LPCXSTR lpszFileKey, int nCount = 0); +/******************************************************************** +函数名称:Authorize_CDKey_ReadTime +函数功能:读取记录的时间列表信息 + 参数.一:lpszFileKey + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入要读取的文件 + 参数.二:ppptszTimeList + In/Out:Out + 类型:三级指针 + 可空:N + 意思:输出时间信息列表 + 参数.三:pInt_ListCount + In/Out:Out + 类型:整数型指针 + 可空:N + 意思:输出个数 +返回值 + 类型:逻辑型 + 意思:是否成功 +备注: +*********************************************************************/ +extern "C" bool Authorize_CDKey_ReadTime(LPCXSTR lpszFileKey, XCHAR*** ppptszTimeList, int* pInt_ListCount); \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h new file mode 100644 index 0000000..304bfa1 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h @@ -0,0 +1,35 @@ +#pragma once +/******************************************************************** +// Created: 2024/07/08 17:30:28 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\Authorize_Error.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey +// File Base: Authorize_Error +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: 错误导出表 +// History: +*********************************************************************/ +////////////////////////////////////////////////////////////////////////// +// 序列卡授权导出错误表 +////////////////////////////////////////////////////////////////////////// +#define ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT 0x50A0001 //参数不合适 +#define ERROR_AUTHORIZE_MODULE_CDKEY_NOTSUPPORT 0x50A0002 //不支持此生成类型 +#define ERROR_AUTHORIZE_MODULE_CDKEY_BUFFER 0x50A0003 //这个缓冲区有问题,获取卡类型失败 +#define ERROR_AUTHORIZE_MODULE_CDKEY_CUSTOM 0x50A0004 //获取自定义时间序列号的过期时间失败。 +#define ERROR_AUTHORIZE_MODULE_CDKEY_UNKNOW 0x50A0005 //获取类型失败,这个类型未知 +#define ERROR_AUTHORIZE_MODULE_CDKEY_CONNECT 0x50A1001 //连接信息写入失败 +#define ERROR_AUTHORIZE_MODULE_CDKEY_APPINFO 0x50A1002 //程序信息写入失败 +#define ERROR_AUTHORIZE_MODULE_CDKEY_AUTHREG 0x50A1003 //添加注册信息失败 +#define ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL 0x50A1004 //写入序列号失败 +#define ERROR_AUTHORIZE_MODULE_CDKEY_USER 0x50A1005 //写入用户信息失败 +#define ERROR_AUTHORIZE_MODULE_CDKEY_NOTREG 0x50A1021 //没有注册 +#define ERROR_AUTHORIZE_MODULE_CDKEY_NOTHASTIME 0x50A1022 //没有可用时间 +#define ERROR_AUTHORIZE_MODULE_CDKEY_TIMEOUT 0x50A1024 //CDKEY已经超时,没有可用时间 +#define ERROR_AUTHORIZE_MODULE_CDKEY_TEMP 0x50A1026 //临时版本已不可用 +#define ERROR_AUTHORIZE_MODULE_CDKEY_EXPIRED 0x50A1027 //已经过期的CDKEY,无法继续使用 +#define ERROR_AUTHORIZE_MODULE_CDKEY_OPENFILE 0x50A1031 //文件不存在 +#define ERROR_AUTHORIZE_MODULE_CDKEY_SETFILE 0x50A1032 //设置文件失败 +#define ERROR_AUTHORIZE_MODULE_CDKEY_TIMELIST 0x50A1041 //不存在时间列表 +#define ERROR_AUTHORIZE_MODULE_CDKEY_MALLOC 0x50A1042 //申请内存失败 +#define ERROR_AUTHORIZE_MODULE_CDKEY_READ 0x50A1043 //读取文件失败 \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_CDKey/Makefile b/XEngine_Source/AuthorizeModule_CDKey/Makefile new file mode 100644 index 0000000..90dedde --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/Makefile @@ -0,0 +1,72 @@ +CC = g++ -Wall -std=c++17 -fPIC +PLATFORM = linux +PLATVER = +PLATDIR = +FILEEXT = +LIBFLAG = +RELEASE = 0 +UNICODE = 0 +LOADHDR = -I ./ +LIB = -lXEngine_BaseLib +LIBEX = +LOADSO = +OBJECTS = Authorize_Serial.o Authorize_CDKey.o pch.o + +ifeq ($(RELEASE),1) +FLAGS = -c +DEBUG = +else +FLAGS = -c -lc_p +DEBUG = -g -pg +endif + +ifeq ($(UNICODE),1) +UNICODE = -D _UNICODE +else +UNICODE = +endif + +ifeq ($(PLATFORM),linux) + ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release)) + PLATVER = -D __CENTOS__ + PLATDIR = XEngine_Linux/Centos + else + PLATVER = -D __UBUNTU__ + PLATDIR = XEngine_Linux/Ubuntu + endif + FILEEXT = so + LIBFLAG = -shared + LIBEX = -lpthread -lrt -ldl + LOADBIN = -Wl,-rpath=../XEngine_BaseLib,--disable-new-dtags +else ifeq ($(PLATFORM),mac) + CC += -Wno-deprecated-declarations + PLATVER = -D __MACOS__ + PLATDIR = XEngine_Mac + FILEEXT = dylib + LIBFLAG = -dynamiclib + LIBEX = -lpthread -ldl + LOADBIN = -Wl,-rpath,@loader_path/../XEngine_BaseLib/ +endif + +all:$(OBJECTS) + $(CC) $(DEBUG) $(OBJECTS) -o libAuthorizeModule_CDKey.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN) + +Authorize_Serial.o:./Authorize_Serial/Authorize_Serial.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./Authorize_Serial/Authorize_Serial.cpp +Authorize_CDKey.o:./Authorize_CDKey/Authorize_CDKey.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./Authorize_CDKey/Authorize_CDKey.cpp + +pch.o:pch.cpp + $(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) pch.cpp + + +InstallAll:InstallSo +InstallSo:./libAuthorizeModule_CDKey.$(FILEEXT) + cp ./libAuthorizeModule_CDKey.$(FILEEXT) ../../XEngine_Release/libAuthorizeModule_CDKey.$(FILEEXT) + + +CleanAll:CleanObj CleanMk +CleanObj: + rm *.o +CleanMk: + rm *.$(FILEEXT) diff --git a/XEngine_Source/AuthorizeModule_CDKey/dllmain.cpp b/XEngine_Source/AuthorizeModule_CDKey/dllmain.cpp new file mode 100644 index 0000000..daed8c8 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/dllmain.cpp @@ -0,0 +1,19 @@ +// dllmain.cpp : 定义 DLL 应用程序的入口点。 +#include "pch.h" + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + diff --git a/XEngine_Source/AuthorizeModule_CDKey/framework.h b/XEngine_Source/AuthorizeModule_CDKey/framework.h new file mode 100644 index 0000000..80cbbc9 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/framework.h @@ -0,0 +1,5 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN // 从 Windows 头文件中排除极少使用的内容 +// Windows 头文件 +#include diff --git a/XEngine_Source/AuthorizeModule_CDKey/pch.cpp b/XEngine_Source/AuthorizeModule_CDKey/pch.cpp new file mode 100644 index 0000000..29cdfc5 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/pch.cpp @@ -0,0 +1,80 @@ +#include "pch.h" +#include "Authorize_CDKey/Authorize_CDKey.h" +#include "Authorize_Serial/Authorize_Serial.h" +/******************************************************************** +// Created: 2021/07/20 13:11:54 +// File Name: D:\XEngine\XEngine_SourceCode\XEngine_HelpComponents\HelpComponents_Authorize\pch.cpp +// File Path: D:\XEngine\XEngine_SourceCode\XEngine_HelpComponents\HelpComponents_Authorize +// File Base: pch +// File Ext: cpp +// Project: XEngine(网络通信引擎) +// Author: qyt +// Purpose: 导出实现 +// History: +*********************************************************************/ +bool Authorize_IsErrorOccur = false; +XLONG Authorize_dwErrorCode = 0; +////////////////////////////////////////////////////////////////////////// +CAuthorize_Serial m_Serial; +CAuthorize_CDKey m_Local; +////////////////////////////////////////////////////////////////////////// +// 导出函数 +////////////////////////////////////////////////////////////////////////// +extern "C" XLONG Authorize_GetLastError(int* pInt_SysError) +{ + if (NULL != pInt_SysError) + { + *pInt_SysError = errno; + } + return Authorize_dwErrorCode; +} +/************************************************************************/ +/* 卡导出函数 */ +/************************************************************************/ +extern "C" bool Authorize_Serial_Creator(XCHAR * **ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER * pSt_CustomTimer, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType) +{ + return m_Serial.Authorize_Serial_Creator(ppptszSerialNumber, lpszUserHeader, nCardNumber, nFieldNumber, pSt_CustomTimer, enSerialType); +} +extern "C" bool Authorize_Serial_Create(XCHAR * **ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber) +{ + return m_Serial.Authorize_Serial_Create(ppptszSerialNumber, lpszUserHeader, nCardNumber, nFieldNumber); +} +extern "C" bool Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE * penSerialType, XENGINE_LIBTIMER * pSt_CustomTimer) +{ + return m_Serial.Authorize_Serial_GetType(lpszSerialNumber, penSerialType, pSt_CustomTimer); +} +/************************************************************************/ +/* 本地授权导出函数 */ +/************************************************************************/ +extern "C" bool Authorize_CDKey_WriteKey(LPCXSTR lpszFileKey, XENGINE_AUTHORIZE_LOCAL * pSt_AuthLocal) +{ + return m_Local.Authorize_CDKey_WriteKey(lpszFileKey, pSt_AuthLocal); +} +extern "C" bool Authorize_CDKey_ReadKey(LPCXSTR lpszFileKey, XENGINE_AUTHORIZE_LOCAL * pSt_AuthLocal) +{ + return m_Local.Authorize_CDKey_ReadKey(lpszFileKey, pSt_AuthLocal); +} +extern "C" bool Authorize_CDKey_WriteMemory(XCHAR * ptszMsgBuffer, int* pInt_MsgLen, XENGINE_AUTHORIZE_LOCAL * pSt_AuthLocal) +{ + return m_Local.Authorize_CDKey_WriteMemory(ptszMsgBuffer, pInt_MsgLen, pSt_AuthLocal); +} +extern "C" bool Authorize_CDKey_ReadMemory(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_AUTHORIZE_LOCAL * pSt_AuthLocal) +{ + return m_Local.Authorize_CDKey_ReadMemory(lpszMsgBuffer, nMsgLen, pSt_AuthLocal); +} +extern "C" bool Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL * pSt_AuthLocal, __int64x nDayTimer, XENGINE_LIBTIMER * pSt_DayTimer) +{ + return m_Local.Authorize_CDKey_BuildKeyTime(pSt_AuthLocal, nDayTimer, pSt_DayTimer); +} +extern "C" bool Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL * pSt_AuthLocal, LPCXSTR lpszSerialNumber) +{ + return m_Local.Authorize_CDKey_GetLeftTimer(pSt_AuthLocal, lpszSerialNumber); +} +extern "C" bool Authorize_CDKey_WriteTime(LPCXSTR lpszFileKey, int nCount) +{ + return m_Local.Authorize_CDKey_WriteTime(lpszFileKey, nCount); +} +extern "C" bool Authorize_CDKey_ReadTime(LPCXSTR lpszFileKey, XCHAR * **ppptszTimeList, int* pInt_ListCount) +{ + return m_Local.Authorize_CDKey_ReadTime(lpszFileKey, ppptszTimeList, pInt_ListCount); +} \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_CDKey/pch.h b/XEngine_Source/AuthorizeModule_CDKey/pch.h new file mode 100644 index 0000000..0bbefc8 --- /dev/null +++ b/XEngine_Source/AuthorizeModule_CDKey/pch.h @@ -0,0 +1,53 @@ +// pch.h: 这是预编译标头文件。 +// 下方列出的文件仅编译一次,提高了将来生成的生成性能。 +// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 +// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。 +// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。 + +#ifndef PCH_H +#define PCH_H + +#ifdef _MSC_BUILD +// 添加要在此处预编译的标头 +#include "framework.h" +#include +#include +#else +#include +#endif +#endif //PCH_H +#include +#include +#include +#include +#include +#include +#include +using namespace std; +#include +#include +#include +#include +#include +#include "../XAuth_Protocol.h" +#include "CDKey_Define.h" +#include "CDKey_Error.h" +/******************************************************************** +// Created: 2024/07/08 17:29:57 +// File Name: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey\pch.h +// File Path: D:\XEngine_Authorize\XEngine_Source\AuthorizeModule_CDKey +// File Base: pch +// File Ext: h +// Project: XEngine +// Author: qyt +// Purpose: 公有头文件 +// History: +*********************************************************************/ +extern bool Authorize_IsErrorOccur; +extern XLONG Authorize_dwErrorCode; + +typedef std::string xstring; + +#ifdef _MSC_BUILD +#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib") +#endif \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Client/pch.h b/XEngine_Source/AuthorizeModule_Client/pch.h index 74f40fa..007a30f 100644 --- a/XEngine_Source/AuthorizeModule_Client/pch.h +++ b/XEngine_Source/AuthorizeModule_Client/pch.h @@ -30,8 +30,6 @@ #include #include #include -#include -#include #include "../XAuth_Protocol.h" #endif #if (1 == _XAUTH_BUILD_SWITCH_CLIENT_HTTP) diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp index 19e6d94..816e264 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp @@ -320,25 +320,25 @@ bool CDBModule_MySQL::DBModule_MySQL_UserPay(LPCXSTR lpszUserName, LPCXSTR lpszS //分析插入方式 switch (st_SerialTable.enSerialType) { - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND: if (!DBModule_MySQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY: if (!DBModule_MySQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME: if (!DBModule_MySQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM: if (!DBModule_MySQL_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; @@ -379,7 +379,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimePr memset(tszSQLStatement, '\0', 1024); - if ((ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == pSt_TimeProtocol->enSerialType) || (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == pSt_TimeProtocol->enSerialType)) + if ((ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == pSt_TimeProtocol->enSerialType) || (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == pSt_TimeProtocol->enSerialType)) { //天数卡只有剩余时间没有的时候才需要做处理 if (pSt_TimeProtocol->nTimeLeft <= 0) @@ -387,7 +387,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimePr _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '0' WHERE UserName = '%s'"), pSt_TimeProtocol->tszUserName); } } - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == pSt_TimeProtocol->enSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == pSt_TimeProtocol->enSerialType) { //分钟卡必须要有在线时间才能计算 if (pSt_TimeProtocol->nTimeLeft <= 0) @@ -396,7 +396,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_TimePr } _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%lld' WHERE UserName = '%s'"), pSt_TimeProtocol->nTimeLeft, pSt_TimeProtocol->tszUserName); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == pSt_TimeProtocol->enSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == pSt_TimeProtocol->enSerialType) { //次数卡不需要在线时间,直接减去一次就可以了 _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%lld' WHERE UserName = '%s'"), _ttxoll(pSt_TimeProtocol->tszLeftTime), pSt_TimeProtocol->tszUserName); @@ -585,19 +585,19 @@ bool CDBModule_MySQL::DBModule_MySQL_SerialInsert(LPCXSTR lpszSerialNumber) { return false; } - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == enAuthSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == enAuthSerialType) { _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_Serial` values(NULL,'NOT','%s','%d','%d',0,NOW())"), lpszSerialNumber, st_AuthTimer.wSecond, enAuthSerialType); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == enAuthSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == enAuthSerialType) { _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_Serial` values(NULL,'NOT','%s','%d','%d',0,NOW())"), lpszSerialNumber, st_AuthTimer.wDay, enAuthSerialType); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == enAuthSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == enAuthSerialType) { _xstprintf(tszSQLStatement, _X("INSERT INTO `Authorize_Serial` values(NULL,'NOT','%s','%d','%d',0,NOW())"), lpszSerialNumber, st_AuthTimer.wFlags, enAuthSerialType); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == enAuthSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == enAuthSerialType) { XCHAR tszLeftTime[MAX_PATH]; memset(tszLeftTime, '\0', MAX_PATH); @@ -1084,7 +1084,7 @@ bool CDBModule_MySQL::DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENT for (; stl_ListIterator != stl_ListVer.end(); stl_ListIterator++) { //判断是不是不关心注册的模式直接清理 - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW == enVerMode) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW == enVerMode) { if (nThanValue > stl_ListIterator->nVTime) { @@ -1872,7 +1872,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR l if (en_AuthSerialType != en_AuthUserType) { //如果不等于,需要重写 - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW != en_AuthUserType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW != en_AuthUserType) { //判断是否允许改写。 if (!m_bChange) @@ -1895,28 +1895,28 @@ bool CDBModule_MySQL::DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR l //处理卡类型 switch (en_AuthSerialType) { - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND: { //如果是分钟卡 //如果当前的充值卡类型不匹配,那么他以前的充值内容全部都会被删除! _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); //更新用户表的过期时间 } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY: { //如果是天数卡 //更新用户表的过期时间 _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); //更新用户表的过期时间 } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME: { //如果是次数卡 //更新用户表的过期时间 _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM: { XCHAR tszTime[128]; XENGINE_LIBTIMER st_AuthTime; @@ -1942,14 +1942,14 @@ bool CDBModule_MySQL::DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR l { switch (en_AuthSerialType) { - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND: { int nCardTime = _ttxoi(lpszCardTime); nCardTime += _ttxoi(lpszUserTime); //我们把用户以前的时间也加上 _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //更新用户表的过期时间 } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY: { int nCardTime = _ttxoi(lpszCardTime); nCardTime += _ttxoi(lpszUserTime); //我们把用户以前的时间也加上 @@ -1957,7 +1957,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR l _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME: { //如果是次数卡 int nCardTime = _ttxoi(lpszCardTime); @@ -1965,7 +1965,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR l _xstprintf(tszSQLStatement, _X("UPDATE `Authorize_User` SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //更新用户表的过期时间 } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM: { //自定义卡,无法相加 XCHAR tszTime[128]; diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h index eea88f3..e833b52 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h @@ -40,7 +40,7 @@ public: bool DBModule_MySQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); //网络使用模式插入一条数据 bool DBModule_MySQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); //试用序列号查询函数 bool DBModule_MySQL_TryDelete(LPCXSTR lpszSerial); //删除一条指定的试用数据 - bool DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); //清理函数,自动清理过期数据 + bool DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); //清理函数,自动清理过期数据 bool DBModule_MySQL_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); //设置用户信息函数 bool DBModule_MySQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); //请求试用期列表 public: diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp index 2f6fb0c..bbe3ba9 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp @@ -278,25 +278,25 @@ bool CDBModule_SQLite::DBModule_SQLite_UserPay(LPCXSTR lpszUserName, LPCXSTR lps //分析插入方式 switch (st_SerialTable.enSerialType) { - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND: if (!DBModule_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY: if (!DBModule_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME: if (!DBModule_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM: if (!DBModule_SQLite_UserPayTime(lpszUserName, st_UserTable.tszLeftTime, st_SerialTable.tszMaxTime, st_SerialTable.enSerialType, st_UserTable.enSerialType)) { return false; @@ -336,7 +336,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_Time XCHAR tszSQLStatement[1024]; //SQL语句 memset(tszSQLStatement, '\0', 1024); - if ((ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == pSt_TimeProtocol->enSerialType) || (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == pSt_TimeProtocol->enSerialType)) + if ((ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == pSt_TimeProtocol->enSerialType) || (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == pSt_TimeProtocol->enSerialType)) { //天数卡只有剩余时间没有的时候才需要做处理 if (pSt_TimeProtocol->nTimeLeft <= 0) @@ -344,7 +344,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_Time _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '0' WHERE UserName = '%s'"), pSt_TimeProtocol->tszUserName); } } - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == pSt_TimeProtocol->enSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == pSt_TimeProtocol->enSerialType) { //分钟卡必须要有在线时间才能计算 if (pSt_TimeProtocol->nTimeLeft <= 0) @@ -353,7 +353,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserLeave(AUTHREG_PROTOCOL_TIME* pSt_Time } _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%lld' WHERE UserName = '%s'"), pSt_TimeProtocol->nTimeLeft, pSt_TimeProtocol->tszUserName); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == pSt_TimeProtocol->enSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == pSt_TimeProtocol->enSerialType) { //次数卡不需要在线时间,直接减去一次就可以了 _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%lld' WHERE UserName = '%s'"), _ttxoll(pSt_TimeProtocol->tszLeftTime), pSt_TimeProtocol->tszUserName); @@ -535,19 +535,19 @@ bool CDBModule_SQLite::DBModule_SQLite_SerialInsert(LPCXSTR lpszSerialNumber) { return false; } - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == enAuthSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == enAuthSerialType) { _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%d','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, st_AuthTimer.wSecond, enAuthSerialType); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == enAuthSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == enAuthSerialType) { _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%d','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, st_AuthTimer.wDay, enAuthSerialType); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == enAuthSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == enAuthSerialType) { _xstprintf(tszSQLStatement, _X("INSERT INTO Authorize_Serial values(NULL,'NOT','%s','%d','%d',0,datetime('now', 'localtime'))"), lpszSerialNumber, st_AuthTimer.wFlags, enAuthSerialType); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == enAuthSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == enAuthSerialType) { XCHAR tszLeftTime[MAX_PATH]; memset(tszLeftTime, '\0', MAX_PATH); @@ -945,7 +945,7 @@ bool CDBModule_SQLite::DBModule_SQLite_TryDelete(LPCXSTR lpszSerial) 意思:是否成功 备注: *********************************************************************/ -bool CDBModule_SQLite::DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVMode /* = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW */) +bool CDBModule_SQLite::DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVMode /* = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW */) { SQLPacket_IsErrorOccur = false; @@ -995,7 +995,7 @@ bool CDBModule_SQLite::DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONE for (; stl_ListIterator != stl_ListVer.end(); stl_ListIterator++) { //判断是不是不关心注册的模式直接清理 - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW == enVMode) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW == enVMode) { if (nThanValue > stl_ListIterator->nVTime) { @@ -1731,7 +1731,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR if (en_AuthSerialType != en_AuthUserType) { //如果不等于,需要重写 - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW != en_AuthUserType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW != en_AuthUserType) { //判断是否允许改写。 if (!m_bChange) @@ -1754,28 +1754,28 @@ bool CDBModule_SQLite::DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR //处理卡类型 switch (en_AuthSerialType) { - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND: { //如果是分钟卡 //如果当前的充值卡类型不匹配,那么他以前的充值内容全部都会被删除! _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); //更新用户表的过期时间 } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY: { //如果是天数卡 //更新用户表的过期时间 _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); //更新用户表的过期时间 } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME: { //如果是次数卡 //更新用户表的过期时间 _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), _ttxoi(lpszCardTime), lpszUserName); } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM: { XCHAR tszTime[128]; XENGINE_LIBTIMER st_AuthTime; @@ -1801,14 +1801,14 @@ bool CDBModule_SQLite::DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR { switch (en_AuthSerialType) { - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND: { int nCardTime = _ttxoi(lpszCardTime); nCardTime += _ttxoi(lpszUserTime); //我们把用户以前的时间也加上 _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //更新用户表的过期时间 } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY: { int nCardTime = _ttxoi(lpszCardTime); nCardTime += _ttxoi(lpszUserTime); //我们把用户以前的时间也加上 @@ -1816,7 +1816,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME: { //如果是次数卡 int nCardTime = _ttxoi(lpszCardTime); @@ -1824,7 +1824,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR _xstprintf(tszSQLStatement, _X("UPDATE Authorize_User SET LeftTime = '%d' WHERE UserName = '%s'"), nCardTime, lpszUserName); //更新用户表的过期时间 } break; - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM: { //自定义卡,无法相加 XCHAR tszTime[128]; diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h index 417c673..90e442b 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h @@ -40,7 +40,7 @@ public: bool DBModule_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); bool DBModule_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); bool DBModule_SQLite_TryDelete(LPCXSTR lpszSerial); - bool DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); + bool DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); bool DBModule_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); bool DBModule_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); public: diff --git a/XEngine_Source/AuthorizeModule_Database/Database_Define.h b/XEngine_Source/AuthorizeModule_Database/Database_Define.h index 7f77743..f442815 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_Define.h +++ b/XEngine_Source/AuthorizeModule_Database/Database_Define.h @@ -318,7 +318,7 @@ extern "C" bool DBModule_SQLite_TryDelete(LPCXSTR lpszSerial); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); +extern "C" bool DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); /******************************************************************** 函数名称:DBModule_SQLite_TrySet 函数功能:设置用户信息函数 @@ -807,7 +807,7 @@ extern "C" bool DBModule_MySQL_TryDelete(LPCXSTR lpszSerial); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW); +extern "C" bool DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); /******************************************************************** 函数名称:DBModule_MySQL_TrySet 函数功能:设置用户信息函数 diff --git a/XEngine_Source/AuthorizeModule_Database/Makefile b/XEngine_Source/AuthorizeModule_Database/Makefile index 69def22..fd211e5 100644 --- a/XEngine_Source/AuthorizeModule_Database/Makefile +++ b/XEngine_Source/AuthorizeModule_Database/Makefile @@ -7,8 +7,8 @@ LIBFLAG = RELEASE = 0 UNICODE = 0 LOADHDR = -I ./ -LOADSO = -LIB = -lXEngine_BaseLib -lHelpComponents_DataBase -lHelpComponents_Authorize +LOADSO = -L ../AuthorizeModule_CDKey +LIB = -lXEngine_BaseLib -lHelpComponents_DataBase -lAuthorizeModule_CDKey LIBEX = OBJECTS = DBModule_SQLite.o DBModule_MySQL.o pch.o diff --git a/XEngine_Source/AuthorizeModule_Database/pch.h b/XEngine_Source/AuthorizeModule_Database/pch.h index 844a2f2..a0d97e1 100644 --- a/XEngine_Source/AuthorizeModule_Database/pch.h +++ b/XEngine_Source/AuthorizeModule_Database/pch.h @@ -25,9 +25,9 @@ using namespace std; #include #include #include -#include -#include #include "../XAuth_Protocol.h" +#include "../AuthorizeModule_CDKey/CDKey_Define.h" +#include "../AuthorizeModule_CDKey/CDKey_Error.h" #include "Database_Define.h" #include "Database_Error.h" /******************************************************************** @@ -53,5 +53,17 @@ typedef std::string xstring; #ifdef _WINDOWS #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib.lib") #pragma comment(lib,"XEngine_HelpComponents/HelpComponents_DataBase.lib") -#pragma comment(lib,"XEngine_HelpComponents/HelpComponents_Authorize.lib") +#ifdef _WIN64 +#ifdef _DEBUG +#pragma comment(lib,"../x64/Debug/AuthorizeModule_CDKey") +#else +#pragma comment(lib,"../x64/Release/AuthorizeModule_CDKey") +#endif +#else +#ifdef _DEBUG +#pragma comment(lib,"../Debug/AuthorizeModule_CDKey") +#else +#pragma comment(lib,"../Release/AuthorizeModule_CDKey") +#endif +#endif #endif \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp index ad0d66c..6564cb4 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp @@ -853,7 +853,7 @@ bool CProtocol_Packet::Protocol_Packet_HttpTryList(XCHAR* ptszMsgBuffer, int* pI st_JsonObject["nID"] = (Json::Value::Int64)(*pppSt_TryList)[i]->nID; st_JsonObject["nVTime"] = (*pppSt_TryList)[i]->nVTime; st_JsonObject["enVMode"] = (*pppSt_TryList)[i]->enVMode; - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == (*pppSt_TryList)[i]->enVMode) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == (*pppSt_TryList)[i]->enVMode) { XENGINE_LIBTIMER st_TimeStart = {}; XENGINE_LIBTIMER st_TimeEnd = {}; diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp index 8adab22..15add0d 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp @@ -1105,7 +1105,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseCDKey(LPCXSTR lpszMsgBuffer, int n Json::Value st_JsonREGInfo = st_JsonRoot["st_AuthRegInfo"]; if (!st_JsonREGInfo["nHasTime"].isNull()) { - pSt_Authorize->st_AuthRegInfo.nHasTime = (ENUM_HELPCOMPONENTS_AUTHORIZE_REG_TYPE)st_JsonREGInfo["nHasTime"].asInt(); + pSt_Authorize->st_AuthRegInfo.nHasTime = (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE)st_JsonREGInfo["nHasTime"].asInt(); } if (!st_JsonREGInfo["enSerialType"].isNull()) { @@ -1113,15 +1113,15 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseCDKey(LPCXSTR lpszMsgBuffer, int n } if (!st_JsonREGInfo["enRegType"].isNull()) { - pSt_Authorize->st_AuthRegInfo.enRegType = (ENUM_HELPCOMPONENTS_AUTHORIZE_REG_TYPE)st_JsonREGInfo["enRegType"].asInt(); + pSt_Authorize->st_AuthRegInfo.enRegType = (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE)st_JsonREGInfo["enRegType"].asInt(); } if (!st_JsonREGInfo["enHWType"].isNull()) { - pSt_Authorize->st_AuthRegInfo.enHWType = (ENUM_HELPCOMPONENTS_AUTHORIZE_HW_TYPE)st_JsonREGInfo["enHWType"].asInt(); + pSt_Authorize->st_AuthRegInfo.enHWType = (ENUM_AUTHORIZE_MODULE_HW_TYPE)st_JsonREGInfo["enHWType"].asInt(); } if (!st_JsonREGInfo["enVModeType"].isNull()) { - pSt_Authorize->st_AuthRegInfo.enVModeType = (ENUM_HELPCOMPONENTS_AUTHORIZE_VERMODE_TYPE)st_JsonREGInfo["enVModeType"].asInt(); + pSt_Authorize->st_AuthRegInfo.enVModeType = (ENUM_AUTHORIZE_MODULE_VERMODE_TYPE)st_JsonREGInfo["enVModeType"].asInt(); } if (!st_JsonREGInfo["tszHardware"].isNull()) { diff --git a/XEngine_Source/AuthorizeModule_Protocol/pch.h b/XEngine_Source/AuthorizeModule_Protocol/pch.h index ca7ef3a..8493f70 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/pch.h +++ b/XEngine_Source/AuthorizeModule_Protocol/pch.h @@ -24,9 +24,9 @@ using namespace std; #include #include #include -#include -#include #include "../XAuth_Protocol.h" +#include "../AuthorizeModule_CDKey/CDKey_Define.h" +#include "../AuthorizeModule_CDKey/CDKey_Error.h" #include "../AuthorizeModule_Configure/Config_Define.h" #include "../AuthorizeModule_Session/Session_Define.h" #include "../AuthorizeModule_Session/Session_Error.h" diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp index 4f60f8b..547de7a 100644 --- a/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp +++ b/XEngine_Source/AuthorizeModule_Session/Session_Authorize/Session_Authorize.cpp @@ -406,7 +406,7 @@ XHTHREAD CSession_Authorize::Session_Authorize_ActiveThread(XPVOID lParam) //登陆成功的。我们要处理他过期 switch (stl_ListIterator->st_UserTable.enSerialType) { - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND: { bMultiTime = true; //秒钟处理 @@ -422,7 +422,7 @@ XHTHREAD CSession_Authorize::Session_Authorize_ActiveThread(XPVOID lParam) _tcsxcpy(st_ProtocolTimer.tszUserName, stl_ListIterator->st_UserTable.st_UserInfo.tszUserName); break; } - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME: { //次数处理 stl_ListIterator->nOnlineTime = nOnlineSpan; @@ -438,7 +438,7 @@ XHTHREAD CSession_Authorize::Session_Authorize_ActiveThread(XPVOID lParam) _tcsxcpy(st_ProtocolTimer.tszUserName, stl_ListIterator->st_UserTable.st_UserInfo.tszUserName); break; } - case ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY: + case ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY: { stl_ListIterator->nOnlineTime = nOnlineSpan; _xstprintf(stl_ListIterator->tszLeftTime, _X("%lld"), stl_ListIterator->nLeftTime); diff --git a/XEngine_Source/AuthorizeModule_Session/pch.h b/XEngine_Source/AuthorizeModule_Session/pch.h index b52a37c..cb798ff 100644 --- a/XEngine_Source/AuthorizeModule_Session/pch.h +++ b/XEngine_Source/AuthorizeModule_Session/pch.h @@ -27,9 +27,9 @@ using namespace std; #include #include #include -#include -#include #include "../XAuth_Protocol.h" +#include "../AuthorizeModule_CDKey/CDKey_Define.h" +#include "../AuthorizeModule_CDKey/CDKey_Error.h" #include "Session_Define.h" #include "Session_Error.h" /******************************************************************** diff --git a/XEngine_Source/Makefile b/XEngine_Source/Makefile index d600d49..e1a076e 100644 --- a/XEngine_Source/Makefile +++ b/XEngine_Source/Makefile @@ -6,6 +6,7 @@ FLAGS= DEPEND_JSONCPP_PATH = ./XEngine_Depend/XEngine_Module/jsoncpp DEPEND_REPORT_PATH = ./XEngine_Depend/XEngine_Module/XEngine_InfoReport +AUTH_CDKEY_PATH = ./AuthorizeModule_CDKey AUTH_SESSION_PATH = ./AuthorizeModule_Session AUTH_DATABASE_PATH = ./AuthorizeModule_Database AUTH_PROTOCOL_PATH = ./AuthorizeModule_Protocol @@ -16,7 +17,7 @@ AUTH_CLIENT_PATH = ./AuthorizeModule_Client AUTH_APP_PATH = ./XEngine_APPService/XEngine_AuthorizeService XENGINE_MODULES = libjsoncpp.so libXEngine_InfoReport.so \ - libAuthorizeModule_Session.so libAuthorizeModule_Database.so libAuthorizeModule_Protocol.so libAuthorizeModule_Configure.so libAuthorizeModule_Help.so libAuthorizeModule_Client.so \ + libAuthorizeModule_CDKey.so libAuthorizeModule_Session.so libAuthorizeModule_Database.so libAuthorizeModule_Protocol.so libAuthorizeModule_Configure.so libAuthorizeModule_Help.so libAuthorizeModule_Client.so \ XEngine_AuthorizeApp.exe .PHONY:MakeAll @@ -27,6 +28,8 @@ libjsoncpp.so: libXEngine_InfoReport.so: make -C $(DEPEND_REPORT_PATH) PLATFORM=$(PLATFORM) $(FLAGS) +libAuthorizeModule_CDKey.so: + make -C $(AUTH_CDKEY_PATH) PLATFORM=$(PLATFORM) $(FLAGS) libAuthorizeModule_Session.so: make -C $(AUTH_SESSION_PATH) PLATFORM=$(PLATFORM) $(FLAGS) libAuthorizeModule_Database.so: diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h index b21025e..e791d17 100644 --- a/XEngine_Source/XAuth_Protocol.h +++ b/XEngine_Source/XAuth_Protocol.h @@ -32,8 +32,111 @@ #define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPDCODE 0x2011 #define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_TIMEDOUT 0x2FFF //通知客户端时间到期 ////////////////////////////////////////////////////////////////////////// -// 导出的数据结构 +// 导出的枚举型 ////////////////////////////////////////////////////////////////////////// +#ifndef _MSC_BUILD +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-variable" +#endif +static LPCXSTR lpszXSerialType[5] = { "UNKNOW","SECOND","DAY","TIME","CUSTOM" }; +static LPCXSTR lpszXRegType[6] = { "UNKNOW","TEMP","TRY","OFFICIAL","UNLIMIT","EXPIRED" }; +static LPCXSTR lpszXHDType[6] = { "UNKNOW","CPU","DISK","BOARD","MAC","BIOS" }; +#ifndef _MSC_BUILD +#pragma GCC diagnostic pop +#endif +typedef enum +{ + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW = 0, //无法识别的充值卡 + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND = 1, //秒钟,本地使用在read和write的时候更新 + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY = 2, //天数,本地使用天数卡,不使用不减天数. + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME = 3, //次数卡 + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM = 4 //自定义过期日期 +}ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE, * LPENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE; +typedef enum +{ + ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNKNOW = 0, //未注册,Authorize_CDKey_GetLeftTimer将返回失败 + ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_TEMP = 1, //临时,Authorize_CDKey_GetLeftTimer一次后过期,需要Write + ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_TRY = 2, //试用 + ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_OFFICIAL = 3, //正式版 + ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNLIMIT = 4, //无限制版,永不过期.CDKEY不做任何验证 + ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_EXPIRED = 5 //已过期的版本,Authorize_CDKey_GetLeftTimer将返回失败 +}ENUM_AUTHORIZE_MODULE_CDKEY_TYPE, * LPENUM_AUTHORIZE_MODULE_CDKEY_TYPE; +typedef enum +{ + ENUM_AUTHORIZE_MODULE_HW_TYPE_UNKNOW = 0, //未指定 + ENUM_AUTHORIZE_MODULE_HW_TYPE_CPU = 1, //CPU序列号 + ENUM_AUTHORIZE_MODULE_HW_TYPE_DISK = 2, //硬盘序列号 + ENUM_AUTHORIZE_MODULE_HW_TYPE_BOARD = 3, //主板序列号 + ENUM_AUTHORIZE_MODULE_HW_TYPE_MAC = 4, //网卡MAC地址 + ENUM_AUTHORIZE_MODULE_HW_TYPE_BIOS = 5 //BIOS序列号 +}ENUM_AUTHORIZE_MODULE_HW_TYPE, * LPENUM_AUTHORIZE_MODULE_HW_TYPE; +typedef enum +{ + ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_UNKNOW = 0, //未知 + ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_LOCAL = 0x01, //本地 + ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_LAN = 0x02, //局域网 + ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_NETWORK = 0x04, //网络 +}ENUM_AUTHORIZE_MODULE_VERMODE_TYPE, * LPENUM_AUTHORIZE_MODULE_VERMODE_TYPE; +////////////////////////////////////////////////////////////////////////// +// 导出的结构体 +////////////////////////////////////////////////////////////////////////// +typedef struct +{ + XCHAR tszAddr[32]; //服务器IP地址 + int nPort; //端口号码,如果>0表示CDKEY验证失败后改为网络验证 + //版本信息 + struct + { + XCHAR tszAppName[128]; //应用程序名称 + XCHAR tszAppVer[128]; //应用程序版本号 + __int64x nExecTime; //程序已经执行次数,调用Authorize_CDKey_GetLeftTimer会更新 + bool bInit; //是否初始化,由用户控制 + }st_AuthAppInfo; + //CDKEY信息 + struct + { + XCHAR tszHardware[1024]; //硬件码 + XCHAR tszCreateTime[64]; //CDKEY创建日期,年/月/日-小时:分钟:秒 + XCHAR tszRegisterTime[64]; //注册时间,年/月/日-小时:分钟:秒 + XCHAR tszLeftTime[64]; //总的剩余时间,过期日期,根据nLeftType决定此值的意义 + XCHAR tszStartTime[64]; //当前启动时间,由系统读取CDKEY的时候自动更新,天数和分钟有效 + XCHAR tszExpiryTime[64]; //过期的时间,需要调用Authorize_CDKey_GetLeftTimer并且Write才生效 + __int64x nHasTime; //当前还拥有时间,根据nLeftType决定此值的意义,调用Authorize_CDKey_GetLeftTimer会更新 + ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType; //过期类型,参考:ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE + ENUM_AUTHORIZE_MODULE_CDKEY_TYPE enRegType; //注册类型,参考:ENUM_AUTHORIZE_MODULE_CDKEY_TYPE + ENUM_AUTHORIZE_MODULE_HW_TYPE enHWType; //硬件类型,参考:ENUM_AUTHORIZE_MODULE_HW_TYPE + ENUM_AUTHORIZE_MODULE_VERMODE_TYPE enVModeType; //验证方式,参考:ENUM_AUTHORIZE_MODULE_VERMODE_TYPE + }st_AuthRegInfo; + //临时序列号 + struct + { + //次数限制 + struct + { + XCHAR tszTimeSerial[128]; + int nTimeCount; //使用次数 + int nTimeNow; //已用次数 + }st_TimeLimit; + //时间限制 + struct + { + XCHAR tszDataTime[128]; //过期时间 + XCHAR tszDataSerial[128]; //序列号 + }st_DataLimit; + //无限制 + struct + { + XCHAR tszUNLimitSerial[128]; //无限制序列号 + }st_UNLimit; + }st_AuthSerial; + //注册的用户信息,可以不填 + struct + { + XCHAR tszUserName[64]; //注册的用户 + XCHAR tszUserContact[64]; //联系方式,电子邮件或者手机等 + XCHAR tszCustom[1024]; //自定义数据 + }st_AuthUserInfo; +}XENGINE_AUTHORIZE_LOCAL, * LPXENGINE_AUTHORIZE_LOCAL; //充值协议 typedef struct { diff --git a/XEngine_Source/XEngine.sln b/XEngine_Source/XEngine.sln index 9ef5e65..56a1eb6 100644 --- a/XEngine_Source/XEngine.sln +++ b/XEngine_Source/XEngine.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.2.32519.379 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "XEngine_File", "XEngine_File", "{D3A33095-8584-4EFB-9411-EBC38407E7B9}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "XEngine_HDRFile", "XEngine_HDRFile", "{D3A33095-8584-4EFB-9411-EBC38407E7B9}" ProjectSection(SolutionItems) = preProject XAuth_BuildSwitch.h = XAuth_BuildSwitch.h XAuth_Protocol.h = XAuth_Protocol.h @@ -24,9 +24,13 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AuthorizeModule_Session", "AuthorizeModule_Session\AuthorizeModule_Session.vcxproj", "{CB9138DF-789D-459F-AD43-4095B22A487F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AuthorizeModule_Database", "AuthorizeModule_Database\AuthorizeModule_Database.vcxproj", "{5FA1874A-32F4-4176-9C23-4E22BE183660}" + ProjectSection(ProjectDependencies) = postProject + {02A75BD0-416E-4AEF-BF34-BD85BD86384F} = {02A75BD0-416E-4AEF-BF34-BD85BD86384F} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_AuthorizeService", "XEngine_APPService\XEngine_AuthorizeService\XEngine_AuthorizeService.vcxproj", "{A29DFD8D-2818-4BE3-A2DB-07F241B4BFC9}" ProjectSection(ProjectDependencies) = postProject + {02A75BD0-416E-4AEF-BF34-BD85BD86384F} = {02A75BD0-416E-4AEF-BF34-BD85BD86384F} {1391B739-713B-4A3A-9233-FEAB92E0566C} = {1391B739-713B-4A3A-9233-FEAB92E0566C} {185975A2-EB43-45DF-8108-03656A2BFE33} = {185975A2-EB43-45DF-8108-03656A2BFE33} {5FA1874A-32F4-4176-9C23-4E22BE183660} = {5FA1874A-32F4-4176-9C23-4E22BE183660} @@ -59,6 +63,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_InfoReport", "XEngi {940A00A6-A944-46C1-B34F-1361AFE240E0} = {940A00A6-A944-46C1-B34F-1361AFE240E0} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AuthorizeModule_CDKey", "AuthorizeModule_CDKey\AuthorizeModule_CDKey.vcxproj", "{02A75BD0-416E-4AEF-BF34-BD85BD86384F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -147,6 +153,14 @@ Global {185975A2-EB43-45DF-8108-03656A2BFE33}.Release|x64.Build.0 = Release|x64 {185975A2-EB43-45DF-8108-03656A2BFE33}.Release|x86.ActiveCfg = Release|Win32 {185975A2-EB43-45DF-8108-03656A2BFE33}.Release|x86.Build.0 = Release|Win32 + {02A75BD0-416E-4AEF-BF34-BD85BD86384F}.Debug|x64.ActiveCfg = Debug|x64 + {02A75BD0-416E-4AEF-BF34-BD85BD86384F}.Debug|x64.Build.0 = Debug|x64 + {02A75BD0-416E-4AEF-BF34-BD85BD86384F}.Debug|x86.ActiveCfg = Debug|Win32 + {02A75BD0-416E-4AEF-BF34-BD85BD86384F}.Debug|x86.Build.0 = Debug|Win32 + {02A75BD0-416E-4AEF-BF34-BD85BD86384F}.Release|x64.ActiveCfg = Release|x64 + {02A75BD0-416E-4AEF-BF34-BD85BD86384F}.Release|x64.Build.0 = Release|x64 + {02A75BD0-416E-4AEF-BF34-BD85BD86384F}.Release|x86.ActiveCfg = Release|Win32 + {02A75BD0-416E-4AEF-BF34-BD85BD86384F}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index fd8fca75f835f886c52b3660918e5a37080ec846..05b9f745dc274b117ad60eeedeb7e5c08c94445e 100644 GIT binary patch delta 1784 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 #include #include -#include -#include #include "../../XAuth_Protocol.h" #include "../../AuthorizeModule_Configure/Config_Define.h" #include "../../AuthorizeModule_Configure/Config_Error.h" diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp index 4d12f69..8ccaced 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp @@ -26,7 +26,7 @@ bool XEngine_AuthorizeHTTP_CDKey(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LP memset(&st_Authorize, '\0', sizeof(XENGINE_AUTHORIZE_LOCAL)); Protocol_Parse_HttpParseCDKey(lpszMsgBuffer, nMsgLen, &st_Authorize); - if (!Authorize_Local_WriteMemory(tszRVBuffer, &nRVLen, &st_Authorize)) + if (!Authorize_CDKey_WriteMemory(tszRVBuffer, &nRVLen, &st_Authorize)) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 406, "Not Acceptable,write key failed"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); @@ -41,21 +41,21 @@ bool XEngine_AuthorizeHTTP_CDKey(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LP XENGINE_AUTHORIZE_LOCAL st_Authorize; memset(&st_Authorize, '\0', sizeof(XENGINE_AUTHORIZE_LOCAL)); - Authorize_Local_ReadMemory(lpszMsgBuffer, nMsgLen, &st_Authorize); + Authorize_CDKey_ReadMemory(lpszMsgBuffer, nMsgLen, &st_Authorize); //授权 - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == st_Authorize.st_AuthRegInfo.enSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == st_Authorize.st_AuthRegInfo.enSerialType) { XENGINE_LIBTIMER st_LibTime; memset(&st_LibTime, '\0', sizeof(XENGINE_LIBTIMER)); BaseLib_OperatorTime_StrToTime(st_Authorize.st_AuthRegInfo.tszLeftTime, &st_LibTime); - Authorize_Local_BuildKeyTime(&st_Authorize, 0, &st_LibTime); + Authorize_CDKey_BuildKeyTime(&st_Authorize, 0, &st_LibTime); } else { - Authorize_Local_BuildKeyTime(&st_Authorize, _ttxoll(st_Authorize.st_AuthRegInfo.tszLeftTime)); + Authorize_CDKey_BuildKeyTime(&st_Authorize, _ttxoll(st_Authorize.st_AuthRegInfo.tszLeftTime)); } - Authorize_Local_WriteMemory(tszRVBuffer, &nRVLen, &st_Authorize); + Authorize_CDKey_WriteMemory(tszRVBuffer, &nRVLen, &st_Authorize); XEngine_Client_TaskSend(lpszClientAddr, tszRVBuffer, nRVLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端:%s,请求授权CDKEY成功,APP名:%s,APP版本:%s,授权期限:%s"), lpszClientAddr, st_Authorize.st_AuthAppInfo.tszAppName, st_Authorize.st_AuthAppInfo.tszAppVer, st_Authorize.st_AuthRegInfo.tszLeftTime); } @@ -64,15 +64,15 @@ bool XEngine_AuthorizeHTTP_CDKey(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LP XENGINE_AUTHORIZE_LOCAL st_Authorize; memset(&st_Authorize, '\0', sizeof(XENGINE_AUTHORIZE_LOCAL)); - Authorize_Local_ReadMemory(lpszMsgBuffer, nMsgLen, &st_Authorize); - if (!Authorize_Local_GetLeftTimer(&st_Authorize)) + Authorize_CDKey_ReadMemory(lpszMsgBuffer, nMsgLen, &st_Authorize); + if (!Authorize_CDKey_GetLeftTimer(&st_Authorize)) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 401, "Unauthorized,cdkey is not authorized"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端:%s,请求验证CDKEY失败,cdkey未授权或者已超时,错误:%lX"), lpszClientAddr, Authorize_GetLastError()); return false; } - Authorize_Local_WriteMemory(tszRVBuffer, &nRVLen, &st_Authorize); + Authorize_CDKey_WriteMemory(tszRVBuffer, &nRVLen, &st_Authorize); XEngine_Client_TaskSend(lpszClientAddr, tszRVBuffer, nRVLen, XENGINE_AUTH_APP_NETTYPE_HTTP); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端:%s,请求验证CDKEY成功,APP名:%s,APP版本:%s,授权期限:%s"), lpszClientAddr, st_Authorize.st_AuthAppInfo.tszAppName, st_Authorize.st_AuthAppInfo.tszAppVer, st_Authorize.st_AuthRegInfo.tszLeftTime); } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp index 0e54d5d..fd4fcad 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp @@ -60,19 +60,19 @@ bool XEngine_AuthorizeHTTP_Serial(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L Protocol_Parse_HttpParseSerial2(lpszMsgBuffer, nMsgLen, &enSerialType, &nNumberCount, &nSerialCount, tszHasTime); //解析类型 - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == enSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == enSerialType) { st_AuthTimer.wSecond = _ttxoi(tszHasTime); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == enSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == enSerialType) { st_AuthTimer.wDay = _ttxoi(tszHasTime); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == enSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == enSerialType) { st_AuthTimer.wFlags = _ttxoi(tszHasTime); } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == enSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == enSerialType) { if (6 != _stxscanf(tszHasTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_AuthTimer.wYear, &st_AuthTimer.wMonth, &st_AuthTimer.wDay, &st_AuthTimer.wHour, &st_AuthTimer.wMinute, &st_AuthTimer.wSecond)) { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp index 8d637ca..a3e64e6 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp @@ -84,7 +84,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC return false; } //填充写入数据 - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW == st_UserTable.enSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW == st_UserTable.enSerialType) { _xstprintf(st_UserTable.tszLeftTime, _X("%d"), st_AuthConfig.st_XVerification.nTryTime); st_UserTable.enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_AuthConfig.st_XVerification.nTryMode; @@ -264,7 +264,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC { __int64x nTimeSpan = 0; //根据方式来计算剩余时间 - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == st_VERTemp.enVMode) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == st_VERTemp.enVMode) { //次数卡需要更新才可以 st_VERTemp.nLTime--; @@ -316,7 +316,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC st_VERTemp.nVTime = st_AuthConfig.st_XVerification.nVerTime; st_VERTemp.enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_AuthConfig.st_XVerification.nVerMode; //看下是否启用了此功能,不支持分钟,因为不登录 - if ((ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW == st_VERTemp.enVMode) || (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == st_VERTemp.enVMode) || (st_VERTemp.nVTime <= 0)) + if ((ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW == st_VERTemp.enVMode) || (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == st_VERTemp.enVMode) || (st_VERTemp.nVTime <= 0)) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 501, "the function server unavailable"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h index 34784b8..5245822 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h @@ -34,8 +34,6 @@ using namespace std; #include #include #include -#include -#include #include #include #include @@ -53,6 +51,8 @@ using namespace std; #include "../../AuthorizeModule_Protocol/Protocol_Error.h" #include "../../AuthorizeModule_Help/AuthHelp_Define.h" #include "../../AuthorizeModule_Help/AuthHelp_Error.h" +#include "../../AuthorizeModule_CDKey/CDKey_Define.h" +#include "../../AuthorizeModule_CDKey/CDKey_Error.h" #include "../../XEngine_Depend/XEngine_Module/XEngine_InfoReport/InfoReport_Define.h" #include "../../XEngine_Depend/XEngine_Module/XEngine_InfoReport/InfoReport_Error.h" @@ -109,6 +109,7 @@ extern XENGINE_FUNCTIONSWITCH st_FunSwitch; #pragma comment(lib,"../../x64/Debug/AuthorizeModule_Session.lib") #pragma comment(lib,"../../x64/Debug/AuthorizeModule_Database.lib") #pragma comment(lib,"../../x64/Debug/AuthorizeModule_Help.lib") +#pragma comment(lib,"../../x64/Debug/AuthorizeModule_CDKey.lib") #pragma comment(lib,"../../x64/Debug/XEngine_InfoReport.lib") #else #pragma comment(lib,"../../Debug/AuthorizeModule_Configure.lib") @@ -116,6 +117,7 @@ extern XENGINE_FUNCTIONSWITCH st_FunSwitch; #pragma comment(lib,"../../Debug/AuthorizeModule_Session.lib") #pragma comment(lib,"../../Debug/AuthorizeModule_Database.lib") #pragma comment(lib,"../../Debug/AuthorizeModule_Help.lib") +#pragma comment(lib,"../../Debug/AuthorizeModule_CDKey.lib") #pragma comment(lib,"../../Debug/XEngine_InfoReport.lib") #endif #else @@ -125,6 +127,7 @@ extern XENGINE_FUNCTIONSWITCH st_FunSwitch; #pragma comment(lib,"../../x64/Release/AuthorizeModule_Session.lib") #pragma comment(lib,"../../x64/Release/AuthorizeModule_Database.lib") #pragma comment(lib,"../../x64/Release/AuthorizeModule_Help.lib") +#pragma comment(lib,"../../x64/Release/AuthorizeModule_CDKey.lib") #pragma comment(lib,"../../x64/Release/XEngine_InfoReport.lib") #else #pragma comment(lib,"../../Release/AuthorizeModule_Configure.lib") @@ -132,6 +135,7 @@ extern XENGINE_FUNCTIONSWITCH st_FunSwitch; #pragma comment(lib,"../../Release/AuthorizeModule_Session.lib") #pragma comment(lib,"../../Release/AuthorizeModule_Database.lib") #pragma comment(lib,"../../Release/AuthorizeModule_Help.lib") +#pragma comment(lib,"../../Release/AuthorizeModule_CDKey.lib") #pragma comment(lib,"../../Release/XEngine_InfoReport.lib") #endif #endif @@ -143,7 +147,6 @@ extern XENGINE_FUNCTIONSWITCH st_FunSwitch; #pragma comment(lib,"XEngine_Client/XClient_APIHelp.lib") #pragma comment(lib,"XEngine_HelpComponents/HelpComponents_XLog.lib") #pragma comment(lib,"XEngine_HelpComponents/HelpComponents_Packets.lib") -#pragma comment(lib,"XEngine_HelpComponents/HelpComponents_Authorize.lib") #pragma comment(lib,"XEngine_RfcComponents/RfcComponents_WSProtocol.lib") #pragma comment(lib,"XEngine_RfcComponents/RfcComponents_HttpProtocol.lib") #endif \ No newline at end of file diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index 5b2d68a..aaf7cca 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -208,28 +208,28 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n } BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListClient, nListCount); //对多端登录的类型进行验证 - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_SECOND == st_UserTable.enSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == st_UserTable.enSerialType) { if (!st_AuthConfig.st_XLogin.st_MulitLogin.bSecond) { bLogin = true; } } - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == st_UserTable.enSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == st_UserTable.enSerialType) { if (!st_AuthConfig.st_XLogin.st_MulitLogin.bTime) { bLogin = true; } } - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == st_UserTable.enSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == st_UserTable.enSerialType) { if (!st_AuthConfig.st_XLogin.st_MulitLogin.bDay) { bLogin = true; } } - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_CUSTOM == st_UserTable.enSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == st_UserTable.enSerialType) { if (!st_AuthConfig.st_XLogin.st_MulitLogin.bCustom) { @@ -270,7 +270,7 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n return false; } //分析充值类型 - if ((ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_UNKNOW == st_UserTable.enSerialType) || ('0' == st_UserTable.tszLeftTime[0])) + if ((ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW == st_UserTable.enSerialType) || ('0' == st_UserTable.tszLeftTime[0])) { pSt_ProtocolHdr->wReserve = 255; Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); @@ -279,7 +279,7 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n return false; } //如果是次数卡,需要优先处理 - if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME == st_UserTable.enSerialType) + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == st_UserTable.enSerialType) { __int64x nTime = _ttxoll(st_UserTable.tszLeftTime) - 1; _xstprintf(st_UserTable.tszLeftTime, _X("%lld"), nTime); @@ -294,7 +294,7 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n } } - else if (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_DAY == st_UserTable.enSerialType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == st_UserTable.enSerialType) { if (!AuthHelp_MultiLogin_TimeMatch(st_UserTable.st_UserInfo.tszLoginTime)) { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile index c7532e9..e94e738 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Makefile @@ -8,10 +8,10 @@ RELEASE = 0 UNICODE = 0 LOADHDR = -I ./ LOADSO = -L ../../XEngine_Depend/XEngine_Module/jsoncpp -L ../../XEngine_Depend/XEngine_Module/XEngine_InfoReport \ - -L ../../AuthorizeModule_Session -L ../../AuthorizeModule_Database -L ../../AuthorizeModule_Protocol -L ../../AuthorizeModule_Configure -L ../../AuthorizeModule_Help + -L ../../AuthorizeModule_Session -L ../../AuthorizeModule_Database -L ../../AuthorizeModule_Protocol -L ../../AuthorizeModule_Configure -L ../../AuthorizeModule_Help -L ../../AuthorizeModule_CDKey LIB = -lXEngine_InfoReport -ljsoncpp \ - -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_OPenSsl -lXClient_APIHelp -lHelpComponents_Packets -lHelpComponents_DataBase -lHelpComponents_XLog -lHelpComponents_Authorize -lRfcComponents_WSProtocol -lRfcComponents_HttpProtocol -lXEngine_ProcFile -lXEngine_SystemApi \ - -lAuthorizeModule_Session -lAuthorizeModule_Database -lAuthorizeModule_Protocol -lAuthorizeModule_Configure -lAuthorizeModule_Help + -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_OPenSsl -lXClient_APIHelp -lHelpComponents_Packets -lHelpComponents_DataBase -lHelpComponents_XLog -lRfcComponents_WSProtocol -lRfcComponents_HttpProtocol -lXEngine_ProcFile -lXEngine_SystemApi \ + -lAuthorizeModule_Session -lAuthorizeModule_Database -lAuthorizeModule_Protocol -lAuthorizeModule_Configure -lAuthorizeModule_Help -lAuthorizeModule_CDKey LIBEX = OBJECTS = Authorize_Config.o Authorize_Net.o Authorize_Task.o Authorize_TCPTask.o Authorize_WSTask.o Authorize_HttpTask.o XEngine_AuthorizeService.o \ AuthorizeHTTP_Client.o AuthorizeHTTP_Serial.o AuthorizeHTTP_User.o AuthorizeHTTP_Pass.o AuthorizeHTTP_Switch.o AuthorizeHTTP_Banned.o AuthorizeHTTP_CDKey.o AuthorizeHTTP_Announcement.o AuthorizeHTTP_Try.o\ diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService deleted file mode 100644 index e4e0990bab9209081b0d00ece2aeaa90027cee30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 811704 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 diff --git a/XEngine_Source/XEngine_Depend b/XEngine_Source/XEngine_Depend index 399a78f..7c8fc77 160000 --- a/XEngine_Source/XEngine_Depend +++ b/XEngine_Source/XEngine_Depend @@ -1 +1 @@ -Subproject commit 399a78f19d13aac141666ae5ef619856aaf4897c +Subproject commit 7c8fc77e5a26d72fa1f313134198e5973069b7bb -- Gitee From a24f398e389590cebdd96f881b2fada5604c9259 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 9 Jul 2024 13:55:28 +0800 Subject: [PATCH 15/46] update:vscopy --- XEngine_Source/VSCopy_x64.bat | 1 - XEngine_Source/VSCopy_x86.bat | 1 - 2 files changed, 2 deletions(-) diff --git a/XEngine_Source/VSCopy_x64.bat b/XEngine_Source/VSCopy_x64.bat index 551224a..adcee80 100644 --- a/XEngine_Source/VSCopy_x64.bat +++ b/XEngine_Source/VSCopy_x64.bat @@ -8,7 +8,6 @@ copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_OPenSsl.dll" "./" copy /y "%XEngine_Lib64%\XEngine_HelpComponents\HelpComponents_DataBase.dll" "./" copy /y "%XEngine_Lib64%\XEngine_HelpComponents\HelpComponents_Packets.dll" "./" copy /y "%XEngine_Lib64%\XEngine_HelpComponents\HelpComponents_XLog.dll" "./" -copy /y "%XEngine_Lib64%\XEngine_HelpComponents\HelpComponents_Authorize.dll" "./" copy /y "%XEngine_Lib64%\XEngine_RfcComponents\RfcComponents_WSProtocol.dll" "./" copy /y "%XEngine_Lib64%\XEngine_RfcComponents\RfcComponents_HttpProtocol.dll" "./" diff --git a/XEngine_Source/VSCopy_x86.bat b/XEngine_Source/VSCopy_x86.bat index 2c9780e..62a8e25 100644 --- a/XEngine_Source/VSCopy_x86.bat +++ b/XEngine_Source/VSCopy_x86.bat @@ -8,7 +8,6 @@ copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_OPenSsl.dll" "./" copy /y "%XEngine_Lib32%\XEngine_HelpComponents\HelpComponents_DataBase.dll" "./" copy /y "%XEngine_Lib32%\XEngine_HelpComponents\HelpComponents_Packets.dll" "./" copy /y "%XEngine_Lib32%\XEngine_HelpComponents\HelpComponents_XLog.dll" "./" -copy /y "%XEngine_Lib32%\XEngine_HelpComponents\HelpComponents_Authorize.dll" "./" copy /y "%XEngine_Lib32%\XEngine_RfcComponents\RfcComponents_WSProtocol.dll" "./" copy /y "%XEngine_Lib32%\XEngine_RfcComponents\RfcComponents_HttpProtocol.dll" "./" -- Gitee From 226efd4458ea21a9d74ac1b7538d15ff19557a39 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 9 Jul 2024 14:05:21 +0800 Subject: [PATCH 16/46] fixed:build error and warn --- .../AuthorizeModule_CDKey.vcxproj | 12 ++++++++-- .../DBModule_MySQL/DBModule_MySQL.cpp | 23 +++++++++---------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj index 4caeecc..dbcf2a5 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj +++ b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.vcxproj @@ -78,6 +78,14 @@ $(XEngine_Include);$(IncludePath) $(XEngine_Lib64);$(LibraryPath) + + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib32);$(LibraryPath) + + + $(XEngine_Include);$(IncludePath) + $(XEngine_Lib64);$(LibraryPath) + Level3 @@ -100,7 +108,7 @@ true true true - WIN32;NDEBUG;AUTHORIZEMODULECDKEY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + WIN32;NDEBUG;AUTHORIZEMODULECDKEY_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h @@ -136,7 +144,7 @@ true true true - NDEBUG;AUTHORIZEMODULECDKEY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + NDEBUG;AUTHORIZEMODULECDKEY_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true Use pch.h diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp index 816e264..212cd14 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp @@ -500,10 +500,10 @@ bool CDBModule_MySQL::DBModule_MySQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInf SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_NOTUSER; return false; } - *pInt_ListCount = nRow; + *pInt_ListCount = (int)nRow; BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_UserInfo, (int)nRow, sizeof(AUTHREG_USERTABLE)); - for (int i = 0; i < nRow; i++) + for (__int64u i = 0; i < nRow; i++) { ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); @@ -774,9 +774,9 @@ bool CDBModule_MySQL::DBModule_MySQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt } BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_SerialTable, (int)nRow, sizeof(AUTHREG_SERIALTABLE)); - *pInt_ListCount = nRow; + *pInt_ListCount = (int)nRow; - for (int i = 0; i < nRow; i++) + for (__int64u i = 0; i < nRow; i++) { // 获取数据库结果 ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); @@ -1051,7 +1051,7 @@ bool CDBModule_MySQL::DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENT list stl_ListVer; //轮训所有内容 - for (int i = 0; i < nRow; i++) + for (__int64u i = 0; i < nRow; i++) { ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); @@ -1198,7 +1198,7 @@ bool CDBModule_MySQL::DBModule_MySQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, i BaseLib_OperatorMemory_Malloc((XPPPMEM)pppSt_AuthVer, (int)nRow, sizeof(AUTHREG_TEMPVER)); //轮训所有内容 - for (int i = 0; i < nRow; i++) + for (__int64u i = 0; i < nRow; i++) { ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); @@ -1223,7 +1223,7 @@ bool CDBModule_MySQL::DBModule_MySQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, i _tcsxcpy((*pppSt_AuthVer)[i]->tszVDate, ppszResult[nFliedValue]); nFliedValue++; } - *pInt_ListCount = nRow; + *pInt_ListCount = (int)nRow; DataBase_MySQL_FreeResult(xhData, xhTable); return true; } @@ -1379,7 +1379,7 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUs list stl_ListAddr; //轮训所有内容 - for (int i = 0; i < nRow; i++) + for (__int64u i = 0; i < nRow; i++) { ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); @@ -1423,7 +1423,7 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedList(AUTHREG_BANNED*** pppSt_BannedUs list stl_ListUser; //轮训所有内容 - for (int i = 0; i < nRow; i++) + for (__int64u i = 0; i < nRow; i++) { AUTHREG_BANNED st_Banned; memset(&st_Banned, '\0', sizeof(AUTHREG_BANNED)); @@ -1802,7 +1802,7 @@ bool CDBModule_MySQL::DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** pp SQLPacket_dwErrorCode = DataBase_GetLastError(); return false; } - *pInt_ListCount = nRow; + *pInt_ListCount = (int)nRow; if (NULL == ppppSt_Announcement) { return true; @@ -1810,7 +1810,7 @@ bool CDBModule_MySQL::DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** pp BaseLib_OperatorMemory_Malloc((XPPPMEM)ppppSt_Announcement, (int)nRow, sizeof(AUTHREG_ANNOUNCEMENT)); //轮训所有内容 - for (int i = 0; i < nRow; i++) + for (__int64u i = 0; i < nRow; i++) { ppszResult = DataBase_MySQL_GetResult(xhData, xhTable); //XLONG* pInt_Length = DataBase_MySQL_GetLength(xhData, xhTable); @@ -1826,7 +1826,6 @@ bool CDBModule_MySQL::DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** pp DataBase_MySQL_FreeResult(xhData, xhTable); return true; } - ////////////////////////////////////////////////////////////////////////// // 保护函数 ////////////////////////////////////////////////////////////////////////// -- Gitee From f3ef539a78252aa1ee6f2be0042fb1ae8bf49eba Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 9 Jul 2024 14:11:44 +0800 Subject: [PATCH 17/46] update:example --- .../Authorize_APPClient.cpp | 1 - .../Authorize_APPLocal/Authorize_APPLocal.cpp | 22 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp index 1d40810..42316c2 100644 --- a/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp +++ b/XEngine_Apps/Authorize_APPClient/Authorize_APPClient.cpp @@ -29,7 +29,6 @@ using namespace std; #include #include #include -#include #include "../../XEngine_Source/XAuth_Protocol.h" //Windows::vs2022 x86 debug 编译即可 diff --git a/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.cpp b/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.cpp index ee4c4e8..4971aa0 100644 --- a/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.cpp +++ b/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.cpp @@ -5,11 +5,12 @@ #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") #pragma comment(lib,"XEngine_Core/XEngine_OPenSsl") #pragma comment(lib,"XEngine_Client/XClient_APIHelp") -#pragma comment(lib,"XEngine_HelpComponents/HelpComponents_Authorize") #ifdef _WIN64 #pragma comment(lib,"../../XEngine_Source/x64/Debug/jsoncpp") +#pragma comment(lib,"../../XEngine_Source/x64/Debug/AuthorizeModule_CDKey") #else #pragma comment(lib,"../../XEngine_Source/Debug/jsoncpp") +#pragma comment(lib,"../../XEngine_Source/Debug/AuthorizeModule_CDKey") #endif #endif #include @@ -25,12 +26,13 @@ #include #include #include -#include -#include +#include "../../XEngine_Source/XAuth_Protocol.h" +#include "../../XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h" +#include "../../XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h" //需要优先配置XEngine //WINDOWS支持VS2022 x64 debug 编译调试 -//g++ -std=c++17 -Wall -g Authorize_APPLocal.cpp -o Authorize_APPLocal.exe -I ../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp -lXEngine_BaseLib -L ../../XEngine_Release -lXEngine_OPenSsl -lXClient_APIHelp -lHelpComponents_Authorize -ljsoncpp -Wl,-rpath=../../XEngine_Release +//g++ -std=c++17 -Wall -g Authorize_APPLocal.cpp -o Authorize_APPLocal.exe -I ../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp -lXEngine_BaseLib -L ../../XEngine_Release -lXEngine_OPenSsl -lXClient_APIHelp -lAuthorizeModule_CDKey -ljsoncpp -Wl,-rpath=../../XEngine_Release //#define XENGINE_AUTHORIZE_CDKEY_CRYPTO @@ -55,9 +57,9 @@ int main() st_JsonAPPInfo["tszAppVer"] = "1.0.0.1001"; st_JsonREGInfo["tszHardware"] = "5501012NE21N"; - st_JsonREGInfo["enSerialType"] = ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE_TIME; - st_JsonREGInfo["enRegType"] = ENUM_HELPCOMPONENTS_AUTHORIZE_REG_TYPE_TRY; - st_JsonREGInfo["enHWType"] = ENUM_HELPCOMPONENTS_AUTHORIZE_HW_TYPE_CPU; + st_JsonREGInfo["enSerialType"] = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME; + st_JsonREGInfo["enRegType"] = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_TRY; + st_JsonREGInfo["enHWType"] = ENUM_AUTHORIZE_MODULE_HW_TYPE_CPU; st_JsonUserInfo["tszUserName"] = "qyt"; st_JsonUserInfo["tszUserContact"] = "486179@qq.com"; @@ -154,15 +156,15 @@ int main() OPenSsl_XCrypto_Decoder(ptszVerBuffer, &nLen, tszCodecBuffer, lpszPasswd); printf("接受到数据,大小:%d,内容:\n%s\n", nLen, tszCodecBuffer); - Authorize_Local_ReadMemory(tszCodecBuffer, nLen, &st_Authorize); + Authorize_CDKey_ReadMemory(tszCodecBuffer, nLen, &st_Authorize); #else printf("接受到数据,大小:%d,内容:\n%s\n", nLen, ptszVerBuffer); - Authorize_Local_ReadMemory(ptszVerBuffer, nLen, &st_Authorize); + Authorize_CDKey_ReadMemory(ptszVerBuffer, nLen, &st_Authorize); #endif BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszVerBuffer); //4. 也可以本地验证 - if (Authorize_Local_GetLeftTimer(&st_Authorize)) + if (Authorize_CDKey_GetLeftTimer(&st_Authorize)) { printf("ok\n"); } -- Gitee From d8fbe4330cbf774f0fe3109287813a9450f566b9 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 9 Jul 2024 16:48:45 +0800 Subject: [PATCH 18/46] fixed:banned process is incorrect --- .../DBModule_SQLite/DBModule_SQLite.cpp | 2 +- .../AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp index bbe3ba9..923ac62 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp @@ -1157,7 +1157,7 @@ bool CDBModule_SQLite::DBModule_SQLite_BannedInsert(AUTHREG_BANNED* pSt_Banned) return false; } //存在直接返回 - if (DBModule_SQLite_BannedExist(pSt_Banned)) + if (!DBModule_SQLite_BannedExist(pSt_Banned)) { return true; } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp index a3e64e6..8fb1700 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp @@ -76,7 +76,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC { bSuccess = DBModule_MySQL_BannedExist(&st_Banned); } - if (bSuccess) + if (!bSuccess) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "user name is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); -- Gitee From 7dd46a1da45ba9ae16d451a09cec3812cbc7271b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Tue, 9 Jul 2024 18:01:38 +0800 Subject: [PATCH 19/46] fixed:serial create failed fixed:serial number count is incorrect --- .../Authorize_Serial/Authorize_Serial.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp index c068c96..4743619 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp @@ -419,7 +419,7 @@ bool CAuthorize_Serial::Authorize_Serial_Fill(XCHAR *ptszFillBuffer, int nCardNu int nPosType = 0; - for (int i = 0; i < nCardNumer; i++) + for (int i = 3; i < nCardNumer; i++) { XCHAR tszRandom[6]; memset(tszRandom, '\0', 6); @@ -464,7 +464,7 @@ bool CAuthorize_Serial::Authorize_Serial_Random(XCHAR *ptszFillBuffer) { Authorize_IsErrorOccur = false; - BaseLib_OperatorHandle_CreateStr(ptszFillBuffer, 6, 0, 1); + BaseLib_OperatorHandle_CreateStr(ptszFillBuffer, 5, 0, 1); return true; } /******************************************************************** @@ -484,7 +484,7 @@ bool CAuthorize_Serial::Authorize_Serial_RandomWord(XCHAR *ptszFillBuffer) { Authorize_IsErrorOccur = false; - BaseLib_OperatorHandle_CreateStr(ptszFillBuffer, 1, 2, 1); + BaseLib_OperatorHandle_CreateStr(ptszFillBuffer, 5, 2, 1); return true; } /******************************************************************** @@ -504,6 +504,6 @@ bool CAuthorize_Serial::Authorize_Serial_RandomNumber(XCHAR *ptszFilleBuffer) { Authorize_IsErrorOccur = false; - BaseLib_OperatorHandle_CreateStr(ptszFilleBuffer, 1, 1); + BaseLib_OperatorHandle_CreateStr(ptszFilleBuffer, 5, 1); return true; } -- Gitee From 08ae2aa7f6f011882bcfc53876d2668e37efe1c8 Mon Sep 17 00:00:00 2001 From: Tina0595 <2825103297@qq.com> Date: Tue, 9 Jul 2024 19:06:52 +0800 Subject: [PATCH 20/46] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E9=BB=91=E5=90=8D=E5=8D=95=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp index 212cd14..22d6607 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp @@ -1251,7 +1251,7 @@ bool CDBModule_MySQL::DBModule_MySQL_BannedInsert(AUTHREG_BANNED* pSt_Banned) return false; } //存在直接返回 - if (DBModule_MySQL_BannedExist(pSt_Banned)) + if (!DBModule_MySQL_BannedExist(pSt_Banned)) { return true; } -- Gitee From e0892f1a20b7def44d7ad601ec1c49d72d9c019f Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 10 Jul 2024 17:08:55 +0800 Subject: [PATCH 21/46] added:black function switch supported --- .../AuthorizeModule_Configure/Config_Define.h | 1 + .../ModuleConfigure_Json.cpp | 1 + .../Protocol_Packet/Protocol_Packet.cpp | 1 + .../Protocol_Parse/Protocol_Parse.cpp | 1 + .../Authorize_Dialog/Dialog_Switch.cpp | 20 ++++++++++++++++++ .../Authorize_Dialog/Dialog_Switch.h | 2 ++ .../XEngineAuthorizeApp.aps | Bin 106728 -> 125788 bytes .../XEngineAuthorizeApp.rc | Bin 38572 -> 39018 bytes .../XEngine_AuthorizeApp/resource.h | 2 ++ .../AuthorizeHTTP_Banned.cpp | 8 +++++++ .../AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp | 2 +- .../Authorize_HttpTask.cpp | 2 +- .../Authorize_TCPTask.cpp | 2 +- .../XEngine_AuthorizeService.cpp | 2 +- 14 files changed, 40 insertions(+), 4 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h index 687982a..7370415 100644 --- a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h +++ b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h @@ -113,6 +113,7 @@ typedef struct bool bSwitchDCode; //动态验证码 bool bSwitchMulti; //多端登录开关 bool bSwitchTry; //临时验证 + bool bSwitchBlack; //黑名单 }XENGINE_FUNCTIONSWITCH; ////////////////////////////////////////////////////////////////////////// // 导出的函数 diff --git a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index dd051b0..23e3368 100644 --- a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -338,5 +338,6 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_Switch(LPCXSTR lpszConfigFile, pSt_ServerConfig->bSwitchDCode = st_JsonRoot["bSwitchDCode"].asBool(); pSt_ServerConfig->bSwitchMulti = st_JsonRoot["bSwitchMulti"].asBool(); pSt_ServerConfig->bSwitchTry = st_JsonRoot["bSwitchTry"].asBool(); + pSt_ServerConfig->bSwitchBlack = st_JsonRoot["bSwitchBlack"].asBool(); return true; } \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp index 6564cb4..3580e63 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp @@ -660,6 +660,7 @@ bool CProtocol_Packet::Protocol_Packet_HttpSwitch(XCHAR* ptszMsgBuffer, int* pIn st_JsonRoot["bSwitchDCode"] = pSt_FunSwitch->bSwitchDCode; st_JsonRoot["bSwitchMulti"] = pSt_FunSwitch->bSwitchMulti; st_JsonRoot["bSwitchTry"] = pSt_FunSwitch->bSwitchTry; + st_JsonRoot["bSwitchBlack"] = pSt_FunSwitch->bSwitchBlack; *pInt_MsgLen = st_JsonRoot.toStyledString().length(); memcpy(ptszMsgBuffer, st_JsonRoot.toStyledString().c_str(), *pInt_MsgLen); diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp index 15add0d..a1f002e 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp @@ -840,6 +840,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseSwitch(LPCXSTR lpszMsgBuffer, int pSt_FunSwitch->bSwitchDCode = st_JsonObject["bSwitchDCode"].asBool(); pSt_FunSwitch->bSwitchMulti = st_JsonObject["bSwitchMulti"].asBool(); pSt_FunSwitch->bSwitchTry = st_JsonObject["bSwitchTry"].asBool(); + pSt_FunSwitch->bSwitchBlack = st_JsonObject["bSwitchBlack"].asBool(); return true; } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp index feb6887..e3b68d8 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp @@ -46,6 +46,8 @@ void CDialog_Switch::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_RADIO18, m_RadioMultiClose); DDX_Control(pDX, IDC_RADIO19, m_RadioTryOPen); DDX_Control(pDX, IDC_RADIO20, m_RadioTryClose); + DDX_Control(pDX, IDC_RADIO21, m_RadioBlackOPen); + DDX_Control(pDX, IDC_RADIO22, m_RadioBlackClose); } @@ -232,6 +234,16 @@ void CDialog_Switch::OnBnClickedButton1() m_RadioTryOPen.SetCheck(BST_UNCHECKED); m_RadioTryClose.SetCheck(BST_CHECKED); } + if (st_JsonRoot["bSwitchBlack"].asBool()) + { + m_RadioBlackOPen.SetCheck(BST_CHECKED); + m_RadioBlackClose.SetCheck(BST_UNCHECKED); + } + else + { + m_RadioBlackOPen.SetCheck(BST_UNCHECKED); + m_RadioBlackClose.SetCheck(BST_CHECKED); + } m_BtnSetConfigure.EnableWindow(true); } else @@ -349,6 +361,14 @@ void CDialog_Switch::OnBnClickedButton2() st_JsonObject["bSwitchTry"] = false; } + if (BST_CHECKED == m_RadioBlackOPen.GetCheck()) + { + st_JsonObject["bSwitchBlack"] = true; + } + else + { + st_JsonObject["bSwitchBlack"] = false; + } st_JsonRoot["st_SwitchInfo"] = st_JsonObject; st_JsonRoot["xhToken"] = _ttxoll(m_StrToken.GetBuffer()); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.h index 4a6ce0a..8f0a6fc 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.h @@ -47,4 +47,6 @@ public: CButton m_RadioMultiClose; CButton m_RadioTryOPen; CButton m_RadioTryClose; + CButton m_RadioBlackOPen; + CButton m_RadioBlackClose; }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index 05b9f745dc274b117ad60eeedeb7e5c08c94445e..7eecc9bc9e28d86d54d0644ae0bcda1596523921 100644 GIT binary patch delta 12273 zcmaJn3y>96c6~>I;WL8E2*WVId{8k9GVjeWA3>#GcfXlt-s^t!>o-4v9_6omm7jnN z5L}H>Dx=3x@irL_?T1C3yaYc_fBdj$uD*HIHHNX!FpO@a&q%>@WMrv;htWLa+Dd%l zpKaVG6UW6&S$|wSD^LEesFy!IF8%_cr|`cc@{JRs8leNydsr;qiIavZMl)VgWDF?! z3!VPZ^{h<6c8r8!#D6Bsf3_G#qSZ(wI}FzjqO9q9>A=i7#xf((oRsI6w&xuMmK>ZQ>N!R zHjO9cSKGy$RY=krpBe@OMxqVW>CH#IPLOwfF9Kp6MDXi2uW z0Xb_i%s&`es&Bmo2%qKF$$am}%)d@~x3wP)nG7SK3l1ugYhOSHP9 zqu|ytQ4mzPc9eH=W?+VXU^E**;o5!=*bt!6W`scj#9Jv_JL^u`0ciu#Tr^!?8qFTXK z^2~BEe;Br>)-e~jUKrWF<>7`)qNbyfMB)TYkQ|2qJi}P>PdV?L+2weJEbwN3Sp!jM zrV?mv7I#8XoV4$SxxmjUBw5yq9NP_v9I^$=6k2E{urR7H z)Ja9ifX!edqk@;3Y{(h+m()oW!qE4K)w1#JFokRoX9@YMxf!T2$|lo7C=MBgN2eBz zQ1EOgz_g|2u=uIMFfL0|APUjcIbfr7WdHB^IPN zM?i^tJ~Ttuib6M+r!{~8OA;@Ou1|pLQCQ5eR%Dx@6S`R^=UP2ZK&D}QY$^20@+5== zTC=nkiGhYrvfC9)8b*sH*;!NM6;8}WK`?xiZ06W3+6+myW_%n4OY*LckE4!BE+Fx7 zv|m!&Pw78QZb7T*3KpM$mPwXbhSb1zs2Mt%n8nmMs@*bH?F8zrOJAISrvW>?Wvs?v zRTv+uF_;v_ml+i$SJA>?Qy6d4<8s~oVooQdGo6(zKjQ~cU$+}Vssm?(;G=K>bb)}O zQYTNr^lN}bp1)tz42+>2a55Rc56P(kDPJUuwJ$UgOX;s1YYmtlqNqucw?80iXr2BC z#5}BF<;1ob^eDL?0>;I51&)LKAZLt=Ph|?IFeHL8=#1Od9i{@mkLE)WhaO)3>H)EU z1ghC1>fqE-E|99y3GhB(Ny5D#~m})bMCb$y)OLZ5#=|&|*#7F6KZ}$dY{+ z-!0}5uynVWPe5+Bs3V|frH1rdXa~VbjD0=MKL6Z01ZRg<|<)9BS4Zx z^9cg!o0>y|{dNwovG-neQQ-^778ztnU-MIYph{!`8nHsew!}b+1?;g#7Vx zQ4eVwJJ&pP~$a^$Q{?Wwh&`0A+kJVkG8lznkL-94^dZN6tvs=s{ z>t(vdoaHfXz&4S(HX)Vm_{?ljfVG3X5=TXZJP8bl)0t766m`aFAsJM?(86h4tHM$K zl`~xCv>1T6Oq#k~QB&}b=G38ZYJVTqoL+E6?O;qh%?ZL4)k~Barie@`WNNJL83$Tc znrR_Y&RE4;cZmj80TA~tGR>IUWNBuJt!|{M6mo;!LmON7 zi0BTH;Ru?S;dHSafK^IG=0~-O1c0VbVK7m^#Sq&NZa+%HPQR-x+p1PLnGrW&sRl8y zOu}}+^DeP#RZ;vNP;dZ19mje~l!`>JNF^2pZ`HwUJ883!iPP$2fE@|e9cAfdS~}eM zvEgFQ@&mZ}3?sY(p*7p|1RpY=>%oOzsBM}oCP2iI8_@Zb%J>dPzMf@Ep3idP{Y92b z<#dm&{bc|e!6>RoL*qj^3E~^C%RtK(wT|56!L89)I&QgujAD8e7v!dx#9F-K8k7YU zI@Tu?(SyF9bt$X2aAVy^mvvcBw#h()nLP@9KZC6lkaVyeZ}(N-rbz;) zNTByQO*IRlAKN7zyuwpH`|aBR)W(*=TOC?QC2RSSukVeND0r=-YFP(dw8ti<2I%4r zMTDccLV#L+fCZQ9MQ725jL})KQyCDHVT6u{PK<}SWC_OTSm;#kzMN}v`t2~qA}T`b zO|gW4r%iDy0pHia=Ozd6?3B2XP_1GK?ChL;fmG)TqrWF@FPsr{Fa z@>U-1Au%4(%5^0~*6(EmrJWc84ocbLEY&ZWtJz8GR&%5F5CFX_g=^zV#Z-}wpKuWq zIC?gD3$1k z0^THt15r~-TCgk=TdEQRuUO*A7ZZ!t2=KHc^jZZEw~A^+l_*pJG`bsJ`p|H^q0Y&f zdCtO#yttX1dsm)g;%HvfFN_%z-}OM=vYcE9ua$_Gs{Zo(d5*=)z^y$t#rNRF3cR8~ z%cwf1#R>cT5=Oc6j*z{$Hsmexaww{=Q<)OxleQAZR7d}I$dX^wBUkju+yXPWy}-5} zC~&LsU_s2q%%tVOOh)2$kg?_K1u?61V$MUy>JL))o^I|?UCSlS^9ul0##pJoILgA? z1jR9S@KN4{WRGg~w1Vq(MQ}Bg#To%ZQ6DY;s#h$CbFtkN z6ly5gn0A4xZ2zU)Fl$1GQNnjp)XE$BL<7Y@XCE86zmF|>uusg5AAy1}UB;j+)~Gj$ zv!{+jYvFpmCN`2*AqX7L!mcw7r+M0Bzv|-@IH#Wz-pYO+S>Mlb`KSi|te+#mj6_W{ zz9d3ciTJj`J_dYd)a~Df>UIW*! z5wo9JBd(*+fFJ5~+`fio9bN-(xOc4)(+Cg06#o1gC^>KHVfb}psguiL{&jO<RUDC|8T;J|o%LWAJ&Rpuln{PU-rW5gNAK>EzaFL*Hq>xRA$|Wy@OG%tFn$3r6 zSzPdTeL7|ZNc9jOQSnp@Jjwz9{SIk$6p0Fejq5ljA6v)S6Qz|uSjWctU>&>h3k}pq z>!qfS5ZPsK`F32#A1N9it+ishLSJ`b;PvZi7X^Bt6C%YsNVGfu&C zLnxtczauZ)Bc_m8KfZ_4$8YXoW7Mn{b*Z9$kgK8T(C3|W60ZJ>I0(Ge8N5!#u%y(0 zt0z@#%6;p_@6Zx|vYu1SJL@^D|9d^Vy>khEHEF^D(NxL=c{reT6`(*XlCr)jB>DP=0#q_wO{K5#bBJ>3$Z~Wy9<`@fK z+(ZSh$HVtks5HFsi-2Hnp)@z*@i`@&66RGdyxYNn-iP|PpALQo1rUsNI_i_7B&d4Iop zkd6E9K@Oo$HBfbk>)S1dIH-Cwuw4Uxpn>lm;=ul=L!2J29OCp)dzd-jc9_F;?P1Y) zbJ6Cx$cf-C#!thmb*m?zQ+pFsc+iROfJ#j?b zSlX_*e$EWLJwHtQaOX+RRdrMT=m=Mi5zS=bFtc4X%%}&3Id{K2%q0YXIa3uI<-7kH z=FC6uC@WwdWm*83)>0Yb50A3Ar;mz7U1cWcMxS>KEnt<^P*4P4Q8+=#j+RQcHyz^? zoz=jeW8y|UTH^Ny>I(^D2^^@^2S3x`1C0sr?ZzbdP^1bz0-6S&I8?$%Ar$~kHmZ)j z_Lr}Tf16fWg&$IM+rjDQszl@U;zRl7e6dt4l%LKQ&J_Im^r-R4Hsfp0)I;YQE)cUS zTuW|SAQ~&&P(HOlY{DG;>jk2%!nR~{y=a>AIewaff0GO&_doFeE~5e10NJ*BAT#&M zSL#J$ZGNMoQgoAy#l}8OcM0iSTh=rH9el>bf5>kb=niPQutD60%RYs4SMe1V|5fBB z86O*$MWtHze1k}Wn9nqdT9m%75u}guawR-#Ctj;3A^YtjCdT1L(I%SZ_Zmf0t+OLe zwoObbN&8tN7-juNS=j_^@82pHH;E=OB6CeJ3`%cl0wK*%z5?i4_)voXaJ8d`Ut)8K z=xkZH5Q?~M#p(VxMu+}*@1?4+kOz-c%j=rN#1$1HGHSrPQ$ZKR8xhX-Jk4V=tYtCH zG^TlAHDWh!J-u?F_+)xzJ^UCMxjHO!t)gzK{xvdkTrOA!!Ce|SK?5cFx@DrS^lJ!y z#fTppJ^S&|15b`(x2sLm)O|5w^e3udNdA+}&xyqontKf6ALSG9q2_drumM<@G2}N- z!uEU|fOk&9CmHxL^`)Wz|6}SQ;GWwMry2WQG=4Sv!%cCTv0u$j1qoK1g0G|v$LNRu zUBi3&c`;occ@84s@TsSt6m?HuC%!cCd$40`z6(EZow#M9VO;)mdG$Flzhci{%lXg4 z^Y9sY2R=`nmFw_%{w;X~pMP{gzJ$*;|18hq)4nJ#68>N1Rd`$&zI3r)eXZWT(i_cSMM2{59CYuH2y`N#pjxz$cy+qbxB@*QKTwsJ{HADs@{fJ=gS)QabeGaegv#%D$Ra)l=I>4ynO%v-|su;JNLimM!y*o z%Z7kgXPrXv+3l{EMrpw);m#=&ut0Fa!mlMPJcAu%3t=f1P+bUb3bIUr5LO5Pv=YKX zj(Z{O&XidUL88asNULGYp}sI?^N0R079o(tw@kYdR|<%KW&`{2svy z=FhT*MP&ze0JxzZG#(n_z0KUicK_7!1olJQ^G20RU2AH(F{Za2>eYT44(0S|P4PLo zp3?RZ{6ni+SKH}lyb}N(J+Ny48r(%2NkPn7@NVFue$-HvedGj zkF6iD^?hh!99izBhHbQ^AsAK!Zmku_w~cn~>|VxB!^~K^?#I&=_|t25GM1MA0MCBz z^{gF*51%XR4M81%3urEe*=O0es09DqdFV~zR{NYXM*G`W4>$hbI>mRL&Ek)aoa2rk zcjl%ZkBBaxSM2sVP?#U}RaynfK-H|e-UE6QHOH_x<0NyjC7PvD3dB(_I8nSKl^Es` zUO47iS*owO zNR}^XGjwDCL><)14uy6X4RDm)G|jR20tGpaU7}5nQ4b||@y1|RIcl9C<(BySQtu0Z z-`tF5{qS-6N3f?k!N_q5z;jt!1H?woI>;^eX;jGa*s&ECHS5QZ>Ypg@?2qOI{-X&L zeGU6hYx(Q3A+^@>jz=^KWI2#h&{GdETY)qY!#pFOTNp-qAHxFO_9%)^eR+QY;|kBM diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc index 84e6ae6c4e5c1a045c4b996780efb79e632a9a23..36a2e857096ea0613c65c84695a4a568b0c5bf31 100644 GIT binary patch delta 70 zcmV-M0J;CHtpe(>0a{vGU delta 18 acmaF0foaWJrVZD^C!6W0Y~B&M$qoQk#R#GR diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h index 5fbea12..d55fb92 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h @@ -64,6 +64,8 @@ #define IDC_RADIO18 1032 #define IDC_RADIO19 1033 #define IDC_RADIO20 1034 +#define IDC_RADIO21 1035 +#define IDC_RADIO22 1036 // Next default values for new objects // diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp index 20ae19b..2e0738f 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp @@ -11,6 +11,14 @@ bool XEngine_AuthorizeHTTP_Banned(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); + if (!st_FunSwitch.bSwitchBlack) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 503, "the function is closed"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,黑名单协议处理失败,功能已经被服务器关闭!"), lpszClientAddr); + return false; + } + if (0 == _tcsxnicmp(lpszAPIInsert, lpszAPIName, _tcsxlen(lpszAPIInsert))) { AUTHREG_BANNED st_Banned; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp index 8fb1700..d03f959 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp @@ -76,7 +76,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC { bSuccess = DBModule_MySQL_BannedExist(&st_Banned); } - if (!bSuccess) + if (!bSuccess && st_FunSwitch.bSwitchBlack) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "user name is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index c85dcdd..68ae920 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -72,7 +72,7 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { bSuccess = DBModule_MySQL_BannedExist(&st_Banned);//IP地址是否在黑名单 } - if (!bSuccess) + if (!bSuccess && st_FunSwitch.bSwitchBlack) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "ip address is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index aaf7cca..e4abb04 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -77,7 +77,7 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n { bSuccess = DBModule_MySQL_BannedExist(&st_Banned);//是否在黑名单 } - if (!bSuccess) + if (!bSuccess && st_FunSwitch.bSwitchBlack) { pSt_ProtocolHdr->wReserve = 423; Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp index db0ce74..a3fdcb8 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp @@ -314,7 +314,7 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,信息报告给API服务器没有启用")); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,功能开关选项,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,动态验证:%d,多端登录:%d,临时试用:%d"), st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchDCode, st_FunSwitch.bSwitchMulti, st_FunSwitch.bSwitchTry); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,功能开关选项,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,动态验证:%d,多端登录:%d,临时试用:%d,黑名单功能:%d"), st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchDCode, st_FunSwitch.bSwitchMulti, st_FunSwitch.bSwitchTry, st_FunSwitch.bSwitchBlack); XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("所有服务成功启动,网络验证服务运行中,XEngien版本:%s%s,发行版本次数:%d,当前运行版本:%s。。。"), BaseLib_OperatorVer_XNumberStr(), BaseLib_OperatorVer_XTypeStr(), st_AuthConfig.st_XVer.pStl_ListVer->size(), st_AuthConfig.st_XVer.pStl_ListVer->front().c_str()); while (true) { -- Gitee From 9361b94555184970727c7e48abf47359d24ff7cd Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Wed, 10 Jul 2024 17:09:20 +0800 Subject: [PATCH 22/46] update:configure --- XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json b/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json index d03d0e2..e59741d 100644 --- a/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json +++ b/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json @@ -9,5 +9,6 @@ "bSwitchNotice":true, "bSwitchDCode":false, "bSwitchMulti":true, - "bSwitchTry":true + "bSwitchTry":true, + "bSwitchBlack":true } \ No newline at end of file -- Gitee From fa895b364661397f05aa9b5bbbe47d0deb60a99b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 11 Jul 2024 11:21:22 +0800 Subject: [PATCH 23/46] added:cdkey create for app management --- .../Authorize_CDKey/Authorize_CDKey.cpp | 2 +- .../Authorize_Serial/Authorize_Serial.cpp | 4 +- .../Authorize_Serial/Authorize_Serial.h | 4 +- .../AuthorizeModule_CDKey/CDKey_Define.h | 4 +- XEngine_Source/AuthorizeModule_CDKey/pch.cpp | 4 +- .../DBModule_MySQL/DBModule_MySQL.cpp | 24 +- .../DBModule_MySQL/DBModule_MySQL.h | 4 +- .../DBModule_SQLite/DBModule_SQLite.cpp | 24 +- .../DBModule_SQLite/DBModule_SQLite.h | 4 +- .../Database_Define.h | 4 +- .../AuthorizeModule_Database/pch.cpp | 4 +- .../Protocol_Define.h | 2 +- .../Protocol_Parse/Protocol_Parse.cpp | 14 +- .../Protocol_Parse/Protocol_Parse.h | 2 +- .../AuthorizeModule_Protocol/pch.cpp | 2 +- .../AuthorizeModule_Session/Session_Define.h | 2 +- XEngine_Source/XAuth_Protocol.h | 13 +- .../Authorize_Dialog/Dialog_CDKey.cpp | 206 ++++++++++++++++++ .../Authorize_Dialog/Dialog_CDKey.h | 56 +++++ .../Authorize_Dialog/Dialog_Modify.cpp | 2 +- .../Authorize_Dialog/Dialog_Try.cpp | 2 +- .../XEngineAuthorizeApp.aps | Bin 125788 -> 129184 bytes .../XEngineAuthorizeApp.rc | Bin 39018 -> 47172 bytes .../XEngine_AuthorizeApp.vcxproj | 2 + .../XEngine_AuthorizeApp.vcxproj.filters | 6 + .../XEngine_AuthorizeAppDlg.cpp | 21 ++ .../XEngine_AuthorizeAppDlg.h | 1 + .../XEngine_AuthorizeApp/pch.h | 7 + .../XEngine_AuthorizeApp/resource.h | 27 ++- .../AuthorizeHTTP_Serial.cpp | 2 +- .../AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp | 4 +- .../Authorize_Task.cpp | 2 +- .../XEngine_AuthorizeService/Authorize_Task.h | 2 +- 33 files changed, 390 insertions(+), 67 deletions(-) create mode 100644 XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp create mode 100644 XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp index ba7949e..1cf5eef 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp @@ -280,7 +280,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_ReadKey(LPCXSTR lpszFileKey, XENGINE_AUTH //添加注册信息 pSt_AuthLocal->st_AuthRegInfo.enHWType = (ENUM_AUTHORIZE_MODULE_HW_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enHWType")); pSt_AuthLocal->st_AuthRegInfo.enRegType = (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enRegType")); - pSt_AuthLocal->st_AuthRegInfo.enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enSerialType")); + pSt_AuthLocal->st_AuthRegInfo.enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enSerialType")); pSt_AuthLocal->st_AuthRegInfo.enVModeType = (ENUM_AUTHORIZE_MODULE_VERMODE_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enVModeType")); pSt_AuthLocal->st_AuthRegInfo.nHasTime = BaseLib_OperatorFile_ReadInt64FromFile(lpszFileKey, _X("AuthReg"), _X("nHasTime")); if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthReg"), _X("tszHardware"), pSt_AuthLocal->st_AuthRegInfo.tszHardware) <= 0) diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp index 4743619..10bce27 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.cpp @@ -69,7 +69,7 @@ CAuthorize_Serial::~CAuthorize_Serial() 意思:是否生成成功 备注:输入的时间不能超过99999,多天卡现在由用户直接使用pSt_CustomTimer参数指定,不在内部指定了 *********************************************************************/ -bool CAuthorize_Serial::Authorize_Serial_Creator(XCHAR*** ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER* pSt_CustomTimer, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType /* = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY */) +bool CAuthorize_Serial::Authorize_Serial_Creator(XCHAR*** ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER* pSt_CustomTimer, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType /* = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY */) { Authorize_IsErrorOccur = false; //参数检查 @@ -265,7 +265,7 @@ bool CAuthorize_Serial::Authorize_Serial_Create(XCHAR*** ppptszSerialNumber, LPC 意思:是否获取成功 备注: *********************************************************************/ -bool CAuthorize_Serial::Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE* penSerialType, XENGINE_LIBTIMER* pSt_CustomTimer /* = NULL */) +bool CAuthorize_Serial::Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE* penSerialType, XENGINE_LIBTIMER* pSt_CustomTimer /* = NULL */) { Authorize_IsErrorOccur = false; diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.h b/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.h index b09e53f..ee2307c 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.h +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_Serial/Authorize_Serial.h @@ -18,9 +18,9 @@ public: CAuthorize_Serial(); ~CAuthorize_Serial(); public: - bool Authorize_Serial_Creator(XCHAR*** ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER* pSt_CustomTimer, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY); + bool Authorize_Serial_Creator(XCHAR*** ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER* pSt_CustomTimer, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY); bool Authorize_Serial_Create(XCHAR*** ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber); - bool Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE* penSerialType, XENGINE_LIBTIMER* pSt_CustomTimer = NULL); + bool Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE* penSerialType, XENGINE_LIBTIMER* pSt_CustomTimer = NULL); protected: bool Authorize_Serial_Fill(XCHAR *ptszFillBuffer, int nCardNumer); //填充后面的字段 protected: diff --git a/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h index 6f43dc8..e63de1a 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h +++ b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h @@ -56,7 +56,7 @@ extern "C" XLONG Authorize_GetLastError(int *pInt_SysError = NULL); 意思:是否生成成功 备注:输入的时间不能超过99999,多天卡现在由用户直接使用pSt_CustomTimer参数指定,不在内部指定了 *********************************************************************/ -extern "C" bool Authorize_Serial_Creator(XCHAR * **ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER * pSt_CustomTimer, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY); +extern "C" bool Authorize_Serial_Creator(XCHAR * **ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER * pSt_CustomTimer, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY); /******************************************************************** 函数名称:Authorize_Serial_Create 函数功能:创建自定义无类型序列号 @@ -109,7 +109,7 @@ extern "C" bool Authorize_Serial_Create(XCHAR*** ppptszSerialNumber, LPCXSTR lps 意思:是否获取成功 备注: *********************************************************************/ -extern "C" bool Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE* penSerialType, XENGINE_LIBTIMER* pSt_CustomTimer = NULL); +extern "C" bool Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE* penSerialType, XENGINE_LIBTIMER* pSt_CustomTimer = NULL); /************************************************************************/ /* 本地授权导出函数 */ /************************************************************************/ diff --git a/XEngine_Source/AuthorizeModule_CDKey/pch.cpp b/XEngine_Source/AuthorizeModule_CDKey/pch.cpp index 29cdfc5..e370914 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/pch.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/pch.cpp @@ -31,7 +31,7 @@ extern "C" XLONG Authorize_GetLastError(int* pInt_SysError) /************************************************************************/ /* 卡导出函数 */ /************************************************************************/ -extern "C" bool Authorize_Serial_Creator(XCHAR * **ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER * pSt_CustomTimer, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType) +extern "C" bool Authorize_Serial_Creator(XCHAR * **ppptszSerialNumber, LPCXSTR lpszUserHeader, int nCardNumber, int nFieldNumber, XENGINE_LIBTIMER * pSt_CustomTimer, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType) { return m_Serial.Authorize_Serial_Creator(ppptszSerialNumber, lpszUserHeader, nCardNumber, nFieldNumber, pSt_CustomTimer, enSerialType); } @@ -39,7 +39,7 @@ extern "C" bool Authorize_Serial_Create(XCHAR * **ppptszSerialNumber, LPCXSTR lp { return m_Serial.Authorize_Serial_Create(ppptszSerialNumber, lpszUserHeader, nCardNumber, nFieldNumber); } -extern "C" bool Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE * penSerialType, XENGINE_LIBTIMER * pSt_CustomTimer) +extern "C" bool Authorize_Serial_GetType(LPCXSTR lpszSerialNumber, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE * penSerialType, XENGINE_LIBTIMER * pSt_CustomTimer) { return m_Serial.Authorize_Serial_GetType(lpszSerialNumber, penSerialType, pSt_CustomTimer); } diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp index 22d6607..03b3ad5 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.cpp @@ -223,7 +223,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserQuery(LPCXSTR lpszUserName, AUTHREG_USE nFliedValue++; if (NULL != pptszResult[nFliedValue]) { - pSt_UserInfo->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(pptszResult[nFliedValue]); + pSt_UserInfo->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(pptszResult[nFliedValue]); } //QQ号 @@ -527,7 +527,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserList(AUTHREG_USERTABLE*** pppSt_UserInf _tcsxcpy((*pppSt_UserInfo)[i]->tszHardCode, ppszResult[nFliedValue]); //充值卡类型 nFliedValue++; - (*pppSt_UserInfo)[i]->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + (*pppSt_UserInfo)[i]->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); //QQ号 nFliedValue++; (*pppSt_UserInfo)[i]->st_UserInfo.nPhoneNumber = _ttxoll(ppszResult[nFliedValue]); @@ -577,7 +577,7 @@ bool CDBModule_MySQL::DBModule_MySQL_SerialInsert(LPCXSTR lpszSerialNumber) SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; return false; } - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enAuthSerialType; + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enAuthSerialType; XENGINE_LIBTIMER st_AuthTimer; memset(&st_AuthTimer, '\0', sizeof(st_AuthTimer)); @@ -707,7 +707,7 @@ bool CDBModule_MySQL::DBModule_MySQL_SerialQuery(LPCXSTR lpszSerialNumber, LPAUT _tcsxcpy(pSt_SerialTable->tszMaxTime, ppszResult[nFliedValue]); //序列卡类型 nFliedValue++; - pSt_SerialTable->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + pSt_SerialTable->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); //是否已经使用 nFliedValue++; pSt_SerialTable->bIsUsed = _ttxoi(ppszResult[nFliedValue]); @@ -795,7 +795,7 @@ bool CDBModule_MySQL::DBModule_MySQL_SerialQueryAll(AUTHREG_SERIALTABLE*** pppSt _tcsxcpy((*pppSt_SerialTable)[i]->tszMaxTime, ppszResult[nFliedValue]); nFliedValue++; //序列卡类型 - (*pppSt_SerialTable)[i]->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + (*pppSt_SerialTable)[i]->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); nFliedValue++; //是否已经使用 (*pppSt_SerialTable)[i]->bIsUsed = _ttxoi(ppszResult[nFliedValue]); @@ -948,7 +948,7 @@ bool CDBModule_MySQL::DBModule_MySQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) //试用类型 if (NULL != ppszResult[nFliedValue]) { - pSt_AuthVer->enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + pSt_AuthVer->enVMode = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); } //试用时间 @@ -1029,7 +1029,7 @@ bool CDBModule_MySQL::DBModule_MySQL_TryDelete(LPCXSTR lpszSerial) 意思:是否成功 备注: *********************************************************************/ -bool CDBModule_MySQL::DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode) +bool CDBModule_MySQL::DBModule_MySQL_TryClear(int nThanValue, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enVerMode) { SQLPacket_IsErrorOccur = false; @@ -1065,7 +1065,7 @@ bool CDBModule_MySQL::DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENT _tcsxcpy(st_AuthVer.tszVSerial, ppszResult[nFliedValue]); nFliedValue++; //模式 - st_AuthVer.enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + st_AuthVer.enVMode = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); nFliedValue++; //测试时间 st_AuthVer.nVTime = _ttxoi(ppszResult[nFliedValue]); @@ -1211,7 +1211,7 @@ bool CDBModule_MySQL::DBModule_MySQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, i _tcsxcpy((*pppSt_AuthVer)[i]->tszVSerial, ppszResult[nFliedValue]); nFliedValue++; //类型 - (*pppSt_AuthVer)[i]->enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + (*pppSt_AuthVer)[i]->enVMode = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); nFliedValue++; //时间 (*pppSt_AuthVer)[i]->nVTime = _ttxoi(ppszResult[nFliedValue]); @@ -1862,7 +1862,7 @@ bool CDBModule_MySQL::DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** pp 意思:是否成功充值 备注: *********************************************************************/ -bool CDBModule_MySQL::DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType) +bool CDBModule_MySQL::DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_AuthSerialType, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_AuthUserType) { SQLPacket_IsErrorOccur = false; XCHAR tszSQLStatement[1024]; @@ -1919,7 +1919,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR l { XCHAR tszTime[128]; XENGINE_LIBTIMER st_AuthTime; - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_GeneraterSerialType; + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_GeneraterSerialType; memset(tszTime, '\0', sizeof(tszTime)); memset(&st_AuthTime, '\0', sizeof(XENGINE_LIBTIMER)); @@ -1969,7 +1969,7 @@ bool CDBModule_MySQL::DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR l //自定义卡,无法相加 XCHAR tszTime[128]; XENGINE_LIBTIMER st_AuthTime; - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_GeneraterSerialType; + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_GeneraterSerialType; memset(tszTime, '\0', sizeof(tszTime)); memset(&st_AuthTime, '\0', sizeof(XENGINE_LIBTIMER)); diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h index e833b52..b2df45f 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_MySQL/DBModule_MySQL.h @@ -40,7 +40,7 @@ public: bool DBModule_MySQL_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); //网络使用模式插入一条数据 bool DBModule_MySQL_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); //试用序列号查询函数 bool DBModule_MySQL_TryDelete(LPCXSTR lpszSerial); //删除一条指定的试用数据 - bool DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); //清理函数,自动清理过期数据 + bool DBModule_MySQL_TryClear(int nThanValue, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); //清理函数,自动清理过期数据 bool DBModule_MySQL_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); //设置用户信息函数 bool DBModule_MySQL_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); //请求试用期列表 public: @@ -54,7 +54,7 @@ public: bool DBModule_MySQL_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); //公告删除 bool DBModule_MySQL_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); //列举所有公告 protected: - bool DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType); //日期方式充值方式 + bool DBModule_MySQL_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_AuthSerialType, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_AuthUserType); //日期方式充值方式 private: bool m_bChange; XNETHANDLE xhData; //数据库句柄 diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp index 923ac62..8468868 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.cpp @@ -198,7 +198,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserQuery(LPCXSTR lpszUserName, AUTHREG_U _tcsxcpy(pSt_UserInfo->tszHardCode, ppszResult[nFliedValue]); //充值卡类型 nFliedValue++; - pSt_UserInfo->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + pSt_UserInfo->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); //QQ号 nFliedValue++; pSt_UserInfo->st_UserInfo.nPhoneNumber = _ttxoll(ppszResult[nFliedValue]); @@ -477,7 +477,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserList(AUTHREG_USERTABLE*** pppSt_UserI _tcsxcpy((*pppSt_UserInfo)[i]->tszHardCode, ppszResult[nFliedValue]); //充值卡类型 nFliedValue++; - (*pppSt_UserInfo)[i]->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + (*pppSt_UserInfo)[i]->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); //QQ号 nFliedValue++; (*pppSt_UserInfo)[i]->st_UserInfo.nPhoneNumber = _ttxoll(ppszResult[nFliedValue]); @@ -527,7 +527,7 @@ bool CDBModule_SQLite::DBModule_SQLite_SerialInsert(LPCXSTR lpszSerialNumber) SQLPacket_dwErrorCode = ERROR_AUTHORIZE_MODULE_DATABASE_EXIST; return false; } - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enAuthSerialType; + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enAuthSerialType; XENGINE_LIBTIMER st_AuthTimer; memset(&st_AuthTimer, '\0', sizeof(st_AuthTimer)); @@ -652,7 +652,7 @@ bool CDBModule_SQLite::DBModule_SQLite_SerialQuery(LPCXSTR lpszSerialNumber, LPA _tcsxcpy(pSt_SerialTable->tszMaxTime, ppszResult[nFliedValue]); //序列卡类型 nFliedValue++; - pSt_SerialTable->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + pSt_SerialTable->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); //是否已经使用 nFliedValue++; pSt_SerialTable->bIsUsed = _ttxoi(ppszResult[nFliedValue]); @@ -734,7 +734,7 @@ bool CDBModule_SQLite::DBModule_SQLite_SerialQueryAll(AUTHREG_SERIALTABLE*** ppp _tcsxcpy((*pppSt_SerialTable)[i]->tszMaxTime, ppszResult[nFliedValue]); nFliedValue++; //序列卡类型 - (*pppSt_SerialTable)[i]->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + (*pppSt_SerialTable)[i]->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); nFliedValue++; //是否已经使用 (*pppSt_SerialTable)[i]->bIsUsed = _ttxoi(ppszResult[nFliedValue]); @@ -878,7 +878,7 @@ bool CDBModule_SQLite::DBModule_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer) //序列号 nFliedValue++; //试用类型 - pSt_AuthVer->enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + pSt_AuthVer->enVMode = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); nFliedValue++; //试用时间 pSt_AuthVer->nVTime = _ttxoi(ppszResult[nFliedValue]); @@ -945,7 +945,7 @@ bool CDBModule_SQLite::DBModule_SQLite_TryDelete(LPCXSTR lpszSerial) 意思:是否成功 备注: *********************************************************************/ -bool CDBModule_SQLite::DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVMode /* = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW */) +bool CDBModule_SQLite::DBModule_SQLite_TryClear(int nThanValue, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enVMode /* = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW */) { SQLPacket_IsErrorOccur = false; @@ -976,7 +976,7 @@ bool CDBModule_SQLite::DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONE _tcsxcpy(st_AuthVer.tszVSerial, ppszResult[nFliedValue]); nFliedValue++; //模式 - st_AuthVer.enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + st_AuthVer.enVMode = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); nFliedValue++; //测试时间 st_AuthVer.nVTime = _ttxoi(ppszResult[nFliedValue]); @@ -1117,7 +1117,7 @@ bool CDBModule_SQLite::DBModule_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, _tcsxcpy((*pppSt_AuthVer)[i]->tszVSerial, ppszResult[nFliedValue]); nFliedValue++; //类型 - (*pppSt_AuthVer)[i]->enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); + (*pppSt_AuthVer)[i]->enVMode = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)_ttxoi(ppszResult[nFliedValue]); nFliedValue++; //时间 (*pppSt_AuthVer)[i]->nVTime = _ttxoi(ppszResult[nFliedValue]); @@ -1721,7 +1721,7 @@ bool CDBModule_SQLite::DBModule_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** 意思:是否成功充值 备注: *********************************************************************/ -bool CDBModule_SQLite::DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType) +bool CDBModule_SQLite::DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_AuthSerialType, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_AuthUserType) { SQLPacket_IsErrorOccur = false; @@ -1779,7 +1779,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR { XCHAR tszTime[128]; XENGINE_LIBTIMER st_AuthTime; - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_GeneraterSerialType; + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_GeneraterSerialType; memset(tszTime, '\0', sizeof(tszTime)); memset(&st_AuthTime, '\0', sizeof(XENGINE_LIBTIMER)); @@ -1829,7 +1829,7 @@ bool CDBModule_SQLite::DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR //自定义卡,无法相加 XCHAR tszTime[128]; XENGINE_LIBTIMER st_AuthTime; - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_GeneraterSerialType; + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_GeneraterSerialType; memset(tszTime, '\0', sizeof(tszTime)); memset(&st_AuthTime, '\0', sizeof(XENGINE_LIBTIMER)); diff --git a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h index 90e442b..a47bfd4 100644 --- a/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h +++ b/XEngine_Source/AuthorizeModule_Database/DBModule_SQLite/DBModule_SQLite.h @@ -40,7 +40,7 @@ public: bool DBModule_SQLite_TryInsert(AUTHREG_TEMPVER* pSt_AuthVer); bool DBModule_SQLite_TryQuery(AUTHREG_TEMPVER* pSt_AuthVer); bool DBModule_SQLite_TryDelete(LPCXSTR lpszSerial); - bool DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); + bool DBModule_SQLite_TryClear(int nThanValue, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); bool DBModule_SQLite_TrySet(AUTHREG_TEMPVER* pSt_AuthVer); bool DBModule_SQLite_TryList(AUTHREG_TEMPVER*** pppSt_AuthVer, int* pInt_ListCount, int nPosStart = 0, int nPosEnd = 1000); public: @@ -54,7 +54,7 @@ public: bool DBModule_SQLite_AnnouncementDelete(AUTHREG_ANNOUNCEMENT* pSt_Announcement); bool DBModule_SQLite_AnnouncementList(AUTHREG_ANNOUNCEMENT*** ppppSt_Announcement, int* pInt_ListCount); protected: - bool DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthSerialType, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE en_AuthUserType); + bool DBModule_SQLite_UserPayTime(LPCXSTR lpszUserName, LPCXSTR lpszUserTime, LPCXSTR lpszCardTime, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_AuthSerialType, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE en_AuthUserType); private: bool m_bChange; XNETHANDLE xhData; //数据库句柄 diff --git a/XEngine_Source/AuthorizeModule_Database/Database_Define.h b/XEngine_Source/AuthorizeModule_Database/Database_Define.h index f442815..cceec65 100644 --- a/XEngine_Source/AuthorizeModule_Database/Database_Define.h +++ b/XEngine_Source/AuthorizeModule_Database/Database_Define.h @@ -318,7 +318,7 @@ extern "C" bool DBModule_SQLite_TryDelete(LPCXSTR lpszSerial); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); +extern "C" bool DBModule_SQLite_TryClear(int nThanValue, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); /******************************************************************** 函数名称:DBModule_SQLite_TrySet 函数功能:设置用户信息函数 @@ -807,7 +807,7 @@ extern "C" bool DBModule_MySQL_TryDelete(LPCXSTR lpszSerial); 意思:是否成功 备注: *********************************************************************/ -extern "C" bool DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); +extern "C" bool DBModule_MySQL_TryClear(int nThanValue, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enVerMode = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW); /******************************************************************** 函数名称:DBModule_MySQL_TrySet 函数功能:设置用户信息函数 diff --git a/XEngine_Source/AuthorizeModule_Database/pch.cpp b/XEngine_Source/AuthorizeModule_Database/pch.cpp index 390f698..fea7d29 100644 --- a/XEngine_Source/AuthorizeModule_Database/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Database/pch.cpp @@ -99,7 +99,7 @@ extern "C" bool DBModule_SQLite_TryDelete(LPCXSTR lpszSerial) { return m_DBSQLite.DBModule_SQLite_TryDelete(lpszSerial); } -extern "C" bool DBModule_SQLite_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode) +extern "C" bool DBModule_SQLite_TryClear(int nThanValue, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enVerMode) { return m_DBSQLite.DBModule_SQLite_TryClear(nThanValue, enVerMode); } @@ -215,7 +215,7 @@ extern "C" bool DBModule_MySQL_TryDelete(LPCXSTR lpszSerial) { return m_DBMySQL.DBModule_MySQL_TryDelete(lpszSerial); } -extern "C" bool DBModule_MySQL_TryClear(int nThanValue, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVerMode) +extern "C" bool DBModule_MySQL_TryClear(int nThanValue, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enVerMode) { return m_DBMySQL.DBModule_MySQL_TryClear(nThanValue, enVerMode); } diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h index 56467cb..c5cb201 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Define.h @@ -637,7 +637,7 @@ extern "C" bool Protocol_Parse_HttpParseSerial(LPCXSTR lpszMsgBuffer, int nMsgLe 意思:是否成功 备注: *********************************************************************/ -extern "C" bool Protocol_Parse_HttpParseSerial2(LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE * penSerialType, int* pInt_NumberCount, int* pInt_SerialCount, XCHAR * ptszHasTime); +extern "C" bool Protocol_Parse_HttpParseSerial2(LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE * penSerialType, int* pInt_NumberCount, int* pInt_SerialCount, XCHAR * ptszHasTime); /******************************************************************** 函数名称:Protocol_Parse_HttpParseOnline 函数功能:解析在线列表 diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp index a1f002e..da243fe 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp @@ -382,7 +382,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseTry(LPCXSTR lpszMsgBuffer, int nMs if (!st_JsonProtocol["enVMode"].isNull()) { - pSt_NETTry->enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_JsonProtocol["enVMode"].asInt(); + pSt_NETTry->enVMode = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)st_JsonProtocol["enVMode"].asInt(); } if (!st_JsonProtocol["nID"].isNull()) { @@ -455,7 +455,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseTable(LPCXSTR lpszMsgBuffer, int n if (!st_UserTable["enSerialType"].isNull()) { - pSt_UserTable->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_UserTable["enSerialType"].asInt(); + pSt_UserTable->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)st_UserTable["enSerialType"].asInt(); } if (!st_UserTable["enDeviceType"].isNull()) { @@ -568,7 +568,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseSerial(LPCXSTR lpszMsgBuffer, int } if (!st_JsonArray[i]["enSerialType"].isNull()) { - (*pppSt_SerialTable)[i]->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_JsonArray[i]["enSerialType"].asInt(); + (*pppSt_SerialTable)[i]->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)st_JsonArray[i]["enSerialType"].asInt(); } if (!st_JsonArray[i]["tszCreateTime"].isNull()) { @@ -627,7 +627,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseSerial(LPCXSTR lpszMsgBuffer, int 意思:是否成功 备注: *********************************************************************/ -bool CProtocol_Parse::Protocol_Parse_HttpParseSerial2(LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE* penSerialType, int* pInt_NumberCount, int* pInt_SerialCount, XCHAR* ptszHasTime) +bool CProtocol_Parse::Protocol_Parse_HttpParseSerial2(LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE* penSerialType, int* pInt_NumberCount, int* pInt_SerialCount, XCHAR* ptszHasTime) { Protocol_IsErrorOccur = false; @@ -650,7 +650,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseSerial2(LPCXSTR lpszMsgBuffer, int } Json::Value st_JsonObject = st_JsonRoot["st_SerialInfo"]; - *penSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_JsonObject["enSerialType"].asInt(); + *penSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)st_JsonObject["enSerialType"].asInt(); *pInt_NumberCount = st_JsonObject["nNumberCount"].asInt(); *pInt_SerialCount = st_JsonObject["nSerialCount"].asInt(); _tcsxcpy(ptszHasTime, st_JsonObject["tszHasTime"].asCString()); @@ -752,7 +752,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseTime(LPCXSTR lpszMsgBuffer, int nM if (!st_JsonProtocol["enSerialType"].isNull()) { - pSt_ProtocolTime->enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_JsonProtocol["enSerialType"].asInt(); + pSt_ProtocolTime->enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)st_JsonProtocol["enSerialType"].asInt(); } if (!st_JsonProtocol["enDeviceType"].isNull()) { @@ -1110,7 +1110,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseCDKey(LPCXSTR lpszMsgBuffer, int n } if (!st_JsonREGInfo["enSerialType"].isNull()) { - pSt_Authorize->st_AuthRegInfo.enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_JsonREGInfo["enSerialType"].asInt(); + pSt_Authorize->st_AuthRegInfo.enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)st_JsonREGInfo["enSerialType"].asInt(); } if (!st_JsonREGInfo["enRegType"].isNull()) { diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h index d82247b..e8a69b0 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.h @@ -26,7 +26,7 @@ public: bool Protocol_Parse_HttpParseTry(LPCXSTR lpszMsgBuffer, int nMsgLen, AUTHREG_TEMPVER* pSt_NETTry); bool Protocol_Parse_HttpParseTable(LPCXSTR lpszMsgBuffer, int nMsgLen, AUTHREG_USERTABLE* pSt_UserTable); bool Protocol_Parse_HttpParseSerial(LPCXSTR lpszMsgBuffer, int nMsgLen, AUTHREG_SERIALTABLE*** pppSt_SerialTable, int* pInt_ListCount); - bool Protocol_Parse_HttpParseSerial2(LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE* penSerialType, int* pInt_NumberCount, int* pInt_SerialCount, XCHAR* ptszHasTime); + bool Protocol_Parse_HttpParseSerial2(LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE* penSerialType, int* pInt_NumberCount, int* pInt_SerialCount, XCHAR* ptszHasTime); bool Protocol_Parse_HttpParseOnline(LPCXSTR lpszMsgBuffer, int nMsgLen, bool* pbOnline); bool Protocol_Parse_HttpParseTime(LPCXSTR lpszMsgBuffer, int nMsgLen, AUTHREG_PROTOCOL_TIME* pSt_ProtocolTime); bool Protocol_Parse_HttpParseSwitch(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_FUNCTIONSWITCH* pSt_FunSwitch); diff --git a/XEngine_Source/AuthorizeModule_Protocol/pch.cpp b/XEngine_Source/AuthorizeModule_Protocol/pch.cpp index bf0be90..56d6870 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/pch.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/pch.cpp @@ -118,7 +118,7 @@ extern "C" bool Protocol_Parse_HttpParseSerial(LPCXSTR lpszMsgBuffer, int nMsgLe { return m_ProtocolParse.Protocol_Parse_HttpParseSerial(lpszMsgBuffer, nMsgLen, pppSt_SerialTable, pInt_ListCount); } -extern "C" bool Protocol_Parse_HttpParseSerial2(LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE * penSerialType, int* pInt_NumberCount, int* pInt_SerialCount, XCHAR * ptszHasTime) +extern "C" bool Protocol_Parse_HttpParseSerial2(LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE * penSerialType, int* pInt_NumberCount, int* pInt_SerialCount, XCHAR * ptszHasTime) { return m_ProtocolParse.Protocol_Parse_HttpParseSerial2(lpszMsgBuffer, nMsgLen, penSerialType, pInt_NumberCount, pInt_SerialCount, ptszHasTime); } diff --git a/XEngine_Source/AuthorizeModule_Session/Session_Define.h b/XEngine_Source/AuthorizeModule_Session/Session_Define.h index 23a2c33..60f2d74 100644 --- a/XEngine_Source/AuthorizeModule_Session/Session_Define.h +++ b/XEngine_Source/AuthorizeModule_Session/Session_Define.h @@ -24,7 +24,7 @@ typedef struct // 导出的回调函数 ////////////////////////////////////////////////////////////////////////// //用户在线时间事件回调处理函数,用户名 在线时间 剩余时间(分,天) 注册的卡类型 自定义参数 -typedef void(CALLBACK* CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS)(LPCXSTR lpszUserAddr, LPCXSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCXSTR lpszLeftDate, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, int nNetType, XPVOID lParam); +typedef void(CALLBACK* CALLBACK_XENGIEN_AUTHORIZE_SESSION_CLIENT_EVENTS)(LPCXSTR lpszUserAddr, LPCXSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCXSTR lpszLeftDate, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, int nNetType, XPVOID lParam); typedef void(CALLBACK* CALLBACK_XENGIEN_AUTHORIZE_SESSION_TOKEN_EVENTS)(XNETHANDLE xhToken, XPVOID lParam); ////////////////////////////////////////////////////////////////////////// // 导出的函数 diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h index e791d17..2347785 100644 --- a/XEngine_Source/XAuth_Protocol.h +++ b/XEngine_Source/XAuth_Protocol.h @@ -41,6 +41,7 @@ static LPCXSTR lpszXSerialType[5] = { "UNKNOW","SECOND","DAY","TIME","CUSTOM" }; static LPCXSTR lpszXRegType[6] = { "UNKNOW","TEMP","TRY","OFFICIAL","UNLIMIT","EXPIRED" }; static LPCXSTR lpszXHDType[6] = { "UNKNOW","CPU","DISK","BOARD","MAC","BIOS" }; +static LPCXSTR lpszXVerType[6] = { "UNKNOW","LOCAL","LAN","NETWORK" }; #ifndef _MSC_BUILD #pragma GCC diagnostic pop #endif @@ -51,7 +52,7 @@ typedef enum ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY = 2, //天数,本地使用天数卡,不使用不减天数. ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME = 3, //次数卡 ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM = 4 //自定义过期日期 -}ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE, * LPENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE; +}ENUM_AUTHORIZE_MODULE_SERIAL_TYPE, * LPENUM_AUTHORIZE_MODULE_SERIAL_TYPE; typedef enum { ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNKNOW = 0, //未注册,Authorize_CDKey_GetLeftTimer将返回失败 @@ -102,7 +103,7 @@ typedef struct XCHAR tszStartTime[64]; //当前启动时间,由系统读取CDKEY的时候自动更新,天数和分钟有效 XCHAR tszExpiryTime[64]; //过期的时间,需要调用Authorize_CDKey_GetLeftTimer并且Write才生效 __int64x nHasTime; //当前还拥有时间,根据nLeftType决定此值的意义,调用Authorize_CDKey_GetLeftTimer会更新 - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType; //过期类型,参考:ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType; //过期类型,参考:ENUM_AUTHORIZE_MODULE_SERIAL_TYPE ENUM_AUTHORIZE_MODULE_CDKEY_TYPE enRegType; //注册类型,参考:ENUM_AUTHORIZE_MODULE_CDKEY_TYPE ENUM_AUTHORIZE_MODULE_HW_TYPE enHWType; //硬件类型,参考:ENUM_AUTHORIZE_MODULE_HW_TYPE ENUM_AUTHORIZE_MODULE_VERMODE_TYPE enVModeType; //验证方式,参考:ENUM_AUTHORIZE_MODULE_VERMODE_TYPE @@ -152,7 +153,7 @@ typedef struct __int64x nTimeLeft; //剩余时间 __int64x nTimeONLine; //在线时间 int nNetType; //连接类型 - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType; + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType; ENUM_PROTOCOLDEVICE_TYPE enDeviceType; }AUTHREG_PROTOCOL_TIME, * LPAUTHREG_PROTOCOL_TIME; //用户表 @@ -161,7 +162,7 @@ typedef struct tag_AuthReg_UserTable XENGINE_PROTOCOL_USERINFO st_UserInfo; XCHAR tszLeftTime[64]; //剩余日期 XCHAR tszHardCode[32]; //硬件码 - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType; //充值卡类型 + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType; //充值卡类型 ENUM_PROTOCOLDEVICE_TYPE enDeviceType; //设备类型 }AUTHREG_USERTABLE, * LPAUTHREG_USERTABLE; //注册序列号表 @@ -170,7 +171,7 @@ typedef struct tag_AuthReg_SerialTable XCHAR tszUserName[XENGINE_AUTHREG_SERVICE_SQL_MAX_USERNAME]; //使用者是谁 XCHAR tszSerialNumber[128]; //序列号 XCHAR tszMaxTime[64]; //使用时间 - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType; //充值卡类型 + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType; //充值卡类型 int bIsUsed; //是否已经使用 XCHAR tszCreateTime[64]; //创建时间 }AUTHREG_SERIALTABLE, * LPAUTHREG_SERIALTABLE; @@ -182,7 +183,7 @@ typedef struct __int64x nID; //ID int nVTime; //试用时间 int nLTime; //剩余时间 - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enVMode; //验证方式 + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enVMode; //验证方式 }AUTHREG_TEMPVER; //禁止列表 typedef struct diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp new file mode 100644 index 0000000..e1e44fb --- /dev/null +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp @@ -0,0 +1,206 @@ +// Dialog_CDKey.cpp: 实现文件 +// + +#include "pch.h" +#include "../XEngine_AuthorizeApp.h" +#include "afxdialogex.h" +#include "Dialog_CDKey.h" + + +// CDialog_CDKey 对话框 + +IMPLEMENT_DYNAMIC(CDialog_CDKey, CDialogEx) + +CDialog_CDKey::CDialog_CDKey(CWnd* pParent /*=nullptr*/) + : CDialogEx(IDD_DIALOG_CDKEY, pParent) +{ + +} + +CDialog_CDKey::~CDialog_CDKey() +{ +} + +void CDialog_CDKey::DoDataExchange(CDataExchange* pDX) +{ + CDialogEx::DoDataExchange(pDX); + DDX_Control(pDX, IDC_IPADDRESS1, m_EditIPAddr); + DDX_Control(pDX, IDC_EDIT1, m_EditPort); + DDX_Control(pDX, IDC_DATETIMEPICKER1, m_DateTimeCreate); + DDX_Control(pDX, IDC_DATETIMEPICKER2, m_DateTimeRegister); + DDX_Control(pDX, IDC_DATETIMEPICKER3, m_DateTimeStart); + DDX_Control(pDX, IDC_EDIT2, m_EditSoftName); + DDX_Control(pDX, IDC_EDIT3, m_EditSoftVer); + DDX_Control(pDX, IDC_EDIT4, m_EditSoftTime); + DDX_Control(pDX, IDC_CHECK1, m_EditSoftInit); + DDX_Control(pDX, IDC_EDIT15, m_EditRegHardCode); + DDX_Control(pDX, IDC_EDIT18, m_EditRegLeftTime); + DDX_Control(pDX, IDC_EDIT19, m_EditRegHaveTime); + DDX_Control(pDX, IDC_COMBO3, m_ComboRegSerial); + DDX_Control(pDX, IDC_COMBO4, m_ComboRegType); + DDX_Control(pDX, IDC_COMBO5, m_ComboRegHard); + DDX_Control(pDX, IDC_COMBO6, m_ComboRegVer); + DDX_Control(pDX, IDC_EDIT17, m_EditSerialTimeNumber); + DDX_Control(pDX, IDC_EDIT16, m_EditSerialTimeCount); + DDX_Control(pDX, IDC_EDIT20, m_EditSerialTimeUse); + DDX_Control(pDX, IDC_EDIT22, m_EditSerialDataNumber); + DDX_Control(pDX, IDC_DATETIMEPICKER4, m_DataTimeSerial); + DDX_Control(pDX, IDC_EDIT21, m_EditSerialUnlimitNumber); + DDX_Control(pDX, IDC_EDIT23, m_EditUserInfo); + DDX_Control(pDX, IDC_EDIT24, m_EditUserContact); + DDX_Control(pDX, IDC_EDIT25, m_EditUserCustom); +} + + +BEGIN_MESSAGE_MAP(CDialog_CDKey, CDialogEx) + ON_BN_CLICKED(IDC_BUTTON1, &CDialog_CDKey::OnBnClickedButton1) + ON_BN_CLICKED(IDC_BUTTON9, &CDialog_CDKey::OnBnClickedButton9) +END_MESSAGE_MAP() + + +// CDialog_CDKey 消息处理程序 + + +BOOL CDialog_CDKey::OnInitDialog() +{ + CDialogEx::OnInitDialog(); + + // TODO: 在此添加额外的初始化 + m_EditIPAddr.SetWindowText(_T("127.0.0.1")); + m_EditPort.SetWindowText(_T("5300")); + + m_EditSoftName.SetWindowText(_T("XEngine_Authorze")); + m_EditSoftVer.SetWindowText(_T("V1.0.0.1001")); + m_EditSoftTime.SetWindowText(_T("0")); + + m_DateTimeCreate.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); + m_DateTimeRegister.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); + m_DateTimeStart.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); + m_DataTimeSerial.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); + + for (int i = 0; i < 5; i++) + { + m_ComboRegSerial.InsertString(i, lpszXSerialType[i]); + } + for (int i = 0; i < 6; i++) + { + m_ComboRegType.InsertString(i, lpszXRegType[i]); + } + for (int i = 0; i < 6; i++) + { + m_ComboRegHard.InsertString(i, lpszXHDType[i]); + } + for (int i = 0; i < 4; i++) + { + m_ComboRegVer.InsertString(i, lpszXVerType[i]); + } + m_ComboRegSerial.SetCurSel(0); + m_ComboRegType.SetCurSel(0); + m_ComboRegHard.SetCurSel(0); + m_ComboRegVer.SetCurSel(0); + + int nSerialCount = 3; + XCHAR** pptszSerialList; + Authorize_Serial_Create(&pptszSerialList, _T("XAUTH"), nSerialCount, 9); + m_EditSerialTimeNumber.SetWindowText(pptszSerialList[0]); + m_EditSerialDataNumber.SetWindowText(pptszSerialList[1]); + m_EditSerialUnlimitNumber.SetWindowText(pptszSerialList[2]); + BaseLib_OperatorMemory_Free((XPPPMEM)&pptszSerialList, nSerialCount); + m_EditSerialTimeCount.SetWindowText(_T("10")); + m_EditSerialTimeUse.SetWindowText(_T("0")); + + m_EditUserInfo.SetWindowText(_T("XEngine")); + m_EditUserContact.SetWindowText(_T("www.xyry.org")); + return TRUE; // return TRUE unless you set the focus to a control + // 异常: OCX 属性页应返回 FALSE +} + +bool CDialog_CDKey::Dialog_CDKey_Read(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKey) +{ + //网络信息 + CString m_StrIPPort; + m_EditIPAddr.GetWindowText(pSt_AuthorizeCDKey->tszAddr, sizeof(pSt_AuthorizeCDKey->tszAddr)); + m_EditPort.GetWindowText(m_StrIPPort); + pSt_AuthorizeCDKey->nPort = _ttoi(m_StrIPPort.GetString()); + //程序信息 + CString m_StrSoftTime; + m_EditSoftName.GetWindowText(pSt_AuthorizeCDKey->st_AuthAppInfo.tszAppName, sizeof(pSt_AuthorizeCDKey->st_AuthAppInfo.tszAppName)); + m_EditSoftVer.GetWindowText(pSt_AuthorizeCDKey->st_AuthAppInfo.tszAppVer, sizeof(pSt_AuthorizeCDKey->st_AuthAppInfo.tszAppVer)); + m_EditSoftTime.GetWindowText(m_StrSoftTime); + if (BST_CHECKED == m_EditSoftInit.GetCheck()) + { + pSt_AuthorizeCDKey->st_AuthAppInfo.bInit = true; + } + //注册信息 + CString m_StrRegHaveTime; + m_EditRegHardCode.GetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszHardware, sizeof(pSt_AuthorizeCDKey->st_AuthRegInfo.tszHardware)); + m_EditRegLeftTime.GetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszLeftTime, sizeof(pSt_AuthorizeCDKey->st_AuthRegInfo.tszLeftTime)); + m_EditRegHaveTime.GetWindowText(m_StrRegHaveTime); + pSt_AuthorizeCDKey->st_AuthRegInfo.nHasTime = _ttoi64(m_StrRegHaveTime.GetBuffer()); + m_DateTimeCreate.GetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszCreateTime, sizeof(pSt_AuthorizeCDKey->st_AuthRegInfo.tszCreateTime)); + m_DateTimeRegister.GetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszRegisterTime, sizeof(pSt_AuthorizeCDKey->st_AuthRegInfo.tszRegisterTime)); + m_DateTimeStart.GetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszStartTime, sizeof(pSt_AuthorizeCDKey->st_AuthRegInfo.tszStartTime)); + pSt_AuthorizeCDKey->st_AuthRegInfo.enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)m_ComboRegSerial.GetCurSel(); + pSt_AuthorizeCDKey->st_AuthRegInfo.enRegType = (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE)m_ComboRegType.GetCurSel(); + pSt_AuthorizeCDKey->st_AuthRegInfo.enHWType = (ENUM_AUTHORIZE_MODULE_HW_TYPE)m_ComboRegHard.GetCurSel(); + pSt_AuthorizeCDKey->st_AuthRegInfo.enVModeType = (ENUM_AUTHORIZE_MODULE_VERMODE_TYPE)m_ComboRegVer.GetCurSel(); + //序列信息 + CString m_StrSerialCount; + CString m_StrSerialUsed; + m_EditSerialTimeCount.GetWindowText(m_StrSerialCount); + m_EditSerialTimeUse.GetWindowText(m_StrSerialUsed); + m_EditSerialTimeNumber.GetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.tszTimeSerial, sizeof(pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.tszTimeSerial)); + pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.nTimeCount = _ttoi(m_StrSerialCount.GetBuffer()); + pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.nTimeNow = _ttoi(m_StrSerialUsed.GetBuffer()); + + m_EditSerialDataNumber.GetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataSerial, sizeof(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataSerial)); + m_DataTimeSerial.GetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataTime, sizeof(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataTime)); + + m_EditSerialUnlimitNumber.GetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_UNLimit.tszUNLimitSerial, sizeof(pSt_AuthorizeCDKey->st_AuthSerial.st_UNLimit.tszUNLimitSerial)); + //用户信息 + m_EditUserInfo.GetWindowText(pSt_AuthorizeCDKey->st_AuthUserInfo.tszUserName, sizeof(pSt_AuthorizeCDKey->st_AuthUserInfo.tszUserName)); + m_EditUserContact.GetWindowText(pSt_AuthorizeCDKey->st_AuthUserInfo.tszUserContact, sizeof(pSt_AuthorizeCDKey->st_AuthUserInfo.tszUserContact)); + m_EditUserCustom.GetWindowText(pSt_AuthorizeCDKey->st_AuthUserInfo.tszCustom, sizeof(pSt_AuthorizeCDKey->st_AuthUserInfo.tszCustom)); + return true; +} +bool CDialog_CDKey::Dialog_CDKey_Write(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKey) +{ + CString m_StrFormat; + //网络信息 + return true; +} +void CDialog_CDKey::OnBnClickedButton1() +{ + // TODO: 在此添加控件通知处理程序代码 + if (0 == m_ComboRegHard.GetCurSel() || 0 == m_ComboRegSerial.GetCurSel() || 0 == m_ComboRegType.GetCurSel() || 0 == m_ComboRegVer.GetCurSel()) + { + AfxMessageBox(_T("创建失败,注册验证类型没选择")); + return; + } + + XENGINE_AUTHORIZE_LOCAL st_AuthorizeCDKey = {}; + Dialog_CDKey_Read(&st_AuthorizeCDKey); + + CFileDialog m_FileDlg(false, _T(".key"),_T("CDKey"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("CDKey文件(*.key)|*.key|")); + if (IDOK == m_FileDlg.DoModal()) + { + Authorize_CDKey_WriteKey(m_FileDlg.GetPathName(), &st_AuthorizeCDKey); + } +} + +void CDialog_CDKey::OnBnClickedButton9() +{ + // TODO: 在此添加控件通知处理程序代码 + XENGINE_AUTHORIZE_LOCAL st_AuthorizeCDKey = {}; + + CFileDialog m_FileDlg(true, _T(".key"), _T("CDKey"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("CDKey文件(*.key)|*.key|")); + if (IDOK == m_FileDlg.DoModal()) + { + if (!Authorize_CDKey_ReadKey(m_FileDlg.GetPathName(), &st_AuthorizeCDKey)) + { + AfxMessageBox(_T("CDKEY读取失败")); + return; + } + + } +} diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h new file mode 100644 index 0000000..62f4fee --- /dev/null +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h @@ -0,0 +1,56 @@ +#pragma once +#include "afxdialogex.h" + + +// CDialog_CDKey 对话框 + +class CDialog_CDKey : public CDialogEx +{ + DECLARE_DYNAMIC(CDialog_CDKey) + +public: + CDialog_CDKey(CWnd* pParent = nullptr); // 标准构造函数 + virtual ~CDialog_CDKey(); + +// 对话框数据 +#ifdef AFX_DESIGN_TIME + enum { IDD = IDD_DIALOG_CDKEY }; +#endif + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 + + DECLARE_MESSAGE_MAP() +public: + bool Dialog_CDKey_Read(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKey); + bool Dialog_CDKey_Write(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKey); +public: + virtual BOOL OnInitDialog(); + afx_msg void OnBnClickedButton1(); + CIPAddressCtrl m_EditIPAddr; + CEdit m_EditPort; + CDateTimeCtrl m_DateTimeCreate; + CDateTimeCtrl m_DateTimeRegister; + CDateTimeCtrl m_DateTimeStart; + CEdit m_EditSoftName; + CEdit m_EditSoftVer; + CEdit m_EditSoftTime; + CButton m_EditSoftInit; + CEdit m_EditRegHardCode; + CEdit m_EditRegLeftTime; + CEdit m_EditRegHaveTime; + CComboBox m_ComboRegSerial; + CComboBox m_ComboRegType; + CComboBox m_ComboRegHard; + CComboBox m_ComboRegVer; + CEdit m_EditSerialTimeNumber; + CEdit m_EditSerialTimeCount; + CEdit m_EditSerialTimeUse; + CEdit m_EditSerialDataNumber; + CDateTimeCtrl m_DataTimeSerial; + CEdit m_EditSerialUnlimitNumber; + CEdit m_EditUserInfo; + CEdit m_EditUserContact; + CEdit m_EditUserCustom; + afx_msg void OnBnClickedButton9(); +}; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.cpp index d424c11..1bccb00 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Modify.cpp @@ -190,7 +190,7 @@ void CDialog_Modify::OnBnClickedButton2() st_UserTable.st_UserInfo.nIDNumber = _ttxoll(m_StrNumber.GetBuffer()); m_EditLeftTime.GetWindowText(st_UserTable.tszLeftTime, sizeof(st_UserTable.tszLeftTime)); - st_UserTable.enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)m_ComboSerial.GetCurSel(); + st_UserTable.enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)m_ComboSerial.GetCurSel(); st_UserTable.st_UserInfo.nUserLevel = m_ComboLeave.GetCurSel() - 1; Json::Value st_JsonRoot; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Try.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Try.cpp index 0424735..8c5fe2e 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Try.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Try.cpp @@ -324,7 +324,7 @@ void CDialog_Try::OnBnClickedButton3() m_EditDate.GetWindowText(m_StrDate); st_JsonObject["nID"] = _ttoi64(m_StrID.GetBuffer()); - st_JsonObject["enVMode"] = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)m_ComboType.GetCurSel(); + st_JsonObject["enVMode"] = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)m_ComboType.GetCurSel(); st_JsonObject["nVTime"] = _ttoi(m_StrTime.GetBuffer()); st_JsonObject["nLTime"] = _ttoi(m_StrLeft.GetBuffer()); st_JsonObject["tszVSerial"] = m_StrSerail.GetBuffer(); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index 7eecc9bc9e28d86d54d0644ae0bcda1596523921..93068fbc650e5b6859ac9f826e662fdd62b68fa8 100644 GIT binary patch delta 3581 zcmaJ@3s9WZ6+UNqEWxlOAv~5WgqT!QC1%-O7HA0Nu^ZTiu$yHgCbm!!q~U3GY@2b^D%Iw~|&GGb!A0s`yzKotEdQ73b)?74_w>gI2 ze$cuzDTZ+NWgk;$q;(S}gce$}>atXa29x* zEc|;NH8Pyd#*Pln@wJW(3T$UMUxP<9*uijE*wv0g#hdl!g@xVTS(H+~D-iJ3$Xdh7 z?(MWKGlVPnS!d1~S6RRv@a%B=JQdsBelCTys9ihVX}M{gYa(Il`cP*^mB&@l;PI8Y zTz+?LElVaj$}$aBMT5W0WE@fN#- zW-bzq+Ds1lw}j&k5Ukd=wJYmeG92%?P3u=w6q&ssI*Ps(vW##;JG!!}m4?#BQ$Vew zQ2}NCqW>LGU03QGIN9Yc#l+CWufGl=JdkO;8@QkZ`XI(G4f~dnIMh45>&qf z-~k_4>q_e~i3d>biTI*#GpvGdLozJH0Mx?c@Tl}IgC_ca1e)pnQLuwer36ZR5wgK| zloFYv5?y^_qE<=b4QPJ7u-|u@lH5h&XT$^VVtUX8%h5)!mnkRfSmXb)UUO$_1n?Q* zPWTujTDy+is99QT0en5G1ole`Tzgz8<6gHGm&+(3B_&`I>)*pn2i(f5dL*|+;ng-o z^IjyLlj{9UoFB&Yys4Y0EsfQO*0nv{tWY%~0H<7ucDPgQCt5MxX1)q^(v~K|byfM? zcmCXy<^SXEv|6TF_i1FM1C`W)?Q$1I&N;N?o1jjowSC`>nzZ2OYRm7_)$E|%B&~2o z;24_iZ8{=1{6_Qqadoe%wX|IE7JOb3uS&72li&r&jp{E872_XbY6APhNw^^XMCxwK zA$1ODfnAU+21hZU&WFMG47AbrM`RE`X+OM^^L|4n437v6EBfA0$nbCR<|x`F-GqAj z=D=xxgkJ8|%4WI~Wp4OSg#IIHS9JFGkF0Hp(D!ZA=&br>wOzAPb^hg>s8fy0qNv;M zi>8`U>GYh^>0VvVBlYS2C%d1nQxrFZk6sL}^Vy*rN}&)I#rdrXP?> ztp>6NUlI)H&cRgk+7>12qB6>p8Atyp2auVaii`<`|Bxg)AbHNMif z3)HubvTx$rJD4HMb-)zOp$R@$CTm7lERV;=#|j$NU{$d{6d-L~Lf#nOcRDaDsCFOH%h_;EYbhr~6Ob@2PpXx${B22%skXPQBK@R4=#MMhIU?N_FVF zACu(O9~&#K3}L3T5&z#AtPyu|hpwoSY+fhmLgE@6-1*^h7qUJ)xl!gSmq$|f*NSSHal7(an{;%Q;+p%$R zQLaym1-8B?MD{0SGx|gc+wp!;&-Tz;qKEB@A#sZBKZe8^wpGL8B3s{kVu7vo4^tW~3EPnoQP1|=sOVv9`B0o<``nl~GlQ9T@Qhwatf2Nz&WMZT8{bEt z3ona>87zX8BD&d86z>!soKgG;VA&7x?VM6;2d57EmJ qdXbTT6=puQBy%LZet60Cc?$NG7CB=M#o8$}=Wv?hIj!bf$Kk(Xl7vnG delta 1287 zcmZXST}YE*6vv4d) zX9Cc^x1!_b>2ff4rd8~L&ekIvK`@$dvN8!uQG3(~QJq_l`T)mN31~Uit8+|+AJ}YC}9!4wCvXkM60Q^XsAvD4IZjaz=rCpm{F65&YDd) zQnL*+Yd2tHZ4r*unlQI+rPL#?5{dS@VjQST#D&&G++oc`r`3pq)-)AJX_RdR7TcEK zSz9zFsT1^!F;jlt;nLiE)4pt$Zpg@F!~u)IQCk8U?QvL6brMw7ETPZZM{K9)ALZ0t)!gDagy#(z<@XimH++7ckaEx-{rD zNnQjnRuJ?Yl2^j*Um$wR+yej^HM(A(NiCU%T2YIC)_zD*U zKH~+QXVMEBK=`BLJHEpJn7Q5uE7e95W3MXlbLDbw_JLB!Y3KbuSjL-tuvn;{6?a4t z*C8eu!ju~=x8qYj()bg1#e*xTNYJO#iN_CoAL#`3Jvh_5G?{)mdSy~6#i67tim?}c zSoAPH#YOFx`ejrdhCU^$>@^O(iBG9gF_!;MMgz-+PJNCv^#c}7#;3ZH=}k_;>{cVf zrn+>DHC_YmzYhA;W_r!STQa;b46dRBcs;1CFIc258M;; zz`sKTLi0%)*4_(z-2>1!+^0+IdL+Y+uwga@V^^NY`MI$CE9I-6$$4{FK1?^3)i38Q z^YcPxpxqc>$$)b{zz&KJIVk7n!}1*302>0{Fbw)g9f`6L5!PX!J62Obx_uP*?fkg1LCkaD2~ulV3*$(S)q%J7!Zaihyr~P(CMESztP4Pe>p?f zhEqO=g9abU^V6iII)^7coqhk(^NE2TgG2mpVNl0hh)Rc&v~hHYQxqk!UmW01nd?;e zg9<5rE{Iv7q9?^kaaz>)eHM6*W~gy260!se>atuxX4i#HQ{lZ`>#zS-k!6!Ui;t+% z1_v9)!JWFuNr(bkXego61Id&YFW;G@YpE!e9@2W$Aw%S7$%@n36DjSL^P8jK={K2v zMp&E$4M?V51byQh3r)7Ru;me*OYRSXxh)Udl3z|1tw_+J)0t@ol_rutQy$v_q(EGg z{i+D0v4zF`R=m^Ir{3H3a=pgTz#|DiCW7D=FzW;A4r_)8z}&bb`)e}g{qxulXZp+E z9SK)x;^7yVlhHf~SdP}yA-Yvc(Usw$osI;%d>tjS_tgC6Xn66q5<1llDJ%iLBSCaw z%ZcP=QkO3T-mLv~QHj*6vsbpjB01S250Rhv#=8pz*YlH+^6d%*Mv^_?ghA?bHC&7! zi7gcX3~vS!NUq->-9xWcU!rf*;fU%9Wr5GTh2R;wF)~OWni~5QnYl62t5Y2YQT1tH zY2btwf`<1+YkS8(D^uMZ@ImlwTME-n5i=$Dekp#MdbS&^*-}fgXn1CL!IK z8|=lTK+-*pQwG1Gy|&XD6r&$sO*4udC+G~2gO=YcHLdHPP-@>0^T+==4n)8D zJ16zJ7vlhEVgW`~RQYxWbdOc!HV zS^%g;agX&pi_bKH++dH=w*^#p5);sQT8gb}z0Y@NIkmd{>VzXnxaO=}sA8CIFL~}I zMl<1*_xIX^)BiKO!;!4uxLRW`Le>@hWwLb7x z)=@jM9XQ^7_U||3$kC1^Q*s#>8|O{U#jugU0@x;-=I*<>bm_U`XuURb0<-MR%juy{ zQ!?UJzO7OfG!~8d-NC>^YL^ewm(c{91QR#8NwqEbs?qi6qZkNWjNWm(umWsX=Lq(` zinOl}JrksP|H|r{3)vtA-WuF4e>JJ`&b!+fK-b?t&QF8J-j2|dXT7UemM6Bi{kVQ~ Pu0pqV^sQzt?CbguJ&~y7 delta 28 mcmV+%0OS9}@B-?v0vcrvOWgV^9;-Y diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj index 5676021..fc9971a 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj @@ -193,6 +193,7 @@ + @@ -210,6 +211,7 @@ + diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj.filters b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj.filters index faf6e76..beb3703 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj.filters +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj.filters @@ -72,6 +72,9 @@ 头文件\Authorize_Dialog + + 头文件\Authorize_Dialog + @@ -110,6 +113,9 @@ 源文件\Authorize_Dialog + + 源文件\Authorize_Dialog + diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp index 8716d2a..cda8ac4 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.cpp @@ -74,6 +74,7 @@ BOOL CXEngineAuthorizeAppDlg::OnInitDialog() m_TabWindows.InsertItem(4, _T("公告管理")); m_TabWindows.InsertItem(5, _T("序列号管理")); m_TabWindows.InsertItem(6, _T("黑名单配置")); + m_TabWindows.InsertItem(7, _T("CDKey配置")); m_DlgConfig.Create(IDD_DIALOG_CONFIG, &m_TabWindows); m_DlgSwitch.Create(IDD_DIALOG_SWITCH, &m_TabWindows); @@ -82,6 +83,7 @@ BOOL CXEngineAuthorizeAppDlg::OnInitDialog() m_DlgAnnouncement.Create(IDD_DIALOG_ANNOUNCEMENT, &m_TabWindows); m_DlgSerial.Create(IDD_DIALOG_SERIAL, &m_TabWindows); m_DlgBanned.Create(IDD_DIALOG_BANNED, &m_TabWindows); + m_DlgCDKey.Create(IDD_DIALOG_CDKEY, &m_TabWindows); //调整子对话框在父窗口中的位置 CRect st_Rect; m_TabWindows.GetClientRect(&st_Rect); @@ -97,6 +99,7 @@ BOOL CXEngineAuthorizeAppDlg::OnInitDialog() m_DlgAnnouncement.MoveWindow(&st_Rect); m_DlgSerial.MoveWindow(&st_Rect); m_DlgBanned.MoveWindow(&st_Rect); + m_DlgCDKey.MoveWindow(&st_Rect); //分别设置隐藏和显示 m_DlgConfig.ShowWindow(true); m_DlgSwitch.ShowWindow(false); @@ -105,6 +108,7 @@ BOOL CXEngineAuthorizeAppDlg::OnInitDialog() m_DlgAnnouncement.ShowWindow(false); m_DlgSerial.ShowWindow(false); m_DlgBanned.ShowWindow(false); + m_DlgCDKey.ShowWindow(false); m_TabWindows.SetCurSel(0); hMainWnd = m_hWnd; @@ -165,6 +169,7 @@ void CXEngineAuthorizeAppDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult m_DlgAnnouncement.ShowWindow(false); m_DlgSerial.ShowWindow(false); m_DlgBanned.ShowWindow(false); + m_DlgCDKey.ShowWindow(false); break; case 1: m_DlgConfig.ShowWindow(false); @@ -174,6 +179,7 @@ void CXEngineAuthorizeAppDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult m_DlgAnnouncement.ShowWindow(false); m_DlgSerial.ShowWindow(false); m_DlgBanned.ShowWindow(false); + m_DlgCDKey.ShowWindow(false); break; case 2: m_DlgConfig.ShowWindow(false); @@ -183,6 +189,7 @@ void CXEngineAuthorizeAppDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult m_DlgAnnouncement.ShowWindow(false); m_DlgSerial.ShowWindow(false); m_DlgBanned.ShowWindow(false); + m_DlgCDKey.ShowWindow(false); break; case 3: m_DlgConfig.ShowWindow(false); @@ -192,6 +199,7 @@ void CXEngineAuthorizeAppDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult m_DlgAnnouncement.ShowWindow(false); m_DlgSerial.ShowWindow(false); m_DlgBanned.ShowWindow(false); + m_DlgCDKey.ShowWindow(false); break; case 4: m_DlgConfig.ShowWindow(false); @@ -201,6 +209,7 @@ void CXEngineAuthorizeAppDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult m_DlgAnnouncement.ShowWindow(true); m_DlgSerial.ShowWindow(false); m_DlgBanned.ShowWindow(false); + m_DlgCDKey.ShowWindow(false); break; case 5: m_DlgConfig.ShowWindow(false); @@ -210,6 +219,7 @@ void CXEngineAuthorizeAppDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult m_DlgAnnouncement.ShowWindow(false); m_DlgSerial.ShowWindow(true); m_DlgBanned.ShowWindow(false); + m_DlgCDKey.ShowWindow(false); break; case 6: m_DlgConfig.ShowWindow(false); @@ -219,6 +229,17 @@ void CXEngineAuthorizeAppDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult m_DlgAnnouncement.ShowWindow(false); m_DlgSerial.ShowWindow(false); m_DlgBanned.ShowWindow(true); + m_DlgCDKey.ShowWindow(false); + break; + case 7: + m_DlgConfig.ShowWindow(false); + m_DlgSwitch.ShowWindow(false); + m_DlgUser.ShowWindow(false); + m_DlgTry.ShowWindow(false); + m_DlgAnnouncement.ShowWindow(false); + m_DlgSerial.ShowWindow(false); + m_DlgBanned.ShowWindow(false); + m_DlgCDKey.ShowWindow(true); break; default: break; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h index 3f7f5b5..057a080 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeAppDlg.h @@ -37,6 +37,7 @@ public: CDialog_Serial m_DlgSerial; CDialog_Banned m_DlgBanned; CDialog_Try m_DlgTry; + CDialog_CDKey m_DlgCDKey; CDialog_Announcement m_DlgAnnouncement; public: CTabCtrl m_TabWindows; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h index 15a03d6..b964656 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h @@ -28,6 +28,8 @@ using namespace std; #include "../../AuthorizeModule_Configure/Config_Error.h" #include "../../AuthorizeModule_Help/AuthHelp_Define.h" #include "../../AuthorizeModule_Help/AuthHelp_Error.h" +#include "../../AuthorizeModule_CDKey/CDKey_Define.h" +#include "../../AuthorizeModule_CDKey/CDKey_Error.h" #include "Authorize_Dialog/Dialog_Config.h" #include "Authorize_Dialog/Dialog_User.h" #include "Authorize_Dialog/Dialog_Serial.h" @@ -36,6 +38,7 @@ using namespace std; #include "Authorize_Dialog/Dialog_Banned.h" #include "Authorize_Dialog/Dialog_Announcement.h" #include "Authorize_Dialog/Dialog_Try.h" +#include "Authorize_Dialog/Dialog_CDKey.h" #include "Authorize_Help/Authorize_Help.h" extern HWND hMainWnd; @@ -48,17 +51,21 @@ extern LPCXSTR lpszStuType[2]; #ifdef _WIN64 #pragma comment(lib,"../../x64/Debug/jsoncpp") #pragma comment(lib,"../../x64/Debug/AuthorizeModule_Help") +#pragma comment(lib,"../../x64/Debug/AuthorizeModule_CDKey") #else #pragma comment(lib,"../../Debug/jsoncpp") #pragma comment(lib,"../../Debug/AuthorizeModule_Help") +#pragma comment(lib,"../../Debug/AuthorizeModule_CDKey") #endif #else #ifdef _WIN64 #pragma comment(lib,"../../x64/Release/jsoncpp") #pragma comment(lib,"../../x64/Release/AuthorizeModule_Help") +#pragma comment(lib,"../../x64/Release/AuthorizeModule_CDKey") #else #pragma comment(lib,"../../Release/jsoncpp") #pragma comment(lib,"../../Release/AuthorizeModule_Help") +#pragma comment(lib,"../../Release/AuthorizeModule_CDKey") #endif #endif diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h index d55fb92..a675b4a 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h @@ -12,6 +12,7 @@ #define IDD_DIALOG_BANNED 140 #define IDD_DIALOG_ANNOUNCEMENT 142 #define IDD_DIALOG_TRY 144 +#define IDD_DIALOG_CDKEY 146 #define IDC_TAB1 1000 #define IDC_EDIT1 1001 #define IDC_EDIT2 1002 @@ -22,43 +23,65 @@ #define IDC_EDIT5 1005 #define IDC_LIST2 1005 #define IDC_BUTTON2 1006 +#define IDC_EDIT15 1006 #define IDC_BUTTON3 1007 #define IDC_EDIT10 1007 +#define IDC_EDIT16 1007 #define IDC_BUTTON4 1008 #define IDC_EDIT9 1008 +#define IDC_EDIT17 1008 #define IDC_COMBO1 1009 #define IDC_BUTTON5 1009 +#define IDC_EDIT18 1009 #define IDC_COMBO2 1010 #define IDC_EDIT12 1010 +#define IDC_EDIT19 1010 #define IDC_BUTTON6 1011 #define IDC_EDIT11 1011 #define IDC_EDIT13 1011 +#define IDC_EDIT20 1011 #define IDC_EDIT6 1012 #define IDC_BUTTON7 1012 #define IDC_EDIT14 1012 +#define IDC_EDIT21 1012 #define IDC_EDIT7 1013 #define IDC_CHECK1 1013 #define IDC_BUTTON8 1013 #define IDC_EDIT8 1014 #define IDC_CHECK2 1014 +#define IDC_EDIT22 1014 #define IDC_RADIO1 1015 +#define IDC_EDIT23 1015 #define IDC_RADIO2 1016 +#define IDC_EDIT24 1016 #define IDC_RADIO3 1017 #define IDC_STATIC_TIPS 1017 +#define IDC_EDIT25 1017 #define IDC_RADIO4 1018 #define IDC_STATIC_TIPS2 1018 +#define IDC_BUTTON9 1018 #define IDC_RADIO5 1019 #define IDC_DATETIMEPICKER1 1019 #define IDC_RADIO6 1020 +#define IDC_DATETIMEPICKER2 1020 #define IDC_RADIO7 1021 +#define IDC_DATETIMEPICKER3 1021 #define IDC_RADIO8 1022 +#define IDC_IPADDRESS1 1022 #define IDC_RADIO9 1023 +#define IDC_COMBO3 1023 #define IDC_RADIO10 1024 +#define IDC_COMBO4 1024 #define IDC_RADIO11 1025 +#define IDC_COMBO5 1025 #define IDC_RADIO12 1026 +#define IDC_COMBO6 1026 #define IDC_RADIO13 1027 +#define IDC_DATETIMEPICKER4 1027 #define IDC_RADIO14 1028 +#define IDC_BUTTON10 1028 #define IDC_RADIO15 1029 +#define IDC_DATETIMEPICKER5 1029 #define IDC_RADIO16 1030 #define IDC_RADIO17 1031 #define IDC_RADIO18 1032 @@ -71,9 +94,9 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 146 +#define _APS_NEXT_RESOURCE_VALUE 148 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1022 +#define _APS_NEXT_CONTROL_VALUE 1024 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp index fd4fcad..49eea32 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Serial.cpp @@ -53,7 +53,7 @@ bool XEngine_AuthorizeHTTP_Serial(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L int nSerialCount = 0; XCHAR tszHasTime[128]; XENGINE_LIBTIMER st_AuthTimer; - ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType; + ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType; memset(&st_AuthTimer, '\0', sizeof(st_AuthTimer)); memset(tszHasTime, '\0', sizeof(tszHasTime)); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp index d03f959..0a81701 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp @@ -87,7 +87,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW == st_UserTable.enSerialType) { _xstprintf(st_UserTable.tszLeftTime, _X("%d"), st_AuthConfig.st_XVerification.nTryTime); - st_UserTable.enSerialType = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_AuthConfig.st_XVerification.nTryMode; + st_UserTable.enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)st_AuthConfig.st_XVerification.nTryMode; } //禁止权限0和1注册 if (st_UserTable.st_UserInfo.nUserLevel <= 1) @@ -314,7 +314,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC { //填充写入数据 st_VERTemp.nVTime = st_AuthConfig.st_XVerification.nVerTime; - st_VERTemp.enVMode = (ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE)st_AuthConfig.st_XVerification.nVerMode; + st_VERTemp.enVMode = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)st_AuthConfig.st_XVerification.nVerMode; //看下是否启用了此功能,不支持分钟,因为不登录 if ((ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_UNKNOW == st_VERTemp.enVMode) || (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == st_VERTemp.enVMode) || (st_VERTemp.nVTime <= 0)) { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp index d2caceb..92bfa60 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.cpp @@ -1,6 +1,6 @@ #include "Authorize_Hdr.h" -void CALLBACK XEngine_TaskEvent_Client(LPCXSTR lpszUserAddr, LPCXSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCXSTR lpszLeftDate, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, int nNetType, XPVOID lParam) +void CALLBACK XEngine_TaskEvent_Client(LPCXSTR lpszUserAddr, LPCXSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCXSTR lpszLeftDate, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, int nNetType, XPVOID lParam) { if (nLeftTimer <= 0) { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.h index 7738278..3217c24 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Task.h @@ -1,4 +1,4 @@ #pragma once -void CALLBACK XEngine_TaskEvent_Client(LPCXSTR lpszUserAddr, LPCXSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCXSTR lpszLeftDate, ENUM_HELPCOMPONENTS_AUTHORIZE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, int nNetType, XPVOID lParam); +void CALLBACK XEngine_TaskEvent_Client(LPCXSTR lpszUserAddr, LPCXSTR lpszUserName, __int64x nOnlineTimer, __int64x nLeftTimer, LPCXSTR lpszLeftDate, ENUM_AUTHORIZE_MODULE_SERIAL_TYPE enSerialType, ENUM_PROTOCOLDEVICE_TYPE enDeviceType, int nNetType, XPVOID lParam); void CALLBACK XEngine_TaskEvent_Token(XNETHANDLE xhToken, XPVOID lParam); \ No newline at end of file -- Gitee From 3ef131cb8323a2ef2dcd5b908c80e8c11b69d430 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 11 Jul 2024 11:31:43 +0800 Subject: [PATCH 24/46] fixed:read AppInfo is incorrect for authorize module --- .../Authorize_CDKey/Authorize_CDKey.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp index 1cf5eef..e7a79ee 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp @@ -275,8 +275,8 @@ bool CAuthorize_CDKey::Authorize_CDKey_ReadKey(LPCXSTR lpszFileKey, XENGINE_AUTH Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_APPINFO; return false; } - pSt_AuthLocal->st_AuthAppInfo.nExecTime = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("nExecTime")); - pSt_AuthLocal->st_AuthAppInfo.bInit = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("bInit")); + pSt_AuthLocal->st_AuthAppInfo.nExecTime = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AppInfo"), _X("nExecTime")); + pSt_AuthLocal->st_AuthAppInfo.bInit = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AppInfo"), _X("bInit")); //添加注册信息 pSt_AuthLocal->st_AuthRegInfo.enHWType = (ENUM_AUTHORIZE_MODULE_HW_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enHWType")); pSt_AuthLocal->st_AuthRegInfo.enRegType = (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE)BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthReg"), _X("enRegType")); @@ -661,8 +661,8 @@ bool CAuthorize_CDKey::Authorize_CDKey_ReadMemory(LPCXSTR lpszMsgBuffer, int nMs Authorize_dwErrorCode = BaseLib_GetLastError(); return false; } - BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("bInit"), (int*)&pSt_AuthLocal->st_AuthAppInfo.bInit); - BaseLib_OperatorFile_ReadInt64FromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("nExecTime"), &pSt_AuthLocal->st_AuthAppInfo.nExecTime); + BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AppInfo"), _X("bInit"), (int*)&pSt_AuthLocal->st_AuthAppInfo.bInit); + BaseLib_OperatorFile_ReadInt64FromMemory(lpszMsgBuffer, nMsgLen, _X("AppInfo"), _X("nExecTime"), &pSt_AuthLocal->st_AuthAppInfo.nExecTime); //添加注册信息 BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("enHWType"), (int*)&pSt_AuthLocal->st_AuthRegInfo.enHWType); BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthReg"), _X("enRegType"), (int*)&pSt_AuthLocal->st_AuthRegInfo.enRegType); -- Gitee From c2618cd5aa801de793ec04d6294277ff462d1174 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 11 Jul 2024 11:32:14 +0800 Subject: [PATCH 25/46] added:open key file support for app management --- .../Authorize_Dialog/Dialog_CDKey.cpp | 44 ++++++++++++++++++- .../Authorize_Dialog/Dialog_CDKey.h | 1 + 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp index e1e44fb..236e9ad 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp @@ -49,6 +49,7 @@ void CDialog_CDKey::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_EDIT23, m_EditUserInfo); DDX_Control(pDX, IDC_EDIT24, m_EditUserContact); DDX_Control(pDX, IDC_EDIT25, m_EditUserCustom); + DDX_Control(pDX, IDC_DATETIMEPICKER5, m_DataTimeRegExpiry); } @@ -167,6 +168,47 @@ bool CDialog_CDKey::Dialog_CDKey_Write(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDK { CString m_StrFormat; //网络信息 + m_EditIPAddr.SetWindowText(pSt_AuthorizeCDKey->tszAddr); + m_StrFormat.Format(_T("%d"), pSt_AuthorizeCDKey->nPort); + m_EditPort.SetWindowText(m_StrFormat); + //软件信息 + m_EditSoftName.SetWindowText(pSt_AuthorizeCDKey->st_AuthAppInfo.tszAppName); + m_EditSoftVer.SetWindowText(pSt_AuthorizeCDKey->st_AuthAppInfo.tszAppVer); + m_StrFormat.Format(_T("%lld"), pSt_AuthorizeCDKey->st_AuthAppInfo.nExecTime); + m_EditSoftTime.SetWindowText(m_StrFormat); + if (pSt_AuthorizeCDKey->st_AuthAppInfo.bInit) + { + m_EditSoftInit.SetCheck(BST_CHECKED); + } + //注册信息 + m_EditRegHardCode.SetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszHardware); + m_EditRegLeftTime.SetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszLeftTime); + m_StrFormat.Format(_T("%lld"), pSt_AuthorizeCDKey->st_AuthRegInfo.nHasTime); + m_EditRegHaveTime.SetWindowText(m_StrFormat); + m_DateTimeCreate.SetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszCreateTime); + m_DateTimeRegister.SetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszRegisterTime); + m_DateTimeStart.SetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszStartTime); + m_DataTimeRegExpiry.SetWindowTextA(pSt_AuthorizeCDKey->st_AuthRegInfo.tszExpiryTime); + + m_ComboRegSerial.SetCurSel(pSt_AuthorizeCDKey->st_AuthRegInfo.enSerialType); + m_ComboRegType.SetCurSel(pSt_AuthorizeCDKey->st_AuthRegInfo.enRegType); + m_ComboRegHard.SetCurSel(pSt_AuthorizeCDKey->st_AuthRegInfo.enHWType); + m_ComboRegVer.SetCurSel(pSt_AuthorizeCDKey->st_AuthRegInfo.enVModeType); + //序列信息 + m_StrFormat.Format(_T("%d"), pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.nTimeCount); + m_EditSerialTimeCount.SetWindowText(m_StrFormat); + m_StrFormat.Format(_T("%d"), pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.nTimeNow); + m_EditSerialTimeUse.SetWindowText(m_StrFormat); + m_EditSerialTimeNumber.SetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.tszTimeSerial); + + m_EditSerialDataNumber.SetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataSerial); + m_DataTimeSerial.SetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataTime); + + m_EditSerialUnlimitNumber.SetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_UNLimit.tszUNLimitSerial); + //用户信息 + m_EditUserInfo.SetWindowText(pSt_AuthorizeCDKey->st_AuthUserInfo.tszUserName); + m_EditUserContact.SetWindowText(pSt_AuthorizeCDKey->st_AuthUserInfo.tszUserContact); + m_EditUserCustom.SetWindowText(pSt_AuthorizeCDKey->st_AuthUserInfo.tszCustom); return true; } void CDialog_CDKey::OnBnClickedButton1() @@ -201,6 +243,6 @@ void CDialog_CDKey::OnBnClickedButton9() AfxMessageBox(_T("CDKEY读取失败")); return; } - + Dialog_CDKey_Write(&st_AuthorizeCDKey); } } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h index 62f4fee..b252a7e 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h @@ -53,4 +53,5 @@ public: CEdit m_EditUserContact; CEdit m_EditUserCustom; afx_msg void OnBnClickedButton9(); + CDateTimeCtrl m_DataTimeRegExpiry; }; -- Gitee From 5f87f0605201589228a53a9387c87eb90cb514d9 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 11 Jul 2024 14:25:53 +0800 Subject: [PATCH 26/46] modify:cdkey password encrypt support --- .../Authorize_Dialog/Dialog_CDKey.cpp | 50 ++++++++++++++++-- .../Authorize_Dialog/Dialog_CDKey.h | 1 + .../XEngineAuthorizeApp.aps | Bin 129184 -> 129320 bytes .../XEngineAuthorizeApp.rc | Bin 47172 -> 47504 bytes .../XEngine_AuthorizeApp/resource.h | 1 + 5 files changed, 48 insertions(+), 4 deletions(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp index 236e9ad..562d4b3 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp @@ -50,6 +50,7 @@ void CDialog_CDKey::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_EDIT24, m_EditUserContact); DDX_Control(pDX, IDC_EDIT25, m_EditUserCustom); DDX_Control(pDX, IDC_DATETIMEPICKER5, m_DataTimeRegExpiry); + DDX_Control(pDX, IDC_EDIT26, m_EditKeyPass); } @@ -78,6 +79,7 @@ BOOL CDialog_CDKey::OnInitDialog() m_DateTimeRegister.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); m_DateTimeStart.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); m_DataTimeSerial.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); + m_DataTimeRegExpiry.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); for (int i = 0; i < 5; i++) { @@ -139,7 +141,7 @@ bool CDialog_CDKey::Dialog_CDKey_Read(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKe m_EditRegHaveTime.GetWindowText(m_StrRegHaveTime); pSt_AuthorizeCDKey->st_AuthRegInfo.nHasTime = _ttoi64(m_StrRegHaveTime.GetBuffer()); m_DateTimeCreate.GetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszCreateTime, sizeof(pSt_AuthorizeCDKey->st_AuthRegInfo.tszCreateTime)); - m_DateTimeRegister.GetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszRegisterTime, sizeof(pSt_AuthorizeCDKey->st_AuthRegInfo.tszRegisterTime)); + //m_DateTimeRegister.GetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszRegisterTime, sizeof(pSt_AuthorizeCDKey->st_AuthRegInfo.tszRegisterTime)); m_DateTimeStart.GetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszStartTime, sizeof(pSt_AuthorizeCDKey->st_AuthRegInfo.tszStartTime)); pSt_AuthorizeCDKey->st_AuthRegInfo.enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)m_ComboRegSerial.GetCurSel(); pSt_AuthorizeCDKey->st_AuthRegInfo.enRegType = (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE)m_ComboRegType.GetCurSel(); @@ -219,26 +221,66 @@ void CDialog_CDKey::OnBnClickedButton1() AfxMessageBox(_T("创建失败,注册验证类型没选择")); return; } - + CString m_StrPass; + m_EditKeyPass.GetWindowText(m_StrPass); + if (m_StrPass.IsEmpty()) + { + AfxMessageBox(_T("密码必须设置")); + return; + } XENGINE_AUTHORIZE_LOCAL st_AuthorizeCDKey = {}; Dialog_CDKey_Read(&st_AuthorizeCDKey); CFileDialog m_FileDlg(false, _T(".key"),_T("CDKey"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("CDKey文件(*.key)|*.key|")); if (IDOK == m_FileDlg.DoModal()) { - Authorize_CDKey_WriteKey(m_FileDlg.GetPathName(), &st_AuthorizeCDKey); + int nMSGLen = 0; + XCHAR tszDEBuffer[4096] = {}; + XBYTE tszENBuffer[4096] = {}; + Authorize_CDKey_WriteMemory(tszDEBuffer, &nMSGLen, &st_AuthorizeCDKey); + + OPenSsl_XCrypto_Encoder(tszDEBuffer, &nMSGLen, tszENBuffer, m_StrPass.GetBuffer()); + FILE* pSt_File = _tfopen(m_FileDlg.GetPathName(), _T("wb")); + if (NULL == pSt_File) + { + AfxMessageBox(_T("创建CDKEY文件失败")); + return; + } + fwrite(tszENBuffer, 1, nMSGLen, pSt_File); + fclose(pSt_File); } } void CDialog_CDKey::OnBnClickedButton9() { // TODO: 在此添加控件通知处理程序代码 + CString m_StrPass; + m_EditKeyPass.GetWindowText(m_StrPass); + if (m_StrPass.IsEmpty()) + { + AfxMessageBox(_T("密码必须设置")); + return; + } XENGINE_AUTHORIZE_LOCAL st_AuthorizeCDKey = {}; CFileDialog m_FileDlg(true, _T(".key"), _T("CDKey"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("CDKey文件(*.key)|*.key|")); if (IDOK == m_FileDlg.DoModal()) { - if (!Authorize_CDKey_ReadKey(m_FileDlg.GetPathName(), &st_AuthorizeCDKey)) + int nMSGLen = 0; + XCHAR tszDEBuffer[4096] = {}; + XCHAR tszENBuffer[4096] = {}; + + FILE* pSt_File = _tfopen(m_FileDlg.GetPathName(), _T("rb")); + nMSGLen = fread(tszENBuffer, 1, sizeof(tszENBuffer), pSt_File); + fclose(pSt_File); + + if (!OPenSsl_XCrypto_Decoder(tszENBuffer, &nMSGLen, tszDEBuffer, m_StrPass.GetBuffer())) + { + AfxMessageBox(_T("解密CDKEY失败")); + return; + } + + if (!Authorize_CDKey_ReadMemory(tszDEBuffer, nMSGLen, &st_AuthorizeCDKey)) { AfxMessageBox(_T("CDKEY读取失败")); return; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h index b252a7e..ab71c09 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h @@ -54,4 +54,5 @@ public: CEdit m_EditUserCustom; afx_msg void OnBnClickedButton9(); CDateTimeCtrl m_DataTimeRegExpiry; + CEdit m_EditKeyPass; }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index 93068fbc650e5b6859ac9f826e662fdd62b68fa8..1775dcd8df4e39f9d319f5c13eba24c14ce7949c 100644 GIT binary patch delta 788 zcmYk%Ur1AN6bJD0y?1kS0~w-{{UJwzK2+Rg1tx{dEiwBeWnd&MK`cawqz8i{r#(f% zVBrZ0R45Sgr5X8_Mk9Pld5%Nq;4QHnDL|%;o5untKd(&C6a6H;F1gC>j;KCi;C`wSW%s-GZtcJiUu* z-D8ZjFTw$>I>4Pvs;`VL;R77pvkWhfC1BrWBdY&NHkzao%4A60UG(kV>t`JLgo4Th z6{)^`d(usHtjHOFr? zZ(+A^h`quZHw!O0C>-Pgg`38pj%HPN>*nbVm&Km_jRke=CXP$Gg|V*iv0M1cUSW=# z1(SnEN6#B4MS&HVckv=(yVJ#wRPkV}>9#&KY zANudHhd@UWrHC)lLI@Hf_7I^UY}%Zgviv9WdhQJP) zcL$>HU!NJHadU0#2*qZM>%pd(Yw^nghgY>IK23a2DU_?!`JgyGS)8U0oiVVHrB3QX zTaKPm5R*CT(%}&DIXX^ZG_TNvzIp+#R;W*3iC|k)3f-%$KY`>b4e5~xmZcu-$BCcx zLxnTVl<4eS{{|%t8pr19>+OHqZn)ha1 zwj!_JjFd%(v@>nCq}_W+DGy2#MCZ-Xd6#XfQK@$Lesf|indK#y?S@UMWyBHNhWUv783>i!(FYMQz+%|9D=6%!K6ac|i9vJ`t delta 21 dcmbR6nd!&}rUla{o9XaPelUN-X0DlS3IKL83N!!! diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h index a675b4a..d354c6b 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h @@ -83,6 +83,7 @@ #define IDC_RADIO15 1029 #define IDC_DATETIMEPICKER5 1029 #define IDC_RADIO16 1030 +#define IDC_EDIT26 1030 #define IDC_RADIO17 1031 #define IDC_RADIO18 1032 #define IDC_RADIO19 1033 -- Gitee From 78d325f3881e44feecfe9417af95306122bb72f5 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 11 Jul 2024 14:52:02 +0800 Subject: [PATCH 27/46] added:init data for cdkey --- XEngine_Source/VSCopy_Debug.bat | 1 - .../Authorize_Dialog/Dialog_CDKey.cpp | 53 ++++++++++++++---- .../Authorize_Dialog/Dialog_CDKey.h | 2 + .../XEngineAuthorizeApp.aps | Bin 129320 -> 129388 bytes .../XEngineAuthorizeApp.rc | Bin 47504 -> 47614 bytes .../XEngine_AuthorizeApp/resource.h | 1 + 6 files changed, 45 insertions(+), 12 deletions(-) diff --git a/XEngine_Source/VSCopy_Debug.bat b/XEngine_Source/VSCopy_Debug.bat index 9fb00c2..52ce97b 100644 --- a/XEngine_Source/VSCopy_Debug.bat +++ b/XEngine_Source/VSCopy_Debug.bat @@ -8,7 +8,6 @@ copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_OPenSsl.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_DataBase.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_Packets.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_XLog.dll" "./" -copy /y "D:\XEngine\XEngine_SourceCode\Debug\HelpComponents_Authorize.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_WSProtocol.dll" "./" copy /y "D:\XEngine\XEngine_SourceCode\Debug\RfcComponents_HttpProtocol.dll" "./" diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp index 562d4b3..0837431 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp @@ -57,6 +57,7 @@ void CDialog_CDKey::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CDialog_CDKey, CDialogEx) ON_BN_CLICKED(IDC_BUTTON1, &CDialog_CDKey::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON9, &CDialog_CDKey::OnBnClickedButton9) + ON_BN_CLICKED(IDC_BUTTON10, &CDialog_CDKey::OnBnClickedButton10) END_MESSAGE_MAP() @@ -68,13 +69,6 @@ BOOL CDialog_CDKey::OnInitDialog() CDialogEx::OnInitDialog(); // TODO: 在此添加额外的初始化 - m_EditIPAddr.SetWindowText(_T("127.0.0.1")); - m_EditPort.SetWindowText(_T("5300")); - - m_EditSoftName.SetWindowText(_T("XEngine_Authorze")); - m_EditSoftVer.SetWindowText(_T("V1.0.0.1001")); - m_EditSoftTime.SetWindowText(_T("0")); - m_DateTimeCreate.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); m_DateTimeRegister.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); m_DateTimeStart.SetFormat(_T("yyyy-MM-dd HH:mm:ss")); @@ -102,6 +96,24 @@ BOOL CDialog_CDKey::OnInitDialog() m_ComboRegHard.SetCurSel(0); m_ComboRegVer.SetCurSel(0); + return TRUE; // return TRUE unless you set the focus to a control + // 异常: OCX 属性页应返回 FALSE +} + +bool CDialog_CDKey::Dialog_CDKey_Init() +{ + m_ComboRegSerial.SetCurSel(3); + m_ComboRegType.SetCurSel(2); + m_ComboRegHard.SetCurSel(4); + m_ComboRegVer.SetCurSel(1); + + m_EditIPAddr.SetWindowText(_T("127.0.0.1")); + m_EditPort.SetWindowText(_T("5300")); + + m_EditSoftName.SetWindowText(_T("XEngine_Authorze")); + m_EditSoftVer.SetWindowText(_T("V1.0.0.1001")); + m_EditSoftTime.SetWindowText(_T("0")); + int nSerialCount = 3; XCHAR** pptszSerialList; Authorize_Serial_Create(&pptszSerialList, _T("XAUTH"), nSerialCount, 9); @@ -109,15 +121,27 @@ BOOL CDialog_CDKey::OnInitDialog() m_EditSerialDataNumber.SetWindowText(pptszSerialList[1]); m_EditSerialUnlimitNumber.SetWindowText(pptszSerialList[2]); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszSerialList, nSerialCount); - m_EditSerialTimeCount.SetWindowText(_T("10")); + m_EditSerialTimeCount.SetWindowText(_T("9999")); m_EditSerialTimeUse.SetWindowText(_T("0")); + XCHAR tszTimeStr[128] = {}; + XENGINE_LIBTIMER st_LibTime = {}; + BaseLib_OperatorTime_GetSysTime(&st_LibTime); + + st_LibTime.wYear += 1; //一年后过期 + BaseLib_OperatorTime_TimeToStr(tszTimeStr, NULL, true, &st_LibTime); + + COleDateTime m_OleDTime; + // 尝试解析字符串为日期和时间 + if (m_OleDTime.ParseDateTime(tszTimeStr)) + { + m_DataTimeSerial.SetTime(m_OleDTime); + } + m_EditUserInfo.SetWindowText(_T("XEngine")); m_EditUserContact.SetWindowText(_T("www.xyry.org")); - return TRUE; // return TRUE unless you set the focus to a control - // 异常: OCX 属性页应返回 FALSE + return true; } - bool CDialog_CDKey::Dialog_CDKey_Read(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKey) { //网络信息 @@ -288,3 +312,10 @@ void CDialog_CDKey::OnBnClickedButton9() Dialog_CDKey_Write(&st_AuthorizeCDKey); } } + + +void CDialog_CDKey::OnBnClickedButton10() +{ + // TODO: 在此添加控件通知处理程序代码 + Dialog_CDKey_Init(); +} diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h index ab71c09..8dbc5d5 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h @@ -22,6 +22,7 @@ protected: DECLARE_MESSAGE_MAP() public: + bool Dialog_CDKey_Init(); bool Dialog_CDKey_Read(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKey); bool Dialog_CDKey_Write(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKey); public: @@ -55,4 +56,5 @@ public: afx_msg void OnBnClickedButton9(); CDateTimeCtrl m_DataTimeRegExpiry; CEdit m_EditKeyPass; + afx_msg void OnBnClickedButton10(); }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index 1775dcd8df4e39f9d319f5c13eba24c14ce7949c..bb1a98c27cba1e41d75d905b6beafa036f5924c1 100644 GIT binary patch delta 678 zcmXZWT}YEr7zgm@IosOi*6?D8n^{QfV^Fra=z|7+w22FKqLU0lfDuVGh=*`qsT7sDXxSg!E+)QKq|pU#n}p2lYBy_kp&l$+$n0?@GQxf1TohC>4Se! z&Ot)|A~%c1R(w};buEtn;4dQF`Xt5O!gCH$WkVSADYae=*OIiU8h4Z)58f&REik2} zkq{zj?iECsRkOU#zAX2Hm#1ROT)?6>gohbxp)E zV^rGw@k&vPzX@GgE*G9Y3}tx&#UI#eAL6~L@qe}d`o+$vx)r`><~ZVcKE`^KZEz_H zHn@lb>fgtSy{K14Vq#LeKj}1NzI=W`izw=x%da>ZJE}?t(ZkSXJ!|_V38lnnU@He55CbMkz;dTgLMCM~bI-rFe%=iWF8Q!jy;YH#`3VD%9%4 delta 665 zcmZ9}KWGzi6bJC%yQKMNQ>us%s9GUthc?_v9qJ&dUMc=bOGPoD&?Q(Y25en22nH4D zV4)E7E7HNCL&4PAM2KUDAa#gD5OL^`)U-{cQ5&vJU5xK#aPZ*n^Ly`m@5hh3t(tSb z=A1EYD>X_?gd$6?`ffUs7nSlWv{`h7#?$VxiGAtB7U!>nrqH%GmsT)>_b3;dPUFIBkBJ%rRMZFLH4R*l9oei24OHyAkpl|X% zhMt+-BoArlMloOJfVIjLwq^N*!xcJq@H%sjd97;V$&Z48#iK@^A?+&A* zM~ERL1Q8Wnm}azJ1-#zj?;b-=x)D@`Zg_V&wB8`F%i%0ST#_GAL19|BfdwIgoM56V ze1^BqgQYwIbsj7r#3dgf%Gi>tgvC|zwaEW;VL_tX$jQKR6+h~9mf|q>xI2dtrhjFd z_~ZP!-)KBia_P$MYA*Pp@xApgf81>UpSNR4cI(9_A&hO|9`^rcUcz8(*&5+zjeLIr D{dVX% diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc index 5b93812dffbebf5b23c2578350f17285e7111f23..84e40c5c6ddf3bad3cc4ed9e3829051d478df430 100644 GIT binary patch delta 136 zcmbR6nd#qWrVUj!yoL-W4CV|v3`PuQ4Ca#;s#$M7P*W$tYs6r|V1N+Tv*wTuIvpt% zY!fi~fRcouAym>7uH>PF_2v&#W0)oz)M&AEBs-^r)Cn6h7y?z8099MSRlZb`pZs9{ KhRs|v+Y|uf6D1e` delta 93 zcmezOnQ6jjrVUj!oMsFb3_1)(3}%xXO{6z3s97MvZOCBBU Date: Thu, 11 Jul 2024 14:54:57 +0800 Subject: [PATCH 28/46] improved:build key time for authorize module --- .../Authorize_CDKey/Authorize_CDKey.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp index e7a79ee..fdc34ea 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp @@ -814,19 +814,10 @@ bool CAuthorize_CDKey::Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL* pSt { Authorize_IsErrorOccur = false; - XENGINE_LIBTIMER st_StartTimer; - XENGINE_LIBTIMER st_EndTimer; - - memset(&st_StartTimer, '\0', sizeof(XENGINE_LIBTIMER)); - memset(&st_EndTimer, '\0', sizeof(XENGINE_LIBTIMER)); - - BaseLib_OperatorTime_GetSysTime(&st_StartTimer); //获取系统时间 - _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_StartTimer.wYear, st_StartTimer.wMonth, st_StartTimer.wDay, st_StartTimer.wHour, st_StartTimer.wMinute, st_StartTimer.wSecond); //判断注册时间方式 if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == pSt_AuthLocal->st_AuthRegInfo.enSerialType) { //按照到期时间计算 - BaseLib_OperatorTimeSpan_GetForStu(&st_StartTimer, pSt_DayTimer, &pSt_AuthLocal->st_AuthRegInfo.nHasTime, 3); _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszLeftTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), pSt_DayTimer->wYear, pSt_DayTimer->wMonth, pSt_DayTimer->wDay, pSt_DayTimer->wHour, pSt_DayTimer->wMinute, pSt_DayTimer->wSecond); } else -- Gitee From ff9a47e091d2ce9d00a38e9f3bf608a37fa6957a Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 11 Jul 2024 15:27:11 +0800 Subject: [PATCH 29/46] added:user register function for authorize module modify:The function of getting the remaining time does not handle unsupported types --- .../AuthorizeModule_CDKey.def | 1 + .../Authorize_CDKey/Authorize_CDKey.cpp | 257 ++++++++++-------- .../Authorize_CDKey/Authorize_CDKey.h | 1 + .../AuthorizeModule_CDKey/CDKey_Define.h | 19 ++ .../AuthorizeModule_CDKey/CDKey_Error.h | 3 +- XEngine_Source/AuthorizeModule_CDKey/pch.cpp | 4 + XEngine_Source/XAuth_Protocol.h | 1 + 7 files changed, 178 insertions(+), 108 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.def b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.def index b128231..99100dc 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.def +++ b/XEngine_Source/AuthorizeModule_CDKey/AuthorizeModule_CDKey.def @@ -12,6 +12,7 @@ EXPORTS Authorize_CDKey_WriteMemory Authorize_CDKey_ReadMemory Authorize_CDKey_BuildKeyTime + Authorize_CDKey_UserRegister Authorize_CDKey_GetLeftTimer Authorize_CDKey_WriteTime Authorize_CDKey_ReadTime \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp index fdc34ea..f489f48 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp @@ -808,7 +808,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_ReadMemory(LPCXSTR lpszMsgBuffer, int nMs 返回值 类型:逻辑型 意思:是否构造成功 -备注:此函数会修改st_AuthRegInfo的时间信息成员 +备注:此函数会修改st_AuthRegInfo的时间信息成员,必须重写CDKEY *********************************************************************/ bool CAuthorize_CDKey::Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, __int64x nDayTimer /* = 0 */, XENGINE_LIBTIMER* pSt_DayTimer /* = NULL */) { @@ -828,6 +828,94 @@ bool CAuthorize_CDKey::Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL* pSt return true; } /******************************************************************** +函数名称:Authorize_CDKey_UserRegister +函数功能:用户注册CDKEY函数 + 参数.一:pSt_AuthLocal + In/Out:In + 类型:结构体指针 + 可空:N + 意思:要构造的结构体 + 参数.二:lpszSerialStr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入注册验证的序列号 +返回值 + 类型:逻辑型 + 意思:是否构造成功 +备注:此函数会修改st_AuthRegInfo的时间信息成员,必须重写CDKEY +*********************************************************************/ +bool CAuthorize_CDKey::Authorize_CDKey_UserRegister(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, LPCXSTR lpszSerialStr) +{ + Authorize_IsErrorOccur = false; + + if (NULL == pSt_AuthLocal || NULL == lpszSerialStr) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; + return false; + } + bool bSerial = false; + + if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial, lpszSerialStr, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial))) + { + //次数验证 + pSt_AuthLocal->st_AuthRegInfo.enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME; + pSt_AuthLocal->st_AuthRegInfo.enRegType = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_OFFICIAL; + Authorize_CDKey_BuildKeyTime(pSt_AuthLocal, pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeCount); + } + else if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial, lpszSerialStr, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial))) + { + //日期序列 + pSt_AuthLocal->st_AuthRegInfo.enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM; + pSt_AuthLocal->st_AuthRegInfo.enRegType = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_OFFICIAL; + XENGINE_LIBTIMER st_LibTime = {}; + BaseLib_OperatorTime_GetSysTime(&st_LibTime); + if (pSt_AuthLocal->st_AuthSerial.st_DataLimit.bTimeAdd) + { + __int64x nTimeCount = 0; + XENGINE_LIBTIMER st_AddTime = {}; + + BaseLib_OperatorTimeSpan_GetForStr(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime, pSt_AuthLocal->st_AuthRegInfo.tszCreateTime, &nTimeCount); + st_AddTime.wDay = (int)nTimeCount; + BaseLib_OperatorTimeSpan_CalForStu(&st_LibTime, &st_AddTime); + + Authorize_CDKey_BuildKeyTime(pSt_AuthLocal, 0, &st_AddTime); + } + else + { + __int64x nTimeCount = 0; + XCHAR tszTimeStr[128] = {}; + XENGINE_LIBTIMER st_LibTime = {}; + BaseLib_OperatorTime_TimeToStr(tszTimeStr); + + BaseLib_OperatorTimeSpan_GetForStr(tszTimeStr, pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime, &nTimeCount); + if (nTimeCount <= 0) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_TIMEOUT; + return false; + } + BaseLib_OperatorTime_StrToTime(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime, &st_LibTime); + Authorize_CDKey_BuildKeyTime(pSt_AuthLocal, 0, &st_LibTime); + } + } + else if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial, lpszSerialStr, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial))) + { + //无限制 + bSerial = true; + pSt_AuthLocal->st_AuthRegInfo.enRegType = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNLIMIT; + } + + if (!bSerial) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_FAILED; + return false; + } + return true; +} +/******************************************************************** 函数名称:Authorize_CDKey_GetLeftTimer 函数功能:验证CDKey 参数.一:pSt_AuthLocal @@ -845,6 +933,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL* pSt 意思:是否成功 备注:无限制版本不做验证 其他验证nHasTime将被设置还拥有时间 + 此函数在程序启动的时候必须调用,可以设置更新CDKEY信息也可以验证CDKEY *********************************************************************/ bool CAuthorize_CDKey::Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, LPCXSTR lpszSerialNumber /* = NULL */) { @@ -856,137 +945,91 @@ bool CAuthorize_CDKey::Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL* pSt Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_PARAMENT; return false; } - bool bSerial = false; - //是否输入了序列号,那么进行序列号验证,每次验证都需要序列号 - if (NULL != lpszSerialNumber) + //验证CDKEY本身情况 + XENGINE_LIBTIMER st_StartTimer; + XENGINE_LIBTIMER st_EndTimer; + XENGINE_LIBTIMER st_SysTimer; + + memset(&st_StartTimer, '\0', sizeof(XENGINE_LIBTIMER)); + memset(&st_EndTimer, '\0', sizeof(XENGINE_LIBTIMER)); + memset(&st_SysTimer, '\0', sizeof(XENGINE_LIBTIMER)); + //处理注册类型 + if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNLIMIT == pSt_AuthLocal->st_AuthRegInfo.enRegType) { - if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial, lpszSerialNumber, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial))) - { - //次数验证 - pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow++; - if (pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow <= pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeCount) - { - bSerial = true; - } - } - else if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial, lpszSerialNumber, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial))) - { - __int64x nTimeDay = 0; - XCHAR tszTimeEnd[128]; - memset(tszTimeEnd, '\0', sizeof(tszTimeEnd)); - //过期时间 - BaseLib_OperatorTime_TimeToStr(tszTimeEnd); - BaseLib_OperatorTimeSpan_GetForStr(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime, tszTimeEnd, &nTimeDay, 3); - if (nTimeDay > 0) - { - bSerial = true; - } - } - else if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial, lpszSerialNumber, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial))) + return true; + } + else if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNKNOW == pSt_AuthLocal->st_AuthRegInfo.enRegType) + { + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_UNKNOW; + return false; + } + else if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_TEMP == pSt_AuthLocal->st_AuthRegInfo.enRegType) + { + if (_tcsxlen(pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime) > 1) { - //无限制 - bSerial = true; + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_TEMP; + return false; } else { - bSerial = false; + _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_SysTimer.wYear, st_SysTimer.wMonth, st_SysTimer.wDay, st_SysTimer.wHour, st_SysTimer.wMinute, st_SysTimer.wSecond); } } - //如果本地序列号验证失败,或者没有启用,进行常规CDKEY验证 - if (!bSerial) + else if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_EXPIRED == pSt_AuthLocal->st_AuthRegInfo.enRegType) { - //验证CDKEY本身情况 - XENGINE_LIBTIMER st_StartTimer; - XENGINE_LIBTIMER st_EndTimer; - XENGINE_LIBTIMER st_SysTimer; - - memset(&st_StartTimer, '\0', sizeof(XENGINE_LIBTIMER)); - memset(&st_EndTimer, '\0', sizeof(XENGINE_LIBTIMER)); - memset(&st_SysTimer, '\0', sizeof(XENGINE_LIBTIMER)); - - if (pSt_AuthLocal->st_AuthRegInfo.enRegType <= 0) + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_EXPIRED; + return false; + } + else + { + //其他类型的注册机制 + if (pSt_AuthLocal->st_AuthRegInfo.nHasTime <= 0) { Authorize_IsErrorOccur = true; - Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTREG; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTHASTIME; return false; } - //处理注册类型 - if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNLIMIT == pSt_AuthLocal->st_AuthRegInfo.enRegType) + BaseLib_OperatorTime_GetSysTime(&st_SysTimer); + //转换时间格式 + _stxscanf(pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_StartTimer.wYear, &st_StartTimer.wMonth, &st_StartTimer.wDay, &st_StartTimer.wHour, &st_StartTimer.wMinute, &st_StartTimer.wSecond); + //计算超时时间 + if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == pSt_AuthLocal->st_AuthRegInfo.enSerialType) { - return true; + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTSUPPORT; + return false; } - else if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNKNOW == pSt_AuthLocal->st_AuthRegInfo.enRegType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == pSt_AuthLocal->st_AuthRegInfo.enSerialType) { Authorize_IsErrorOccur = true; - Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_UNKNOW; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTSUPPORT; return false; } - else if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_TEMP == pSt_AuthLocal->st_AuthRegInfo.enRegType) + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == pSt_AuthLocal->st_AuthRegInfo.enSerialType) { - if (_tcsxlen(pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime) > 1) - { - Authorize_IsErrorOccur = true; - Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_TEMP; - return false; - } - else - { - _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_SysTimer.wYear, st_SysTimer.wMonth, st_SysTimer.wDay, st_SysTimer.wHour, st_SysTimer.wMinute, st_SysTimer.wSecond); - } + pSt_AuthLocal->st_AuthRegInfo.nHasTime--; + } + else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == pSt_AuthLocal->st_AuthRegInfo.enSerialType) + { + _stxscanf(pSt_AuthLocal->st_AuthRegInfo.tszLeftTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_EndTimer.wYear, &st_EndTimer.wMonth, &st_EndTimer.wDay, &st_EndTimer.wHour, &st_EndTimer.wMinute, &st_EndTimer.wSecond); + BaseLib_OperatorTimeSpan_GetForStu(&st_SysTimer, &st_EndTimer, &pSt_AuthLocal->st_AuthRegInfo.nHasTime, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_SECOND); } - else if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_EXPIRED == pSt_AuthLocal->st_AuthRegInfo.enRegType) + else { Authorize_IsErrorOccur = true; - Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_EXPIRED; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTSUPPORT; return false; } - else + if (pSt_AuthLocal->st_AuthRegInfo.nHasTime <= 0) { - //其他类型的注册机制 - if (pSt_AuthLocal->st_AuthRegInfo.nHasTime <= 0) - { - Authorize_IsErrorOccur = true; - Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTHASTIME; - return false; - } - BaseLib_OperatorTime_GetSysTime(&st_SysTimer); - //转换时间格式 - _stxscanf(pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_StartTimer.wYear, &st_StartTimer.wMonth, &st_StartTimer.wDay, &st_StartTimer.wHour, &st_StartTimer.wMinute, &st_StartTimer.wSecond); - //计算超时时间 - if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == pSt_AuthLocal->st_AuthRegInfo.enSerialType) - { - _stxscanf(pSt_AuthLocal->st_AuthRegInfo.tszStartTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_EndTimer.wYear, &st_EndTimer.wMonth, &st_EndTimer.wDay, &st_EndTimer.wHour, &st_EndTimer.wMinute, &st_EndTimer.wSecond); - __int64x nUsedTime = 0; - BaseLib_OperatorTimeSpan_GetForStu(&st_SysTimer, &st_EndTimer, &nUsedTime, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_SECOND); - pSt_AuthLocal->st_AuthRegInfo.nHasTime -= nUsedTime; - } - else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_DAY == pSt_AuthLocal->st_AuthRegInfo.enSerialType) - { - //在启动的时候已经计算过了,不需要在做计算 - } - else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME == pSt_AuthLocal->st_AuthRegInfo.enSerialType) - { - pSt_AuthLocal->st_AuthRegInfo.nHasTime--; - } - else if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == pSt_AuthLocal->st_AuthRegInfo.enSerialType) - { - _stxscanf(pSt_AuthLocal->st_AuthRegInfo.tszLeftTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_EndTimer.wYear, &st_EndTimer.wMonth, &st_EndTimer.wDay, &st_EndTimer.wHour, &st_EndTimer.wMinute, &st_EndTimer.wSecond); - BaseLib_OperatorTimeSpan_GetForStu(&st_SysTimer, &st_EndTimer, &pSt_AuthLocal->st_AuthRegInfo.nHasTime, ENUM_XENGINE_BASELIB_TIME_SPAN_TYPE_SECOND); - } - else - { - Authorize_IsErrorOccur = true; - Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTSUPPORT; - return false; - } - if (pSt_AuthLocal->st_AuthRegInfo.nHasTime <= 0) - { - Authorize_IsErrorOccur = true; - Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_TIMEOUT; - pSt_AuthLocal->st_AuthRegInfo.enRegType = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_EXPIRED; - _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_SysTimer.wYear, st_SysTimer.wMonth, st_SysTimer.wDay, st_SysTimer.wHour, st_SysTimer.wMinute, st_SysTimer.wSecond); - return false; - } + Authorize_IsErrorOccur = true; + Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_TIMEOUT; + pSt_AuthLocal->st_AuthRegInfo.enRegType = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_EXPIRED; + _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_SysTimer.wYear, st_SysTimer.wMonth, st_SysTimer.wDay, st_SysTimer.wHour, st_SysTimer.wMinute, st_SysTimer.wSecond); + return false; } } pSt_AuthLocal->st_AuthAppInfo.nExecTime++; diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.h b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.h index 08ea0e1..9878584 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.h +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.h @@ -23,6 +23,7 @@ public: bool Authorize_CDKey_ReadMemory(LPCXSTR lpszMsgBuffer, int nMsgLen, XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal); public: bool Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, __int64x nDayTimer = 0, XENGINE_LIBTIMER* pSt_DayTimer = NULL); + bool Authorize_CDKey_UserRegister(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, LPCXSTR lpszSerialStr); bool Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, LPCXSTR lpszSerialNumber = NULL); bool Authorize_CDKey_WriteTime(LPCXSTR lpszFileKey, int nCount = 0); bool Authorize_CDKey_ReadTime(LPCXSTR lpszFileKey, XCHAR*** ppptszTimeList, int* pInt_ListCount); diff --git a/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h index e63de1a..87c04ee 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h +++ b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h @@ -224,6 +224,25 @@ extern "C" bool Authorize_CDKey_ReadMemory(LPCXSTR lpszMsgBuffer, int nMsgLen, X *********************************************************************/ extern "C" bool Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, __int64x nDayTimer = 0, XENGINE_LIBTIMER* pSt_DayTimer = NULL); /******************************************************************** +函数名称:Authorize_CDKey_UserRegister +函数功能:用户注册CDKEY函数 + 参数.一:pSt_AuthLocal + In/Out:In + 类型:结构体指针 + 可空:N + 意思:要构造的结构体 + 参数.二:lpszSerialStr + In/Out:In + 类型:常量字符指针 + 可空:N + 意思:输入注册验证的序列号 +返回值 + 类型:逻辑型 + 意思:是否构造成功 +备注:此函数会修改st_AuthRegInfo的时间信息成员,必须重写CDKEY +*********************************************************************/ +extern "C" bool Authorize_CDKey_UserRegister(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, LPCXSTR lpszSerialStr); +/******************************************************************** 函数名称:Authorize_CDKey_GetLeftTimer 函数功能:验证CDKey 参数.一:pSt_AuthLocal diff --git a/XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h index 304bfa1..88ca362 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h +++ b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h @@ -32,4 +32,5 @@ #define ERROR_AUTHORIZE_MODULE_CDKEY_SETFILE 0x50A1032 //设置文件失败 #define ERROR_AUTHORIZE_MODULE_CDKEY_TIMELIST 0x50A1041 //不存在时间列表 #define ERROR_AUTHORIZE_MODULE_CDKEY_MALLOC 0x50A1042 //申请内存失败 -#define ERROR_AUTHORIZE_MODULE_CDKEY_READ 0x50A1043 //读取文件失败 \ No newline at end of file +#define ERROR_AUTHORIZE_MODULE_CDKEY_READ 0x50A1043 //读取文件失败 +#define ERROR_AUTHORIZE_MODULE_CDKEY_FAILED 0x50A1044 //序列号验证失败,输入的序列号错误 \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_CDKey/pch.cpp b/XEngine_Source/AuthorizeModule_CDKey/pch.cpp index e370914..eab9eaa 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/pch.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/pch.cpp @@ -66,6 +66,10 @@ extern "C" bool Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL * pSt_AuthL { return m_Local.Authorize_CDKey_BuildKeyTime(pSt_AuthLocal, nDayTimer, pSt_DayTimer); } +extern "C" bool Authorize_CDKey_UserRegister(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLocal, LPCXSTR lpszSerialStr) +{ + return m_Local.Authorize_CDKey_UserRegister(pSt_AuthLocal, lpszSerialStr); +} extern "C" bool Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL * pSt_AuthLocal, LPCXSTR lpszSerialNumber) { return m_Local.Authorize_CDKey_GetLeftTimer(pSt_AuthLocal, lpszSerialNumber); diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h index 2347785..00533cb 100644 --- a/XEngine_Source/XAuth_Protocol.h +++ b/XEngine_Source/XAuth_Protocol.h @@ -123,6 +123,7 @@ typedef struct { XCHAR tszDataTime[128]; //过期时间 XCHAR tszDataSerial[128]; //序列号 + bool bTimeAdd; //真,过期时间是设置的日期-创建日期.假过期日期就是设定的日期 }st_DataLimit; //无限制 struct -- Gitee From ccf3c56f1b0780e6c368188145fe5b709d280c01 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 11 Jul 2024 15:46:33 +0800 Subject: [PATCH 30/46] modify:added time for serial register data of cdkey --- .../Authorize_CDKey/Authorize_CDKey.cpp | 21 +++++++----------- XEngine_Source/XAuth_Protocol.h | 1 - .../Authorize_Dialog/Dialog_CDKey.cpp | 15 ++++++++----- .../Authorize_Dialog/Dialog_CDKey.h | 2 +- .../XEngineAuthorizeApp.aps | Bin 129388 -> 129360 bytes .../XEngineAuthorizeApp.rc | Bin 47614 -> 47574 bytes .../XEngine_AuthorizeApp/resource.h | 3 ++- 7 files changed, 20 insertions(+), 22 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp index f489f48..a697f27 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp @@ -181,19 +181,19 @@ bool CAuthorize_CDKey::Authorize_CDKey_WriteKey(LPCXSTR lpszFileKey, XENGINE_AUT Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; return false; } - if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey, _X("AuthSerial"), _X("nTimeNow"), pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow)) + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszDataSerial"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial)) { Authorize_IsErrorOccur = true; Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; return false; } - if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszDataSerial"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial)) + if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszDataTime"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime)) { Authorize_IsErrorOccur = true; Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; return false; } - if (!BaseLib_OperatorFile_WriteProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszDataTime"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime)) + if (!BaseLib_OperatorFile_WriteInt64FromFile(lpszFileKey, _X("AuthSerial"), _X("bTimeAdd"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.bTimeAdd)) { Authorize_IsErrorOccur = true; Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; @@ -350,7 +350,6 @@ bool CAuthorize_CDKey::Authorize_CDKey_ReadKey(LPCXSTR lpszFileKey, XENGINE_AUTH return false; } pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeCount = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthSerial"), _X("nTimeCount")); - pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthSerial"), _X("nTimeNow")); if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszDataSerial"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial) <= 0) { Authorize_IsErrorOccur = true; @@ -363,6 +362,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_ReadKey(LPCXSTR lpszFileKey, XENGINE_AUTH Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_SERIAL; return false; } + pSt_AuthLocal->st_AuthSerial.st_DataLimit.bTimeAdd = BaseLib_OperatorFile_ReadIntFromFile(lpszFileKey, _X("AuthSerial"), _X("bAddTime")); if (BaseLib_OperatorFile_ReadProfileFromFile(lpszFileKey, _X("AuthSerial"), _X("tszUNLimitSerial"), pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial) <= 0) { Authorize_IsErrorOccur = true; @@ -556,19 +556,19 @@ bool CAuthorize_CDKey::Authorize_CDKey_WriteMemory(XCHAR* ptszMsgBuffer, int* pI Authorize_dwErrorCode = BaseLib_GetLastError(); return false; } - if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("nTimeNow"), pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow, ptszMsgBuffer, &nMsgLen)) + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszDataSerial"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial, ptszMsgBuffer, &nMsgLen)) { Authorize_IsErrorOccur = true; Authorize_dwErrorCode = BaseLib_GetLastError(); return false; } - if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszDataSerial"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial, ptszMsgBuffer, &nMsgLen)) + if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszDataTime"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime, ptszMsgBuffer, &nMsgLen)) { Authorize_IsErrorOccur = true; Authorize_dwErrorCode = BaseLib_GetLastError(); return false; } - if (!BaseLib_OperatorFile_WriteProfileFromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszDataTime"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataTime, ptszMsgBuffer, &nMsgLen)) + if (!BaseLib_OperatorFile_WriteInt64FromMemory(ptszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("bAddTime"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.bTimeAdd, ptszMsgBuffer, &nMsgLen)) { Authorize_IsErrorOccur = true; Authorize_dwErrorCode = BaseLib_GetLastError(); @@ -742,12 +742,6 @@ bool CAuthorize_CDKey::Authorize_CDKey_ReadMemory(LPCXSTR lpszMsgBuffer, int nMs Authorize_dwErrorCode = BaseLib_GetLastError(); return false; } - if (!BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("nTimeNow"), &pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeNow)) - { - Authorize_IsErrorOccur = true; - Authorize_dwErrorCode = BaseLib_GetLastError(); - return false; - } if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszDataSerial"), pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial)) { Authorize_IsErrorOccur = true; @@ -760,6 +754,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_ReadMemory(LPCXSTR lpszMsgBuffer, int nMs Authorize_dwErrorCode = BaseLib_GetLastError(); return false; } + BaseLib_OperatorFile_ReadIntFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("bAddTime"), (int*)&pSt_AuthLocal->st_AuthSerial.st_DataLimit.bTimeAdd); if (!BaseLib_OperatorFile_ReadProfileFromMemory(lpszMsgBuffer, nMsgLen, _X("AuthSerial"), _X("tszUNLimitSerial"), pSt_AuthLocal->st_AuthSerial.st_UNLimit.tszUNLimitSerial)) { Authorize_IsErrorOccur = true; diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h index 00533cb..429b503 100644 --- a/XEngine_Source/XAuth_Protocol.h +++ b/XEngine_Source/XAuth_Protocol.h @@ -116,7 +116,6 @@ typedef struct { XCHAR tszTimeSerial[128]; int nTimeCount; //使用次数 - int nTimeNow; //已用次数 }st_TimeLimit; //时间限制 struct diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp index 0837431..a65524a 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp @@ -42,7 +42,6 @@ void CDialog_CDKey::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_COMBO6, m_ComboRegVer); DDX_Control(pDX, IDC_EDIT17, m_EditSerialTimeNumber); DDX_Control(pDX, IDC_EDIT16, m_EditSerialTimeCount); - DDX_Control(pDX, IDC_EDIT20, m_EditSerialTimeUse); DDX_Control(pDX, IDC_EDIT22, m_EditSerialDataNumber); DDX_Control(pDX, IDC_DATETIMEPICKER4, m_DataTimeSerial); DDX_Control(pDX, IDC_EDIT21, m_EditSerialUnlimitNumber); @@ -51,6 +50,7 @@ void CDialog_CDKey::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_EDIT25, m_EditUserCustom); DDX_Control(pDX, IDC_DATETIMEPICKER5, m_DataTimeRegExpiry); DDX_Control(pDX, IDC_EDIT26, m_EditKeyPass); + DDX_Control(pDX, IDC_CHECK3, m_CheckSerialDataAdd); } @@ -122,7 +122,6 @@ bool CDialog_CDKey::Dialog_CDKey_Init() m_EditSerialUnlimitNumber.SetWindowText(pptszSerialList[2]); BaseLib_OperatorMemory_Free((XPPPMEM)&pptszSerialList, nSerialCount); m_EditSerialTimeCount.SetWindowText(_T("9999")); - m_EditSerialTimeUse.SetWindowText(_T("0")); XCHAR tszTimeStr[128] = {}; XENGINE_LIBTIMER st_LibTime = {}; @@ -175,14 +174,16 @@ bool CDialog_CDKey::Dialog_CDKey_Read(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKe CString m_StrSerialCount; CString m_StrSerialUsed; m_EditSerialTimeCount.GetWindowText(m_StrSerialCount); - m_EditSerialTimeUse.GetWindowText(m_StrSerialUsed); m_EditSerialTimeNumber.GetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.tszTimeSerial, sizeof(pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.tszTimeSerial)); pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.nTimeCount = _ttoi(m_StrSerialCount.GetBuffer()); - pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.nTimeNow = _ttoi(m_StrSerialUsed.GetBuffer()); m_EditSerialDataNumber.GetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataSerial, sizeof(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataSerial)); m_DataTimeSerial.GetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataTime, sizeof(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataTime)); + if (BST_CHECKED == m_CheckSerialDataAdd.GetCheck()) + { + pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.bTimeAdd = true; + } m_EditSerialUnlimitNumber.GetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_UNLimit.tszUNLimitSerial, sizeof(pSt_AuthorizeCDKey->st_AuthSerial.st_UNLimit.tszUNLimitSerial)); //用户信息 m_EditUserInfo.GetWindowText(pSt_AuthorizeCDKey->st_AuthUserInfo.tszUserName, sizeof(pSt_AuthorizeCDKey->st_AuthUserInfo.tszUserName)); @@ -223,10 +224,12 @@ bool CDialog_CDKey::Dialog_CDKey_Write(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDK //序列信息 m_StrFormat.Format(_T("%d"), pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.nTimeCount); m_EditSerialTimeCount.SetWindowText(m_StrFormat); - m_StrFormat.Format(_T("%d"), pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.nTimeNow); - m_EditSerialTimeUse.SetWindowText(m_StrFormat); m_EditSerialTimeNumber.SetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_TimeLimit.tszTimeSerial); + if (pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.bTimeAdd) + { + m_CheckSerialDataAdd.SetCheck(BST_CHECKED); + } m_EditSerialDataNumber.SetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataSerial); m_DataTimeSerial.SetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataTime); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h index 8dbc5d5..2dd4cec 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h @@ -46,7 +46,6 @@ public: CComboBox m_ComboRegVer; CEdit m_EditSerialTimeNumber; CEdit m_EditSerialTimeCount; - CEdit m_EditSerialTimeUse; CEdit m_EditSerialDataNumber; CDateTimeCtrl m_DataTimeSerial; CEdit m_EditSerialUnlimitNumber; @@ -57,4 +56,5 @@ public: CDateTimeCtrl m_DataTimeRegExpiry; CEdit m_EditKeyPass; afx_msg void OnBnClickedButton10(); + CButton m_CheckSerialDataAdd; }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index bb1a98c27cba1e41d75d905b6beafa036f5924c1..c42518887ce9c86c5baf076cff7fc7712305571f 100644 GIT binary patch delta 486 zcmXYsK}eHv7{=e{zvX1JPzb^bK1Uu(lr~3H5}|E@Cf4T^Di8uGg3&-Fx^!re2M>!1 z!{^c=$b-=#bO$|&pj1dkU1Z*zP4^jA`gPbk)cpU=_wwU;-k0a$-Ew_jT;H>pXWPZ- zVAt)*w^lNfOP=;*LW2*{5N*F4?Tkn`6loR(fgF;KSoBuBE!J@@eBSsG(JsV48mu^W zz$nSg4h33aJzkueUYtTplh5{x)QRw25w%RcM>Q_;%qpHJ?JcaLg?)MWS?$2fsvM50 z>?}{_FlN?sIb2c7X4RTz0KB1zvwXdV9M^I%cMO?xJ!zEbw#BPn?_6~H!zenZr@LqgKyp{V+qQ8~Hd~UAKanhiVUky^+F&Jmf QAB~R;Yk0O?@Ry6)T~QFE*#H0l delta 520 zcmX|+KS*0q7{$MHU#!ujL1>GLLbOV8DSa{4YS3!nB@jU){y_(!OS`lYq9`~N0<}Y_ zih|&`I0ywD9IR$=D;DD-6gm~h#Kss!g}ev}6in|+cwV?1&f#}B_x{$)uk`X2O|fUO zI@SMnciTDXXjRFjx?ChcAV>7)WQVf)^g*4ajfkT8@JBov@@j#gt5afbH%SOo8T~PB z>qW!-@!tON9z4$x;<7kipod?^u_WFEI2MOT__VbIo{3kj+>*eW@Q?FB0)2wO_ESUM zJT4VJ{&tFCF)+$`Blh}P`-?v!ILh@&yccQ*e=)Q_$hS$O=H=cqse@i#G*ngj#87RR zn^RIp0vt|Zn%iS=RBU3MUXz2eoH#;tLj)VtOjarsNZwBr3AW5Oeh9zw$luBXPNw9N zZ;S`e(ItPibdF!bAK;0!d}ljvrEw_KISyUmWPj!oH4hCYhbDaI-5i{XXlK&ZoD$Y9D~HaW08lB3>Vqf{}wAa(KrQ#ob}2II~5 jdzUhC8!{L$SU}WGP88GMyk~+0`{Z9re47`{FjE8o36~hy diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h index 8e2ffb0..30a91f5 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h @@ -87,6 +87,7 @@ #define IDC_RADIO17 1031 #define IDC_BUTTON11 1031 #define IDC_RADIO18 1032 +#define IDC_CHECK3 1032 #define IDC_RADIO19 1033 #define IDC_RADIO20 1034 #define IDC_RADIO21 1035 @@ -98,7 +99,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 148 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1024 +#define _APS_NEXT_CONTROL_VALUE 1033 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif -- Gitee From b768f09f290827747100bcdced29791b6aff348b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 11 Jul 2024 16:05:41 +0800 Subject: [PATCH 31/46] added:admin authorize cdkey for app management --- .../Authorize_Dialog/Dialog_CDKey.cpp | 56 ++++++++++++++++++ .../Authorize_Dialog/Dialog_CDKey.h | 2 + .../XEngineAuthorizeApp.aps | Bin 129360 -> 111500 bytes .../XEngine_AuthorizeApp/resource.h | 1 - 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp index a65524a..2f2303b 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp @@ -58,6 +58,7 @@ BEGIN_MESSAGE_MAP(CDialog_CDKey, CDialogEx) ON_BN_CLICKED(IDC_BUTTON1, &CDialog_CDKey::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON9, &CDialog_CDKey::OnBnClickedButton9) ON_BN_CLICKED(IDC_BUTTON10, &CDialog_CDKey::OnBnClickedButton10) + ON_BN_CLICKED(IDC_BUTTON11, &CDialog_CDKey::OnBnClickedButton11) END_MESSAGE_MAP() @@ -313,6 +314,7 @@ void CDialog_CDKey::OnBnClickedButton9() return; } Dialog_CDKey_Write(&st_AuthorizeCDKey); + bOPenCDKey = true; } } @@ -322,3 +324,57 @@ void CDialog_CDKey::OnBnClickedButton10() // TODO: 在此添加控件通知处理程序代码 Dialog_CDKey_Init(); } + + +void CDialog_CDKey::OnBnClickedButton11() +{ + // TODO: 在此添加控件通知处理程序代码 + if (!bOPenCDKey) + { + AfxMessageBox(_T("没有打开要授权的文件")); + return; + } + XENGINE_AUTHORIZE_LOCAL st_AuthorizeCDKey = {}; + Dialog_CDKey_Read(&st_AuthorizeCDKey); + + CString m_StrLeftTime; + m_EditRegLeftTime.GetWindowText(m_StrLeftTime); + + if (3 == m_ComboRegSerial.GetCurSel()) + { + Authorize_CDKey_BuildKeyTime(&st_AuthorizeCDKey, _ttoi64(m_StrLeftTime.GetBuffer())); + } + else if (4 == m_ComboRegSerial.GetCurSel()) + { + XENGINE_LIBTIMER st_LibTime = {}; + BaseLib_OperatorTime_StrToTime(m_StrLeftTime.GetBuffer(), &st_LibTime); + Authorize_CDKey_BuildKeyTime(&st_AuthorizeCDKey, 0, &st_LibTime); + } + else + { + AfxMessageBox(_T("授权类型错误,无法继续")); + return; + } + + CString m_StrPass; + m_EditKeyPass.GetWindowText(m_StrPass); + if (m_StrPass.IsEmpty()) + { + AfxMessageBox(_T("密码必须设置")); + return; + } + CFileDialog m_FileDlg(false, _T(".key"), _T("CDKey"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("CDKey文件(*.key)|*.key|")); + if (IDOK == m_FileDlg.DoModal()) + { + int nMSGLen = 0; + XCHAR tszDEBuffer[4096] = {}; + XBYTE tszENBuffer[4096] = {}; + Authorize_CDKey_WriteMemory(tszDEBuffer, &nMSGLen, &st_AuthorizeCDKey); + + OPenSsl_XCrypto_Encoder(tszDEBuffer, &nMSGLen, tszENBuffer, m_StrPass.GetBuffer()); + FILE* pSt_File = _tfopen(m_FileDlg.GetPathName(), _T("wb")); + fwrite(tszENBuffer, 1, nMSGLen, pSt_File); + fclose(pSt_File); + } + AfxMessageBox(_T("授权CDKEY成功")); +} diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h index 2dd4cec..9ae75d6 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h @@ -22,6 +22,7 @@ protected: DECLARE_MESSAGE_MAP() public: + bool bOPenCDKey = false; bool Dialog_CDKey_Init(); bool Dialog_CDKey_Read(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKey); bool Dialog_CDKey_Write(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDKey); @@ -57,4 +58,5 @@ public: CEdit m_EditKeyPass; afx_msg void OnBnClickedButton10(); CButton m_CheckSerialDataAdd; + afx_msg void OnBnClickedButton11(); }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index c42518887ce9c86c5baf076cff7fc7712305571f..963556af0f460f649f9e23e2f11340a8ba9d5b31 100644 GIT binary patch delta 4947 zcmb7HeNa@_6+h>(u!xGNd<%+*1i_g7W-&ws7Ig(&gjLXJAPU4<6SY-C9H%hUcBo|{ z^%`F${iDt_onfX<8Z{kl$4R2iA7XcjICi1L3J5V*nZ%>xa7- zt(*>bqb-izw?YYcpbQ$}Enw5}`tlx3V-pQMV@z;7uVW}4{a6pW5cGfb;5=K%6VtY% zc}&<{RaoEg-nn06Gt~WbjpFJHuc*i?uRL8HGx$c;^^Pklp$kMeB*bo7jXcv;#aniD z9Pf#dw?D``Lp;jz^!2NlGYLI%#=yaT8a^sPgSN^xbN`{-2l_lMf3ZSl;6|aaF9+Vfo6REPPEL?xW%+_hD{O@Y?3` z_PIaa*{B2!eYoVQ{LHWd2C+;{*x5c6O@AM*;;1aQ)P4UgJgB$bz}b3Me=w#tc){OQ zrN{MSvVNo=SLy4%BJr}%&~)@R=IX8+I7j#1#^+_f+$MSKMaJ|s*Z^r=UvxTk!%noLBuR3Rs%*gT?r8+z?;<|PaW0|^j5V!HY zXApDgesl z^DGqhAI)r;2H^FS)cK2wtzflSED)!FQjga!5i3j&AvWgNU`7bBGh&CC3MuziD=i1a zhd2)AI3PhG#cTb3-)d>w2`z~snv-cxND7&f?wpWpRFs$t=!oFBWtdXY1+*bBr0mPM z@?n;NW?}pJkY<2fEecCFs>*QPFgwI6V3r%^gb-`Kf-)3T;;Sh3$&?D{05XIjLo0wx zgQlA`3t*mvTI!@KCuOxjmVp+8<{KamgIL)LQhB-e*qDLP}PamXt}79bQn7ij_0B+QAZ1baVaL zhe1;&?f^O^M<&=7gzO5cD)M+`v8_&U7+5k%CpZl(sptZifh7}iLB4{@q%oQFDR%D=a$!R8vpGD_%NLFH?bLpv!9tC+T zi#(pHQqi$gS7G_CoByL2eN4Q~&2t;OJgUE*2U?}3Xibh7QUj8o$SU`k0L~|iZRK<{o%%(2QH;o3mzYG^O*V~A z9<}cjQx?S{7Bwb|+`28=V>s-aeX6nMIAXGxvHmNZf9me~XiTJ;bhxO%o;r`WsNA=r zuEbMTx}LvJw53QYF~R()dly&&5ERyd>D=xzeug{L=4tsMA+a5dAGxVn2l~Rw@Mn&tOeqPFFrcBt^(px z<;+4pIA{}-X{wEfGGybDH%rs+-ma8^Fpw9W|e-k(#mhe$U$hSx#_{gk1&IFtO)D;8j9oY;3hHM@({-Sk?as8Qpn7Z}PBG1pSFw?>i= zI$;%6xiwn-yCAC$v2TE^(o4g}3nNsDnJy!>i{A0FzSb8V!_?>6Cjs33?+ACwIPO-8 z|420IzxykutT;>Jw5doj#L}--k}ZZB6jJ67r96`4P2=PPWXwMe^}2JI(()qP6HOc>xIwEf$C%;AoyFPnFe(-7eO0ZBgUuKOEI-VxL2A;xM4;GFp8h{t{tM>- delta 15086 zcmZ`g36xaTmH)LsH{C#k>`g;A&8lIks@@d?zp8$9f2po2e*NkNF$G3;L_juyPy{!Y zW>JhUiJ1h?7^B2QJ($5{Ky;SGWRj>eC!1k1IFlGBW7K3a#*;*P?!E86s#jg4IZeNR zw|BR9-+ixs_5XUqjjx<#ND*wYO=-_Xqu3w$r`61;f(Jm z6C}IY8jmoTAE#?ZvSw>SK@?5bY)v#73D#mwGGU}dt2J4{Nc8{;Yqe@jGSZ{Xno=NZ zN2<1*RjWXeWLG#znzdU~O-@p+-I`{Qp&r42RaX!eWKg}y*@9$2Yq~*(69A|o532Qp zXaT@x!Nrq|utAAdyZdvXmxiwB{<1@_CygyRN`U zkS6PTgOQAAvOcCjo*i|;BRP=YY|S%ZMAl->H$Y@VtF=IZ(!TAxkXUXijnlST3k^~- zq0I`Ekdj!?%AiHx4+*wgA^EeIn38KWQ0Svjz-lr;=!#I#YBoSfhs3-bGCfo_Sn&M3U_jB2@AUd^A`;I;9ZX2`F;x5rIf<(h0`5k=Y?tjO zVxHaQKo&w404$pAbrKzJ!pYhhUtWAdjF|+e#sHzBt{qQyWFyH$%`AlWdH$2 z=W#_kv5{J0-q6wLB(_v(1$jGhs2YC#jF_qwEVY|uUCnmO`e(Hr8Y#A*Boj84xzTLe zN!gz5Cp{=zK;cG{OCc>_)Sb?DJ6<~HCKFk5AV38ms(~hACn8SV3Mmddob-IFQ9XDL z#-vF-fbWwYCJagL1J}2xVIm1tihz-LGVMTlqK8f=o`SLjV>{NH#SJ?yYwi|R6AehD z(@u0i>IOg`Dh`m?@|h>Zbg1T#z^LNTJbTzn_F%jaMKhRrjG0aJL(G)ojKw@A#(JRq#6k zen(kyb52am8LYT}VsMdVFxyCC(VFAzX}>QHsYWb@5ZuV2r=vLs3&FVu3Cf@(cexV8 z$qo5fXa&g#ZGcvOB*aVgeYjUbduUz5I-`kT+6BY3qMq@peyIc|^oi0^63M|_3b78Wyn&7p zG;1<7<6a-Yur_oQRbuD4$YISTTqF#Zhsl*I#2(sekXn@fG#N?bl&&PzN=^-As38fn z3^LRRJV~MnAlcCYta1!2HN=sMK%tsy6->&awi0192V^q(xKh3m6E!&!T!;nD$)^u< zPM9)k`;PB+IVm@?)bVgu=-mgaiwOX^p=Kb%i`mdIfX}nR37Mwkqm04lrtE0cbJA%# zsuX1!aiEEC(lIz_)zJivg$Y=`J_HRW&!K-Iig|@JJs*$;)1wFB+*CqN?tnZY&ywAw z4SBLOJ@m=S5<`HaQqJ!bHK`Jrq?&FJNTv#|vZXY-*jEQaI=q&A?8{;tc0@&`iF^kc z3x_W5HB^4$>J2ftL=%iE9O(?}SQGRTAW9f8oYW%WuBj%VC5zDkcnLiQ6Ap%I0(k~H z8E9U~WYSk35)B0uoaX0nsA&`&!vRMOny1o|RR_f6cG&lHix5f1lU}x`)AeCbgk=YE z2jM&?iWq8%F1y1?_%=>)6;~idq|YV+KykTAKt@@c3@h8BpW_A@xR zeRUĨ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 Sp5~-{^*Q*WQvSKrs{aR~hTif3 diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h index 30a91f5..ed5dbc9 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/resource.h @@ -39,7 +39,6 @@ #define IDC_BUTTON6 1011 #define IDC_EDIT11 1011 #define IDC_EDIT13 1011 -#define IDC_EDIT20 1011 #define IDC_EDIT6 1012 #define IDC_BUTTON7 1012 #define IDC_EDIT14 1012 -- Gitee From e3086f48d1600c94f30f847d0c305c87d04454ba Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Thu, 11 Jul 2024 16:08:04 +0800 Subject: [PATCH 32/46] update:readme --- README.en.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.en.md b/README.en.md index 3ac2be3..7660836 100644 --- a/README.en.md +++ b/README.en.md @@ -46,7 +46,7 @@ feature list: 13. support third user verification interface 14. support distributed verification authorize function 15. black list management -16. local cdkey support +16. cdkey support(local, network-number of times, time-user self-registration, system authorization-super multi-functional cdkey) 17. announecement management 18. support dynamic verifaction code 19. support mulit login and merge time diff --git a/README.md b/README.md index 01258e5..4fa6142 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ V2可以直接升级到V3版本,因为数据库并没有修改,直接替换程 13. 支持第三方用户验证接口 14. 分布式验证授权功能支持 15. 黑名单管理 -16. 本地cdkey生成验证支持 +16. cdkey支持(本地,网络-次数,时间-用户自注册,系统授权-超多功能cdkey) 17. 支持公告管理 18. 支持动态验证码登录 19. 支持多端登录和合并用时 -- Gitee From e37f6d5f81967a28748483db243dabe775233d0f Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 12 Jul 2024 10:12:22 +0800 Subject: [PATCH 33/46] modify:ipaddr control to edit control,support domain set --- .../Authorize_Dialog/Dialog_CDKey.cpp | 2 +- .../Authorize_Dialog/Dialog_CDKey.h | 2 +- .../XEngineAuthorizeApp.aps | Bin 111500 -> 131060 bytes .../XEngineAuthorizeApp.rc | Bin 47574 -> 47534 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp index 2f2303b..ce93704 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp @@ -24,7 +24,6 @@ CDialog_CDKey::~CDialog_CDKey() void CDialog_CDKey::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); - DDX_Control(pDX, IDC_IPADDRESS1, m_EditIPAddr); DDX_Control(pDX, IDC_EDIT1, m_EditPort); DDX_Control(pDX, IDC_DATETIMEPICKER1, m_DateTimeCreate); DDX_Control(pDX, IDC_DATETIMEPICKER2, m_DateTimeRegister); @@ -51,6 +50,7 @@ void CDialog_CDKey::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_DATETIMEPICKER5, m_DataTimeRegExpiry); DDX_Control(pDX, IDC_EDIT26, m_EditKeyPass); DDX_Control(pDX, IDC_CHECK3, m_CheckSerialDataAdd); + DDX_Control(pDX, IDC_EDIT11, m_EditIPAddr); } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h index 9ae75d6..89c5dbf 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.h @@ -29,7 +29,6 @@ public: public: virtual BOOL OnInitDialog(); afx_msg void OnBnClickedButton1(); - CIPAddressCtrl m_EditIPAddr; CEdit m_EditPort; CDateTimeCtrl m_DateTimeCreate; CDateTimeCtrl m_DateTimeRegister; @@ -59,4 +58,5 @@ public: afx_msg void OnBnClickedButton10(); CButton m_CheckSerialDataAdd; afx_msg void OnBnClickedButton11(); + CEdit m_EditIPAddr; }; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps index 963556af0f460f649f9e23e2f11340a8ba9d5b31..6b78a10f040f6c9afa595ae7abce3772379dab0e 100644 GIT binary patch delta 13647 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 S(VQfj#*-0%y)sI_>GXf_C%jq! delta 2175 zcmb7GZA@Eb6h7w`X@hn&2D(!D=nNs1RUpP7LCxBwPTa>`2NlpXV_906Y{{B!%zY5W znJmjjLd~5V;}$cMW#I?OFk568C2T(?%8Z&gT?{6enYG(WfrKCf*6VrcwSd2F-zGip z`<&;T^SmFY>5OXZie^W=hUPw0Ji*{c=LQGP4Px{u6YxNAz`*I7xXFQD`sE(BOR7qB zQ7n5+<#7Vu03TE}xtr{&V6PnLtAwW^0J)Gf05rf+IJm_2K#)HNAjIo~gnwhc13>ac zzzPLm0+CiEo;-H9;lHHR7saEtMu(1#E4d6Mq& z>_?tyWxIE-tv}vzrm0p_NtQTP(;v6-S=tlF@)hD%v3i-M`MN&4er7O~+mg;O!#;7K zt_dt#qaApIvt1kvMQ*XALld}JNGi67%Q3?haA}uA@d<1bvCRoArxQP*oz5q)Ldz1{ z*R{jh{?hJLmN-*1hre^7Lr6$DY9_H<ZY(v*zgpd8n8{H&FFOV zzCExBnxO@}{DwTR6}IygwXpTTTReXg{LG=@Br6Zkp-F$pc;+FUb6BXqfJ4n#lRNW} zU73ei9%ZtP3z-)f&OBsX3(5MpuMnj#zu&)28Zs!gvOQnY-oALNVq}@TP^(P0<}01D zMftV$|4?xPZly zEk{Y*uv0`}4m0%#%$chszq8ZN0t;K{H-XiZC~NN6$+E~8ILW%mSgb-BirUF1u<(o2 z$e1B80`%S@7D=TEn!m)2*w0==JP9u(BF;92D!+1!v=6x;fFVmMgIa4qJ6Od diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc index db8d2147dd1c0fc01036c3c2b12c74287a5a09f7..085cc658f08bb247f8c01202e242c5b7cae407b8 100644 GIT binary patch delta 51 zcmccinQ7f;rVR(GHpf+)$WH#FVI^$Hpu=FoU<@P;87zRLC4=c?Mj6e?W;%SE7tAnI F1OV7!4@&?5 delta 117 zcmZ4Ynd#bRrVR(GCZCJZGxuZ&U~pt`0m2{#SB799G-S|WPy*7G48;r(*%XEph9ZVk zAitQwn864rt26mvthlHNgE>&GA%g{wv;>NS*rt;c#q>8nsuGf&ykb4y Date: Fri, 12 Jul 2024 10:28:33 +0800 Subject: [PATCH 34/46] improved:cdkey init and process --- .../Authorize_CDKey/Authorize_CDKey.cpp | 1 + .../XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp index a697f27..8f3b88c 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp @@ -809,6 +809,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_BuildKeyTime(XENGINE_AUTHORIZE_LOCAL* pSt { Authorize_IsErrorOccur = false; + pSt_AuthLocal->st_AuthAppInfo.bInit = true; //判断注册时间方式 if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM == pSt_AuthLocal->st_AuthRegInfo.enSerialType) { diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp index ce93704..cfff24d 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp @@ -249,6 +249,11 @@ void CDialog_CDKey::OnBnClickedButton1() AfxMessageBox(_T("创建失败,注册验证类型没选择")); return; } + if (3 != m_ComboRegSerial.GetCurSel() || 4 != m_ComboRegSerial.GetCurSel()) + { + AfxMessageBox(_T("创建失败,注册类型仅支持次数卡和自定义时间卡")); + return; + } CString m_StrPass; m_EditKeyPass.GetWindowText(m_StrPass); if (m_StrPass.IsEmpty()) -- Gitee From d5dcb67f813ee5425a76460ac4e8f2a4f46b185b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 12 Jul 2024 10:35:11 +0800 Subject: [PATCH 35/46] modify:extend cdkey addr size --- XEngine_Source/XAuth_Protocol.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h index 429b503..202d1ef 100644 --- a/XEngine_Source/XAuth_Protocol.h +++ b/XEngine_Source/XAuth_Protocol.h @@ -83,7 +83,7 @@ typedef enum ////////////////////////////////////////////////////////////////////////// typedef struct { - XCHAR tszAddr[32]; //服务器IP地址 + XCHAR tszAddr[MAX_PATH]; //服务器或者域名地址 int nPort; //端口号码,如果>0表示CDKEY验证失败后改为网络验证 //版本信息 struct -- Gitee From 0f8afb62199291e651f2d1616ffabd849735c3e7 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 12 Jul 2024 11:14:08 +0800 Subject: [PATCH 36/46] modify:server handle cdkey serial field and set serial field --- .../AuthorizeModule_Protocol.vcxproj | 2 +- .../Protocol_Parse/Protocol_Parse.cpp | 69 +++++++++++++------ .../AuthorizeHTTP_CDKey.cpp | 24 +++++++ 3 files changed, 74 insertions(+), 21 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.vcxproj b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.vcxproj index 27210de..68f5762 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.vcxproj +++ b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.vcxproj @@ -72,7 +72,7 @@ true - $(XEngine_Include);../XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Include);../XEngine_Depend/XEngine_Module/jsoncpp;..\AuthorizeModule_Protocol;$(IncludePath) $(XEngine_Lib32);$(LibraryPath) diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp index da243fe..7232a82 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp @@ -1104,26 +1104,6 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseCDKey(LPCXSTR lpszMsgBuffer, int n } //注册信息 Json::Value st_JsonREGInfo = st_JsonRoot["st_AuthRegInfo"]; - if (!st_JsonREGInfo["nHasTime"].isNull()) - { - pSt_Authorize->st_AuthRegInfo.nHasTime = (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE)st_JsonREGInfo["nHasTime"].asInt(); - } - if (!st_JsonREGInfo["enSerialType"].isNull()) - { - pSt_Authorize->st_AuthRegInfo.enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)st_JsonREGInfo["enSerialType"].asInt(); - } - if (!st_JsonREGInfo["enRegType"].isNull()) - { - pSt_Authorize->st_AuthRegInfo.enRegType = (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE)st_JsonREGInfo["enRegType"].asInt(); - } - if (!st_JsonREGInfo["enHWType"].isNull()) - { - pSt_Authorize->st_AuthRegInfo.enHWType = (ENUM_AUTHORIZE_MODULE_HW_TYPE)st_JsonREGInfo["enHWType"].asInt(); - } - if (!st_JsonREGInfo["enVModeType"].isNull()) - { - pSt_Authorize->st_AuthRegInfo.enVModeType = (ENUM_AUTHORIZE_MODULE_VERMODE_TYPE)st_JsonREGInfo["enVModeType"].asInt(); - } if (!st_JsonREGInfo["tszHardware"].isNull()) { _tcsxcpy(pSt_Authorize->st_AuthRegInfo.tszHardware, st_JsonREGInfo["tszHardware"].asCString()); @@ -1148,6 +1128,55 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseCDKey(LPCXSTR lpszMsgBuffer, int n { _tcsxcpy(pSt_Authorize->st_AuthRegInfo.tszExpiryTime, st_JsonREGInfo["tszExpiryTime"].asCString()); } + if (!st_JsonREGInfo["nHasTime"].isNull()) + { + pSt_Authorize->st_AuthRegInfo.nHasTime = st_JsonREGInfo["nHasTime"].asInt(); + } + if (!st_JsonREGInfo["enSerialType"].isNull()) + { + pSt_Authorize->st_AuthRegInfo.enSerialType = (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE)st_JsonREGInfo["enSerialType"].asInt(); + } + if (!st_JsonREGInfo["enRegType"].isNull()) + { + pSt_Authorize->st_AuthRegInfo.enRegType = (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE)st_JsonREGInfo["enRegType"].asInt(); + } + if (!st_JsonREGInfo["enHWType"].isNull()) + { + pSt_Authorize->st_AuthRegInfo.enHWType = (ENUM_AUTHORIZE_MODULE_HW_TYPE)st_JsonREGInfo["enHWType"].asInt(); + } + if (!st_JsonREGInfo["enVModeType"].isNull()) + { + pSt_Authorize->st_AuthRegInfo.enVModeType = (ENUM_AUTHORIZE_MODULE_VERMODE_TYPE)st_JsonREGInfo["enVModeType"].asInt(); + } + //临时序列号 + Json::Value st_JsonSerialInfo = st_JsonRoot["st_AuthSerial"]; + if (!st_JsonSerialInfo.isNull()) + { + if (!st_JsonSerialInfo["tszTimeSerial"].isNull()) + { + _tcsxcpy(pSt_Authorize->st_AuthSerial.st_TimeLimit.tszTimeSerial, st_JsonSerialInfo["tszTimeSerial"].asCString()); + } + if (!st_JsonSerialInfo["nTimeCount"].isNull()) + { + pSt_Authorize->st_AuthSerial.st_TimeLimit.nTimeCount = st_JsonSerialInfo["nTimeCount"].asInt(); + } + if (!st_JsonSerialInfo["tszTimeSerial"].isNull()) + { + _tcsxcpy(pSt_Authorize->st_AuthSerial.st_DataLimit.tszDataSerial, st_JsonSerialInfo["tszTimeSerial"].asCString()); + } + if (!st_JsonSerialInfo["tszDataTime"].isNull()) + { + _tcsxcpy(pSt_Authorize->st_AuthSerial.st_DataLimit.tszDataTime, st_JsonSerialInfo["tszDataTime"].asCString()); + } + if (!st_JsonSerialInfo["bTimeAdd"].isNull()) + { + pSt_Authorize->st_AuthSerial.st_DataLimit.bTimeAdd = st_JsonSerialInfo["bTimeAdd"].asBool(); + } + if (!st_JsonSerialInfo["tszUNLimitSerial"].isNull()) + { + _tcsxcpy(pSt_Authorize->st_AuthSerial.st_UNLimit.tszUNLimitSerial, st_JsonSerialInfo["tszUNLimitSerial"].asCString()); + } + } //CDKEY用户信息 Json::Value st_JsonUserInfo = st_JsonRoot["st_AuthUserInfo"]; if (!st_JsonUserInfo["tszUserName"].isNull()) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp index 8ccaced..2385735 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp @@ -26,6 +26,30 @@ bool XEngine_AuthorizeHTTP_CDKey(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LP memset(&st_Authorize, '\0', sizeof(XENGINE_AUTHORIZE_LOCAL)); Protocol_Parse_HttpParseCDKey(lpszMsgBuffer, nMsgLen, &st_Authorize); + + if (_tcsxlen(st_Authorize.st_AuthSerial.st_TimeLimit.tszTimeSerial) <= 0) + { + int nSerialCount = 3; + XCHAR** pptszSerialList; + Authorize_Serial_Create(&pptszSerialList, _X("XAUTH"), nSerialCount, 9); + + st_Authorize.st_AuthSerial.st_TimeLimit.nTimeCount = 9999; + _tcsxcpy(st_Authorize.st_AuthSerial.st_TimeLimit.tszTimeSerial, pptszSerialList[0]); + + st_Authorize.st_AuthSerial.st_DataLimit.bTimeAdd = false; + _tcsxcpy(st_Authorize.st_AuthSerial.st_DataLimit.tszDataSerial, pptszSerialList[1]); + XCHAR tszTimeStr[128] = {}; + XENGINE_LIBTIMER st_LibTime = {}; + BaseLib_OperatorTime_GetSysTime(&st_LibTime); + st_LibTime.wYear += 1; //一年后过期 + BaseLib_OperatorTime_TimeToStr(tszTimeStr, NULL, true, &st_LibTime); + + _tcsxcpy(st_Authorize.st_AuthSerial.st_DataLimit.tszDataTime, tszTimeStr); + + _tcsxcpy(st_Authorize.st_AuthSerial.st_UNLimit.tszUNLimitSerial, pptszSerialList[2]); + BaseLib_OperatorMemory_Free((XPPPMEM)&pptszSerialList, nSerialCount); + } + if (!Authorize_CDKey_WriteMemory(tszRVBuffer, &nRVLen, &st_Authorize)) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 406, "Not Acceptable,write key failed"); -- Gitee From aff2f781dc4531ac84e4feef64d2c393b1c8ea1b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 12 Jul 2024 11:22:58 +0800 Subject: [PATCH 37/46] delete:ver lan support for cdkey module modify:server ver mode and set start time now --- .../Authorize_CDKey/Authorize_CDKey.cpp | 2 ++ XEngine_Source/XAuth_Protocol.h | 3 +-- .../AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp | 8 ++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp index 8f3b88c..8948aee 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp @@ -949,6 +949,8 @@ bool CAuthorize_CDKey::Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL* pSt memset(&st_StartTimer, '\0', sizeof(XENGINE_LIBTIMER)); memset(&st_EndTimer, '\0', sizeof(XENGINE_LIBTIMER)); memset(&st_SysTimer, '\0', sizeof(XENGINE_LIBTIMER)); + + BaseLib_OperatorTime_TimeToStr(pSt_AuthLocal->st_AuthRegInfo.tszStartTime); //处理注册类型 if (ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_UNLIMIT == pSt_AuthLocal->st_AuthRegInfo.enRegType) { diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h index 202d1ef..cdacc8a 100644 --- a/XEngine_Source/XAuth_Protocol.h +++ b/XEngine_Source/XAuth_Protocol.h @@ -75,8 +75,7 @@ typedef enum { ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_UNKNOW = 0, //未知 ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_LOCAL = 0x01, //本地 - ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_LAN = 0x02, //局域网 - ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_NETWORK = 0x04, //网络 + ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_NETWORK = 0x02, //网络 }ENUM_AUTHORIZE_MODULE_VERMODE_TYPE, * LPENUM_AUTHORIZE_MODULE_VERMODE_TYPE; ////////////////////////////////////////////////////////////////////////// // 导出的结构体 diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp index 2385735..5edd7eb 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_CDKey.cpp @@ -89,6 +89,14 @@ bool XEngine_AuthorizeHTTP_CDKey(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LP memset(&st_Authorize, '\0', sizeof(XENGINE_AUTHORIZE_LOCAL)); Authorize_CDKey_ReadMemory(lpszMsgBuffer, nMsgLen, &st_Authorize); + + if (ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_NETWORK != st_Authorize.st_AuthRegInfo.enVModeType) + { + Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 400, "unsupport,cdkey is not authorized"); + XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("HTTP客户端:%s,请求验证CDKEY失败,cdkey未授权或者已超时,错误:%lX"), lpszClientAddr, Authorize_GetLastError()); + return false; + } if (!Authorize_CDKey_GetLeftTimer(&st_Authorize)) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 401, "Unauthorized,cdkey is not authorized"); -- Gitee From 7c3bc6981f811825d57a447772d3837a3744624e Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 12 Jul 2024 14:25:04 +0800 Subject: [PATCH 38/46] fixed:user register serial not verification and not set register time fixed:get left time verification time is incorrect --- .../Authorize_CDKey/Authorize_CDKey.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp index 8948aee..b75b993 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp @@ -856,6 +856,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_UserRegister(XENGINE_AUTHORIZE_LOCAL* pSt if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial, lpszSerialStr, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_TimeLimit.tszTimeSerial))) { //次数验证 + bSerial = true; pSt_AuthLocal->st_AuthRegInfo.enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME; pSt_AuthLocal->st_AuthRegInfo.enRegType = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_OFFICIAL; Authorize_CDKey_BuildKeyTime(pSt_AuthLocal, pSt_AuthLocal->st_AuthSerial.st_TimeLimit.nTimeCount); @@ -863,6 +864,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_UserRegister(XENGINE_AUTHORIZE_LOCAL* pSt else if (0 == _tcsxncmp(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial, lpszSerialStr, _tcsxlen(pSt_AuthLocal->st_AuthSerial.st_DataLimit.tszDataSerial))) { //日期序列 + bSerial = true; pSt_AuthLocal->st_AuthRegInfo.enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_CUSTOM; pSt_AuthLocal->st_AuthRegInfo.enRegType = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_OFFICIAL; XENGINE_LIBTIMER st_LibTime = {}; @@ -909,6 +911,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_UserRegister(XENGINE_AUTHORIZE_LOCAL* pSt Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_FAILED; return false; } + BaseLib_OperatorTime_TimeToStr(pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime); return true; } /******************************************************************** @@ -984,15 +987,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL* pSt else { //其他类型的注册机制 - if (pSt_AuthLocal->st_AuthRegInfo.nHasTime <= 0) - { - Authorize_IsErrorOccur = true; - Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTHASTIME; - return false; - } BaseLib_OperatorTime_GetSysTime(&st_SysTimer); - //转换时间格式 - _stxscanf(pSt_AuthLocal->st_AuthRegInfo.tszRegisterTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), &st_StartTimer.wYear, &st_StartTimer.wMonth, &st_StartTimer.wDay, &st_StartTimer.wHour, &st_StartTimer.wMinute, &st_StartTimer.wSecond); //计算超时时间 if (ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_SECOND == pSt_AuthLocal->st_AuthRegInfo.enSerialType) { @@ -1021,7 +1016,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL* pSt Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_NOTSUPPORT; return false; } - if (pSt_AuthLocal->st_AuthRegInfo.nHasTime <= 0) + if (pSt_AuthLocal->st_AuthRegInfo.nHasTime < 0) { Authorize_IsErrorOccur = true; Authorize_dwErrorCode = ERROR_AUTHORIZE_MODULE_CDKEY_TIMEOUT; -- Gitee From c7d1ed2f6741680a65f2ccd0c70fdc8584dc5607 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 12 Jul 2024 14:39:39 +0800 Subject: [PATCH 39/46] fixed:app set cdkey time is incorrect --- .../Authorize_CDKey/Authorize_CDKey.cpp | 1 + .../AuthorizeModule_CDKey/CDKey_Define.h | 1 + .../Authorize_Dialog/Dialog_CDKey.cpp | 28 +++++++++++++++---- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp index b75b993..158e5fe 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp +++ b/XEngine_Source/AuthorizeModule_CDKey/Authorize_CDKey/Authorize_CDKey.cpp @@ -975,6 +975,7 @@ bool CAuthorize_CDKey::Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL* pSt } else { + pSt_AuthLocal->st_AuthRegInfo.enRegType = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_EXPIRED; _xstprintf(pSt_AuthLocal->st_AuthRegInfo.tszExpiryTime, _X("%04d-%02d-%02d %02d:%02d:%02d"), st_SysTimer.wYear, st_SysTimer.wMonth, st_SysTimer.wDay, st_SysTimer.wHour, st_SysTimer.wMinute, st_SysTimer.wSecond); } } diff --git a/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h index 87c04ee..fff9936 100644 --- a/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h +++ b/XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h @@ -260,6 +260,7 @@ extern "C" bool Authorize_CDKey_UserRegister(XENGINE_AUTHORIZE_LOCAL* pSt_AuthLo 意思:是否成功 备注:无限制版本不做验证 其他验证nHasTime将被设置还拥有时间 + 此函数在程序启动的时候必须调用,可以设置更新CDKEY信息也可以验证CDKEY *********************************************************************/ extern "C" bool Authorize_CDKey_GetLeftTimer(XENGINE_AUTHORIZE_LOCAL * pSt_AuthLocal, LPCXSTR lpszSerialNumber = NULL); /******************************************************************** diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp index cfff24d..08837da 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp @@ -213,10 +213,24 @@ bool CDialog_CDKey::Dialog_CDKey_Write(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDK m_EditRegLeftTime.SetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszLeftTime); m_StrFormat.Format(_T("%lld"), pSt_AuthorizeCDKey->st_AuthRegInfo.nHasTime); m_EditRegHaveTime.SetWindowText(m_StrFormat); - m_DateTimeCreate.SetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszCreateTime); - m_DateTimeRegister.SetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszRegisterTime); - m_DateTimeStart.SetWindowText(pSt_AuthorizeCDKey->st_AuthRegInfo.tszStartTime); - m_DataTimeRegExpiry.SetWindowTextA(pSt_AuthorizeCDKey->st_AuthRegInfo.tszExpiryTime); + COleDateTime m_OleDTime; + // 尝试解析字符串为日期和时间 + if (m_OleDTime.ParseDateTime(pSt_AuthorizeCDKey->st_AuthRegInfo.tszCreateTime)) + { + m_DateTimeCreate.SetTime(m_OleDTime); + } + if (m_OleDTime.ParseDateTime(pSt_AuthorizeCDKey->st_AuthRegInfo.tszRegisterTime)) + { + m_DateTimeRegister.SetTime(m_OleDTime); + } + if (m_OleDTime.ParseDateTime(pSt_AuthorizeCDKey->st_AuthRegInfo.tszStartTime)) + { + m_DateTimeStart.SetTime(m_OleDTime); + } + if (m_OleDTime.ParseDateTime(pSt_AuthorizeCDKey->st_AuthRegInfo.tszExpiryTime)) + { + m_DataTimeSerial.SetTime(m_OleDTime); + } m_ComboRegSerial.SetCurSel(pSt_AuthorizeCDKey->st_AuthRegInfo.enSerialType); m_ComboRegType.SetCurSel(pSt_AuthorizeCDKey->st_AuthRegInfo.enRegType); @@ -232,7 +246,11 @@ bool CDialog_CDKey::Dialog_CDKey_Write(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDK m_CheckSerialDataAdd.SetCheck(BST_CHECKED); } m_EditSerialDataNumber.SetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataSerial); - m_DataTimeSerial.SetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataTime); + // 尝试解析字符串为日期和时间 + if (m_OleDTime.ParseDateTime(pSt_AuthorizeCDKey->st_AuthSerial.st_DataLimit.tszDataTime)) + { + m_DataTimeSerial.SetTime(m_OleDTime); + } m_EditSerialUnlimitNumber.SetWindowText(pSt_AuthorizeCDKey->st_AuthSerial.st_UNLimit.tszUNLimitSerial); //用户信息 -- Gitee From 8b7c933a16d967d987e989234d8dc18e40876a1b Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 12 Jul 2024 14:45:34 +0800 Subject: [PATCH 40/46] modify:local and network cdkey verification support for example --- XEngine_Apps/Authorize_APPClient.sln | 10 + .../Authorize_APPLocal/Authorize_APPLocal.cpp | 304 +++++++++++------- .../Authorize_APPLocal.vcxproj | 2 +- .../Authorize_CDKeyNetVer.cpp | 180 +++++++++++ .../Authorize_CDKeyNetVer.vcxproj | 139 ++++++++ .../Authorize_CDKeyNetVer.vcxproj.filters | 22 ++ .../Authorize_CDKeyNetVer.vcxproj.user | 4 + 7 files changed, 535 insertions(+), 126 deletions(-) create mode 100644 XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.cpp create mode 100644 XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj create mode 100644 XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj.filters create mode 100644 XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj.user diff --git a/XEngine_Apps/Authorize_APPClient.sln b/XEngine_Apps/Authorize_APPClient.sln index f7c0be3..c2e56bc 100644 --- a/XEngine_Apps/Authorize_APPClient.sln +++ b/XEngine_Apps/Authorize_APPClient.sln @@ -9,6 +9,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Authorize_APPLocal", "Autho EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Authorize_ClientModule", "Authorize_ClientModule\Authorize_ClientModule.vcxproj", "{82B923A9-2F4A-4784-A245-BAA6ABF5A358}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Authorize_CDKeyNetVer", "Authorize_CDKeyNetVer\Authorize_CDKeyNetVer.vcxproj", "{1D584651-5E93-43BA-9A48-E7D199DC587F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -41,6 +43,14 @@ Global {82B923A9-2F4A-4784-A245-BAA6ABF5A358}.Release|x64.Build.0 = Release|x64 {82B923A9-2F4A-4784-A245-BAA6ABF5A358}.Release|x86.ActiveCfg = Release|Win32 {82B923A9-2F4A-4784-A245-BAA6ABF5A358}.Release|x86.Build.0 = Release|Win32 + {1D584651-5E93-43BA-9A48-E7D199DC587F}.Debug|x64.ActiveCfg = Debug|x64 + {1D584651-5E93-43BA-9A48-E7D199DC587F}.Debug|x64.Build.0 = Debug|x64 + {1D584651-5E93-43BA-9A48-E7D199DC587F}.Debug|x86.ActiveCfg = Debug|Win32 + {1D584651-5E93-43BA-9A48-E7D199DC587F}.Debug|x86.Build.0 = Debug|Win32 + {1D584651-5E93-43BA-9A48-E7D199DC587F}.Release|x64.ActiveCfg = Release|x64 + {1D584651-5E93-43BA-9A48-E7D199DC587F}.Release|x64.Build.0 = Release|x64 + {1D584651-5E93-43BA-9A48-E7D199DC587F}.Release|x86.ActiveCfg = Release|Win32 + {1D584651-5E93-43BA-9A48-E7D199DC587F}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.cpp b/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.cpp index 4971aa0..6b78a13 100644 --- a/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.cpp +++ b/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.cpp @@ -4,7 +4,7 @@ #pragma comment(lib,"Ws2_32") #pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") #pragma comment(lib,"XEngine_Core/XEngine_OPenSsl") -#pragma comment(lib,"XEngine_Client/XClient_APIHelp") +#pragma comment(lib,"XEngine_SystemSdk/XEngine_SystemApi") #ifdef _WIN64 #pragma comment(lib,"../../XEngine_Source/x64/Debug/jsoncpp") #pragma comment(lib,"../../XEngine_Source/x64/Debug/AuthorizeModule_CDKey") @@ -19,159 +19,213 @@ #include #include #include +#include #include #include #include #include #include -#include -#include +#include +#include #include "../../XEngine_Source/XAuth_Protocol.h" #include "../../XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h" #include "../../XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h" //需要优先配置XEngine -//WINDOWS支持VS2022 x64 debug 编译调试 -//g++ -std=c++17 -Wall -g Authorize_APPLocal.cpp -o Authorize_APPLocal.exe -I ../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp -lXEngine_BaseLib -L ../../XEngine_Release -lXEngine_OPenSsl -lXClient_APIHelp -lAuthorizeModule_CDKey -ljsoncpp -Wl,-rpath=../../XEngine_Release +//WINDOWS支持VS2022 x86 debug 编译调试 +//g++ -std=c++17 -Wall -g Authorize_APPLocal.cpp -o Authorize_APPLocal.exe -I ../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp -L ../../XEngine_Release -lXEngine_BaseLib -lXEngine_OPenSsl -lXEngine_SystemApi -lAuthorizeModule_CDKey -ljsoncpp -Wl,-rpath=../../XEngine_Release -//#define XENGINE_AUTHORIZE_CDKEY_CRYPTO +XCHAR tszSerialStr[MAX_PATH] = {}; +//1.创建CDKEY.或者由管理员创建. +bool Authorize_APPLocal_Create(LPCXSTR lpszKeyFile, LPCXSTR lpszPasswd) +{ + int nRet = 0; + XCHAR tszENCodecBuffer[4096] = {}; + XCHAR tszDECodecBuffer[4096] = {}; + XENGINE_AUTHORIZE_LOCAL st_AuthLocal = {}; + SYSTEMAPI_SERIAL_INFOMATION st_SDKSerial = {}; + + SystemApi_HardWare_GetSerial(&st_SDKSerial); + //网络信息 + st_AuthLocal.nPort = 5302; + _tcsxcpy(st_AuthLocal.tszAddr, _X("http://app.xyry.org")); + //软件信息 + st_AuthLocal.st_AuthAppInfo.bInit = false; + st_AuthLocal.st_AuthAppInfo.nExecTime = 0; + _xstprintf(st_AuthLocal.st_AuthAppInfo.tszAppName, _X("XEngine_Authorize")); + _xstprintf(st_AuthLocal.st_AuthAppInfo.tszAppVer, _X("V1.0.0.1")); + //注册信息 + st_AuthLocal.st_AuthRegInfo.enHWType = ENUM_AUTHORIZE_MODULE_HW_TYPE_BIOS; + st_AuthLocal.st_AuthRegInfo.enRegType = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_TRY; + st_AuthLocal.st_AuthRegInfo.enSerialType = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME; + st_AuthLocal.st_AuthRegInfo.enVModeType = ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_LOCAL; + st_AuthLocal.st_AuthRegInfo.nHasTime = 0; + BaseLib_OperatorTime_TimeToStr(st_AuthLocal.st_AuthRegInfo.tszCreateTime); + _tcsxcpy(st_AuthLocal.st_AuthRegInfo.tszHardware, st_SDKSerial.tszBoardSerial); + _xstprintf(st_AuthLocal.st_AuthRegInfo.tszLeftTime, _X("0")); //0次试用 + //序列号信息.可以不写,如果不想启用用户自己注册.或者交给管理员填充 + int nSerialCount = 3; + XCHAR** pptszSerialList; + Authorize_Serial_Create(&pptszSerialList, _X("XAUTH"), nSerialCount, 9); + _tcsxcpy(tszSerialStr, pptszSerialList[0]); + + st_AuthLocal.st_AuthSerial.st_TimeLimit.nTimeCount = 5; + _tcsxcpy(st_AuthLocal.st_AuthSerial.st_TimeLimit.tszTimeSerial, pptszSerialList[0]); + + st_AuthLocal.st_AuthSerial.st_DataLimit.bTimeAdd = false; + _tcsxcpy(st_AuthLocal.st_AuthSerial.st_DataLimit.tszDataSerial, pptszSerialList[1]); + XCHAR tszTimeStr[128] = {}; + XENGINE_LIBTIMER st_LibTime = {}; + BaseLib_OperatorTime_GetSysTime(&st_LibTime); + st_LibTime.wYear += 1; //一年后过期 + BaseLib_OperatorTime_TimeToStr(tszTimeStr, NULL, true, &st_LibTime); + + _tcsxcpy(st_AuthLocal.st_AuthSerial.st_DataLimit.tszDataTime, tszTimeStr); + + _tcsxcpy(st_AuthLocal.st_AuthSerial.st_UNLimit.tszUNLimitSerial, pptszSerialList[2]); + //用户信息 + _xstprintf(st_AuthLocal.st_AuthUserInfo.tszUserName, _X("qyt")); + _xstprintf(st_AuthLocal.st_AuthUserInfo.tszUserContact, _X("486179@qq.com")); + + Authorize_CDKey_WriteMemory(tszDECodecBuffer, &nRet, &st_AuthLocal); + OPenSsl_XCrypto_Encoder(tszDECodecBuffer, &nRet, (XBYTE*)tszENCodecBuffer, lpszPasswd); + FILE* pSt_File = _xtfopen(lpszKeyFile, _X("wb")); + if (NULL == pSt_File) + { + printf("create key file is failed\n"); + return false; + } + fwrite(tszENCodecBuffer, 1, nRet, pSt_File); + fclose(pSt_File); + + return true; +} +//2.打开CDKEY并且授权(授权只能通过自我授权或者由管理员授权,用户不应该可以自己随意授权) +bool Authorize_APPLocal_Auth(LPCXSTR lpszKeyFile, LPCXSTR lpszPasswd, LPCXSTR lpszSerialStr) +{ + XCHAR tszENCodecBuffer[4096] = {}; + XCHAR tszDECodecBuffer[4096] = {}; + XENGINE_AUTHORIZE_LOCAL st_AuthLocal = {}; + + FILE* pSt_File = _xtfopen(lpszKeyFile, _X("rb")); + if (NULL == pSt_File) + { + printf("open key file is failed\n"); + return false; + } + int nRet = fread(tszENCodecBuffer, 1, sizeof(tszENCodecBuffer), pSt_File); + fclose(pSt_File); + + OPenSsl_XCrypto_Decoder(tszENCodecBuffer, &nRet, tszDECodecBuffer, lpszPasswd); + //printf("大小:%d,内容:\n%s\n", nRet, tszDECodecBuffer); + + Authorize_CDKey_ReadMemory(tszDECodecBuffer, nRet, &st_AuthLocal); + if (!Authorize_CDKey_UserRegister(&st_AuthLocal, lpszSerialStr)) + { + printf("serila verifacation is failed,error code:%lX\n", Authorize_GetLastError()); + return false; + } + + memset(tszENCodecBuffer, '\0', sizeof(tszENCodecBuffer)); + memset(tszDECodecBuffer, '\0', sizeof(tszDECodecBuffer)); + Authorize_CDKey_WriteMemory(tszDECodecBuffer, &nRet, &st_AuthLocal); + OPenSsl_XCrypto_Encoder(tszDECodecBuffer, &nRet, (XBYTE*)tszENCodecBuffer, lpszPasswd); + pSt_File = _xtfopen(lpszKeyFile, _X("wb")); + fwrite(tszENCodecBuffer, 1, nRet, pSt_File); + fclose(pSt_File); + return true; +} +//3.验证CDkey +bool Authorize_APPLocal_Auth(LPCXSTR lpszKeyFile, LPCXSTR lpszPasswd) +{ + XCHAR tszENCodecBuffer[4096] = {}; + XCHAR tszDECodecBuffer[4096] = {}; + XENGINE_AUTHORIZE_LOCAL st_AuthLocal = {}; -LPCXSTR lpszPasswd = _X("123123"); + FILE* pSt_File = _xtfopen(lpszKeyFile, _X("rb")); + if (NULL == pSt_File) + { + printf("open key file is failed\n"); + return false; + } + int nRet = fread(tszENCodecBuffer, 1, sizeof(tszENCodecBuffer), pSt_File); + fclose(pSt_File); + OPenSsl_XCrypto_Decoder(tszENCodecBuffer, &nRet, tszDECodecBuffer, lpszPasswd); + //printf("大小:%d,内容:\n%s\n", nRet, tszDECodecBuffer); + Authorize_CDKey_ReadMemory(tszDECodecBuffer, nRet, &st_AuthLocal); + if (!Authorize_CDKey_GetLeftTimer(&st_AuthLocal)) + { + //失败也需要重写CDKEY + memset(tszENCodecBuffer, '\0', sizeof(tszENCodecBuffer)); + memset(tszDECodecBuffer, '\0', sizeof(tszDECodecBuffer)); + Authorize_CDKey_WriteMemory(tszDECodecBuffer, &nRet, &st_AuthLocal); + OPenSsl_XCrypto_Encoder(tszDECodecBuffer, &nRet, (XBYTE*)tszENCodecBuffer, lpszPasswd); + pSt_File = _xtfopen(lpszKeyFile, _X("wb")); + fwrite(tszENCodecBuffer, 1, nRet, pSt_File); + fclose(pSt_File); + + printf("verifaction is failed\n"); + return false; + } + SYSTEMAPI_SERIAL_INFOMATION st_SDKSerial = {}; + SystemApi_HardWare_GetSerial(&st_SDKSerial); + + if (ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_LOCAL != st_AuthLocal.st_AuthRegInfo.enVModeType) + { + printf("cdkey does not support local verification\n"); + return false; + } + if (ENUM_AUTHORIZE_MODULE_HW_TYPE_BIOS != st_AuthLocal.st_AuthRegInfo.enHWType) + { + printf("cdkey serial type is incorrect\n"); + return false; + } + if (0 != _tcsxnicmp(st_SDKSerial.tszBoardSerial, st_AuthLocal.st_AuthRegInfo.tszHardware, _tcsxlen(st_SDKSerial.tszBoardSerial))) + { + printf("cdkey serial verification is failed\n"); + return false; + } + + memset(tszENCodecBuffer, '\0', sizeof(tszENCodecBuffer)); + memset(tszDECodecBuffer, '\0', sizeof(tszDECodecBuffer)); + Authorize_CDKey_WriteMemory(tszDECodecBuffer, &nRet, &st_AuthLocal); + OPenSsl_XCrypto_Encoder(tszDECodecBuffer, &nRet, (XBYTE*)tszENCodecBuffer, lpszPasswd); + pSt_File = _xtfopen(lpszKeyFile, _X("wb")); + fwrite(tszENCodecBuffer, 1, nRet, pSt_File); + fclose(pSt_File); + return true; +} int main() { #ifdef _MSC_BUILD WSADATA st_WSAData; WSAStartup(MAKEWORD(2, 2), &st_WSAData); -#endif - int nLen = 0; - int nCode = 0; - Json::Value st_JsonRoot; - Json::Value st_JsonAPPInfo; - Json::Value st_JsonREGInfo; - Json::Value st_JsonUserInfo; - st_JsonRoot["tszAddr"] = "http://app.xyry.org"; - st_JsonRoot["nPort"] = 5501; - - st_JsonAPPInfo["tszAppName"] = "XEngine"; - st_JsonAPPInfo["tszAppVer"] = "1.0.0.1001"; - - st_JsonREGInfo["tszHardware"] = "5501012NE21N"; - st_JsonREGInfo["enSerialType"] = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME; - st_JsonREGInfo["enRegType"] = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_TRY; - st_JsonREGInfo["enHWType"] = ENUM_AUTHORIZE_MODULE_HW_TYPE_CPU; - - st_JsonUserInfo["tszUserName"] = "qyt"; - st_JsonUserInfo["tszUserContact"] = "486179@qq.com"; - - st_JsonRoot["st_AuthAppInfo"] = st_JsonAPPInfo; - st_JsonRoot["st_AuthRegInfo"] = st_JsonREGInfo; - st_JsonRoot["st_AuthUserInfo"] = st_JsonUserInfo; - - XCHAR* ptszCreateBuffer = NULL; - LPCXSTR lpszCreateUrl = _X("http://192.168.1.10:5302/auth/cdkey/create"); - //1. 创建CDKEY -#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO - //加密 - CHAR tszCodecBuffer[4096]; - memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); - - nLen = st_JsonRoot.toStyledString().length(); - OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nLen, (XBYTE *)tszCodecBuffer, lpszPasswd); - if (!APIClient_Http_Request(_X("POST"), lpszCreateUrl, tszCodecBuffer, &nCode, &ptszCreateBuffer, &nLen)) + LPCXSTR lpszFileStr = _X("D:\\XEngine_Authorize\\XEngine_Apps\\Debug\\cd.key"); #else - if (!APIClient_Http_Request(_X("POST"), lpszCreateUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszCreateBuffer, &nLen)) + LPCXSTR lpszFileStr = _X("cd.key"); #endif - { - printf("发送投递失败!\n"); - return 0; - } + LPCXSTR lpszPasswd = _X("123123"); - XCHAR tszMsgBuffer[4096]; - memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); -#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO - //解密 - memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); - - OPenSsl_XCrypto_Decoder(ptszCreateBuffer, &nLen, tszCodecBuffer, lpszPasswd); - printf("接受到数据,大小:%d,内容:\n%s\n", nLen, tszCodecBuffer); - //你也可以通过授权模块的API函数来读内存,都一回事,这里为了方便直接写了,请求分钟卡,拥有10分钟,也可以写自定义时间格式 - BaseLib_OperatorFile_WriteProfileFromMemory(tszCodecBuffer, nLen, "AuthReg", "tszLeftTime", "10", tszMsgBuffer, &nLen); -#else - BaseLib_OperatorFile_WriteProfileFromMemory(ptszCreateBuffer, nLen, "AuthReg", "tszLeftTime", "10", tszMsgBuffer, &nLen); - printf("接受到数据,大小:%d,内容:\n%s\n", nLen, ptszCreateBuffer); -#endif - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszCreateBuffer); - //2. 授权CDKEY - XCHAR* ptszAuthBuffer = NULL; - LPCXSTR lpszAuthUrl = _X("http://192.168.1.10:5302/auth/cdkey/auth"); -#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO - //加密 - memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); - nLen = nLen; - OPenSsl_XCrypto_Encoder(tszMsgBuffer, &nLen, (XBYTE*)tszCodecBuffer, lpszPasswd); - if (!APIClient_Http_Request(_X("POST"), lpszAuthUrl, tszCodecBuffer, &nCode, &ptszAuthBuffer, &nLen)) -#else - if (!APIClient_Http_Request(_X("POST"), lpszAuthUrl, tszMsgBuffer, &nCode, &ptszAuthBuffer, &nLen)) -#endif + if (!Authorize_APPLocal_Create(lpszFileStr, lpszPasswd)) { - printf("发送投递失败!\n"); - return 0; + return -1; } -#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO - //解密 - memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); - - OPenSsl_XCrypto_Decoder(ptszAuthBuffer, &nLen, tszCodecBuffer, lpszPasswd); - printf("接受到数据,大小:%d,内容:\n%s\n", nLen, tszCodecBuffer); - //你也可以通过授权模块的API函数来读内存,都一回事,这里为了方便直接写了,请求分钟卡,拥有10分钟,也可以写自定义时间格式 - BaseLib_OperatorFile_WriteProfileFromMemory(tszCodecBuffer, nLen, "AuthReg", "tszLeftTime", "10", tszMsgBuffer, &nLen); -#else - printf("接受到数据,大小:%d,内容:\n%s\n", nLen, ptszAuthBuffer); - BaseLib_OperatorFile_WriteProfileFromMemory(ptszAuthBuffer, nLen, "AuthReg", "tszLeftTime", "10", tszMsgBuffer, &nLen); -#endif - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszAuthBuffer); - //3. 验证CDKEY - XCHAR* ptszVerBuffer = NULL; - LPCXSTR lpszVerUrl = _X("http://192.168.1.10:5302/auth/cdkey/ver"); - - XENGINE_AUTHORIZE_LOCAL st_Authorize; - memset(&st_Authorize, '\0', sizeof(XENGINE_AUTHORIZE_LOCAL)); - -#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO -//加密 - memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); - OPenSsl_XCrypto_Encoder(tszMsgBuffer, &nLen, (XBYTE*)tszCodecBuffer, lpszPasswd); - if (!APIClient_Http_Request(_X("POST"), lpszVerUrl, tszCodecBuffer, &nCode, &ptszVerBuffer, &nLen)) -#else - if (!APIClient_Http_Request(_X("POST"), lpszVerUrl, tszMsgBuffer, &nCode, &ptszVerBuffer, &nLen)) -#endif + Authorize_APPLocal_Auth(lpszFileStr, lpszPasswd); + + if (!Authorize_APPLocal_Auth(lpszFileStr, lpszPasswd, tszSerialStr)) { - printf("发送投递失败!\n"); - return 0; + return -1; } -#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO - //解密 - memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); - OPenSsl_XCrypto_Decoder(ptszVerBuffer, &nLen, tszCodecBuffer, lpszPasswd); - printf("接受到数据,大小:%d,内容:\n%s\n", nLen, tszCodecBuffer); - Authorize_CDKey_ReadMemory(tszCodecBuffer, nLen, &st_Authorize); -#else - printf("接受到数据,大小:%d,内容:\n%s\n", nLen, ptszVerBuffer); - Authorize_CDKey_ReadMemory(ptszVerBuffer, nLen, &st_Authorize); -#endif - BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszVerBuffer); - - //4. 也可以本地验证 - if (Authorize_CDKey_GetLeftTimer(&st_Authorize)) + for (int i = 0; i < 10; i++) { + if (!Authorize_APPLocal_Auth(lpszFileStr, lpszPasswd)) + { + break; + } printf("ok\n"); } - else - { - printf("timeout\n"); - } #ifdef _MSC_BUILD WSACleanup(); #endif diff --git a/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.vcxproj b/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.vcxproj index a2d78fb..4ad74c2 100644 --- a/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.vcxproj +++ b/XEngine_Apps/Authorize_APPLocal/Authorize_APPLocal.vcxproj @@ -82,7 +82,7 @@ Level3 true - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true diff --git a/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.cpp b/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.cpp new file mode 100644 index 0000000..f03642b --- /dev/null +++ b/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.cpp @@ -0,0 +1,180 @@ +#ifdef _MSC_BUILD +#include +#include +#pragma comment(lib,"Ws2_32") +#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib") +#pragma comment(lib,"XEngine_Core/XEngine_OPenSsl") +#pragma comment(lib,"XEngine_Client/XClient_APIHelp") +#ifdef _WIN64 +#pragma comment(lib,"../../XEngine_Source/x64/Debug/jsoncpp") +#pragma comment(lib,"../../XEngine_Source/x64/Debug/AuthorizeModule_CDKey") +#else +#pragma comment(lib,"../../XEngine_Source/Debug/jsoncpp") +#pragma comment(lib,"../../XEngine_Source/Debug/AuthorizeModule_CDKey") +#endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../../XEngine_Source/XAuth_Protocol.h" +#include "../../XEngine_Source/AuthorizeModule_CDKey/CDKey_Define.h" +#include "../../XEngine_Source/AuthorizeModule_CDKey/CDKey_Error.h" + +//需要优先配置XEngine +//WINDOWS支持VS2022 x64 debug 编译调试 +//g++ -std=c++17 -Wall -g Authorize_CDKeyNetVer.cpp -o Authorize_CDKeyNetVer.exe -I ../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp -lXEngine_BaseLib -L ../../XEngine_Release -lXEngine_OPenSsl -lXClient_APIHelp -lAuthorizeModule_CDKey -ljsoncpp -Wl,-rpath=../../XEngine_Release + +//#define XENGINE_AUTHORIZE_CDKEY_CRYPTO + +LPCXSTR lpszPasswd = _X("123123"); + +int main() +{ +#ifdef _MSC_BUILD + WSADATA st_WSAData; + WSAStartup(MAKEWORD(2, 2), &st_WSAData); +#endif + int nLen = 0; + int nCode = 0; + Json::Value st_JsonRoot; + Json::Value st_JsonAPPInfo; + Json::Value st_JsonREGInfo; + Json::Value st_JsonUserInfo; + st_JsonRoot["tszAddr"] = "http://app.xyry.org"; + st_JsonRoot["nPort"] = 5501; + + st_JsonAPPInfo["tszAppName"] = "XEngine"; + st_JsonAPPInfo["tszAppVer"] = "1.0.0.1001"; + + st_JsonREGInfo["tszHardware"] = "5501012NE21N"; + st_JsonREGInfo["enSerialType"] = ENUM_AUTHORIZE_MODULE_SERIAL_TYPE_TIME; + st_JsonREGInfo["enRegType"] = ENUM_AUTHORIZE_MODULE_CDKEY_TYPE_TRY; + st_JsonREGInfo["enHWType"] = ENUM_AUTHORIZE_MODULE_HW_TYPE_CPU; + st_JsonREGInfo["enVModeType"] = ENUM_AUTHORIZE_MODULE_VERMODE_TYPE_LOCAL; + + st_JsonUserInfo["tszUserName"] = "qyt"; + st_JsonUserInfo["tszUserContact"] = "486179@qq.com"; + + st_JsonRoot["st_AuthAppInfo"] = st_JsonAPPInfo; + st_JsonRoot["st_AuthRegInfo"] = st_JsonREGInfo; + st_JsonRoot["st_AuthUserInfo"] = st_JsonUserInfo; + + XCHAR* ptszCreateBuffer = NULL; + LPCXSTR lpszCreateUrl = _X("http://127.0.0.1:5302/auth/cdkey/create"); + //1. 创建CDKEY +#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO + //加密 + CHAR tszCodecBuffer[4096]; + memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); + + nLen = st_JsonRoot.toStyledString().length(); + OPenSsl_XCrypto_Encoder(st_JsonRoot.toStyledString().c_str(), &nLen, (XBYTE*)tszCodecBuffer, lpszPasswd); + if (!APIClient_Http_Request(_X("POST"), lpszCreateUrl, tszCodecBuffer, &nCode, &ptszCreateBuffer, &nLen)) +#else + if (!APIClient_Http_Request(_X("POST"), lpszCreateUrl, st_JsonRoot.toStyledString().c_str(), &nCode, &ptszCreateBuffer, &nLen)) +#endif + { + printf("发送投递失败!\n"); + return 0; + } + + XCHAR tszMsgBuffer[4096]; + memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer)); +#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO + //解密 + memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); + + OPenSsl_XCrypto_Decoder(ptszCreateBuffer, &nLen, tszCodecBuffer, lpszPasswd); + printf("接受到数据,大小:%d,内容:\n%s\n", nLen, tszCodecBuffer); + //你也可以通过授权模块的API函数来读内存,都一回事,这里为了方便直接写了,请求分钟卡,拥有10分钟,也可以写自定义时间格式 + BaseLib_OperatorFile_WriteProfileFromMemory(tszCodecBuffer, nLen, "AuthReg", "tszLeftTime", "10", tszMsgBuffer, &nLen); +#else + BaseLib_OperatorFile_WriteProfileFromMemory(ptszCreateBuffer, nLen, "AuthReg", "tszLeftTime", "10", tszMsgBuffer, &nLen); + printf("接受到数据,大小:%d,内容:\n%s\n", nLen, ptszCreateBuffer); +#endif + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszCreateBuffer); + //2. 授权CDKEY + XCHAR* ptszAuthBuffer = NULL; + LPCXSTR lpszAuthUrl = _X("http://127.0.0.1:5302/auth/cdkey/auth"); +#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO + //加密 + memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); + nLen = nLen; + OPenSsl_XCrypto_Encoder(tszMsgBuffer, &nLen, (XBYTE*)tszCodecBuffer, lpszPasswd); + if (!APIClient_Http_Request(_X("POST"), lpszAuthUrl, tszCodecBuffer, &nCode, &ptszAuthBuffer, &nLen)) +#else + if (!APIClient_Http_Request(_X("POST"), lpszAuthUrl, tszMsgBuffer, &nCode, &ptszAuthBuffer, &nLen)) +#endif + { + printf("发送投递失败!\n"); + return 0; + } +#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO + //解密 + memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); + + OPenSsl_XCrypto_Decoder(ptszAuthBuffer, &nLen, tszCodecBuffer, lpszPasswd); + printf("接受到数据,大小:%d,内容:\n%s\n", nLen, tszCodecBuffer); + //你也可以通过授权模块的API函数来读内存,都一回事,这里为了方便直接写了,请求分钟卡,拥有10分钟,也可以写自定义时间格式 + BaseLib_OperatorFile_WriteProfileFromMemory(tszCodecBuffer, nLen, "AuthReg", "tszLeftTime", "10", tszMsgBuffer, &nLen); +#else + printf("接受到数据,大小:%d,内容:\n%s\n", nLen, ptszAuthBuffer); + BaseLib_OperatorFile_WriteProfileFromMemory(ptszAuthBuffer, nLen, "AuthReg", "tszLeftTime", "10", tszMsgBuffer, &nLen); +#endif + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszAuthBuffer); + //3. 验证CDKEY + XCHAR* ptszVerBuffer = NULL; + LPCXSTR lpszVerUrl = _X("http://127.0.0.1:5302/auth/cdkey/ver"); + + XENGINE_AUTHORIZE_LOCAL st_Authorize; + memset(&st_Authorize, '\0', sizeof(XENGINE_AUTHORIZE_LOCAL)); + +#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO + //加密 + memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); + OPenSsl_XCrypto_Encoder(tszMsgBuffer, &nLen, (XBYTE*)tszCodecBuffer, lpszPasswd); + if (!APIClient_Http_Request(_X("POST"), lpszVerUrl, tszCodecBuffer, &nCode, &ptszVerBuffer, &nLen)) +#else + if (!APIClient_Http_Request(_X("POST"), lpszVerUrl, tszMsgBuffer, &nCode, &ptszVerBuffer, &nLen)) +#endif + { + printf("发送投递失败!\n"); + return 0; + } +#ifdef XENGINE_AUTHORIZE_CDKEY_CRYPTO + //解密 + memset(tszCodecBuffer, '\0', sizeof(tszCodecBuffer)); + + OPenSsl_XCrypto_Decoder(ptszVerBuffer, &nLen, tszCodecBuffer, lpszPasswd); + printf("接受到数据,大小:%d,内容:\n%s\n", nLen, tszCodecBuffer); + Authorize_CDKey_ReadMemory(tszCodecBuffer, nLen, &st_Authorize); +#else + printf("接受到数据,大小:%d,内容:\n%s\n", nLen, ptszVerBuffer); + Authorize_CDKey_ReadMemory(ptszVerBuffer, nLen, &st_Authorize); +#endif + BaseLib_OperatorMemory_FreeCStyle((XPPMEM)&ptszVerBuffer); + + //4. 也可以本地验证 + if (Authorize_CDKey_GetLeftTimer(&st_Authorize)) + { + printf("ok\n"); + } + else + { + printf("timeout\n"); + } +#ifdef _MSC_BUILD + WSACleanup(); +#endif + return 0; +} \ No newline at end of file diff --git a/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj b/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj new file mode 100644 index 0000000..293a836 --- /dev/null +++ b/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj @@ -0,0 +1,139 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {1d584651-5e93-43ba-9a48-e7d199dc587f} + AuthorizeCDKeyNetVer + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(XEngine_Include);../../XEngine_Source/XEngine_Depend/XEngine_Module/jsoncpp;$(IncludePath) + $(XEngine_Lib32);../../XEngine_Source/Debug;$(LibraryPath) + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj.filters b/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj.filters new file mode 100644 index 0000000..fc8a9eb --- /dev/null +++ b/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + \ No newline at end of file diff --git a/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj.user b/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/XEngine_Apps/Authorize_CDKeyNetVer/Authorize_CDKeyNetVer.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file -- Gitee From e8f77edfea905e61169d5bb0e21882e9bab20f33 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Fri, 12 Jul 2024 17:06:26 +0800 Subject: [PATCH 41/46] added:cdkey example ver for service --- .../AuthorizeModule_Configure/Config_Define.h | 5 ++ .../ModuleConfigure_Json.cpp | 5 +- XEngine_Source/XAuth_Protocol.h | 2 +- .../Authorize_Dialog/Dialog_CDKey.cpp | 12 ++--- .../XEngine_AuthorizeService.cpp | 46 +++++++++++++++++++ 5 files changed, 62 insertions(+), 8 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h index 7370415..3e0132c 100644 --- a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h +++ b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h @@ -33,6 +33,11 @@ typedef struct }st_XMax; struct { + struct + { + XCHAR tszKeyFile[MAX_PATH]; //本地CDKEY文件地址 + XCHAR tszKeyPass[MAX_PATH]; //本地CDKEY密码 + }st_XCDKey; int nTokenTimeout; //TOKEN登录超时时间 int nDynamicTimeout; //动态码超时时间 int nVerTime; //验证时间 diff --git a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 23e3368..74645cb 100644 --- a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -101,7 +101,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE pSt_ServerConfig->st_XMax.nWSThread = st_JsonXMax["nWSThread"].asInt(); pSt_ServerConfig->st_XMax.nHTTPThread = st_JsonXMax["nHTTPThread"].asInt(); //验证配置 - if (st_JsonRoot["XVerification"].empty() || (6 != st_JsonRoot["XVerification"].size())) + if (st_JsonRoot["XVerification"].empty() || (7 != st_JsonRoot["XVerification"].size())) { Config_IsErrorOccur = true; Config_dwErrorCode = ERROR_AUTHORIZE_MODULE_CONFIGURE_XVER; @@ -114,6 +114,9 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE pSt_ServerConfig->st_XVerification.nVerMode = st_JsonXVerification["nVerMode"].asInt(); pSt_ServerConfig->st_XVerification.nTryTime = st_JsonXVerification["nTryTime"].asInt(); pSt_ServerConfig->st_XVerification.nTryMode = st_JsonXVerification["nTryMode"].asInt(); + + _tcsxcpy(pSt_ServerConfig->st_XVerification.st_XCDKey.tszKeyFile, st_JsonXVerification["st_XCDKey"]["tszKeyFile"].asCString()); + _tcsxcpy(pSt_ServerConfig->st_XVerification.st_XCDKey.tszKeyPass, st_JsonXVerification["st_XCDKey"]["tszKeyPass"].asCString()); //登录配置 if (st_JsonRoot["XLogin"].empty() || (5 != st_JsonRoot["XLogin"].size())) { diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h index cdacc8a..e1a9769 100644 --- a/XEngine_Source/XAuth_Protocol.h +++ b/XEngine_Source/XAuth_Protocol.h @@ -41,7 +41,7 @@ static LPCXSTR lpszXSerialType[5] = { "UNKNOW","SECOND","DAY","TIME","CUSTOM" }; static LPCXSTR lpszXRegType[6] = { "UNKNOW","TEMP","TRY","OFFICIAL","UNLIMIT","EXPIRED" }; static LPCXSTR lpszXHDType[6] = { "UNKNOW","CPU","DISK","BOARD","MAC","BIOS" }; -static LPCXSTR lpszXVerType[6] = { "UNKNOW","LOCAL","LAN","NETWORK" }; +static LPCXSTR lpszXVerType[6] = { "UNKNOW","LOCAL","NETWORK" }; #ifndef _MSC_BUILD #pragma GCC diagnostic pop #endif diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp index 08837da..5d11ef2 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_CDKey.cpp @@ -88,7 +88,7 @@ BOOL CDialog_CDKey::OnInitDialog() { m_ComboRegHard.InsertString(i, lpszXHDType[i]); } - for (int i = 0; i < 4; i++) + for (int i = 0; i < 3; i++) { m_ComboRegVer.InsertString(i, lpszXVerType[i]); } @@ -108,10 +108,10 @@ bool CDialog_CDKey::Dialog_CDKey_Init() m_ComboRegHard.SetCurSel(4); m_ComboRegVer.SetCurSel(1); - m_EditIPAddr.SetWindowText(_T("127.0.0.1")); - m_EditPort.SetWindowText(_T("5300")); + m_EditIPAddr.SetWindowText(_T("http://app.xyry.org")); + m_EditPort.SetWindowText(_T("5302")); - m_EditSoftName.SetWindowText(_T("XEngine_Authorze")); + m_EditSoftName.SetWindowText(_T("XEngine_AuthorzeApp")); m_EditSoftVer.SetWindowText(_T("V1.0.0.1001")); m_EditSoftTime.SetWindowText(_T("0")); @@ -262,12 +262,12 @@ bool CDialog_CDKey::Dialog_CDKey_Write(XENGINE_AUTHORIZE_LOCAL* pSt_AuthorizeCDK void CDialog_CDKey::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 - if (0 == m_ComboRegHard.GetCurSel() || 0 == m_ComboRegSerial.GetCurSel() || 0 == m_ComboRegType.GetCurSel() || 0 == m_ComboRegVer.GetCurSel()) + if (0 == m_ComboRegSerial.GetCurSel() || 0 == m_ComboRegType.GetCurSel() || 0 == m_ComboRegVer.GetCurSel()) { AfxMessageBox(_T("创建失败,注册验证类型没选择")); return; } - if (3 != m_ComboRegSerial.GetCurSel() || 4 != m_ComboRegSerial.GetCurSel()) + if (3 != m_ComboRegSerial.GetCurSel() && 4 != m_ComboRegSerial.GetCurSel()) { AfxMessageBox(_T("创建失败,注册类型仅支持次数卡和自定义时间卡")); return; diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp index a3fdcb8..33cb7e4 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp @@ -99,6 +99,7 @@ int main(int argc, char** argv) WSAStartup(MAKEWORD(2, 2), &st_WSAData); #endif bIsRun = true; + FILE* pSt_File = NULL; HELPCOMPONENTS_XLOG_CONFIGURE st_XLogConfig; THREADPOOL_PARAMENT** ppSt_ListTCPThread; THREADPOOL_PARAMENT** ppSt_ListWSThread; @@ -315,6 +316,51 @@ int main(int argc, char** argv) XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,信息报告给API服务器没有启用")); } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,功能开关选项,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,动态验证:%d,多端登录:%d,临时试用:%d,黑名单功能:%d"), st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchDCode, st_FunSwitch.bSwitchMulti, st_FunSwitch.bSwitchTry, st_FunSwitch.bSwitchBlack); + + pSt_File = _xtfopen(st_AuthConfig.st_XVerification.st_XCDKey.tszKeyFile, _X("rb")); + if (NULL == pSt_File) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,授权文件验证失败,授权文件没有找到")); + } + else + { + //一个简单的示例,没有验证硬件码 + XCHAR tszENCodecBuffer[4096] = {}; + XCHAR tszDECodecBuffer[4096] = {}; + XENGINE_AUTHORIZE_LOCAL st_AuthLocal = {}; + + int nRet = fread(tszENCodecBuffer, 1, sizeof(tszENCodecBuffer), pSt_File); + fclose(pSt_File); + + if (OPenSsl_XCrypto_Decoder(tszENCodecBuffer, &nRet, tszDECodecBuffer, st_AuthConfig.st_XVerification.st_XCDKey.tszKeyPass)) + { + Authorize_CDKey_ReadMemory(tszDECodecBuffer, nRet, &st_AuthLocal); + bool bRet = Authorize_CDKey_GetLeftTimer(&st_AuthLocal); + //无论成功失败需要重写CDKEY + memset(tszENCodecBuffer, '\0', sizeof(tszENCodecBuffer)); + memset(tszDECodecBuffer, '\0', sizeof(tszDECodecBuffer)); + Authorize_CDKey_WriteMemory(tszDECodecBuffer, &nRet, &st_AuthLocal); + OPenSsl_XCrypto_Encoder(tszDECodecBuffer, &nRet, (XBYTE*)tszENCodecBuffer, st_AuthConfig.st_XVerification.st_XCDKey.tszKeyPass); + pSt_File = _xtfopen(st_AuthConfig.st_XVerification.st_XCDKey.tszKeyFile, _X("wb")); + fwrite(tszENCodecBuffer, 1, nRet, pSt_File); + fclose(pSt_File); + if (bRet) + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,授权文件验证成功,总可运行次数:%s,剩余可运行次数:%lld"), st_AuthLocal.st_AuthRegInfo.tszLeftTime, st_AuthLocal.st_AuthRegInfo.nHasTime); + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,授权文件验证失败,总可运行次数:%s,剩余可运行次数:%lld,错误码:%lX"), st_AuthLocal.st_AuthRegInfo.tszLeftTime, st_AuthLocal.st_AuthRegInfo.nHasTime, Authorize_GetLastError()); + } + } + else + { + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,授权文件失败,解密失败,数据不正确")); + } + + fclose(pSt_File); + } + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("所有服务成功启动,网络验证服务运行中,XEngien版本:%s%s,发行版本次数:%d,当前运行版本:%s。。。"), BaseLib_OperatorVer_XNumberStr(), BaseLib_OperatorVer_XTypeStr(), st_AuthConfig.st_XVer.pStl_ListVer->size(), st_AuthConfig.st_XVer.pStl_ListVer->front().c_str()); while (true) { -- Gitee From 3f4f9a3796955c357b762d30b92835f58b8f8242 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 15 Jul 2024 14:31:34 +0800 Subject: [PATCH 42/46] modify:bswitchblack to bswitchbanned --- XEngine_Source/AuthorizeModule_Configure/Config_Define.h | 2 +- .../ModuleConfigure_Json/ModuleConfigure_Json.cpp | 2 +- .../Protocol_Packet/Protocol_Packet.cpp | 2 +- .../Protocol_Parse/Protocol_Parse.cpp | 2 +- .../XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp | 6 +++--- .../AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp | 2 +- .../AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp | 2 +- .../XEngine_AuthorizeService/Authorize_HttpTask.cpp | 2 +- .../XEngine_AuthorizeService/Authorize_TCPTask.cpp | 2 +- .../XEngine_AuthorizeService/XEngine_AuthorizeService.cpp | 2 +- 10 files changed, 12 insertions(+), 12 deletions(-) diff --git a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h index 3e0132c..6b9aaa9 100644 --- a/XEngine_Source/AuthorizeModule_Configure/Config_Define.h +++ b/XEngine_Source/AuthorizeModule_Configure/Config_Define.h @@ -118,7 +118,7 @@ typedef struct bool bSwitchDCode; //动态验证码 bool bSwitchMulti; //多端登录开关 bool bSwitchTry; //临时验证 - bool bSwitchBlack; //黑名单 + bool bSwitchBanned; //黑名单 }XENGINE_FUNCTIONSWITCH; ////////////////////////////////////////////////////////////////////////// // 导出的函数 diff --git a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp index 74645cb..4de9063 100644 --- a/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp +++ b/XEngine_Source/AuthorizeModule_Configure/ModuleConfigure_Json/ModuleConfigure_Json.cpp @@ -341,6 +341,6 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_Switch(LPCXSTR lpszConfigFile, pSt_ServerConfig->bSwitchDCode = st_JsonRoot["bSwitchDCode"].asBool(); pSt_ServerConfig->bSwitchMulti = st_JsonRoot["bSwitchMulti"].asBool(); pSt_ServerConfig->bSwitchTry = st_JsonRoot["bSwitchTry"].asBool(); - pSt_ServerConfig->bSwitchBlack = st_JsonRoot["bSwitchBlack"].asBool(); + pSt_ServerConfig->bSwitchBanned = st_JsonRoot["bSwitchBanned"].asBool(); return true; } \ No newline at end of file diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp index 3580e63..fbd6098 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Packet/Protocol_Packet.cpp @@ -660,7 +660,7 @@ bool CProtocol_Packet::Protocol_Packet_HttpSwitch(XCHAR* ptszMsgBuffer, int* pIn st_JsonRoot["bSwitchDCode"] = pSt_FunSwitch->bSwitchDCode; st_JsonRoot["bSwitchMulti"] = pSt_FunSwitch->bSwitchMulti; st_JsonRoot["bSwitchTry"] = pSt_FunSwitch->bSwitchTry; - st_JsonRoot["bSwitchBlack"] = pSt_FunSwitch->bSwitchBlack; + st_JsonRoot["bSwitchBanned"] = pSt_FunSwitch->bSwitchBanned; *pInt_MsgLen = st_JsonRoot.toStyledString().length(); memcpy(ptszMsgBuffer, st_JsonRoot.toStyledString().c_str(), *pInt_MsgLen); diff --git a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp index 7232a82..cf6ba5c 100644 --- a/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp +++ b/XEngine_Source/AuthorizeModule_Protocol/Protocol_Parse/Protocol_Parse.cpp @@ -840,7 +840,7 @@ bool CProtocol_Parse::Protocol_Parse_HttpParseSwitch(LPCXSTR lpszMsgBuffer, int pSt_FunSwitch->bSwitchDCode = st_JsonObject["bSwitchDCode"].asBool(); pSt_FunSwitch->bSwitchMulti = st_JsonObject["bSwitchMulti"].asBool(); pSt_FunSwitch->bSwitchTry = st_JsonObject["bSwitchTry"].asBool(); - pSt_FunSwitch->bSwitchBlack = st_JsonObject["bSwitchBlack"].asBool(); + pSt_FunSwitch->bSwitchBanned = st_JsonObject["bSwitchBanned"].asBool(); return true; } diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp index e3b68d8..9468f2c 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/Authorize_Dialog/Dialog_Switch.cpp @@ -234,7 +234,7 @@ void CDialog_Switch::OnBnClickedButton1() m_RadioTryOPen.SetCheck(BST_UNCHECKED); m_RadioTryClose.SetCheck(BST_CHECKED); } - if (st_JsonRoot["bSwitchBlack"].asBool()) + if (st_JsonRoot["bSwitchBanned"].asBool()) { m_RadioBlackOPen.SetCheck(BST_CHECKED); m_RadioBlackClose.SetCheck(BST_UNCHECKED); @@ -363,11 +363,11 @@ void CDialog_Switch::OnBnClickedButton2() if (BST_CHECKED == m_RadioBlackOPen.GetCheck()) { - st_JsonObject["bSwitchBlack"] = true; + st_JsonObject["bSwitchBanned"] = true; } else { - st_JsonObject["bSwitchBlack"] = false; + st_JsonObject["bSwitchBanned"] = false; } st_JsonRoot["st_SwitchInfo"] = st_JsonObject; st_JsonRoot["xhToken"] = _ttxoll(m_StrToken.GetBuffer()); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp index 2e0738f..be5efdc 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_Banned.cpp @@ -11,7 +11,7 @@ bool XEngine_AuthorizeHTTP_Banned(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, L memset(tszSDBuffer, '\0', sizeof(tszSDBuffer)); - if (!st_FunSwitch.bSwitchBlack) + if (!st_FunSwitch.bSwitchBanned) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 503, "the function is closed"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp index 0a81701..bf1a473 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/AuthorizeHTTP_Post/AuthorizeHTTP_User.cpp @@ -76,7 +76,7 @@ bool XEngine_AuthorizeHTTP_User(LPCXSTR lpszClientAddr, LPCXSTR lpszAPIName, LPC { bSuccess = DBModule_MySQL_BannedExist(&st_Banned); } - if (!bSuccess && st_FunSwitch.bSwitchBlack) + if (!bSuccess && st_FunSwitch.bSwitchBanned) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "user name is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp index 68ae920..0d51e18 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_HttpTask.cpp @@ -72,7 +72,7 @@ bool XEngine_Client_HttpTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int { bSuccess = DBModule_MySQL_BannedExist(&st_Banned);//IP地址是否在黑名单 } - if (!bSuccess && st_FunSwitch.bSwitchBlack) + if (!bSuccess && st_FunSwitch.bSwitchBanned) { Protocol_Packet_HttpComm(tszSDBuffer, &nSDLen, 423, "ip address is banned"); XEngine_Client_TaskSend(lpszClientAddr, tszSDBuffer, nSDLen, XENGINE_AUTH_APP_NETTYPE_HTTP); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp index e4abb04..a73b2fa 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_TCPTask.cpp @@ -77,7 +77,7 @@ bool XEngine_Client_TCPTask(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n { bSuccess = DBModule_MySQL_BannedExist(&st_Banned);//是否在黑名单 } - if (!bSuccess && st_FunSwitch.bSwitchBlack) + if (!bSuccess && st_FunSwitch.bSwitchBanned) { pSt_ProtocolHdr->wReserve = 423; Protocol_Packet_HDRComm(tszSDBuffer, &nSDLen, pSt_ProtocolHdr, nNetType); diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp index 33cb7e4..45b470f 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp @@ -315,7 +315,7 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,信息报告给API服务器没有启用")); } - XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,功能开关选项,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,动态验证:%d,多端登录:%d,临时试用:%d,黑名单功能:%d"), st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchDCode, st_FunSwitch.bSwitchMulti, st_FunSwitch.bSwitchTry, st_FunSwitch.bSwitchBlack); + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,功能开关选项,删除功能:%d,登录功能:%d,找回密码:%d,充值功能:%d,注册功能:%d,CDKey功能:%d,公告系统:%d,动态验证:%d,多端登录:%d,临时试用:%d,黑名单功能:%d"), st_FunSwitch.bSwitchDelete, st_FunSwitch.bSwitchLogin, st_FunSwitch.bSwitchPass, st_FunSwitch.bSwitchPay, st_FunSwitch.bSwitchRegister, st_FunSwitch.bSwitchCDKey, st_FunSwitch.bSwitchNotice, st_FunSwitch.bSwitchDCode, st_FunSwitch.bSwitchMulti, st_FunSwitch.bSwitchTry, st_FunSwitch.bSwitchBanned); pSt_File = _xtfopen(st_AuthConfig.st_XVerification.st_XCDKey.tszKeyFile, _X("rb")); if (NULL == pSt_File) -- Gitee From 7edcbf42f832444e15be35a618a113ab064016f0 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 15 Jul 2024 14:31:50 +0800 Subject: [PATCH 43/46] update:configure file --- XEngine_Release/XEngine_Config/XEngine_Config.json | 6 +++++- XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json | 2 +- XEngine_Release/XEngine_Config/XEngine_VersionConfig.json | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.json b/XEngine_Release/XEngine_Config/XEngine_Config.json index 72ba01f..58fec8a 100644 --- a/XEngine_Release/XEngine_Config/XEngine_Config.json +++ b/XEngine_Release/XEngine_Config/XEngine_Config.json @@ -18,7 +18,11 @@ "nVerTime":5, "nVerMode":2, "nTryTime":30, - "nTryMode":1 + "nTryMode":1, + "st_XCDKey":{ + "tszKeyFile":"./APPVer.key", + "tszKeyPass":"123123qa" + } }, "XLogin":{ "bHTTPAuth":false, diff --git a/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json b/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json index e59741d..d6de5d2 100644 --- a/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json +++ b/XEngine_Release/XEngine_Config/XEngine_SwitchConfig.json @@ -10,5 +10,5 @@ "bSwitchDCode":false, "bSwitchMulti":true, "bSwitchTry":true, - "bSwitchBlack":true + "bSwitchBanned":true } \ No newline at end of file diff --git a/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json b/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json index 0b15c7e..f092b97 100644 --- a/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json +++ b/XEngine_Release/XEngine_Config/XEngine_VersionConfig.json @@ -1,5 +1,6 @@ { "XVer":[ + "V3.13.0.1001 Build20240715", "V3.12.1.1001 Build20240621", "V3.12.0.1001 Build20240513", "V3.11.0.1001 Build20240223", -- Gitee From 88f47f21b39466fe66172c44eefa3d01c1b75af0 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 15 Jul 2024 14:44:30 +0800 Subject: [PATCH 44/46] update:readme and docment --- CHANGELOG | 26 ++++++++++++++++++++++++++ README.en.md | 6 ++---- README.md | 6 ++---- XEngine_Docment/Docment_en.docx | Bin 144805 -> 158808 bytes XEngine_Docment/Docment_zh.docx | Bin 147848 -> 161213 bytes 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 1360c03..54c9220 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,29 @@ +XEngine_Authorize V3.13.0.1001 + +增加:管理程序支持CDKEY创建,打开,授权,初始化 +增加:授权验证模块 +增加:黑名单开关功能支持 +增加:mysql数据库支持 +增加:客户端模块加密支持 +增加:服务端程序CDKEY验证支持 +修改:现在默认使用sqlite数据库 +修改:服务器处理CDKEY协议支持更多字段 +修正:客户端登录加密协议返回处理不正确 +修正:黑名单处理不正确 +删除:局域网CDKEY支持 + +added:cdkey create,open,authorize,init for app management +added:authorize module +added:black function switch supported +added:mysql database support +added:encrypted support for client module +added:cdkey verification support for service +modify:configure use default sqlite +modify:server handle cdkey serial field and set serial field +fixed:Problem with client login protocol parsing failure after setting up encrypted communication +fixed:banned process is incorrect +delete:ver lan support for cdkey module +================================================================ XEngine_Authorize V3.12.1.1001 修改:用户列表刷新时间修改 diff --git a/README.en.md b/README.en.md index 7660836..f452769 100644 --- a/README.en.md +++ b/README.en.md @@ -23,10 +23,6 @@ more functions: support various types of authorization Most products on the market either charge fees, update slowly, or lack complete functionality. They also lack technical support. With our product, you don't need to worry about these issues at all. Our product is completely free and offers both free and paid technical support. It is rich in features and allows for custom development. You can start using our product now and experience the best and open-source time service available. -#### Version difference -V3 version, the protocol is basically reimplemented. It is no longer compatible with the V2 protocol. V3 is basically changed to the HTTP interface for management. The compatibility is better. Please check the documentation for more. -V2 Version can be update to V3,V3 DB Compatible with V2 Databse - ## Software feature Our feature list not only includes the following but also has many features in development. You can refer to this webpage to learn about the features we plan to support in the future: https://github.com/libxengine/XEngine_Authorize/issues @@ -114,6 +110,8 @@ port :tcp port 5300,websocket port 5301,http management port 5302,Transmission v ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/4.png "在这里输入图片标题") ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/5.png "在这里输入图片标题") ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/6.png "在这里输入图片标题") +![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/7.png "在这里输入图片标题") +![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/8.png "在这里输入图片标题") ## Participate in contribution diff --git a/README.md b/README.md index 4fa6142..12d045a 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,6 @@ c c++network Authorize service 目前市面上的大多数产品不是收费就是产品更新慢,或者功能不全。没有技术支持。使用我们的产品你完全不需要有这方便的担心。 我们的产品完全免费,提供免费技术支持和收费技术支持。功能丰富多样,还可以自主开发。现在,你就可以使用我们的产品并且体验目前最好的并且开源的授时服务. -#### 版本区别 -V3版本后协议基本重新实现,不在兼容V2协议,V3基本改为HTTP接口进行管理.兼容性更好.请查看文档获取更多. -V2可以直接升级到V3版本,因为数据库并没有修改,直接替换程序即可.数据库兼容V2版本 - ## 软件特性 我们的功能列表不仅包括下面的,还有很多待开发的功能正在计划中。 你可以参考这个网页了解我们未来支持的功能列表:https://github.com/libxengine/XEngine_Authorize/issues @@ -125,6 +121,8 @@ Linux or macos:直接运行即可 ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/4.png "在这里输入图片标题") ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/5.png "在这里输入图片标题") ![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/6.png "在这里输入图片标题") +![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/7.png "在这里输入图片标题") +![输入图片说明](https://www.xyry.org/XEngine_StructPic/authorize/8.png "在这里输入图片标题") ## 参与贡献 diff --git a/XEngine_Docment/Docment_en.docx b/XEngine_Docment/Docment_en.docx index 92fa662855c02eadb5124ef218e3e99ab79939e3..232688fa463b8dc67238d7e0f49d1260da056232 100644 GIT binary patch delta 146507 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

WyF} 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%0DfTe=~8c%~A6@#pEVZnf1a@^$Y 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 diff --git a/XEngine_Docment/Docment_zh.docx b/XEngine_Docment/Docment_zh.docx index 8d7ed81e917de81dfe8411547091436f63c3dfb1..a66c0f0142068791ac1db7cda682864f8a023d06 100644 GIT binary patch delta 149732 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%0AX_zB&$I}uOaj6lgD0@rYe^@eGV)IDomi;^C zI&CJ^o%y13hdiC1C_a?@lUbYMO%#wNt%@RvU=@i(wtX%E`d0W0HzlS$3J;9gs z;4OUt07NkD`8#9UQYXJu=;iyb5l9#UKu8JBxPD7Sa`xUkQVToJRaUC|I#&+Ne|yVl z(j~cY|00vf}q4{@~ocu6#?(+O7cz9$?T)9IwM$Q`zcFxQotkkm3^M-Zl zSfN@4ntA|_wM9rO!8|e$b|24znWS#`c zm(1a7u;27eKFFV2KUm}%r)L3wf20}B_lI5oO4P(9)oSniTJeRpC@-uu)a9Dd<&fWz zt1W^n=b+jEg1&n1Z1})3{&OL)=lH1JHols~TV5NCbKg4~#;LSvuWb~Y&F|UxC(}lk zk;%^5YixsE@{0uP*OlKR?V__kFGTE*ezSI*CtrHIa8czA3xT@rs2G$@^J8Z<15( zwb-L~gJwF%jFJE)SDc9ie|b~cSwkY|n{%MX=v2G}cYxe!s(2#_|8+$ON!E{zP^<7% zC9C!*(*sv!MU#ekjLaZshhyQW82@PVMn97yzzSMOC2d6E%2Prj->ZC`BqB|Pj3W`R zFC65MbUnR0txlD!cx6c7d;53b1u_du8@#c_vO@wUR2*JI@;K_=e;JZd(Wqwh#p7J@ zZEZ$4DQ-RztelmXL!vTJ?_M17h?H{#a$gD;pf?%UmDx?=4(T};he?LgG6_>0LnCQ%sL$xsi z#koUBxN)+#*@KbaBWjg-$bM(R`P;ukgDq6pX!Dl2lp_!|E5EV|&SR=WA0@$GRk#|G zcUQn8QMs>AFcjk1yO$n+uh_?(BJ{p06PiRkx;V2*7V3J=8(4N`>}Uf`QGPzfWJRQ( z`O<>sEnnKaf0zq-77ls$U)spMDSwp_(Cb=H6qh+#=R28m<#)L=8qH4b5Q?`bSnVBd zBm@X4LEhB27^I)rceeS3e=Q~6;9^0-Btk4Jlb+(bDu&1`}m3;sx)?9N+^~r)7 zJRXkYa@%jkj& z$Qi{nu@^6>jW|Lnc^du9QV~yWIQj}tLBh*dEdC@Sj`y?XK*;r-cD*Qu)YROG_{}or zD)UpFth8nBDg!BQpCiEiT*yVeLEffzJF+AsfAv;xGi+-`hDPn5`}@lEnPsX!@=Imk zhz;fMV1Ot@q2J-jDmDcY7~Xt???9cPHT63H1Igp;Aj&B&UQm)5?l#Yl%RstU{thPg zzA2VNZc@&h3PfsKRc~@^DBmfO@>U3yQO*Lre~wL^A>h{R&3m4{C&i+twlTzLvE1ZN zf3yV0nl}Y>6HsG~fV(O=yu^Z`Dtit#_CjhX+E8Blcer6IPr~mk@D#awH_CGP{qGW# zB}wO(?rQNB#~;#a#6UTKZ*dhy42f9`z0@ z9;`Q2$MTLR;gZRHAgkcW_h*n7PU(B%Dncfgr*V>mo0{E2wW+Lugug`YR^<#0iL$;q z2OrV4;_wni5kdGBsi<{)Q=qYz9}e>o|#&0Mf2EGDRGbYf6X_mWl;G{ z(jj*kj9fW52Y}f69U3tcEG1⋙{X(izY33N&r+i*t54$gW`*XeVC&jRemyJ^H}7Z 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

IVwuQrL6BmL75J1 z-Go>s<;AMkJTrb^T3`y7+F{qn%+IMaYX#Bi`ex$vP>4CAa(@+#cUftWUl~J@nS$D@ zSv7K2Yvwh{K@Ofz{ZgD1T$;2%u;!h@5$ssVuYkt_Ri95Iik5p7nk&!s=r%BT-8TWn z^qp658)U0|8kAe2g=x}ICe5!sIDfqwpC{H*j;K|-Wu(z9M8YJ0DJIJ^>msZ&L#^I! z7k{s7?fxq#Yky8u7|YZZqE;SD;~-a%@vdsP+A43U2E5{aZpq|i;eX^NdO0T`|IGCQ9H$xx?aZ*MCMlB-etHD{79^_YvIRGuA1% zFCO1*yr_47z8Pd^zK391GIp#4nmzqXDXnIFltLkhX0{>Y+F_=1*I`RGnN$P&Kt{S6IWYin9tR%8S%{gqXIBWUXM3v?sI8q55=w zZ6XTB_=g3UTs(|v5ky8;+ zz>)kt5|kqU)$0vSI(=s@twh%=+t{lz!@h3N!im|&8?#Vzf7`|{%`Z1fk=(NlnNyW@ zt8dEsB8s;KFrnKJvPo}h-7UJlLGCie$w-umeSh!iwXOScn|nVHply|^^`O_8p7?r9 zbR%+fhB91c)K>a$TVlUhptkcX9J?BPUo4Ydq{dp7=gV#VxISNIBGHpAW4G%GUe&7} zt>DWl5$;9quD+do&|ceckj;^na+Na5bt)abB|?8a$BvY3E_D5jg3^9d7cS?hu#5V9 z^?!T#ja^-ARrF;`?|oGXk$O@*O}yD0Ew5m+jqd5WZsfq$#9Ol9YV^}=Jc$Y3q{^o} znTWT4$sPX43uRP_T<5rv)-S!oF6Io`@TM9yvEdSt63C~Cx@R_NQ%baR1$50;!xd1Q#T7Oh4SOsTjpxQ@SP%`qHK4_cdd8#@T8KRoK zIP_p{wMvFXX_Ff3kqu5Q1B$=5uII{vj8ONT?I|OjwL3P>0*GYwfFq$&R$9!_Ge-wA z$NyxTMJ2Z!9Uj<~c{6)~5?cM9Lk+y{^$C;p${w6Ry#0Glf%+V`m#PTqm*7gm%ztIy zczUp8)dMcAQr~GA0-M=4gf3*{Y=g;@*h#D{ZE_6Wj*L{HP}dl^HOBxvzpGMjFo>uc z)i>xsxz)A^;n!_lj9eYH933j?t<8-o^6J~h_5r=>bt*#aYL|VpBPK>ui&_Phl^3lNtq&xi%>FjpgW@HwMjDj$d!};AWR`%gsh5kd$p8L^5x-5vMr% zZb?!6%PN5Zl%J~i2zYmm5P$e)u-7%);0UD7oYNeXy4&zrdOtWY-!opdxj4`&$sWw8 zJUQPEmBxD?C9=?!47OwcOjqu`M1ot@Nlff1<(Pd_i7}Ncv~gzS@8MB4%SYlH#yL+~ zg{Yt~st0&&FrR6Wf9bh%o&Xg&qTnu2to1bV{L z%^j)l%8FWbTx^s0ko}0K*(g+Hu5sI84d?W?S(LiyHgJ#`p%uR%Bv8L+L^k?H%rfD( zXRqPuGB-tS>UrfogyjV&nok>5XnS-ZjIWyUJK7v6Wrlw)$ieLt9zUle2l~q zt4;pKM6NcYG-_sj)nygX%yAQ=zUNNvFr#3f-$zAGqQBV#mx|;a^0pscHBV$;kSm{t ziPri%u=dlQzNWQ<9-HfjE7O%KRm}h+u3INR;9BMjPmB9iu&+<%!0#f5WEbn$Pd2C*{mrW_p-fvuAzPdsXcRj(m}kDdp# z{>-0j18tufTz`79Ag4#Q;kn)t0kMn5zY{m8rs0qs&Zj9F*QePekDdP9&N3&nZl8u{ z|IYW=#gZ4g&%@!*ndnh{dqRrg1m>)o?N#X+?ZB4g6sm7O2wJ)G4gOpzSM0zC;1Tt- zW$^3sJ?g9iRAieGiq4aEfQ5TUBFx?FD9Qt5^z+03{(s^fRS!U~=*6@}3E2Fm0_#Wm z=vYn)2=~)eA4n|DErPp_QED)72GTG}Pkd#QJg9y=i<;rp=2Rg0aqdpV2AT5vyJ$oqxIvlgjc54;O z!(?lG;vs!{%hQ>K5P9y22(?|S`EX5aZpC2}Yu}kgf!O>#3!%I8+79GKbgLQzB!7-a za*9RvCuo>zv#z9u^2-6*H5%vuRl-fpr^%M*ZC!-zx#i6pS^usuX+2GKB!uU*3`z5x zRU7hJ?;+cpZbXhXfn2{S-=kVv#{IEHKYJqQVJ!hwvv2Txt@d{in4uw3J=n#ul4~Uo zI`-vkvptXW>yMqv^*g^dNi+^!J%0^04_qrPrgi2|UDjoN_ilrWoxMJU)-&!82WpS) zHZlTzvs0>uR!a6jv?y~0$8id1cCW=$GkUCv*j$dz$fP6|hr@yeoHx63=-pMLBcD}PeWx0CPQ zI%X`8LiIF4kvF?YyoUwEtaeL4OuK)5Z8fdbf$BE0eHp1g-8t8z`{oQzG~IdI@g!a;9M!(|&ei8cKNcYhkU=-PW(q%Uh_(MKOeys8JJRb2nm;@f3B#4b9boz(`L zs9DYKk92-=?!feO5bJ65vl{1(b0JloYXQa$1}~qsPfPOWK!Sz$vj+sG_sq|UXJTpR zH-%hjYy|GjjWka6?K6E`W79%oGjR@hzT(&2MiwDYCipHjWphXR9DnNi<~sfG7&3Ny zQmqr=uU=Cnc%u-PhEoIOh$RAm_pIuom)bFR%M6*}12h zskeLnQWlam)oaV@mVbH8lcg2gP8EoVGS|~aG(2%nCv}K9Z%?P<%AyYWw5NhF`4tp& z`ts#eAi5Hdbgsv(8DcDGENk{)RGiPfYISDxHx-{kQDkBT7$}|)DX~+SIyb$0BSAK^8~N$)0qftqXVftyqlA90)cdtfWtC5?Q3){ z`KOGBP{#YB9>wB5T2E8(YUpmod#qAO%x-gjiLP99$Ck|Gv#6R^^I%A{3*=M}?i5E- z!Typ46qC<3g6`=zQs$;NSoZ@K5+*gPsFbMGQtO8WD}SYSF_x*LY!Ih|{gSDvx^J%m*lIN;w zEETa_b1urXlj>@qI&;_iM8(b#r8RNO z?AS#&kM4cGhi8<$0&RE&x#m8YTj@JHyJQvndD;A96JIY;D-&kmArsX*;85dKq zM_rM;5mQM#k{xxa`1|PJ19n7;y?SsE2}v*X;sYN26=b@mUfT!MQ{Q)_Uht>02kH>^ z?-`t-%pHn1KtAQ@uq>$usf{~It`Z(4ELrtUDLL|iX_1pijhpM-KU?a%T=cw~>wnAQ zUXy+a`cbR!$(6k4?lsO3O}px~BT%cfNZ9utVsSTe{`wOnS758dyjF`#vW2WEeqC1tr8aMlBFo2%j7L9 zr#CEJHG<{-Amm@YCQwN6A}xcD5r3=1(}bxDAvrAXtFQztn7$Q{XW8gn$E;$ZkWmr9 zVNn$)Ru&6XR_#?RZXtEn3-wxz6)|Js@mI!%MQXPYUMwUe>xR#w`pqYHau#Y&ubevq zX*k05eH_8JV$oAfc;I)$e$7I3vHZDVF-K!Hvb=cd*=u;HrS2};pqt&-?0+>akYd(p zvr+uWnMe!qy><@e3qxFt5^}UVWB&j zYg?5pqF~wUU7YV(7F?cGJAZ!<9NB*5m!sakR#aCT>Zlc=Wl4CPigJ8cL!*4>}wqw308qoW8rNv^a|Agyelr|o!pId}MGSr<+l5rp3P zU>Z}IXS8WWe)W0D9~7pMMIy3y|Cu6LDS2um5?pE*m_#Z&_Iwj2SAS-q#%&~^3R~o9 zZ|6yln_5`5*nFBiM&bE9O`Wjf&kYN%V6KHlvDrefk{vS>`$Q+ma`n^HHa>ctk~%ue zlklF!d768#1QoTh%- zigA!LWW(GlPQIrN4u40U+r(~DNkAK?Sw%`%hNO7TH&nc>)Ysm(oxoYCEwNCT>6^n& zox5Ti+N_+JJkjM2ABE%6hNyXEJVmI@>hh3>MQP#O$-#HBuA(-=Uxid+5$WtZ1*j}x znwoFNreJh_?St-r@4W|PP31n+0alHxJQfzooQl=3&;T!m41X4YwZ4a(gT0m~?dkgz zi&6Cyd)Sp@FjAqF)6?cTsW4XKh6X(A!QsA!pDB2X#U+r(`VNaRG_&qS|7D}xw!QO{hQni67 z+zL1NR*0%ujDIYqTWQ9z%=VC)JHkE=ts{Ftd?t7DyZXV2WF8Ek+avcK8;H6ub+0lF z)%>lqM6Mp*rDm@fn?cC004??|eV3uyr$Bq{uwwhf)7v6cpLYtvGd!T0*D49w&GYxr zKUnhI#(KOdf>&Q*=pPhX*y)G2o6(3tPd?Ji0m!;1n}5jD=8tSa_CV~oXCetNoY87C z3eV)82%^&!)`mj6xPN|AajfLZYhygOI!iDWVdiqx6KMn`%U+-F)TQ=2C59?C$fAC4 zaRi11R4P~2N5(TfWVr?C^P_U++#*@gH_t1I8`^X+pE*FldrwM3EBz&>#dH267 zGqLtJWs!}{r@@>Se)MfsO|QK73c9%Ob1+@ zmN7eJQn*^Veu&OH0`h76yMUN7762V7Hkh+larAq}M}fF}o^B(;Rk&z9I3c`pUhg!>^WJ;+lBF=TZv`a5 z<8yQlnY+UCX+yuH*C}N<`1BfUhtI3>&Ym`8$a8IBv)RWRn9fF(b9<%XhiQ|fVf zk9>Xcc3J4=rALWiqt|s4aNI0VKO!W`5!E!1~L$ z7-dIkxcmx`QuIu-2Szk~Cb!;qpMdxda>zB~S%mD`GO8A351ubo&~tPoQY3S#*KX13 z_m<@appvl~?m|}%90EjQD79PKC!R<5`b8(WxCox6CQR;PevG((zvm<}n!j}96_1?p zV)%dD&>92k%Bp6kChu$;Elxhm3uh>2;)DfUSORSXmeUh=53()iUNu3_~9j`>$V0 zj`EgSo&gEt8f2RxHJ-C-p5JHhVzU5t@1uV+E%?mb5y1O$-+8zZZ-r1%HGPQa=M0e& zpGsp*8~O|BmpqnL8TR}Ni@Z?gLTyM-Y2+F=bih(v!9PfZH` zHnDyh9h7x$kWIV=a7@oQ!`} zm)HmlMx^{4gB{N9kvkH$iZVOZ>m5@sqsI@N6a^`(4WyFeBrR_+p?uGw+C}%^AS0Gh zoChfZ)kyL^JH&L(-UD*I_bO%OZ7}sTBu}A=w9Id%4ASDxS15RT31E9wGl(Pr{&?Ru zNUWv4vNob28J%?D;}*QDZx_yYdPaW__tCZh+v6M8*H&;|Mdq4s&dd*GwCKUpZ7|hy zowJlYGX^;v=iYmtHz!sxkcJcqAF#gM2$G|uSKowa8*QTg5Y4zc7u-{AqczqnD*ome z+&`En{WRgx%&3jCZ2Q!VH>FIsHGhw7tZ->Y2M#8^DR^m$x3!D8TMLQgJP?0z-t#nj z;)=|`BXsr^~2k;cJGmACq(@lwmDq~VWsbp6-B0wH zHq=P+`#fOGGNbl<91mc>`aLF(+Hh&%=VaVvF#A9xvyFM!W8mV@xdLq3Hwa!nO@)q( zV35;$2?l4IQ&g%>T4msAD&>Dzqg9_7sdt!8iD`VBH%^QkHwZHaTJ?>3)!yr8Sibaa z#(n9hso7mMZS@T@F8u|3E^_NR;~`#T@2c0XsSbd&mz>FWTiovv3s3Kz z)C6B5$C{d|TV(ca8!kgy<5CS^({e4emYkNAt!dgKYNZI#vJF zwwUh$Y0u2J5CPys#Y3KaGrD#4wD~O?o8w0AiAa04Q8j$az9F$}Yqy~!UD{`2E+?j7 zjwlO^O7%b%LH)P1(A|Gek6*gxL5C>Y(4ff3>2q}8iOCSrEH@@ zN1rms1$@<`16hBX(L5K}u2Mfl*<3pFL_cN!(?foq^W&2_N(IqASt;3}fSsEj^7F!8 z*mE^rs|lB1`+{-KoZgc%LROkUZUkA#NbnH2S<{ zupn<~uaPlIPl5%}sqSyDA-R|y3(JdaPxe4{zKm16FhYb0vdt+^o4_Rp3jCIZ`YI0}d`9>MhFLQrK28uLj%_^DQy_8@49$1g6P&hWk zR{vxf_04jpkcPw(s2-@Tf@+%azqikg)Zx968Wi&ZHYp+Ca*wAC)J7i zX>ZFh_mEL9GU-GYjo&EQ`Suj zMr40_5-;QhB{H&&`Ii2vsGNIm_HBFJzC3MnkIx9LtsmpyQ$3*A);^OmRMdR3*V{^Q zDrXg{WNHi35>l@qW4A01{(JU~?qpS9RaN+=Hbl;^y@NXu=22HY-7)Zo`uN60muCojHFK$?>ORf!U7Cnf^8l##ydYPNN~MUK6H< z0xyg0bt+{zkz-tN)l|Pe_(sZcFqhTF^5UPoO}(4khHPDW;>dG~t=E4F zMrH-huJ2<`$qm&iK{I{u459}tlwWGMWPw7jRf4Pt?^0vH0v-OvG6=QV1KHS8jzu68 z$;x}YP`It4<{Ltj+hEO6h!)|E934a!v9ao#%bS;iL zjaSCRR^cXlz%y!0)*DDBYc>0z^QeD^l0AU7FMStnL_w2fDqTK!=lL}1pSgz&ms(Ah zYGcXG8EJgWo6)<-HYD^D#VZW@1(7SvCh*ZuQ=KUH5CI-ft5b#r%Li z*pYRf0?7F^oP6=G8Us=PJ@4@xlWBg`O_f`6Yb}G3Qrr^3YEzVL%Xw{66pVkazS%*R zjE0+51lw}o8K{lidl|kUSXo3px(5`QGj~Xby{lk=a?9yultA1E!6Ww&TH`j68UsO( zj>AgNO_J}~MzzjT0MfTrgems}=mT-XeA*C5>NZ$dJx3{uzmxOeCPwii_Yi>gW_$54 z)Gx_-4SY5yro<-&|H^ObV|RakZcKwzUyRqq)BO^@6uW|9S^r>Y0rL+Q(W8kEkSd(})WrhBk(8#8_&O!0*)4`kQ6 zMUs#_=idEQ_)NW9Z5A2-Rb_Vrg# z`V+3P#^32BNBi7!8(4WbHA~s0hI8Q(U6q0S#Yo1=m zxZalxL*Lfb8QL=v{08`eg~|8KplrEQTuQ`dhZ_bSz7v9RhZxb8R| z>zfjrojRlTxnY;&Z3D;~5~Y5RoCq{`&5!}+!^V!^140E`R6COJtk_0A?XGx7>T%KB zf(EU9)b)*bSUbhI*!7O|!3ROHtX|7ZbtLN}UBVNsHn#X?$w8dDCDl&xc|O6sYgR!E z2z%tXJ^2fH-+_OZmK4a}gXT2l-b+_R+O^x@N@m^+_Ic{aaADUhSHf5B3J04iL) zv(3Td&Kb{ZQz5t*+sGyLXeYFv+*)u{5xBo~b_JQbslKsu64KIH*du=$c^y>#tW6zzO#Ws?w z-lbyBn9wM(edOs(QQd0Dr}6WM0M+jq8&5`@Dd6FB7MyZ3+4gvmP}h9|j}TqPrAlyO*Uhh&5DWa68tW?kcksEF;G7VMk!swuAtE9ZWo zYU_Muua_ax)NRlg(mzFzrfQq39z$&IeP@(=Pt>09xlm`W5)84_BPK;Z(waGLELpoy zn*qtn6A-D4)lFQ8`lScgV<}ekxhSEd%qUIpHkQ3vo9#ZIXVz{XqovQ zLcxhT`ru~~ovJqcl4c}+4m^eK8;t=d^n99dMEcI31M)Z-6fEw1`Av`grpiIShhjmZ z+`uq_TXX#omjn^1r?Iqxu)?fveK`*Zk7Z?h5nbg0GoMAGYUEO~2X>eKri82o;Hr(> z)R}*t5$PG+t=yF_r%dt})T5zcoL}KOUTfkUkkKa){p_3JNhI^<67Nkcj_8h)u6j-4 z^KLfAdnO^AB~_4y<;Xand&5I0xSl3sV>z^Cq>a*oR+cCFH~@(aWg8f`oFQ_J_%gMJ z49oGwq7Gsr6Qo`+W@?>^Hs97nF0y=yf)0PJC3w30JuuceLw?W~dUR~$QnmFo*%FGX zX>pupjs?_2puYAub%1$+`L)H%-1_o86mBwCFc@l|L|RNJNUd+lf&p8n%;f&4Bv|#p zEm5(hw9JpS>am~`W1=N5hXsEwR~G;0N_Gc*sQZ$68J0IstNP|G#J|$Ae9;R)L!*Ci zmZKy813XesquMYf&j{;L{owqj0`*(QgoN;25OQ}hresI52Vhj`u}r*=_U9z{5o+_7 z%ATHy1$FIxs1aB_7zz-XDW=IO#gS`)UYhbD`7{~5#P^O;w|k<6-9@J@6{iSvJYi+? zJ(nP8T5J`{nN}NY^e?+VOV))0R>OZ$&RevyJYy@(_sAmjn&bRDGTJyr8;Sy&SH z%$H1XgHjCD0}El!+r~8CKgf02hAvLBu+-$4Anvn``cbcJ;X}n#%nn9 zh9c9|oVy7Rtn~(`O=dOYE|Y(nwy*x$J90;QIg{WHSFe7LVnVF}A#X@rC08T=lnP!x zP37ml1?+SQ`W~{YnwNf~PmP({?^(F^`FrHRT9JPOAfoPAy~Yr04!b+mi}Z1}S#NkL zX&F;7=MJB?dB}tvUs=5uL5)k9Sp*i^IJt`*fRKGl!`xEqp?b{^-V%TR27d5#70EVa z0W!BMi9z-^zZ{F`dOi)p?32Ie98%kPOCtnwWt@-h%yjQ_0Srb~qIv+Mi9+$ka-?RD zFdw;=oCh57j;^=~l99}vLUGAG8Ol(<5FPmyu1$)rd;Qg8xz1b{Z9#Lb^)qv+E!Av8iz*{?IQ)cMY8QiJQ}3`XR!{CO zu2nKK-R47GrM~IRt9HY!UaQ`#gk)OCvwrD;-6eBI;`H)kb$`RJ6q(B&_y)ATs|T`* zf;D9UKTxx@EpRBWv?%$JtC1q+Q?fYQfPUqPL0eL>qx=dE`o@1~3ax_;X5U`GIH`0; zi+)gQt8Z$}ZW%fCDCX?Nu`%mxW(_Q*%Y>v$SBq_Dsa- zY87&|k+Ai1)sL!*8C{vxU?Ln>J)oJrXDn@oD9oDB+?eg&=rf+?IDqm!&X}H6Lfeg} zm_LUjHNUnXu>^l=z2}D#N1a*LmCR<20i3y7p82%%dGwwrXCzrrZGJ4^{5~^{fkYY1 zGsIf@Su-(W$^3kesBZf8^cIONW#81;0Ya~*QOIaj&Y2{Dlv=h~;X3H)n$S^{lxP0Fvm;!$SoR>bhL^f`YAD0TEI*>Gkvrw52B>XEZo z**+Sm)oWqCHPL7D_Howd@7dI^&+PxaiA3)?IvXv~jNQ&^>^#z=oOwA)Qf9B+VS7Y} z|C1S;S)uVckqInQ;{xV=maflpZilzbO#VziQ7x$IHT}f)aXWonjG%x4qxpHN4420af&d@AxCgWG*W{N7xoR*nlLGIUT-`p~WGQ0b? z2gZWH);*vc+dG9zNFzRH`8k-I?DeH0*%u34f*gO*>r$(^EThC*>zIky4PsmLU=iK9 z@@r#nlijLY0D|%z%%Gm8uH&35c)1_o*EO&0)ifn)jt)z++cD@>ji|Gp<=z!;l*b4wQ zFif>kZ}FK?!^M58eNC3nk`eR;$c@%_zUTQ8dr6CgXP(>cwqFz_7T64PF`qUo?U*|( zFx&Cvmnuz{_fheCCwi_^sqb6j{Y8CHhPn-4PiF2GH>8eE%3$Nq<(HFdo8EN-E&_i^ z@|QI_bUi+2&cqqaEpO4w?CT`od6_qIRCzKHyjoJJYf(H{HYfW=Pc?Dgi)&g}99ae3ad1N6?O+UJV%sD2--#cQWr7I_p*#!TOuu%l`3e) z23b^K&6TyP;+a^FWfi4PPftPF=iYxa9*yQmOxCiUw^!mIS)BE`E2~QiJy~NQP;zFL zXW0oS^(nItS@ zQI{kzBlnTJ%ZVM;^IE}^d!HB=m`-BzB#NiGZ(QJSU2$=d;OP1#@UxD<{Mvt)tXX=8 zVq#JZ^%X=%WjyQ4ttQ(evm%fybgpYA{;;HHwBky-JH+>4d0lxY$FjZ2f@K@tVV)R} zY=efCZ6rez0nVSKH(2MKjD)&7O5P00dYiH&2ER3JP7YLGPkTuxB_@j$)oodGj?!5G z(8#AL;Fx)tm5i9AUbYcG$jGS@2x}|0+4}*e-`R#G^+VQa)adQ^_^PQVBxWd%lXH~R>-l_D4+OuOQw)woejt0T z*3xn0mqWo)=sVxTE$Dw4PX-qfq}m8eQTI&?e0-lJ&}U2H@K+A%)no16OU^pqgXWV6 zh;>{@6SKX#LLOiGCjQqeONQf~9_1<+f^txOvw%A9too20DSr>JWk>U5`hdT3ZL@U7 zQ=JR2rm7BsQ_{f86-*#%&&b@m4awVXPttR0cIWBdoH_9pINF(q1|O0a$FhJT?d9KkxDdI#LRN` zUfB8>A6@w+XX0+x%WjbTg<qxWb;?sgL)P0kQKak=XHK6EeN zUFmfLN&eDCHSsyMwKjPSGLrFqHgRApH7$pN#5J$CJMDkkjHQhYwsnFxdB|Jd@admY zfXnwN6-LIg`UZxNboa%=OKyuidhKF1e_}DUvWBH=qHP1+lx&D$IllB7g(DfG4jF>C z-2))rjC!bR&#lh6ga5N;R$h$HLD!?RVoKEMtiFK4*!`YE7Q6OdwZzT&{H8>Vo0E@m z_aP-vUk-orYD!$^h6=uAG=k*|N_1FSO9xwK!fmJ?KoUGMg9|iH^gYJ_-K=k1o3e^? zVx@)!%sG4DqM8|-jarz{X|@@txt#H8hpg!XZX|#p5%X!XFL@uevPpd2s}0}d+;bj$ zrjfVGHj`1vuK+K=bIdlF6`9M~KI?tWSSRgvahHGYHBHRkk%oF=dMs*fOwGQbbEiT_ z?yyiO&4Jpe*6kU48iWJTjT!@k!?90`*iWw?3~8bNY%}In_FBT|nYUYzpZmM#&g=%8 zF)m~XDvA9b0fg=~Af&uv^?H_*&Zr@c;0IyDY_mH9bKEGTADIV43;HTb4_dAWI>;Zo+Pb(H|`>2|lV-23-rdYpc_?qc`Y`gt6 zGhLgaBKN)@?C|*+0i^7ONSWhys3X&Bo8Rd6P`y6zh7-Z6!W`mO&R(i@&B@2el!40c zBW2XQY8AE#>g9-@0?s`{PQkB?Fu|zGqvr}f2S_t_F^AmTcZzc-mY;Knp55ch{eXYv z%9yGcIbXA%Mh7Y*=o@XirSDbO@c`wjZ%Q|!(VJ!)a%zo^T~rLcz8r=Cf=j(;+o}$ zbD{9nYP9WOtK@s!0h+%+gB;x}$KZeNEJ;QF{jSPGB1a%M-Mw=R?tV|kM^&i$5;@%; zCQq&(mg&me?*15Hy1HMh)rmxsUyg_TNaTq6>|C>)J8IdH{;yf3GQ^Y&OZh=+7x{f$ zxVq*&HU8U{$PpGW_;>Z-iIn*0c${{g{H8CxO9aubs#GIosqG58 zW$X7-}Tk`U-9b&EeSP ziJN=5t2YG)l20S5l-bK&`WAm`uG)~tb3;hW^q%{~7?N%2FYL-@9I2|lb7Y!Z!6Jf@ z=N$Z7tHsc87DCBYLWSb$nMjRT0IYr~i=a$e?;1Q>HiR4yB(RqMPYyc!sFjLr$Xq} zYp=(NPYa!t#QX2dL0UN10{9FPMLlhO&>GKQs=!WTXm{WUyG1_jEvA~iUO^)=kFhHp z)p;3~_oL6oRZY-Ttfu!ny)$#SuSyW@`L!kG8)xT?8&JRcr5jv!kAeEZT@Os1GBL9} z7lanBRPMu+q$rUiiZ_2n1uy&dtv)&(5JCK$A-vF5aoK67x2^}=qv2g@Jv? z5KBhlPCI={Z&&gX;~;-2A5d1j#(?EWF5GZWTYF|7)qDGN<~QnjzGo-1lQZOilueYi zANsiZhC(`*zJ9$2&|G2pw2Yb!IXb734aq}R+0vevyFb0b)>nU~flde`zc%mCwLJS~ zU1fY{KSeG3m(omtm#U|^_PWTY#r)`X$_w4{Y~<12k^kdqEKbcDYZg0f?UoqD7{c}C zXa*@#pKXW|boHv^PJcU@8fr>SXX1ztP#{F{`aSpgLop^Tm$FVZqC9jI<@yTBZqz?c7JjdPfbDYV&&DTi^c>SwHipD)TXYQUeby^zqH2 zPD_uq9N0ZM?BWggC2z!PSCOI3-vgOPzoULBl>=oK(z1V&>(8-%6RgSm!J+s7`Hp%T zUQXYhpgIwDazCJ`cVr%2&7y}F<$J`NlLP6(I7L%0Izr=Fpag&B@?U{o>ZnLzNFQIUjD{B_h?J-bf zu9b!Wh+coqpF8A?-WjJjl(B){uhBui>@1HUwdz&(Y~#+CQ4blbd+TT(7%p8)?f`

?iS_E^^xAnMFh{#@FE{dm*RXH)>JaCiCj~>&G|;W z<4ET4A*9;;Z5Cyeb0+Tecaq(4aB3Cls9sY>kaTSe*lq6qJGqP03OlGA;1ku;4%za) zaXHSqKCSY!_<(0VO?ah$=^-4E5hfa%4#%83hp1{|vJMO+5#Q>8yFW$ZwBYS#H2hG; z#>jtV8<>*JXN^QxtJ;!`b7`SeM zu}^dz8{;{_{MRpqz@U%XmM^Le>PkNMWO8B!p~BVvX8jT&V-K!aBQREfmxDZdZmB?;7g+D_7<-!piw`4wcx;P&ci zFUv8}!Y5UAth;RUR^*^9`1(B$czRTo>SSly=e-K& zV`^j%^fx#7lf8D>fBN@0F_Kqss^fpw9BFWW0N?VNSa62g;?(RtaWEA#7b*|>ntMn3 zz>TN+Ck!OXtL_05NZzZ?j~sG(;;Q!1ddPXLsK(O!!6anXb4S4f@Vxpy6L3bdOi!$j zPck`KUX(%eX{0j}nE;_V^4Qr%L?+diP9VE)ZKy+}PkZ91wGzikpKnctnG=8Yk`hMs zjpgW7KWg-56(;+XdsTip!VD60`JPeREB74&?Neq+PuhXE^ykibgE`GLM^#Ww^XviL zv5YM6S|4A|Z7LLJ;%ZKMgSS343FK}W4>^^pX$>M4vTXT%1Yy^n2XyLDdh3@i?;Cne)9!_t2|aTR`463sK1_s(;xUX!!Cl3#Ml!X2qBa;~s28B04! z47A$PDWldnI~KY3{0b~b-xFEvWc7P^?@9o*}o#HP&P!RdG z<$I1d#%5aFuzMGSMx{THZMZCFe$yTNy6-Nseb4TJbk>nfb?UT!XzqVIrok-{;M#m1 z$w>iE91zL+Js>hiqK?25?~i2poFn<3Nb^$&v^C9HUT3N(i=NBz=Pq_&cVsmDJY-+8 z78VNy;rykCBQSkuq(8-8bM_wcBB?%b(sh4i90^g7Qdjoiq$lyrdlh-Ht7k77WmmU6 zPg>T=E<9;2Dl1iAo8*5Z7pN_+iQQ}2|MqrIV~|+3lNS6VGvBBBW?y=scp{zn>Koma zPhtR1I*naF>%3Id=vx4-mRsh7oqjgOx>sGJDqQXd>aX(JYW9l$Db`Z^&P62=>@|KV zi(FTIIS3}zt7>$3Kli>l&^w#}obo*i&t$#?*4~Ct`!!9cTStEugmVZ^o3=<7WK-U_;=MIFx`Q9{yE z0@=nMmReNm)=o!i`uz|z$~_+Af}})#1-Z~GBaLc3$u!l8J}i1sy@o7xoV0~PMgCG! zAPV#Tbzb!8XNYmoX%6vU4_H)j=rLD^B$#HXHJ(A0# zqLXV)jsZ`6&HMHBz8=qB^~51aTh;Hu2PA~l7InvRM;f94J)%}AE$Mt3+QpG87=y2K zIZg$L*jGJ`;Jg%FTEx%$Jp@OZlcK6T99OOd>0qhidJli#qKVxW#ldr|XN?kNaLst< z>4C9mle3p^CTf>G5RXV4*F~SNF=i|vlDQU^)tbw5VHx<*{HF4n?w!>){tvWLTli-A zdr-YvM}}a5nhn`&HHZCAzUOd_&ab^*a4l=Lkzh#7!nFyqC%v~Abc~6g0B%G>7j_8ItoIc>SVVx%i5Pwkap`XT| z{L*XnkTc_X@w2)<#>Ja@t~myBu3&C8I;d9sjJ7<{U)lm4k*l5>y;>mI#!jC3V7lB0 z+~v~_3mKw(8j@$P)8heao@-7RRwa&l8u-kS+<$*uGZj9wZ@?bSg`)vDq}cO4BT~{m zxIS~{z%KNotG|y=u=ebA$cS%L4^AMEBTuFi$tNRo5G{9?v3wdFerA_ddU`54l5Mzp zy%uP~z^`N*`%ZeH*CpSX7<4M^x}7uex~SmA=n(ReaV=gb3q;`+{^ zhJ|)htZf#=kGkEmIMU0jX4xL82*v_4Q9FMU)S%FM)p#3tLTZ26H>;FFM19jIeq~`J zJWaLP%Ac}0&1#2b!85HD%mOQQbq~gkIOiy?*HOrxk1`++WUKl;l4D%Gw9tF%dHo`M zT+vqVadqf-D-x0%VVhw$FM*u#SMjpGF;`&SkyVHn#03_L6S^NB~9Yfimtl=zxe#0FDc z|8pBfDC+*kLN~nF;4Fl3dJo|Ti=t-_kkl$C?rE2MKz;>oR4^)9Xz3-z5RE>0f%eLFQ?O&XiS3lq7i3CFnM` z>r&OwhW}M45Ekj>ip>46%>8}TM8m|YuT4DT?B63@Vggqiq83M?;QbhN2zyUd*u)hs zpEl~bX5aP)UFh5`QT%rypU8^SNW<_55*VyfE6P=0yOf@hSc^8w}1 z`@vycKLKt>>EK2Y>M!!86b@YgXYZKDK@u9l(Fex$40ocbL1s zR2RvOde7zZUl;9@paNtH~`|U^HiTf6Kbr7OP%?8y*|}8uCFb1`9>s(FE_x# z3c996`JddcAtNZ^b{l^cchkp^@RVH69zX?Ld9%CQM%|aIZ}3p?&uLlkz-k4najF(@ z_rR&XSoRG& z8))*%BCyC6SJvv|QpFFg-G$`?N?gAb!xAwjEmB<-v-2KQw90?ivn-SvbCsysx)ich zn{B!ZugpTHI8SHw7AY6ymy-c=0@d$%i_P^qr7XPmd;>~WXD6SAzL0UTyXvRrT(+4Y z=W`xlzED)iHv2O*28LoO6m7pp7O>DjDzA;iQ1*Z%nlw-KfPcDGw$IaKMT*tTGLfg~ zr>)P_p3w#`G(CT0xNws`i-zv zsQ-mdXMwn>>@o`uR)3#$nS>o`+*YyHK2Hg#sBc+qHqf5DzulFc`SkbMR2V4E9R(zN zOYfGO%W~eL-5TCmf8irg|H|Cdu)McIM6r-8sQeGhxIpDDCaXA=_NEZ13Q^xIw50RQ z;u)EYHP(Lz@s7gok5DVw{cfYOZ=W(qtM80k4%rtDNcQ01|KtvfNcs8X9)jwGZdFek z(7cS40LRl`>!(f9Ou2%oe=eDMfINF{y&nL?3L#|QXtfkVAC8SD(KiPv9@Vw#X_xy` z-)^sm$a0Pj$Qqf#e3}S;F_b@dvd6bVUa_c(P#S;w!}3`&PQgMiAa^lUw)bLCc$ye> zdlI9{cKVHX*Ar2@{H1sjUo6M%=zF4y*-Br=(pag)CVU8%XlLhtsaGjOJ?OZHw^KtWtki3wWh157NhJ5hTcrjbyo!8vV4nYZHC! z*79ck9%^#A!#?Bzk>#szANo6aIzv!>$=46d+~X!mnsxg=57!1_Ak~A3p;z!UtG|=` zn@pDyUiq~3vu4y?6%e|4`Aw0%?wOT;uq4Jz0(lx5TGfM@o0B+{$Bd_*zNQUvn!A6^ zD5l-xhD@7va21p~^&n@+N*6Aph7X~lDSbc|)Qa49093NRCe)&&e4d&E(1G<<M4)a~g(DN=EjY$NZS z_xQ&U9WGq7lqOYx^bUt*-LeO&1zdmWy~AS-$DsN~xapoz0y^VvHTiqggia2JUi0QM zR>LC8k*o25ea_6CDE)Kkb$SSk71~j58-Axa(gU_gcvux*9j2y<~{t z&fQ^>a_*e)uo*FX&}um|QlfNkYlV3a75|K-Jus>q_SNg_F5Q>A*yX;{_k(|H#JqDJ zATVUz<$+axDNvg|prugQR&6K=WEAvqLHea{M&+AkTtx{+PQ(=s@HNk zjjEJoqUT*Zh3e>^wGiNXfFYK7XP8Q1soJl3+b%V2F@N7VLo`Z;7=pHH4!KUB&jA4M z_rPlP?|H&mBq~gu31w2UZ}c%h#%io(Qjk;AvchcVJWxXh-8b9VViSLl1VrrGm;1r% zGJk7Ve!BZ#iKj3@#bI+M@(O@{s&76U$0RL|g}lQ;+rX^l_u*4snO}fP_+%Yi87r2= z(DI7-wEZ5sBE=!}G@DpPFetZsQ+}V%DxH*L&61k3-gEG#jv6;Suy@|PRppV@%lU?# zCDK<K#e>Q<~z{1GI*$ zUow~wYFOr1z(kuflBMq2T@XFrgF~O#uR*H*WCTzUmb6KZn+bovlqTljjZKf<{a4dB zBPGykfb027l|9}PtBb;jFH^CAr;n|)R*eBIkYtd5@JQVg^Oq7irQ4lP1O7@({d2qA zUb+XW)g%&A@JnbT*D3TFpm+5^h6D6AEt+Kf0QOBq=3I@(;#QG!bYwU(kAc)CcX+QJ zNF7oZObgI>e{Fx?{kiB#G06GsTWk=Isqx% z7=&6sf>pOQ{a{r2@xT}z7Wa+%+N9}74Agvk4UZ)wGB1DdX9XPdJ(m=Fz6Z!mD!tlJ zhwTw{O?}vuvJC--^xnzSDlA_sm@wVv%C+E(c_~^~?*TuUbLSiMWc6aQ%~Q?P+IO^h zs~C`Nh6H$ixyLH^-WIi}@}5W@L;5to=}=2cPmkL=kq4^2xd^3BBUcymG4FhED^wEm z%fYYGbIX7C>`uV$^=V$`SksMY#2Qs>|C>Fa>TxDwn(n3N)t!83Y9KyTufZe9KexqU zpS@PXOg<^wSU-s{9u-2&(rPnKlEi*-TgC8mHR2|{^6r8W=?KbRL!mTJLhSmr_817L ziuqQr;W?65jc=-CwDwr`KxI^y^y^{P2Z^HE_;YjA$j`aerSPG9a`a zb42L{0Gw10MsoSlZPXKg=lXFh2|MJ|mPvoYBrWo^eNU7Tc&4Z460g2Yo^z!8_RKeG z<2u^Ehi*{cEw3MZ@apvi?2+*U;Wr|^`AtEb5oYpfQXi!R^|2)b_~r?yBwI&Qhu37S+nq0wtPwzBkY*rct)pAU@MFkUbe;QVK<^ z{;a1x&BVM#D}nU7r!T|uzA|D4=OI&EI|Y4o_p0szO}#v2s1{A|K-KHPJIPppsQ*2y zJ$=MR0TXiWxOT3Y%fW_k9du6{l@Nb(zKPU-GUh!FlGJ7MG|c6^Qz$~~c+U5X!OmL^ zCm30y_Ffi#V~(g0D0jEU`c2fZ`c|Gl;f>`cis5f?`wc3cw!HuV7 za_7lkO6t7#L}ilQL$b}x-OeZ|n!3zT?aC|)D)rL{MP>%-Ef$TPRKI6dBRGHWy;6PD zO|l1qJI%FvFE4UW**D;fBQ;@$NIf2K^$q9ylZXzICpY+vY(xJvnW=AO?XSG4zNw|tHOOJn)dZKcZPaEaM>U3661E;EPDCm3BJDD2b#TdOgIx08a zN)1>EGuhaT5x?=brQfU98_j>vj5t$cL0--g-MKQUT=5=-W0UVZEX`16;nQZ{FqE4c z``%r>6aV&Be4*n=Eb6f5SpwDr(@~=X2{R{xNLg+{-JJ0tElb{&$%(u11fKkMy&?Y@7WZA7v%S1<$y z&~~cLC90cILtR#wG{;Q{rM)RJWsXj+U{PuZUG`wPr)KE~@lp;szk+acb4A{l3Nw8} zxh`aynxh<<$*~!IgTz6hs2&W98JBHltn-?Qf?`1M{T^(u%m@Iby*pLPO{ z)Eq@s|Lm_E1H`_2p22_UpGsxs??HrC*rWP3?vHu5L@zX?-DalDQzr(j*nLS~X3&;| zM5+f55ZdIvpecwo<`_WG(rV174JG!rNbjb93Vfife0jSN3%4y5wA|jn2KVd%r1_Wk zkb21IF~}P2nOgM&Fm@$kTKM7%BLswq!=LkwH#eu}3iR_>GBbZ<7Jw$?ta6E762U5A zZzcK!l)>yMFrMUn`=nY)j@UtFr5HkiYSS00jE2yEHr zsT|k)i$$=pEdq17w#Px6Im!=|PF8MG40BQ=w|gM({LWo$UY=qy**8KmiJbp{!9YG$ z8=jF6Mq1ur*7+WuQR5H9okSh7jes5KZ@mX|SXMeMcnyDvvi_hws#uV1miwNl3CmZC zJA1In4P}O1aZN<5934r(Rx?$URN=FnJDdA;MzTH|#$93-J{zs0j5w2|!G_Cm+pZVt zVU5oIaBk;3p!f9p(&ml&lH<0|_c^001j#6mbq_XChx~H;A$gf&y;BX(?6NEh0#1$r zj=-01dI*0Je|g#q{Hve#`X~!sBg&b(5>59xaHspsA^|J;o=+PeC{J1}g)7k+w8_CK zvTvg-Xx{yYphRc;Sfs`C%kict<5aKJiphHKj*<=0D8Kf|R%G0Aq`5f#`5t+PWC6QW zJsz3IV0nG{a#B{eL~}cq?t6PIq!7QX`U|@xS=xV}OKpbCKshvDJcjtC?r3-)wH8?J zkbBt%U^&;ELt9zH`f~74YJc{7#5OV#j7Rfc6A>j!4;x;)KmM(ocfaR)FS$x4d|qtD z`lae!Ey*hY7NfjU^Nk#eQOLgCN12BlQAI^~@YMs{0o;bP$XBG#Gzpgxn#(rSmU8w^ zgE@cPV=#1&Gio?Q%$oTKR;t^zyRg`<>Rb>EQH>+{HC;)EaK|*sKu4>#6jp4bm%sp zD}5OSD4wKAvyE$7`WTZ82MM5RBh1&)2;3}6L%F+HjLm@}xJ!dBzv&FunP(#b6;htL zyDYGIy&A!Yv--{llEJv;d?N=5Y*=GJ0m!wcEh3t^7M5{l zZb$khEc}vw8hOb?K)|Sy7tXbfyL@F1YzW{fW>CGRp4&R76Ch?*#SxudZV2J|G?}}^ zI8T&t+s{(5^-G*WNn2+|uHX&xGL<65IVDnZ{m7Rz>tfmMipcW}dtl58tx@FIU zlWIeH9}`|RX{mae^pg_pZ4vg!y%*z}a6`6{drxlcbgj=XYXOGo?42CUqWN>`i{czq z-)6jmHFL-`=AeS>oP$OZ5~|;$S~VC|&0ZFXlv)cjA47;KMrXdEk>psH%bMC-?or#^C)njoy=hNuEd}*`8cy$k8J@S5_rj#8a=K+;QJof4V z945YgTJSY{3_ehmJ$HYkmWlJ!(=-qmON(e;-qOTes9E>ZoTt5$^XKGj@;#?CLaxS% z3dTFz*#2AFaR!GKU8whPezL|WIHO%OV|F6pq8s@Y=EFvwGk!kQL(UmLtH+YrF|%D@ zEcZn8?bfoM7m?eH$gsS+3WhY(7dFw%X>0vamZ^EwGf>!d<`{o0lmq)tK~(q4h%Tpi zNPfAMltFqDGfml!ddyfPjUZBH^_CSr?c$@%UG{(s?v-(|Sq7?kho;UQ1GQ%2DCe5o zF*jSu;@n|3c%;N=&MIQg8PQ}Bpv-l;k0OnEZjS<9dGDRka<=p&W)rj#Uh}@(z<6s6 zl(zxTYYVtk?v{T$IpECkD}$?|Z0@56C6GiA&4+3Qshu$&K3!^fvAoXy3cQ@GH4EOn zi$>=+Jvg=Lm&}lHU!Hc-kx4WijX8oJIR+|ptcjJHS&odYv#8URYg>hm#uCgJ;5fPQeRsxr|Wdhmzt@WbDbsUD1*k+fQ1J|I4uK;Q}cgq!Jb}n3~apvu9Z&{f6KeF zDAK*P&sZQ~y4Q+SeX-EI$`jpp!|tfPip4##-yxVv@I}E z$$eRdTb~FBD9kT;CLAA?#_K#?#Bhk_)c27Q-!i@fANc~O>o)GUIih#EY{^lBOPGjk z*3+c)fO~(^A}NtKp@oFl`N)^QTpx5 z69Zn(8qOJl4sqs*fzPV~Uj80u*_sX!i7iE4d}B*+msM zHpf~j*1lZ7XCeceh_waQq&2))KJVUPh0I#jR;FA?Ggp?dRO3{URd6qJzTv%Neb?`i z9fN{Mi_%tq>FtW2JofZ8mzk7J^1xW63vxu|vzmbNPiudPPN+V>Eb&en{B{)SY_edi$2l+mx{bbCr1{xV9% z>^Vb!1dH~*sY=EYL9JhUuG7_Dj_7f7h86{O$a3b>WM%eTrx!#=`t_vgzG(g~7ybIo z`YuCWIh8LLDY!YA8jHaCJ<+I(B>F8e^=7pkWzED@68n6$<@MTfhA1-xSyQ944#ZmG ztK{>{s#^81s6v3Xf>~azU{C4%Ax0Ztj^){Z*e{_c==7Rza%L){uK6_ZgN*yH`~|P7 zHlut5+W827 zMG^|mFK3N(T~ZQ~Fx$Bn-V5M*-6>Wz_*w;a9Z}_8SrV>mvNBh24(Y=hgAaEqZ)vN- zfnVkh@cu0kxvLC|enR&l_)udQ}_D~gNgg4L8Sqi_ZV$DE^^n?uHGBvR-fmOYbfev{XsVHqQrv*0wzR#XQNQ#M15NzsD!4C- zUv0=0&hJz&tKY%g_`pk z!{wb=w)Mn&%;+TCKDF~4Yf|+4^NU5*NQ7CUC_3?5x&x*-eE@F-Jro|YKCld;aYRVeap?NR@U}- zJi+R#2TI_zzOr2GtrcBKE|M9@uRt84tKCv_cHUvfwXWaGrF?Di&1W^HUr_6jGb+8NHYJky=QvFbuO^HuVewU$YgX6Sn{Sy zuWd*oXRqb-@(kWo+WX`!db1^V&3o4>!Y?^T`E0<<)q~GWe>CTRfjS&&;AI=0Nyda! z3gEZph`Q7?^Moe@3X`LQ>D!S7D+H(|*Xg9JRNkJpc^osj$16=FR#Lwd(2vMWS_B<3 zQjhX5i7jUvvTUjEvdxRzVD9k)_>{LNEC7+)%FIX0~sm<<=Pv7O{Xle^{_~vTvsn;N5H3i1g<+iUnK02QICB!0jYz z-gmLnx6YVPs4kZ0_Ra^Sos@0Ra}zH{ zp^#QfeYyR%0!()gyeV_lVunb-wd!|=_L+BomWkkhMfUpSgXPosny*xP7=>O5pUQZLjUoyJC6J4CYS*Y69-CxLmTeDWi0a?g(3h77v zIe*Vak3PRCyp7aMwt;d;#kT!JdnVb&I|U*+sCt_Cti()OxZ-(xvJ!aWxfUiaU?R!1 zK|IfW2S0h~wIIGEworYW-H}qw6uBK@E%zN|m)DGX?9hSD5ZmV!DlB`A-r>qseWQba zL4-9eBedH8`CQN;9a^;1TNbs)0ntU$j!INd$zIj^vaTG>gX5d=e_Gm zu&AX_cYhWbi2S7}xXsHUvrUa7$C@91tO#HI9u^vOX;CF5b(r=I0Iu&tx*WCwm zUJGj*pL*IMx{~?RT@enoK(dX>&waByc1)+7I|tG1L{(Bep?Q_7gv$gnT|H2La;s}g z?gSuO!z)rcOHD>@eK z{m;&u9d0gCxY4)cCbpk`J&TNgK+VKsD6FOa^+6nIOT-NeXR79#8Um0{wX)zN;hyTt z;b^PjlD|jYbl2PZrK2Wi?nt7*#QJMxQ41L5Nb+eixS72amlF-IdB8%YH+zk1r4UrT z2bIVrHZ4xMe$V6l5(PaRS;D&YG`{AS(RoVg_4ko){4z()!zsP@Ls05}NamJ^9dv7* z!Bhl3?l0ME==k&(~wstRoPV0R73wJ_@AW(4qXBVY2qbI?L`4A<}BA!E>`#mzEr zgR~e)<>&7I*#zct+-&|w>M%Kd2Ai~c;9S}g{jBK9t25unV3nn3bWC`e>4l24y7T3% zQa8PIerVwnxz09Zkh+@pA+y>UX%{;r!dxZ%#?EjYEND!oVuTf3Txfp z4uHO8&G&Fld34nSZljXfX%R^3eUv!)Gqe9H&~i0%Eo=v2=cP5y5E(jDWj=bKtf@PXN8+=gEgjVJk{2PlqN{*W>98t>Zn@J^;-j=EHZ%&_SPT!elh7MTsjfI}wE8nvz zVY#Pe2kP&Cr|}z;iFV$h)-&pUJ`~@~{f$MP$T~Gu9w7OVUyd&`C(r1lnMzEpe$P|v zDg6?A=u5%DYy<3`SY4IzzSNrKvweyDoOoa;6!jih`>tVmzQ%!CClhY2)LlLeL#*Rf z=TIqm=PD762aK-1y=N*eIj`Yy8^`5#{iV|0DGp43c{txgL96G^dxr|nIVuO%e#xn* zqAf1pb3jaI50q?ZtOp!5ta+{l%0SH+#r}cPsdM{;)jHC1r6yr6=GRs#vvZ+PkSgiq zFQuBdC%zXuSTHZw+)$zDUD;BUW~mXCEP>QX%PM}5v&zXxx1rk1O2qd*O7fn#W42++ z_}dA8(>P^L9I)q$lFhl$t4Z9`Nvx&od<&_**2G1hEACiEXwP-fw{ry}!<`wYIKdy3 z66DLHg=BaE@KTTXL=K-u?*E2eS0^HN;X>vILb!i!}{@j(7 zOvNtGHUluwZQRu}8lh4R4ph#n&3T^r#&hF;?PkmY^y}%0Qhfsu`D9G>v`7{4$~HgZ zY-w?(XKdr-Nn9BV5UBr>RXhb0o72T|H%Y1oNHM|zX;Ee&ef0AXnM>rzDU;GFSsEUEW@0HY$^rG-zO*a)?+r#Wwfrl?C&e(eWA%FMN0 z4|vav76HAI=c_y4^%SN~Z^~WtE>c~;XLt+AwbI5R{G|;)IA;~w$(p%$ak(c2(&~YN zrAy{quNSehyz|i>bvEXRlDSjhCEtS=nux*+JL*cMRr=_7yZs*ZWb?)aV}QtiQoFK@ zIQ(esZ)!cMd7mRn9RkF+e$U%pwdag~JDSp$xv)z*CUgmgv^MuOCU3GXSj?TAiLhGl z%w8&(jjo@){){9`olMuLL)-ffOUKE@%U(|V8aF@Yku3TP9IA0oEd0aVDJYvXwiU`j zl;D{?;OnI)E+=zaQrU`vB>m5S9Bckhb6+lbjIIO^LyY*5t5NwK0*2LV)nT8#g0YNl zdEZe*^wuizEcU*9k0KOD-s6G#x%D}sgIt(-rfXgYB&vQ7%$&IHH%oHMFQUKXpR)~b zGchvPY~3f;!wnuxP*7N}{GDt_y(G|)rIfNHQan-P@2ZPR<(V}ZxXn5t?R%?mM zT0YHtGPiqC?S3TY6z_#fRrZZ`Mq@NDo{^)wdZ6Uvvrk$n1O;ld4eWgSW)~z`$Glly z2u1m{lb&~Zhe$C3|GBn*j~6CQo@SCFT?2{s+n4IF*KrbW%9+TiUQ+k#LL5WBuitaZ z17-~0IuM}Ez4tQKy(f|nk$R~2IL-wA(;}ys=-TUo;7Mk;TepH1v4SUBWm0$Rzkd&l zn!^>@{$U|3*lm!(`)O~N|1H~$xLC{`?^#4~;;d((4fp6C5QMCMs>j;Eh3)Zuh6RT_ z-{V$AsIhuIFgmqLhBSmi*0HjNMdCYV70UtEpWo-seXqE(HWwOY_sy-Ma1P4T%9~ZJ zhUI-Dqf);ViukCRs11$j?loY<{Kc|-vciC;`P!B7WWmp>+u*QJZOC3jlY>;$@4*?$ z*ptdC_KAu{3=8sqa=*t(Qv0Yj!k~qWW8t$@1dulQU_!@k$+8MT#<{?P8(aBp7PqJJ zOD2JZR+IZ-!QHKKd%u92a+T1)^YyaL=e`tb!h7UP%9~qdMUL{c8S4CH}k$W#KkO?KzDCD?VBqDt^I&eaNO8ce-AFyJb-a}2OJn>=a zNbs;cuHvJ!ocH7d4$F|t$-a%4L;g~S=B>ZaZ0D)ml>GybrF`^J;#8a>$BkvJjHfoU zDl&O4D5aCCC)#XpN&fn!v$$p5RJ9SQsOa&q$mV3P9WgTL^&ZK-S4HYa0dQ!#ewqrO zm3hzxGOlueAH(u~m$oAd@1tVG0Gf|UHnMsx`=abuS}2{C!r6d(($2_p4#Q>dn}e(f zU`@Wq*i>wA6hVKi#T8+pj#sFoVS%^I{f!$=b+LK?diE&mGxy2aVT^K3&p8I9kI+09jq^>now$DYNL{Md0;GvIfZ6m!38KkOSBo6s8{f* zZ{2IDRqEK)YqflY7SgivWsbCPYWv=MVh9%lRR2;9%q-=Pw17f|Lz!R~u?rrKLlc4h1TASa)a#My+6i%y7in>&Nb9DR}wXNRs z-c;wyHVEv}ZQ14o#H^cx>;jlh-4CciD$<@$qk=*Ax8CEZx0R&@|1?iCK)-=d%rK`1;{sPVlmRgi^vXA zCKVL3&82o>{vLOKshMh{_;fP2pmC|D=8c%8t96bx*k1Wd#|^(wRN7F^E4&NK1*z1( z2alytVbdK;f!J&PQnZi0t=|`t$i%G0u3x2qIcI6p}AJ>NvoU9hWfQaPr` z7t2v7Uhk1A&igg^DvnLg(Upr)c}-7~?kl!23#?Q|vhJjcGe)e9Rhm&l{Pl+`Lj6+i z&r7uAlvmwe+aIiO1vFv;~7azZ`DGmC?L^`%clK zFbk8i&(dSLC+;+w`lQ`2NQc}*ShDi-bSIxEwOYRirT5w22c=iKBHPFz_iaNlN)Xa) z0}b1!%(2?!bB55&PR@hhGtm3pw+kOVEhcX&CryI758Bw(Yut+Ekt_JzAY!xE19{aa zAcxi=SnmNh5hYFwos!;Rub0|?DmkxZIQs4nJkvbafwdIVtP|rg)Rha(AZIq4RyA%T z;6R@>eh-JqCAQnB6qd07S@c)dQjlLCJ729IC7j*x^F5*zSwYg%775&U^%_eXi7+jY z1cg}hv|X*tT64(LLJK)MF40@wl|jbc(jo)pMj?Ehdlg-V3Hz~njrD?)&1!oW7i}Q4LKY2;!R2yrNv`AWzR?{yL zgdJk=-9}Y{TEWV5s0mPe2#Z=IZ6RTjITq@30Q%kLc-?x<31@az5o%D8gB($%OkWw< z#>nhy#L#yDNxgms6S}{Dw)_Gaz8X=tgDFqVL5Dv}d07vruVtj3kf<4wUk>tWf98n3 z`Jj2uDfR>=TBnR4tjY{I;|Croz0k*CPk*)=gO31dX5rv0TpV)t$~NwW^c!r^w@O+0 z9vTqo|2UUKzxww$X}gUGUm|%Fn%Dk5Z=T&)Is(em$$#EUD=?baQ0SZAJhE8nx-Caf6G6C53=+ow;{0|HkHNLmr|} z=b^_{IDBm|+p50Izgl|t*CrV*7WUm{o~!?fOQK{c^NX+EU2WYpH zQZan7y4cx&W?bVx**8+>U^O*+hd@*B2TxKLSMH-MQ+pC*zTe_@F>Wl}w%TEV$-YF2fr_@{oqZT;Lot%aK zXq`X&7{rs>{Uv`SYHQ6=WWG)POMPxor5b~Q*2?JAEaJ=Ah7*`bG6E_Xd{?&F9@axzB+|PLXgC&BwUJyv zpH2&cNoGaB=Fy$|X)rQ*!ymD5(UN@67lx&X2erZUOIYyD@+*7@b>-fRN<=8D+xVfS zb2_Pi1}0FFv+A?m$?4SZ`Op#T)#xI$XSC=k%Od$+PjkV~8rK2=Zljsg16p_St#bkD zN-!(;ok@;A^Cht4Z}Hpe+bo{B<$f^hL+{GUuQnnVw?svyevd>(-pLgr5q-*;=t4|P zx_S+e<;X~jxPOlUvFNQhxEv<+p?Y4^qC)q7%J)#r$+P~sxYLyG@o>zPAI%x!8sEN* zYGlGlxreM`ke@uw)>+NEevf=WaZ=QS-av734dvf3-~W_uy7MdXGoDR|BYeK__qegpvAC`B2 z@f-b~1L+}G{Z5-Fvm#F%_A@bAEC5k?nyHtA^H#s-aF`@k3N%7h=(<5ZRV;Nj<(sOJtnljhK(Qlb^Pv;*L#x?dQ^cQ#wSTFMF_QlVAI!4fM(xGNc4D zJ0^H7M4a>BRPUqbC`=Y!bM*~WmuNzNS}?@Y2UKa}vt_)ONTWInxxZbb?qv4*!vFcw zMyc1#qd%{!t1L`EEEyYoSv{#d#-VlZ%{3=@Esas%hddznuvQiV2T!lglGmO8l{W`5 zKJHx2Uh>Xg@M0q2RN}h_l#@z}N)5o%g{OayTR<`Rrk5;F-~FL`flcab4|djnQ4Azc z+lWWi+J2Gk151vX2ovBueWpd(*z`VLPt2FxDMk#Z@$oG5b89WwjZli~PBHG#SFsBv zUuya`f8hl$rmT9l8MnUt+EUABsWDP5QY1d(iQIjYvEO4? z&U?t~wN18)?AtEHRp+TB25!)Q7t3=^KUf<=7~KY&HnVV}Iz}ql;AzZHqDIy0w~F_@ zvOFv6j(Hj#*d7BC9q&A4R7H4X<)-N+wvtuQhXr6d_YmCjrC77th%6+NhK}cB$v6@M z5&(3rU@UQos~R@|v&K%o%uqz_Y;#Ua`t`4w)0R;J4)PcLHSJMl2y-TXLWPOqR}bbx zRf6mrh1xmKQy602RPM?aDL`tyM;%X&PFl>w#HA@!BO080)iN{}a~>#*D%P0qu^Q9= zA*nGbLz`_xR5OeH!t561sx~U9-1Fu@+DkAkcRoob$}9OasLDiui(P-Y5sO)3@a0ai zJ+Q}ew^Xp2gnjh@(848usV$V{bKEw`w%$iKsQ#W+!~*u-EjRbx%j*e`FQK)en*suOQT#t9+{UO|N9&&d%L8%i_D2M(yGH>>O;x9BhgCk=P$$1U? zmDL7i5H1X{Y$Htzq*-G?90=MyEmT4h>+yo)vNJ~;68ebRwSFAv*pl6bT4u&!eQCFs zns1oPu!hxZ7UA&v+AMTRYQH9$_m~rhFYe?l$=`#hnCix2Aw2O!!7B+c&|fuf@Elpc z1Y#Q|E8|sfxpL8efPC7JJ*oBcR!J@^OnVPmjm+}AB^J-wT?NzoUk(eZZ@T}pS@f+o{p4VXJS=|NL_Y z&jkcR_m`U2+e)t{PZ>xhDoxc!PNMIoJs@>F|o|kRx|Cu`^7C_{nzA3S2_k$YIk5QvxlJB{mTY6wa2e;1>md__oT9*J~ z7uh!fjAmFWUd3yx{Tc#&++wTOAV=tmY1z1cMs3-J$!q6>pn^@PSq0KUbN-9P{h z^LW}`j_R9PowX$=^Zh9noNYipuiC3VkK?tya_)%JBP!(6u8BfyS>S})+f^3(wY_sh zx#-F)i4|GB9b5cd9Q*VSGL)3?s7z-uluh2QE6|_ z`wmFu-Eyq=*bt74hkPtyvM||3X1B+GO^m<^lx;p@B{@fRZp%FF2Uk9IkHPlWu4BW( zbFL~FEEiBz?qW2-K0O8)A@_`Nk^Gemz1J_DL=BT6CM^UCnlog=*DQ5bDje7g$#?!> z(Kp|jh0Bm*O`t>fs@E3%BlD+YYdI31NYTlwaz~m+jz8zlV8kar#QDns%kyV{aOKng zA-7AaB=^xpHO7oNd~oGo83|Uw`LQIZ#^Fy279*+Wxa%YPIBu zZuhA*7a{rqRkLrz$~q^3xJ5iY`-a1=j!VsuP2{QPHAGaSk`)9{F(K!HOX4S^1Pa!< zrsc|_Y<2XhN!jYm=nC2+!I<2CM@Ipb-Vb21D5};N;Baht_a8}_d*)ABo^v8TSros? zuf30noqN^pPM$FbQ;G=DRlP>WgThD)m`p~gAq;p0IR=N1nz*NrI)pZne9!r9Z6g(E zS8V_-TJd9)4skSO8|m^s0Z(;OGTuu_RHt+OoaZzp2GD6i+A8NYLuW;QP!$Iox_T{> z;-jVoI-@krC-|j1>91^~(>+5j2--e>t`#LESN*6`k|-S&XoYTb@4c?Bn*=WaJd?k4 zSR_E=_Xv5&6xZmmxI|X3RuUL8TW=MM^wEIT8u(T8+d&YzMVh4G6kWN%a6% zL|&vVu41(-TfVQ(Rt%zRGkOsMrO|VSpcnQzC-DyCoL?K})djnHjS_+eoEGJklkElm ztV(08l2M5SkSd>c@*L})2y{w5H&+RrU@|WCH0;wU5z|0`gk*Am9#AP!;Vhr_BwU^| zME++>Zx@uz6wP%Cz_TQ3LM83Tkq9p&N-8_uH_AzQo{q{L)F$%x$b2WOOae@-Ge=Z9 zc1<5cQg3j?>OFE(u$XD_bMl@jC!*d{&K-W9$XGs2%sbCu+97z9*#j}qXP%ne50y=F z+>n1B8Lt8odbN6gE|*POB)^=Zq+8yiCtf|kN&Qm(Tx&NuX29dKjbjFxr=DiRz9mM6 z3#ce)w^8~gy&OzmWQ`na@t9V0<^Mff@z9-knDbhu>&U2~EF=_Fe(hoDy^8Q9F`N26Xq2$oX`zRIlG!BkCGexUeqiP}j`_3| z`99AQx@=vQU}EX}H48Rgzh^imYxY2nB{Pv~q(E-u$)qF=L|;8keopWwEqc~p+x6hc zSOAG@Ec!e#_`$6OGO4eLT97?h2LCfHvRUbuC=MvCnD-rczAtk}3cJ~O3dP*B9wlBZ zJVkQYNvFGiljq(`|De^|71*IwnJbvU=aR7}C8>vuag7emIQf^d?2lJ-iU;XWSSs5% z9Ww@rLQkMC=NpSEu=zAKQxh=&V>h_`)rOWEdAziYQf0YU9h4`Nr7%%>Q)N1z2FteO zxE=H$(|adK_U+sz--rcO@8RrrwGGhc_mtU7z*d2O|9%>}WX4^T%roI~HPUhe+^fFv zPvtM$g5-Zs3!Zl04|uMvej_+J^_mkgRJOHx;I@MuRVOW6xI?pciXdAUNCDk~$_do4(CAlTgD+$+7lR z8^1Gyx*vISU>O&<`aKI2Rr*;Hcf5j}iD)OCEuXneTjrV6VH}zt*#m`NQtx(NXnghz zS$Mmdg;RL*4H;eUS$WTy2b^i25lha0HuS|ZCPdGiYIn8~o^2l3tf;OkUiBV7^viy| zDcX>C|CwSzW5X$t+_N$_W}zf@>i3c~e_ZLcv5b1e*=vfs{k1ps^m;XJKEs*2muCqErOeZR&T?(9 zJi1Jd zwF9^nOlB5k(P~65IO4vGU6OstP#zMJXT~W=^*@^t0y%@+oiqM|uj+Xqo%Ut@T(s%> z?sAFY_wM3Rk5ojS9Wli2VsyxV)qwlg`9sN#@JsDG3-9AdMimQ@klOvJ*^yz*rzu7$ zNmzYTh{MGoi^uI$2|773_~ zu0RiU9qCc84nL~)c=go55BfcqYgO%|i#s_Vx%&2AL?`n-?#f4U;aqAc$7T(gkf}tw&m!jr2*J_!~_&m`Umx@nnH!VLjjPt}m zfm-_aSlqN8>h~;Yl)WFA2KN7KBmR|LqtMb~>-{tXm&lQ2Rl_p1XH-T~ygm0sb!=35%f6{&)4QcS z24+FEK^|x|1vIednzv4_89}++`9NfZ(DOYQqZ!pzVpPyB$9fw8@Z5Jc37AwOTm+RJ zb=dg9cOL9~)- zs$U8s3cHaOs;%j7Q)d0N`t))rFrD5z2(4RZ_h7<2$^8xNR_rwUMkgiXZwsv9*=w86 zq})|)@YW=LEC{2&(C{~mADmtr=HCe!7 zNaAn#O&zq4yai|@?Odms0@Dx!H51pz46&ADO}%POe-3X8YCK1jr*|cK6M|OwID0@< zSGmsm+9>&AS!tPpbh-z8@w^4#_1%b@-QX7u$((`^1^xfv}?lYEz2NoWz=JJ&Jt70HYD{D^$G~{ zc6G=$$Nfx2qm}APXDgh4u20zmwM?%>O{^abq(ndrODlp6%aQ1&Rb?Rcp6d6gCLtn` z7Igi8yxp#V)LqLI>)nZwzf>-kR&c#X&IqJEE!dY!_HD8j@^0z$`@%!!m0(5YtO98v z^OilhY<+ny$QkX4LR^Ozni-B2KkLf;HW1ZFTU8Hcyy5gUSE->}`t|GVG`aFC%yew> zmbMDJ?}@v$^DCT`Ux5Z5CS~<{ftb#E1->VL#AkkOE=%Y1)`f0GYK^Py{J3RCU{#l= ztM9OU(Mn#&girMIYH4*nqt&t0bqH5Hu;xv%OndrS>v{m2tS4Zc}p4YAhPef7g0 zyt8a0*Vl7r2b4`kuoe2OmDtyv5>tA+EB|Ne(-}MJp3$OpcXB5edsSNO=%*dy8d9Er zgqrdrC{$x`C?tBVZGpe;HsCvnTVHMdO4#SqsHOFN=Mdjd|8zaLp?$BysA@#}dUDP( z`nBRS;jdNSfW^+l01{U*6LY^F(zX4y2Qes5Ghqq|>AJ^nyn?Rk!Qz~$+bvZq;%9XW z*lrs-QCsLICZHCeV>igFHIWG{sET#UsIf|Cu6v+bz+S7~ zP3-AS**6)zJhQNNr_Q;;cZq1`SUdjiiJG7)MTfR#m2WW6Qq?zJ78#Ya;CAPEx;5edO5!w4{%FGJ>U#|%dbEq{hfJ0 zRf^S@$#HWB041)zd5cN%#jeY{93(-n78z9S};#~z5yF5 zEuU?^WpFo}!F$aS1$=6x#Wt%8l%5_1K5IMoQDTs-qP)>prjA;@c2j+2ejBXDR*^fO z@E1YIdKxFaE46GZmEKfZ9UvWtU_Q;~{?fPOc4dBU8%JQT1=J+)m3ohVQ0p_}V#JM= z0?AW`A~J$uKFuDVKE_6P^N~uP+eS~Q*W3=p)nhPp*;3nt@G_Z&?6m+2@#pIGKHvP< zw%nJDJ#9l{AXP%PU0x_N(k!qz-8bCWRHIjTQ?NB>2u0+rzmFm|t;M^U1f9#-PKcYn zp^)ja$JXeaBp1_n-Z*W4pk&>KOk!JT@g}cea|O7PkFgDX4dYTz2K;NjPDqE48TjF_<*DBVFpKWj@$actIP+h_cW$s$CgNT!8e8MUc9_ zg1ROj!Nz=#%tLYn#512qB7gVWfu>d?x)1fYTqRsuxSATB-QB-`eI~%gA+TJ%29GBc z{KcZ|Z(1N|GrGUurQtGyK^;SIFyHgI!N}x$Sk8<^OI{*d<+u^tJu;SNC43tlUcn<3 zDXF!Q?5ukg6r@^+IijPmR_2V*+MsxIj@k{*M6jwe0gKaZR1Z#6m^xwhotz=iT9_C0 zO>ryG5z=y@N%Sv&Wl8l8C{>Df`L%)IJ9mgVO=~ab0Zf=MTlEbltd;IYmG4KMbF_ff zEUmkX#5X@Q#{j!S@r>#LuKb+wLKy5@es$LQ+UI|zJNhux`9BO=%63`_c1+K83pta44c&4$!9kanT^SKuEruz*1iZtYYcKDj<)9weQhn@$=1*M<& zHU)nNH zdsqm|m%g1hbp3qVrH(+&L_A-$qp}TuQhv9drrJAhPFjYRb*)CXYoXwNnyMa&a^sco zSZaStx#V--dtKzf|&n zJ#!y4Xazz0_oz*A@6l1lERitIvU}_NP+zz=cAqAI=zgtW77l8T!PCtyv;PAbVHMZ7 zK|NiGBs=iXY_i$rx?wA}X1ikDvRnQfO#otvA}2ljNvM~?#sxNm8MigDs=9te0l0@LC!%j~j>McAx4tEfXX>yNGpxK{T-z4yeJ zQ3RlUmR}pl`b=d6Zaq!RJQw(ya;x=AFM?B9VeJ620~N|Px|aSaP^D#>w*X!!R$@L) zEG;8U$3@X0QEn{QQ8l7}7!QwgFV9GXSYYgnMM>t`N3}s8sJs6;^w!g_AC^YXsGX>Q zea*M?rc&4TiP3RG8}O#IjI!=+0c**aH-F`0ndH-KiaFMHkjZ#w8#U^mHLDaQ_@W9; zh471-wl%6`YL06>BX zKV8(a*TOit_bS{hs+y z7`wa=6=XPixmN*z<73y;7R=%Fz)suFC*ubvZ?_|W=kkH;%>96zkFp-wgY!dAr!0br zSKletaYf31v0i1-(=$?Y%#ofwSmh)VWv$H@%=Sq(R>CoREhCY78|O;DB(*nB8ELX{ z`LuB<&($a+-TW*?XvM3tZ~X0N;%d$f!7;NuC-5;GRrO5?T9Nm(jQm3G{<|F{J>*l! zd&|r>%cH#l7Ko0V2P!3lv{&D_)Q>4ojFIx}^K_?w+?PzjQ;^O7)qA8;y28MTurnvK z8>Nd6n7t;$vGt5sxLpC^?1ACQ=sv#Ph;3&Z+O@r3($I%z%a#3jm@w>A>b zIc_Jh%-%;0oJ?H4M-Dl2)#rJ>sGLa)fFgnRn*wI@0s|T-#H`DBlBn+_%n= zRczmXOwBFTF5+qCA*Nvc9tFvs&(zzXL#Rw*w{cs}^&?w?jGb-nib7}1K~CO%r*?m^ zXgZB;aj{AT6A~(vk84CP+LFz_VR=(6sByakO_+Z{- zFzTeeoFvdI`848mIeS$ILG!77R20cqt@U$%shCS9 zcInEe9q!R}>%3t48}Z3vj^Dt`ShoHZO^ce%j|QBA#u3 zXv${n$qnuEPDBSaF4Cx5K21C#{Sx;ES-qU`u9mmlM+NilOJ<;0OoaTUTw2Ne>KnpC zt9H{6Q`|B~=Y#i`v4D$Z?{%u2>Yh1djBh7k_Zm$*)uZq$m42?f*rlLSYuvDinB`hv zL5!)`Ra)z!E!pQ8)#nI~M3X6+x zt}OcGq&RBaTphY1480y2)A>t(FY`Ki64%(Q5;bvM8#-;CGW-RFv9oWoABl*%bncxf zonZlJ7*G3;fBMDGfB5w;|L~vwx8MHaw?F;ypZ=ep|NKwa?|=8l|M1&i{P&-J^EZFB z|Mc6x`}x;D{fGbRzZk84`-{K(`M+(y{@tJLfA_0@`2Ekn`d=-7`!9cg_h;i@|MkBb z{_xwMe)F5_=b!%m&xRjM?zg}A<*)zn&&RL+;m2ct^Iw1Z`5*uC+<*Hoe$K!C@>l=x zfBw&B{r#_g_s3uT{J;PF`+xc8e|_7Ze*Wp7|MTyD>Cb96}FIVe@ap_TyiE z`up)?{n!8Y592@h*MIb1{o6nM|L(v2&0qb`e;j}Rhu{C^H^2YWuYUP|{Kfw7{`9Yd@XO!-U%&t3fBxOy z|K?wQ`70CTm%sls`#=2W-~H_$fBNGe#t8rE7k~KGAOC1<{_vmve^5&U1QY-O00>ll zQ*>ob7j10Ywr!r69ox386SHI6?$~z6wv&!+bdhvr|8!^$;&&l{$@GTA8jR8Ds4<4j)D?oE;+&$w)!wR zF9-8ef=o;vE@_aH_15p>V?9$YS{^)~QT`8xqOoy}?BLv9uoKV>OtB$N@|deXDS~a5 zmZ~tB4?ez#rz$@sEd%GEl1lnlLJ%VXagmHf=*dLs@mQ9~x%pUPFYWSJF}>MYFq_RP z5kKFRkr|vEW0J;P1-4o#MQnk`8QWw32+|IfE1mOrR6VC@1?&S}2@9k;K7K@zcZ>wJ zb<6BK*Vdu&(VRfk>Xyr56*wA9O3u#7qIrQh~7Q%c1kHunEBx`=Uol@F}N& z_+Vd7E?Qj0sWB4$w1)FRa!^uFi(pmX4I{`=`57(vz2v0IQvilP-bQNsSwmG}KxpHs zo6)oYoDs`=6BzBnq_Twy9{n4J_R<0030S#&poDLNodVGCgY2=6O9sU$M~^XV$!egR z8=Dv$J3r7yWN(dFx2m^i@rkX;Rx(gdBeL`s6QO#KdJ7V30ojCbaXP@CHjMMjT{KL= zSkgs}4cw!Y-YLQ8lj_Bw4T{ zH$)WTIK?<-`P8QM*Pc(fC+<9LvxRr~02X1qx79A%CHMOvwTPjNo{K z2paz$$vK|CS=(I|T4p-Zwdy&IXf0N@dxMJFi^Ia<`Pq6nbbFS9$Saoo(=1SgXrLM( zJS*y!m*7oyb;JYVb5rXWekC69IzZ`}RbovpGL{)EGGb>S4~~F;j`3()s4vwj=fw`? z9fjmn_$WMlR-}+Ryy^VJV+jJzy4zq2Ttx3kmpD_$sUY*7&bxZEMg^z){NmN%)P4}8 z{s=uZrX*2bV{+&pIk}vz=jwyC4QUYhQ*Sa265L@Cv!B&Z0)Bd|-ML*xw4~c=kGo!g z2agaa+RrmAXJlACA}Rw+srpQd!kQ&D(&S`k!;+Z>H(+DXuM5)w(fI@t|9fTr_vQFc zPmFPy#?%18IO_t}1dJRDmcy2?+@>?)SToyi_$?m^ZVj_92vDX!nY?>CMAsIS0do?M z@eS=Tf|p~F=+19WHmP3X!{&#b`-@`SJBLsM4))6Q61959$`e|M3CXGERY^^PrbJj% zjM>ByLTP+z3S)yrZq^OVhzQW47nNJ*8vTRoD6d;RL%mktpnQQ8JNoKPB4L5p)<7X3 zEn5$9%#UZVY>*4__(tj?*&ktZ(jH1cKsJi3J_$t#qEL&_Su!~Z815Y{dQt+FfSP#+3yRu3i2^A1O~jc`3RB0 zv_(mO9P17aqfj>2u(pd_`?R%gokLUdsb_KG!oBC=^2$s1absS#-9vXYw3Rv_4Hji? z_h%_e_wku&fdJ$RBMo5QV}uOCd2v>-Fi4U625c7hUBNzp1VcUhix4su-DUox+1Q(H zb@D))tC~~yzDNglCQ`=BGJ^v_^_`-*7)1Mz&R+%K(@$XxVVQr13dGnUUp&%#Uh56D zLUnh)Lz+!#q2IWhMbLP8bIY}SICkpdpy98tu(Q9Q$1mZZU2XpM{S12Gz2p{j3{#Rw zV|Ko&$p;U?{@qIy!KHRBKu&b`GloYz8pXwJng^6Jca0rL;($eX2v)EA`2eYXny(sN zvi}z~=#$j)y%$p)e1Kje8oJ?xD48z{35j&}7qQ>u44+xf=iZ;SwSBF7Q}imzKdKQ& zukiv)!5n{YGu}ZTC%b}lYy--p^>@#|ZX>%0F&>17!_=19dqM9`Kfv~$K>;o9X97bn z$Rp5hd#_4BS_A4^`Ng`GfkPlGp?%TDktSaiYy+eXo(16?vi!CG>!!t=xs%Xof)RNu z6{--68HyM=3uKAF-c<#b%ol23q7}ir$)BbppM>Ww0L7lA-NaNSU9UH?(i=lGE@WFcK;Zjeb!G|`U{7S7 z$_=U?j+t)ScO4uL&yQE8O`n))?&1vXQ?66`vrZx~{tgtaI2|r+IaN0Aw0~f%)sDRK zo66i+n=TsY=Hx-_8P247Q>3S4r`8yh7MS`3*Mx!YD39;i{Am$GbkTxqO zNVU?7^se*FUaimJ8(_=5N5%O9h=Yn$}114!)tER7DHfr$YjjTzJiVNbgDXM(EgamWY8D$wC03=G{> z7@sxM=G#{7$d%vrxRh9o_8FNzwV0=(#BGi_;A-!@*)>)-+%}WnGfN*flJ ztlS802oBg7WOZi$R0z6vgs@Te6j$?eptz~zWb*!|oI`6pe9AslC@Bx0=d#LRKHcQ$J@D;sW0qFtgjkSpr|nAnMzw$9o4*>J?s zFY-9!fF^gwkBi=;i49T;d@>-eeAb1+f|Y|?2(ixgx;$3eNG)NU?0UKGl0mkFly}Vy z9o&eQ7k+;Fo45BxoSN~~CE;xI;e|`)*|UaLxRl^#Cnc$*pwNQ29NR`3zrjt&ArC)6 zb4{5A7CHm-NJoDl1Tk}D|GJ%TfV@uQknG!v4l=cd5q*{2%O<^Ltpo6JztS1ccN8l3 z=jQr;4t7&iF)OJ$)9(?pdA^snVu67`cpZz6i?i+|rXz{t-vnI>R#DA>(Xr2F>Fs2# znd6$CWiE|0E8k1m)z*#x1E=EUDBgEObL+ znGxU38wJ(^o~_3DqnTw~@1Z3LQJ-UF_oFkh9atg|{O>8h2ZqwMq?lhq4O7EwLJfo-S_`L#tP3x0obet_HOACdzF zCxUCHN|B~3c&n+B5=FcY`3c&-y@&DJYtZC~d=X?fZK3al+EZ-%hTZj19%xMsPoDm7&7vtL)>l7f$JX z@Oi1jSZPd{@y!N1e4UX(o)?Ojmvjuta;<-{apUK3Nhy%w4TsYIOmsV~?Hrv*J92f& z@`+7m%OBU}<>Pjn5u*86KuM`y5`Io|kTd73QDzt_n`j0uy8Bruk}{%xk(9+X>&*;q zy5KN9n6^dG>dCaSsYj+c#jMt>q^#dIRK*>Lt<5TSrG7)Y#5&fpl5#eJ3bb^okfpt; za($_q)^d(j2*eGt6VnU-G~qa%4M^xSU{RgD%m(-_IM6U!xa_B0Jk#O+WD<0oqtT9d z3?mU_a+w99Vk0(PmESvH%^8KZ$&mhfw#-{+WX55c<w^N+Zk~0~le^S{PW59&!!(vuTp%NfO+T;}ZN%>%#Ya{u92-H|;SY}my z{JrK2zJ(Z`9=i?w0)Q-gnbzG@5=dPP-IW#1_XYw7-J_#lD?x(P)NIp5ddCcrHz(~q z%4I_?3n|ai&a8>Y@{EuG9{qJ`GMtMA%%_~=1 z=~Co#A#~Z-O3~1(WyiSwB?K|6d zIq~+UV zKOA;4{Lf$DEgY#t0|9nw>Tep}M<3bZ8~oe*kD7nzwV$4iw~kg#m|1nv2+s)l{(Ff3 zBJa=oKoaoMdu+jA+k7fPg`t4Yg4%IZ{vaUlSk%h480Ez#ly#0U zI*L3ZB}Hz0Hm4@Q>LLwvgH!xi6(=J~OOo+2aHR2IO0iRQMlc+QK)*~6s>{8|WARwA5yUfKrl`s&f9Ey}Y+fyzYmDU8pBIg|-D30nndtx54* z6MU!Va%7AN_8Jv|rh>6UN+cI2L3KY_@$67P%zBkNL)aYYdY}xv>aK(x=(+LkpuAWQ z8H$?2u#@--e|H!K`3=)yB_O*O_{`l`J>t3KD)tv?!+%sPQR{l7O4kas0^&qeM4c79 zNBS!<&;KTX#7^SpE@XTTND>=>#E|k&GJ3~qW+YD6X2aV0Ru77~=BZeBedmDC z1~CD=g7o)&>1UuKmFnHyP@x))=WbH;q_zhlMynOL4`fGj=#205qR-9~H8YXz`u+H6O5icD>plr@MgAy=%O39KPq2 z>9z83t+0|L0O});WEL-Obe7D3I|GhV#mU92q#9A{NsR>yFXAbeC^|x7{zm;KGF|nh zEeB3gtbu(aTdpBaHRLpwgU78!ALruqO3HR=g&kAg9k`3lj~*qHnX8+5b<~5+-H4B! zdIb5l0SDxxmza@o;!n+$sUbD zk%AyaCPsp0T>YCoFjdOeWE=);1?O+bTP)P?LFRW3j1c;vakT-&J_rVL5(6tXOzMbP z*(e;nutfQ#TP9DDxwu1CWwlwlEz{rOk|$BWa)6T$2>~W4=KN;dH80CPVuDfNT2&kt-}bJsKBmUhk9FHts&xi?%0TTmfxZK zI}~3EiNGGupg?kH$iPTA1&9{_QhE+dm}n>XZ3N|95ePmjGAVH!xH=g2s1%@>7WT2= zV;2}^D7ime%QYX{Cqb;JNJf-xXb!O`tA+^lm8y?Txs%VfRc|M1*TFHRI^ z3(G4v$a&AdgafTZS9e+C)&Rs?1WfLNV~?W6GB*W66P-^qjbAk}m05T-nET zUG8y=B)WM6I?t*VlP9nQ?W?IhBEYDY)I;H;vyKGu!?&=@4Fvd9c}i4-rmW=1h?ZKk z+mhQnjrCYkQg>5Ah*FyzahesyycLKuJb;oz{0}=kpN%fz?CrIgnW;vlS^1^g(U zDFr=e3}ixNAg30{j>QZZ4-np{9%O)?&!2G!Jd%5ggQ(s^e@Dk`7)qVGGE(gzg`z2e%EvKFLM5?L;d_=1nE>Ia>cCFGrE_df@+>^ zQ7)JGg9jwoifXql0O%(Ypn(>IGnWI!i+DZDg4*rS*FwIfepV_C<`Eq?Ro=B8tGm8k zdI_gW&!vh?nQ*K&_M{X}L@Dh8J6!4_74(=O_m#hP_uR-M-~|Ou1w6?+e>n7vU^$0?Pr!FSRn{jp_P#sri4&=xq z@cZ`5(GU&x7xJkl-MZY+~pG2U?%O~A?T9jMgq<@4LdZpbTTZ;%I!3Y zm8;5O>wduI+|gslWdRA7)G<)s z3>z5DQZx`ZgWI;8!;UkP19yiabe&6E1fZd5E5wj@-1Za^0n|X;BahE!1Kb0ARrgc|;CE%=nzGY9b628L6=MwSk9u&AvE{ zQ>`Fu^e=N~G=?m3qbG;&FmYpEE}Ein5>zbt`MQVdFD<<8bTbkp!r4Z0VN45)V)(Q~ zc)}s`MnfEGV&P`uj=rV?usIqKO)@>6&}D68^7&;GFkm`*iHjVKiqMaLXa4@^mi z8t8f+K0RhbJv0QPbk$t>Dhl11OYkTUUOZ_lPljs2htiRE446Tsgf~`LR%ET`rF8M6 z6{Gtr-Y1xMzi%{@BrZ3#E0b)md%0e z@!3fDe@lW|tTu%$MMe3s^U?<2X9>e`iRgT%>vu9~u-nymJ#My`v$YljqJQvW+*5=! z?GxYOcDgV74{52a|DJZ69#=YSd3}!5geekiQE4-!3DAhvE+)lTkRI8X94w;%Fu})| z6>4H!t|1LAMrAhvQyof(@r0IQOHA|P)1(EA%W>22$2sR7)OW{w$>SEq?pUClugpp6 zxQ6Hd9wV*87p<0+DprsxSiHA1ew571(gb}U5!Xq^?Pd@IwXFsGnzn0BV8bl6f}mWc z4R!rpa~ReIMf4<{_G^d}i)YSbt9fS3H)Hu01*dKEYSMeasmg>H(Qus5zp8x-Q7o%| zl9ZCRZhif?$HQY$iK0J)NuVxq^F=uO)}LlGbKU7>B*AVr&`sGr2KN4*<-eSLTS*?1 zN}Z|Wds=rh3G-Hibje_th`ul2u=J(XDHSeQP*tXwzfcw(lbdp0D>h@F=PwH3@3Q*b$;k!W-aPaLk|6rj#PW8LU z;siWE%(RpP43r$fwP6U61)mY7-)qpbMp=#_#uNZ)GN445=2be#?y2@-|7mcDpIdULgAqGTI(HmZyCp!2 z{q|HF)bRbHWeZVh=a;$AMv1BajMsAYO`b_;0{FFDXg^q4jiB2qPBA|`E-A=odx224 zP6i$C^JMh}7iR68AMocLU>V)VU zja#f&J}K*l^Kq}97nk1qHhg%|a3Bf>xI-ObE~`lBiZX!pzi|XJLnT?7ez&)Vj80P) zlRz+44Aet5KPwChT#d8dFo1zV{kU-uu(| z??JcAO=jcAFc?^3e>OU~=Ttobd(o)OGW3y^RBZKR z?KpU0aYJ#Hi(i)+cUX55^${jp2BN_-T4-3nFmmZJjwI9y;@&&2aaqwHylgILM^~VL zVNJ5%pSuG8x2CDTw`J|dxf{eaR&OZfLawM)JT)4V|9j$)h(&6zHH@Mc0op>$5_Ce~ zSPOVjUC7K(NFRCKHX8#v(_BJ;5b{E8aT5RBF#mdV@^5qfX+u~1w_Z7P4$bxBWAnGF7 z4{LfA1;{?5QHGlyXyFNdPpwvTgjF)t)_X1$SXUb@KJ=(7_6o8FGdfm^+#kF%@lqk< zQA#)rby1-yDQG7Y(wcauZ&f#DyQrgQggPp#aU(r>XAO5g%=%(SCKNTcqgp zS%PixFEOm8~L+iOa#$7iS^Utc;AzF01$}K|)T8}ttR0SwgFDf?fM8U>E z6&s=;NE9`K{=c*WUZ!C9mr(%u|4o;uy_)CyAn4;Nmcco^nwwDsUv5^CxPbTfRiP5Z zNgdD>L_@nrP^mh*ENFjsgvUi6D%}IF0}BYxB$(rwF_)W=II1pKH?r9tqXd!uQAw%v zfaubu4JME5n*yCrTSwXgk2>~9*0J|aNcKr!O(^EPu&D`3c%2fAD%)o5ry4>-O8lIH zOkqdS;wTGB4J#G`_W&92`wI=aGX}iAN0+HhnhDIjFDc6DnCU!ve@@eRD)(vbxd)m5 zoQ4Tk$f6F&2~;?J@Qch>{MpL0qG@*LlPV?2i9ess`iZYy%@Lv z*GFc+f93+LWRyv-BY)8G%!jE}Wxl!P`)l`Vxh^5X5sy1vR z4l33Bx;LuP6WLAGh4B_v$;cO!uhtv9`b3!S6+=V=mG@@n_3-&}L@%j-Q!s*{$jW*j==3oGDdeu; ziM$bHfjuijnwW-a+yQjXYIJ5~27Qqk{cGdnKpKc0K;;2VnFi{CL}b;rz)xlNUuZH~ z=9gBrus+hLrou0=DLl#51fd)oYBYs{d|QKKu^>9_UxzqoHf!s6ak7OFA=dGdMM@4y z@%nieQIa!onYsc=!f!yKAkeEgHtUp6H_DqZWhJ-nEj+) zfkf9`%+dht@U-?b!-~y0nF&}%4gsvF(t=@i_{$`BD;iBQYHQir`za=JO+Ke11+@U~`Bnbdpc4(ea z@~PD*@vx4=UR!8**x}ls#ES}}J&KRSK;yxuVl$ic>VY~3@9(y}55xHC;9naQSn60+&z39K!62)P zuU=-TWlj}~6AcUBOoR&cH0(oLdJxtd=elG_ly;PWM9M1LhHfS_;b z7vI}NenXP;+SK3X(UZ1tA;R#jI%zu<6?bo@$cI|u?cjDMIL?uTgsNFgx&&Mw0mqCe z-5-T?%=s=ZjX%w{vO7{bdL*Ojas(4H^FzLF^=g9kwi}Ujrt37rYLtJPaw=83Ovofs zagxP`Qx&h>uc)+e0oH0)xL=35l_u(ZI#TV?G@=Dm;2{7-mX8Z ztCuUQX)fp4;R=~Y~}i9EOclLF?4WOwM|w%XhI(OeS%(-l-~ zC*LVUnfv*#oFrrOQE>hMV4WWDkJFgz&A{%FQTY7@rA0u7VygL_v^B|kEXA4VQ%6PL zge4d>LEp|C~N6Xp_5n3D`WB4^l1cc`V( zayOzgQ9kh8(P-7#=EcGYC4m4BffOG8NSE||)I?MoFp=LH454_qz(U3TqREp1+!m4) zrHa1p7U9*Zd1!{(4 zO$|H|=%^(TCCSLRQ71ubW7`TU;=TCgz~Ny(2aG%}Xsw9%XjUbNJ=a(otvtLQaaW+_HrOe?Xfe z|0}8c=y8Ur1ZWS+SCu(^mV5MgjD-gQc7(xg!Qa$pNKt-RxAw*O@L1H%-__QrAQ?7x z@vy#Yab(GVE;zQFnT>z{tpH5h-c*rmk(!0VMJVB{?m#2~9u!zkh7eX-d8!21Ddo1z z_>&kbjyFktql9>mu939_H3taO(>5$fc8{Ap04t(r)OMS-| z>jA&oee&n^Dtfu-EqpE(69X@KXup5Wl!gD%%0|!b%Z|L*MSn;Sm&FLqG01!fZF|2E z?q|>Vd1h?!j)kU>{ctvootchLQn>;83xvn}X>=-yZVzUR&K$g|kvN-x`X|U2Pg*s_ zl8e2|E|ATPU_dv;KUh+cY8fJzAQnpk(*Wi>gOKeiF{)S1)z{+kUCslUkyt#3AImaB{-1Trd z)v)ICsOrmElh2=d)p?00@Dy<45LdI)NF=UVA9;f;@CXtdp>2g z^<;qo5Ifo3&d-anQ-9&K4DTZ>?=K@fyuBG`rHH;V7Nww}pp5TLDHu@q%D4?xO@2cD z?lv&|jWQQZ@CM&bngIS`X2Xydsh7}C1}q>kaD2MuF9?2BO9I3_o{X*ocb5O*g~Jpl zj6Yi`DJ3TOK*ssHH_9S~`t;n@)tgKDxblzIPdNCCja0Gr{4wf?&SpG3vJv^kuwamD zDst+^n~?1A|I*V*V8U`$e|Ta^leSK3O<#}uF;iSWQxNNyY*f$b3Sbik&VbCbUxf^_ z{QLrAa?!>+JER3Tli4wuyUb~xKaWeTa2qzWoIJp2Qjaow(qGi~z;fn;9%rU!damBr zpVW`8viy#q-mrR$ZJo6;>~-VN3l>2`19ywfms32_af-SA#CTL6=rzp(H@kdl7-q*g z@8}h)_nJl6#NTBFK7eFS_-Jml2(H$J+L5b%IT2&nyv2e&4{8Qm(vD(T1ErT! z=1;%2UWUsvwqFIC{2_lKtO>ag@`3Ks_IM{>T6+uqE}@e=48Lk-4-fMe)zi#lcJm>) zZz;e3jfuuof|5I8?Z&*DaBM$wE_c$aWTf;YKZe8rf-!6iYO=mvy$gJyDx+3$M(avj z1&(j|fw!+{d)0Qo2K!C*`X+6!C)Q0(To7+AX3vEoiW(UBujYNdiU&MEZ(*QWZ>0ME zXu8m)Sb%@|+gtaq+Vs;OB7Xny@*CsFgbfa|()4~$TjRtuj#5>wM~TZtY0$H0&N1R-Xn`IZdQPtk z4jY4(xXpw;Gh4+R?G}T=`R`im-#+>-Vj6Tc*3Ay|itJ}BUM5g2{lXN<^JYgkPqf1* zdo}2!$_C(_>G(t1NapFPp!fy&fh_G26q)091RB-QmVB${`#fzvhRK9XoCTte&;|vH zbu`)q2Fk95heDD-vOn&#o_*}FBNf5ff)$vXEoM!5h%rIh%bK6*UyGK1P=bMnn=T^u z!?6$gGxQLF{sB1KM9qg%zz|A@f~_0Gd~3E_+X)&;cOeMmL+f ztt$qo#{lbV;Fye5Z>@!pe(53=W`)UAdec!o)UI)e^swWjNOiJApAb=Dw82T=J z3o|6pD-UR2DUp*5M)cmiOIM@-=4Dal33gT#(ny)N#q*$xRA^R(&2|MfQ1_d&RKb0q zZaD_G4m-G=*hs~BDj*r^JS_tJkUhy(la;XiYIdX{kvlM$2F-H1nr&EuzABH&=2-D` z!iH+{n}KRF`HM%F19V>L)yt|r;RbnF{bwpH}b&~B3xrQNyp#7Dn- zG0J<(S+X%_QDs*;=9FsGAS+OtmhH|45p394fi?Z)`yPDD%Ic{;6m+!5V74ghAz_0x z0&cq13Bl6LWDBf+3lD*M{NfyC&pmQ|rNT2uUV>H#<-G#S!fvveUGPVZJ^r6!)KEdI zH-ca4nT8~OVOur1Ia1=GFo>SpNVh8G+;!$V4wkL?Zh1c=W);PFR}Q^hWD6by&e%Td zfcKZwPB29ab*1=+bA8I2zmuYWE9F~!rLLSGdJCYx#7sa#34+C4X!v=01{6*AR?kVN$U(9sBIi9e39VHHlp|t-n5iNq})(V>Wrs)nRYj1 z9P83XmSuyq$$#r&Z+sO8yo)mYSN-DkX@$Hd zLTC?o80dq=Q9EEcx&~hGd-gWEB|OfXxVM#2oAL_9G{g#lvJ%U7HS{;wq~urGK&98v zxJbGAP3+KiS&Pau*466OwR6~vg#aT2#-e99rkpNkh2_}09L!~Rh+5L%sfq1)F98#w zY4D3_h1d;=OnH<33)bQ)jY~KFMt1BdZPM>LSP7dfA3Nf8(z<->l9^s^E#Nlr6_i-t z;+>OMx?UsCm%`BzG`P%jHFc91_;AGa9>KN(z~c;o(u2v!@e=wpr@=~=^pTWA`)+^O zznsvaPVIEZ`=-i@jUa27IYe$*CCCP(Q%OT6kg^Mfz&KEsvX{S?F15|YcODqdl=M0s z2FW0)n(4up*g`3#VzHvwiwonO7RZyMMPGvx@=l3DKlBx5$l6>`DHV$VJ>hycpn2Tt zkBw}hxS)rca>D+QO1~13u0J00AMN-`=LCX~CNNJN^u{dwb1B(k>gz54^$&gFokUTx z)|z??xt$0WD>aPn>byzi520IXaE9{E^c5ppbAFY zJK1~imk=**7=DDxD5@*~b>s$cS3H!~fI?YGN^3sL zL)H`Z9^|g9%^}G-;Z|z4U*z~nz*-7mvQ%3uN(GBvMwjq<5;o_?3 z?U$J&okKveQ6aL)wuOc)P??Z0|6N1>;kZl58GDY6PYfd^V%>G9Q6e$tC;;3=WqZC8r43E;YNTr~FySjc^Y&tKN%Pd-rxFVtJ8DqK2PS0BE zdg(3f@tNV{M@LWLR(rt>HonHysedXOfi!yr6RfG|8s2j%2N2%%emv&vy}{5-gbz$DI@DXfhi`d8#@2()j*vICyI?4z;_Y2KrmML)ngj zD8+WoYiS=_b?w*GS5Fa}Ko90w0i|P0HM)*h6eOU9K~FH9cFO$o-}Rjs^*MNhK#w{) zNS+JC;0k!{ik^YYkR^x4f*-1J;kO#6!Sq;`jeiB0*zdIh2T9_?><}S^%4`hTB3gdZ z6J|tERpYM}b>9>4_g|x3f?vMo%%GQmj1G3)?-^GL;Elm8;|H4I@M#>Y7k^esA=6~) zsO$s(OW1J`sXs7i1eFDU~D;uO`0iD&qb>{hyQN}p+P!_TV z#0TkX4ub1bgyAwDB)-zo0HZqaOCF^hzdh6!jd7eJT4v5u?*NBe@ljQeBxm9gM`mSNZN%gXC}O(t+WNsL7)f7k z#wGFEW~$VJuJ6mVS;JPGJbU&8?_Y3|f;X-xu%D=YS58I^pAF#ZXj6?B_UAq4Uz&n-hK^8iT0@EC!&@AO72r^Lrt9TUL5Nt@>q~_eXQ5P;vocE=+mC>HOr@%;_4SIhE z6Gq13(8aDq4f#^hlPnS|a%?@*rW#+bP7ku7EGJru57Y7F1#z|2B->Mi%EDT`4Y#HU zfClE!1reWjRXo6SW>bVy#l8xSF-(@_;rv^gh=F;90?v9)q_L#(Mh}xNtvL-34}@+j zi*AvmnNU2%oZr-6wq@B_5QsJ+oi#mJLHf0!4<~U-Cfj9{NwhE@p%JS_ zN#8;%dtufRBK2hQM#453)h^JkOJQ$QakA!Y146*W&dIfGRGRdp z%ot%h>$EAZt3rHqR+N?YRD?yfJ=zu{Dv092^VrisFq4{2X-RUSQ zOZwr)#^We>8r3qlKmvk~AK*Fq%W#1=zVXj@&=u|(slU#VRzyVLd7W;EGlosxhHSNC zN!rc4+b(Q?Igis>M^Ec8D3eF7sPSbV87U@`bpuIK-qY+;+z=^46($bZj1477 zt={tex^Fyj2#{8yT=}V-lcx5!UHMrJDD4VntF-w9GB%RCDjlqVSo=;lW70z$Uqe+MAq&H`W&95gE zt%#O3>`HZi$;BTW-nFj!SJ(XFZ0S$E1`W#MJjg<|pR_waI5jk%+EI94PR1)b6^QP1 zOIQM5RDqu_XdC*jji}%Eiy~qV&$d2(x2I+)OY?Cw=d?oEZ-|(gDh#I;@$WJz*S!zx zd^5`sh;X#tY$;D#z%N6`*pd!-3#->S6o&JR;fgy@?e^{?NBW-NirYUh;n9xRY-N-~ z9MCrUWvb5GM2^wW{rZ;2<1m8HpuH*Ih*U|{0ZPM8qf5l*_Ix@m?J%M9`;%7#Fe5n z(n*lYPwGZ$NZzt0JD~a-XzX96YTAr^F?qNSflrq?U5C zE>~8Am~FC#6ZslzJbQjwDS5``F(HmA4JhAROV@{AIm4sSpsIw9sr>b}B?o7V3eB`q zV!y7grfrZ=S2KpZB0W>a)<$9IOZLxA%;1y!{aU-LyFGCyp!FNa)#a=H#X-)zBkO2C z-ga$S*PF0PTqZozM(^s`#NKrHbLu(y@%ZQcqm9Qw^!=;0g*l<(c}n_fV;AysEpX>l z?bxBT%`nlm1?nMcE9%Ng!{;GP-~qPw8-teSd0ip+gS+lZ@C&oI7m+#B`?c8R1d;D- zI`!Kxe}1s^8hAW*KN^)VKX!iGsc0B?Cc7h_cU4Zf)|yt|#2WA%m25U;3VjWPeuFnT z$NvHoiEd>8dF4GHO*+4HD`VFJENS@X?d0rBx&f`3>#w3M2y~w_Pw#8due5xk;Mg4R$G9y_2T`JJ?KDw!;1v*rVr9(CN*=H# z@L%=SztF6T8W$FqGPl#j6KUA!!cwDcL08koH&6gH@bP7*Fjp&JLGiF!;NQ#R4EQ}{ zjy};Z^H(^KcubHv5S_yE*17lpL)1G)N7i-U+p+DAZQHhO+qNo6$F@4QZKGp%$9Bhd z2mk8(`HlDeQm4ilr@mCx*n90Y=e(9tYk8YHCqyEnq2f0uVMJ_o^cA;PNRl1!dXA+u z{PBQeX0oUo_9{Akl2c5;pLZMg@ALKr<^P(^@A7VjcI)^PqQ1r3J+zl3k^uVtkwpUmQOQw-5Yq%YgK? ztr;YwoVl=?X+2GL2nOwj0cC$6B1EgA!0!Q1Oh|S)Z(@3Y@t?=%+%~J))A>fHH>7-S z4sjDI*D8!Z5SZtw=I1T)@o0Q2@>Q)20x~_z>_%plBxG=gi}R$mqZ(#WsZS(+tDy*aKl4DG9^8rG#nG=utkR@KwQj;1;6XnNL> z(vu2+D^KoKqNAbxWQ@YhJ(bd}shXjE_BS|h6 zjwp0uX%Qcu#Yk}X`z#3RC24?RPik%_f;-3#28(h|n_;F;0T)N5CPIzCS5?KJ=U(-% z9b(+j#|b*7BRXUhu&o`G9ASgI&A+o3qY)3sY)7Y5N2C6hPdx7=09|scHY>tf@Uu#r zTP;GMTysY+zZIxR&DZ;Z7rRpyG?Yw$#W;8S8%*~G7L<*=1rJv$kr!YBCf&RLtsf8m zr@ZP2#7Yl4EC{gix~O9!dw`P%XPJi901{`$SUy*puC&y80qKm;fDozodVnTTG#yeW zOfyoi@={D8tWLp^==$7WDbXBRrjwyb+P3S={dp8I;e8gve=cJAAN&#}xvRvywIGUx5}hCi2g=-)OeNY*?4%>AkVV?oGL$J& zxHO*Hyx6dEki@703>CTa&C8c1g;;S(Rtz&;P(R?GkEWh4PyipG{W?%Tt_D|bl8wJL zg7`IPq$n*Az{QP>iH&n=9Pqw^zfKpuv#^8deS|7B?Qhd28K$D>ufnn5XRmru6UI@s z{N5BGOwhWVP6lQ@3eO9l(mWqRJcTi&wW)kazA`r(8})}roYmnd=94AK7Ob^4P~VHe z;D#YVYy8o#-T_s5FzkOFj=|L&IR4@X)mo;sP%nm~ik1(|U)jpZ{88JX5Jg81n#5f$ z6kZ1nBt()-Gb-)+$}c|@l0~Nm+cvi4r9H|7i`N|b=APJhOiVC};MBndZ1Z8GNaTM- zPR`4l`bTy}@zy;FlMo?=c;ptY=YT;BCS9TU6Nj6&+XC)QDo##MPu19HrqO0#nnDuD z$j4*MA#oAG@Gieoi%KhwA_$EzL9h+*2TwnE=r!6Acn$atd~hUXwpJ) zxl}Q`bO2uJe!LvNXhRCRrr`0k(YdKR@6CjHS&$5k`cB>t@#S-kXIYGx&k-DFYAlaD zh0`y8XHG`SX#9?<+dvdHLl<>8dA_2O;oecj%~7y?%gR=ay7c(xmZ$}G6Lijf;JzX3 zjJ<9=X~KiLPK+Z3Ny1{qjd3E4YUrV&k=An3OBw(&O@YtDBd8giuz5cyK;#fNzI8MK zrS9ty5YlPeG$;d0n?GCWp_HSbIY{XPX1l)*3JJ&aY^>oFYTnlU>vZU*=%!)P?njmHF#q%! zY$)It1D^9vUY647Of5JC)TQ{egY33dHE`0@^Z0VPnvu#etYed^wbI___fqJt9Gnxr zH8%Hs@&_vZO|Py$i}MS=yCO>F#Vtw+0gOpywC!>fuf9cUUcTpT2PgCM!j=J$UV35z zpV5o#agc}Ie+R463#w%|ppS0mhR9bC-SPo4_hP@KVS=Yznw*?Z#w!ovJr@HVPbqD9 zrFbij6txJ2)CQ|&Zpw(K_T|!s>LvC2>ZrqaOF0wt{gXZ)fTf>a-~;@FuiA0?p`FtD zv!l?sqrLDK6Kh)zNYX>@cPKM}+^E^w52C}7?p%|_tc!BIg9)~y?)e3G!^)c)OkIF& ziI|KMw!)u~oy+0oD`a^ujweZJU*Cc#wLn83iNp9oEqHg1HaItOd#*yAkk}HZL*@4x z3^hOHGOxVk`olGzU#jw-{>Wv02X2R1N|$$I&!;mRe#n8T^#WlBU$8Im*8Z%7N*~pC z4`xs6rPHMeUzFGHIotlV(@ZF%N!x%m$Zb`^YB~#K1<-4-7tjKb(2~Ce<-g;CAf^86 zn_B4n89X|BOkoPwW+t81w2v3-5j%UayCb0%mh%)rfz(RVa{z0?+dh}A6{LG4a__Vm zq~Hwz)d;Su{sakueX4M@8$#pP@g z_r7OT@BFLc<448qY}&BCmN^>akjyKp{%2R4mIIaF{bUt{{^fAK5QSZf4`URu5GglF z6+_}==eP_6gay*NJp7Xa*L1C`ZFL^K0}Q0Zea0(=ZmBHk1pn?A7ywi+t!5b|gEFWo5T%PTT9ZpdRi018e3`&0sj~+%6R>uIXArxqLrQ@Dh?c?6bHGDkHT&T zdp2$~28X@m@37;qyzL&wdcoA4P1UR3o$lxO0#!OwH3ey*wMhGZ`bB!a6rSYQaeAtvPo(n?ghA22B>H0I2Fq3WIG{0Li+zM| zK$SDHuALLUtYGmOu|@d&+cz1MOzWYuC!wPiIlqi$5px&gBjq#icX{$QB}~#nr#etn z%`|XLCsDZ4l7M;DZ9v_GmZP&ZrYIdJGggAkN6Nu)vSdWa6dtiqPS#jFL7DLZD#T#r z=Sq{USzgT8ym;=xFCG~Oi*FCkse{bH>dmQ^BflY$YEd_Ysa3ZtH)=j@uZpF%Pl4*R z4N-4tvL(NS44Yw!tH5AxJyhNCm4((ab-5s$1=OFRRA|Ri8UULDItc2Tn4%7f4aPGw zlpMwtYaW{!^?rDe&%k1iu0k_oJ}Y`0xz8*DMsX9%8ctqT%fwPRb+(C1=?H%#yBztf zW;NIbC^?nsg0#Gvzm(WQ$>QWZP9&Af46I0o@sgnjpE1+`nCyzWv~V&{DcmXc^$bXK zS2>W{^B}cG450N8dOQsIe6e)jyJE+lhYXQ%v z2|{PnKB5p>!o}qTM@<;VSimt6_*=}1Z$x=e$wXXR4iInAcaJuW`2CyY4L^kK1OWn) z2$TXk2aeklEN0^x(?9s@br^Y`#wufr&PDt3 z`%<4g9~d22C045(YT{>i+Bc510Arr%*q6^?(|$JR4xS0rzKo*oTS0b2$!F2V{_+l+6@7NBTBl=?VJ-9{B%IWNOjHpp z)-jh0956hjP8wVdd(*BT+dfL8_!tpcNQIAc1)z8%K{g>-0ehR!iIWFlI<2VH?pe!I zW+me(Hx}8ODa;!86QX-=tdb=rt2v~{G*X?5T9_rw58l}Ap)fxsF9(SU=!4CGWJLSq zmgay7uG0jWc6sB<){7epa;WG}H^ug!}*-WA5otEAYqxJGf06KVg4{ z1Kg~a8$YTIo}I36tg*}^=y%~utFH(%;J$Ehao=qR>vHNf!^_+L5wQ)7JY*>iq?vCE zQ58TdaDXhxE*08B(j-vWFuI~`YtdZNk{w_B+vUrx$ zYD*@)L}u06IcT;wP|Pw=q^$lr(khMg4S+lBXssIA*vm{sJwlcsRN%h3e1$(umcXqW zL0yNp9+e1?9wMJPr{^%*P?92q96XQ$?dyUj45o8rm~?wS96>%?^~x!f3DeD#nRt2B z7Pc(6#Fb@di||W#*G^ej^Van2<~-IZApRKw9%r8p=LQ{}ICFacgAEAyBv@mgue!=4$2}!-MYua=^SUaYY>y<&ppJ?DbT*UqDFFNc^PllZG}`g z6EB<(#s>I1^XTq}e)o0hJ=Fk55g!J7S_(6nipun;zDl|5@$#k zdB@i%5D~jbT>>Hr`T9e_P;1mXp|jUNW+`1?4ilr<6G|x)lCJx%c{to#4*m+|zu)i0 zJ1G)=DK#F<0R;D--E-c4-_|F1bQBm>l#}g#eQxB%9{}F&S9ZK$isk^9S1)hl`TF=D zckENss;5FM;>PkkH`?*@lAU&ER-*PK)S6^%CylGtIrwmGl+lN|f(TmLOT_~}f~ivD zp^r__$oitUU(D%Ci)4Uz9l+5=dBT`0*DY+ZGk3!`CqDXw%1Kt_+{DUt$K=>*bR$aF ze!dwOlEaj>1HQxV@cd@JA8UJ`dZZ1AQfO=q;}^=*Ykz;sYXY(-ACBRVX7Tju`+~av zXgOJLJ$m7P8>UOeNwnG(IeKHW@DaSfkviJ`+v|5d>F7D-&5uwPfwMtw;HY7iz?@8M zdNFZKU)M4u*MhN)mN-zzlly0s8D%ffCoIm=BmFK9zU5i}CX<6w_#%`A)J^G`u;$nu zQr5gdmSS_Yc?U3bk7{%M!y=P)dh{jb_GI5K|H-urItY z{vo+5C_0U=>(wmIdCAqJDumrG{WnhBYoH{Ykr6tJSmeS=7LCm1S;lRifLsvY?(;Q!5cwhCvi?zZ!%aC_!$h5KGcuZqb z2Y8+K+3jtM56))TbnSfMDNN5nh$uDx^`u&B8fafxk={*Rb@Y&!U4a#jw=Wm@CoNCZbVD1-$wIB=+MZxm`7NKv^tzxCk~=*maaKH;hDHPx68>?G znE7~}85XK1OJPFvyXC6TZwv&_5H1zECqP0E^yBcTxEb!e4>#44{FN91d$Lo(PZ{!M z^&e9twYOm*_>*B8Pop z+1GdshGgVWsFLyj;>K0v*>4d@hysJsUtnU$%b2L_4-f@s-9vEXGWnTDA6W+^*Yyj$3bX z%E3y~yySGgUwl}y&cSP(yM+FXZmgk*fan3ikF?y{wF@U@7tle#g(S-UrhhpbB*en z+VO_)3v{9FZ-c3NIf2 z2j;j#;_iuFrvUKgq2;P7MB>3Hq|EWJlv8#J@%WQ~!11{nS!Q z*uA)ccIy8Uu(F4SF!b^9BqqspC~^iMb$r z56fsa?x%oTq&=fotKCv@N4)x00{BPLa;Z5%ou@9T&gA1IgKI#HBdC`W=OAz#1oeHs zN`v>m1h0hby%`pfp9WcvMohw1Pg2b&C+-wWtWL7@0|7G(0ydFSXtGQ+vGzh3rRIKT ze%fChfZd_hkwjX{saXz>24BO}YKjNV@hBl^&I&tKtPQd%fqf5zO5FS+pWX07+)-Na zQzgQ*->}bMo&x;So!&G!A!VaE0bwR(TblO(ID%y=?dfqVBt@;H7@?g(ReK@T$xRgY zB9{6V=Hfh`E*RWM5@^+Tt8*y%#hj|ViA5Y402r*MT?r>!bit%almGwJzs327&^?zT z&){*BQ+;xJmq=^wqNlEF^<50?DxE_!aj(wy#H(}QERJSZa$4(Bew!zdxF6@ zri0M&v|s=_PvR57C@cac^S=Ci|9~#yunbIs5yt&!W1zmfk@l(6Z?TfY zGkdVXg7nVHHc;A)pY5XJ-0AsnlywMquE%}b3~_QfgCeAf_FXx#GD6j{qQ5yUD$ zGzJxmu87eXlgu`$mJ=gGMy1j0)(#3V76s;g_Q^tWImiXP(atk$(L|cz<9~(+Mc`*h zs?idm>Jf^d2rE7m2kO#F>(?ToMP`y9hyY#lQ+|4PR=jc7zW2W1t|*aX?I49u9g(V}y+}UKN88gW z|KV?VWvxF-Wv#OSDmwaZ21Y^2i=VtA)V;4r`&IuzaxB0|ejzp){Br>d$vH751}4De z1?KoPFkEjYVQ&{Xd3lmZZYbi406`$BkATT`u3co9B}=ZlaW|$y(^n%uXhj0P&AjbR zO~UITqO3HnEUD)Nf={j!l&r0QRD(_t$IZ$fLkd7CKu91J+v##fKNYCoOu^r^V!jUQ z`du--@cKQ5`8&kv=NbUOnNqg{===M27yc>d|rODC=wYl{(}m%5WxYt7TMab3{FgKv3I7-V9O9XGfPc8=S;ONVxi1+ zAx$jN5lfu_Od^@@tPKc-3Gvwj`?lO{UYQAil1d9Dg~Ns_b<#>jc02A@FbPFL>l7=+ zeE$E1_fc0QQ9-S*#zS72y&dBMHAYb&f0)guri1KO11pv3|Hu%D@wSr(Q+~+lkvkFi z<;0^Q@U@T{XWDhB?=5lk4|IMvFL^kr*B-6^m`S}w1+N|F=bDlMP*H5DU;x7EY3S{w z2k+H#9yWv6U6y)hd=)kAO$cNe8)TAYU`K0h3mTYbfQX;GL_8WD5fx7ZbQNyqh@C_W zJRi2)#p~hfIApg#y{w3Sj@G}0Q?r`gR#0+^$+>ssM81!mnA7J(|1>jLc*&B!FcLjL zH!9f9Fz9?UcZc8@Qcu`r14ue2d1XxLQB2$ZtUt$XOU7oR@!E!vAs02&wWdOJ-Dp0~ zKU%8J5^6g#suP1bSM@x0ZK(fRvKwYe99$!yBE%n8!Uc8(zp^} z=pIiu$=DoDqSL7;T`H0rL3Q8fr2S}ZHDM@cUz2nux zks@9VzC#+Pq1E%8ECET1z|Tg(q~>5I6oJ;lC(m3tX&KKNf%%o5X)83R02qBuR?x6+ z&De6)-K$y5Qm1=i0rbj%T@GM~*H^qDpV>}(J8z6mKiQ3I6c3EKQ^A&Q%Gifi3o(4# zNCt1^dwrIhWSUC!OaJ&VwfxHy6iJNlf^WjUgof$DNg7OY3!VZY;#y*mXQYgk0a6;F z=)bkXbUk}jYcDog(9s5ia`u@=uBsN<`E&##qh=2x049 z0qj^osY{n6uM=S+BD^2xl;1fr=#%l7wnzm@Q}*P$b3j&~JbAMawoHjMk+N)<(&b>f z9Ii)f5l-N9Oabz{-QV$FD#=S+V(dvK2Ysp2+-}tnjBQSbK>7pCAmtD6Aa7}F9nMa zECKTZp^HM6hI3Xsb0G&QsXwl^@>Dn((-Xp5BHPDDdI1u(2MqrjC0F#cHa&R9TAMnd zB^XEat}a$8GX88OYQQVf?`%f+NprpW*yhMz^tB~IxJAf^-Svyd4XUW|V?aX)kZ)1N zsgi59N*LjP30ndI#9Ihwlr?;}@iMMB9m6wI)x_Qa?sEe<;0Os|^NH?GKDUse#Y<0o z$N&I&gWXPd7cmpi_VpvNt9mo5x@CP(b-BJ923=y%35}BU077YBg~j!XP(Ga|A?f8( z8)pqok^mvqhNReW_os0y2SxZ{3{PxDx3~=KbU1%%PISqTS;VX~O*E;t_uLaMu2~8t zsBm2WhELQIC%bj{2OWcqOgzmIT!gtr#s=Wv5%QvEBaOC{Q$bx!b<&tZiES6)MThP+ zdsAaUAjfv$%Tt#z7Y(bKi*5$ZjR54nA2(p65yzlnze1=*$yEA#m-%pHyLJ=~9hSIL zCdYYn0d4kzu^-`fsVYa5H2kQaOr!atyugO@Gu5m13MDn0&Xf>NUnMkEzU3YVDEzUS3 zklHVXPoR{O)4by#r9cjK$oWq>99DE}2Y9M*7#N&aNRx6HpJCR5iY^3R zbYzutWE+HjhgzzPB*Os?!zDFi{?$?sgsMw$n1kCI!n3$76wjdBn({j2oCScd9Jf-O zje6SRps?QmWJ-0!+>rNyqO0I2lE!SKH@^2$k9kGJFv#X0X6?}fP9pQse0%vcrpmM8 z<)i5CZN&_nc|7c-(^XUFn)2&sVvqc#*Pn;CDlA<|J7tXN)U@+pnM%_NpK1K|k7Nd&$5r>;RkMbTG`| z@_P8bYwl3VQoWkV&I*vJ9r^?}Y%%1TnaFXVR~QWSxh?X@9287S6!u)+TyTe%eD$jbyGOXV&W58hbHXzmL&{clqeV+c8@crL_`5liWrS^ zF%Dqs(6{E_k)q&<9Ify)q^GuDUFLWAcJpAO@Mpc|PmmVJ2Qh^0)yCn&gaTy;SHos9 z5kedc%*D=|i1GulpoE`htvTkiEUWSevlL%vfC>`e;BxV{$?9l-#0EDLkV_xvyb_`erc{zMny2HxRkA1t*6vio_t&6O<#BgC@Xq+C>p@7L44l*to#=%_`AQ~_r&edVqo6lxG3u}j;WE$l zXk7TXT?U8Bj_-s<^QZfocC)q?ma9YdHZMdx5vGw0=5wvI<-3jL{ui)3Ji3_39jbF_ zZwn|0%;XY{3(6OWzajc8(e|Yn^qfBA2iL zWB6U`vA8Uy=U}?}mB?`gUmb*i212H`Hn^RTGCBANbKirMMs<-pV>!xr)R3_P>PW@b z5>zo^l~vb%Oa&gWFmODMwR8ne4*+R>N?kU(ct275-+DJ?FpITrg3~RJqbGnA9GkX< z+f8!B*}}nW;&#o{!=n7kS&bfs(Lm6C?v7r$$bz>&IV-QiLTDhMgTwzT;=&)m!N zWOkfW&$RXG(sH%`*EU!YWGZzIT|L(A?6rkoLsk$`cqplK&99RM93>hijz-1GDA*Ib z3sl})?4IkMdp?_y!kBGP!)X9Q(2(IPX6qU)ll)l{tyO$rNklMKC?IlP!;09_=Z_b; zMU_Gd*C_wANJ8`$Vw;2X@iF2A5=;muIAeyT2QPkfEe$w~G2F+DMi(5y=_{6nhi3N8 z8D=zpbzr@bU%&VJ#XoK!0VY=z=Ru$X2_YHeuV8&4*LNa;3Do$8EA3 zkSVu>!%K!$x~L~4RymiPat7w7;mb2tK?*63il5c2d6?1_!aii#}3+-x2NiXV551=wXizSS5 z!%!P;n^Oi<%R|&|e~x=a&5JM4+`6fnvg79CX2yo8y#Riy*FQUigM8(N9 z;@8ZxMZFmR_+vp0>CInzFa9~NCXmWQT=b&FIbU;DH_6%rC0*E zgq*Z8g^p;!qZEDaVH=C^lsUk&Fsr?(>DTUcHPhi^#A(7k^A;bF zLV<0jp}os6mKfc5wxRDuA0niKSjl?tHhD+qn&{`zk;q4^cGTaA^|Q6$yDBy;wn}S3 z%CB#AkilAAv>-I;aDPmXl?fFA7k#5 zb4*lO^AKdQ)+?97wAXj2Pg4CoNtG?FicM{|yGz5%iV!-MjqNBL5ty-sS_d_ybF!|? z3`2VqHDU0TO{Dg_v%^3jh!st)E|`~O`T|K^#n&7ocC);Q3~vTp;E=q}@?4Wp)lI{Z1Z7uBHmcw7pCx04y6W`eipkMn0!5_=Hep z(YS_DcnG(nY8n(qY}xf*Wt@*-rkxn&dptx_VbGcK;DZOTrvM2;g{ z7rSU}<+ZI1V@=Gxi8G=#uen91|6DyKURtR!coq`q1TG7fVJC4Ni*Rn4=$h{>7Dqr3 zp4)NKUxK>}y4Ph69}|}DKE>cf9+MHH$p%wAfWkneELSi?D8k)SPhW=5qo40R5zr+( z&;tw@0dDD(ghW8;AzSYx%S+|oK;pbZcK)!8l{|kBs{+=?|0|Dq-zASg?bLKY68D$+ z+mAarjFjy1pjEQm0!?q#$>|9~3guOc{1v|?6yI^%dRkFQ%ebd+9!LJ#j~t4iR$shq z9la{l&1!nY|I%5fClfIFzw}gVL@a=~Ym=~kj%e2*l*iQOWCq6tDt^p067q8PZ{u=t z5tfw(esR?ZbyWs#m3B~8AgykaQB@4ARd^zqzSllzn=C2lHCT7^cVubvdSy~VpD?9U;mAXPh! z`|%wV*&mA98M(=tY`qTV(8GXy+C~qqi#v$7f%fuftdlnNfNAtDVNx6xID2z z>Hio%Jksnvb?mCi2~#8S1eyURM}PmgE{sVSF-K|pX>Ev$hNOelrUQQP-Dt?BK7m1 z>9R8e9^(V^1+LdNIu*`hbvYznDADRi!M1P+x`AXud9YQ(PY?@ImOhXIjOE@i96+x} z_*N0~X)u`%xEsR{0O*g!%pZh-i>#&_#%m5gTFh7*U|i z&u9gRWHh(F+QLt!^tX}Xk!Ww@<;U7stTId}z~aCatJKCIKts_vOkvZ;FX&Y2RVkI2 zxeNAJgm<0c7sGQO+SyIUF1Np&N&vko6t1R~XgrqYP*&be24uRvQKjc`M`z3k&q>Fm9{(SW%<^%N0-Q@aTsvMtoU)=BT(gd9$SrdS? zz44*PIw0JAV=YYC_M!c+w^i=t3F=w0#R9?})Z?pbMm(K)v!j;&Y&qF*y&4+V{f9j(waZS3n5V!%GXG zj*Q;Zn->c=A=K~wvhZCogK5{vBoRSkwDhIqn9h?&4;uqTUUc9jCJyC~OX52zs;^hX zt{2R9!5ALK=3z{F#G)~6>O4vWES=K))?Gu<56F(qkX?_zn~cauP9{DYtAeUxRiM7p zAh*EILHwv_n*&VOzeV-vTRKy&LOWmdnFtW>tDXpeLG? zWBGnm(luHk?4_;7_K3;mi#59-N05F`$+L?8K2Xfu1DBu@^GRR#s6@`s{+jM)*7(IH zbswc!8El87C1*vGI!D=N;R@9#YLikO(kWw~QvHpyN54Nh*t=<7w|;%f3|;#$fIlRK zD>6S`HoKy+nPZra?O#p}wF0mvJ5-h+VG1PEi7^tX<;WJADEsWnJbD^7zEY#oK`!OT z7Zl5027l+pj%{^o5T+rx2NZc7rhB>2Px{f#53c9Z}9YsA64utMHv}J9RVa-m>9)_=?Lr) zB9-3phcRQ1pSgH(hap)FkO==qWI1UIQ0d*`4%RtW;Xx8D5urham2lgSdS5sf;6Fj& z&J7$qy-O6^*5T$qjSz3MM(q2 zQ_=D2qXrq!^|+Xt2TZNT97d&1X?z1wpFp(*X>|xIKq@rZyO3kb4WRJ`bKD#hfv>B8 z9dZvH*WScdDJn--g?pScc&Z9(L#MtBe-|^14X+6}Nb|p8wFMD!Hcj*jnhSIA>EvMs zH+0O44Xxs=>6$_|lw8Ze`q5QWs($w_Hx5eSH^(U#H(_HS3#e+8BGwSTt~jPNB%SL| zHT_8rqnQY>Iml7RxqNfjnIN(87loAbK`eAFrrL(D1`75xoY8{G>oiztL7^GxyD z1a=Zka4Pa53O=Q94XH$G)_scO1_$tURB@LkwF;X~tG{X14uh)9jTF{87&LDhX{WGgJZi4USohXf|Jtkdqh^6lyY>w1<@+JuDwwIv=pY1x zfV!>Q7in|%Y}4QLVcRvJO`EONoEXAK@0+cFA7_=kT_(wa+S{B>jd;yxzkKnAODyXQ z%+Q3f-|$!mghx|3^X`kMDzY2k@C!!M6CettWm?~S)AW9$C+=9Fiy)Soz2#ft$Fy`{ z?wE+H!Q4I8bzR5rHPr)Ihf5w}qx16E^_)*IxzoBr({a)9S2&DozrKWr&sR*HHJq9N zg%s_Fgmz1sh^rPK3G6MkrKi#3ag_A*Z1UE=Eu!~r5zy~6+GK+2__eiG?%HbDXDL#K zxJ$bHyGqcd7eBDCS$X?LaN60Vs`K*7&?<*|58>v3<+6_)ug8kiW>2jp=zcWc3$RBZZFGJS?0&)0os z>U4pj+op9QpDh|?e)xIFeV$4_ebC3+kN4y`WdQn1-kT7HZPTWlngRVr(}n>gfETjn zzT|G!?xy8FuhaI2F&=IkCm$%qU&q^m(oTJe^#T)y+bT|Cqeo@!b>?31ePmkIOdrOG z3L_)eC7V9Q^fgm@Lc{c%5658Bl$z;(e)CP;FoZ$3t~!XdrN|65JEK3>8A37_(9Aq@ z#Umjiaw|)GON2EiZUKOIq?Qwby8AW51M${JS4%)6vV{vxZ!7IwuZp97+6vK7TDc-2 z6TD__rhtWn`?V&2U2;LKSHi42UcQngS+`t# zK>-Zpm?FITqCQHL5C%VXX!yFD_!6~DMY4u(Fgf$}ef!FsApous+QxTSEY@;TT3+E& z<`!Y`f!zr_7>bm!11nONvqpNFUp>N_b_@Kub&6a!zW)&=h5$&TQ}tPvuj!_8U^90C zhV5^@(8RGUQz{m(_8U19>CUEAz0R=b*hRmywm%V51uPt4-Mc(}o&tRT*74s*;iqYR zjraL2+n7ZINTVCN-g2tsVC1s8)3yWCwsS<_uHO*3Y07_={a5iz%Y-MLtz}KkGZp>5 ze3=_W|H!(`PcsU%r=o4{xl_%{)i|~i9!WFWQCt4fAxvj4)s^A7k6|zE0wR}VV;z`K zYz_IkyCe$9QuG^>W=OSgJJL5`HJNk1oPL9}HB7-_+%Z|ZUjJWt;<}-<~N~XN7 z4c?5v{V_uZA?ha^?u8O9>1G!z;vz|&9X-fCrP+50iRq9N&QdXo@k}`O^kj``d(Mia z{!$(YHH-gnTJAbtKK@Or^4tAPl-B@O3i*`no{LpKAED;QoS&XC+WF~%iS@A&*bJyu zg&tUPr{5*^BnB^0S!@>9dTxS8N#_ibxR|E$u{@6XU*y7Z9J20}A@cqQBzyf04B%JT zK#3Pq!oo{feaH4B>-~r|mly~=$5kQG|lEmvVXU<{~vA9kCIr49!KcH?$Oa1868jjOemig#5NNYtv7Y?e; zPJGVrh8|E)DoO*SMP!9ZsH)6H1#N|TaDnL~`PixCbwj_Cbl)m=0-AfIX|udlE2VA2 zi6L&(Fok1?q*?E_CxxB~zu;)!_+^JzeZ`Zh?6QWh`< zGY28K4lRAJMn2+dKU7lM+fZ~LeY9#Y3-zfmMVu0JcP4DI!8$C(v)z~Xz2~)OwvUb6wF&&4`T|_z_cW`r|P~Fl9&37Rs&C3AY5eQLJ3X)AU5$z3v5Q30P?B*NHBh?s-}t@efdYwjX6d zmb`=gHryo62+1qI0+aDpXQFsx-&R5Z%!9!@_Pl@*9{p-(!m?x;sq`vZal(p0CE!VE zw^f$frDTwQSAKkZ-^uf~;X+K1+8DA%|GRS}(+5xc3j<1o7r(bz#P> zww(afZ85Cd6|IxtZ2Foqudu~Z`UDS?nPh!jqA~zH_E{W1*t)dNv z0iR|aQXIOI!YW^~j`~0)wFZVMPSeRQ#R(|DLA&wIbq?@3(ap5OE{A*D4Ea_WBFzFJ zX6TlY`e&V@8Ita3ea3i*=<1ctq%)TXrnQ=oB53v9X@F;Aur&%!yD>?6_AJ#aFuY%V zi0T4+BQ>b_a=_n0nf<19fO6i)c*N|b8W+AZ4LZIx1<%LanRxdEgZbiVv-HIA?j5l6 zn-6*OL|?Tqc9ud5wNI%I+!JygRX->%ue+r3w3HfK73E#gZHQU9=6JjlH_dMs&%0=< zf;J07hh~pGOl8T>*7@Wo7tigQAqdMws00h7F0F8lvfFRc%r+}7!HSY6YxwuB$=^yS z-0EfsyC-mp!%AZ>-ecpDX7=>lf`kBhN)51Ij^7C(7zXtTLgq<$2}0OlzTDuB7Piy* zih2xZ9H2dQ3oF1H(-*fPv5Css+kf+UsUvsVmWqr)9TCxuuX$J@b%EL+jFEWEo2KtV3q6PC?S5J-zP==OOIx&9Qtp=w}*_qx`fz8|yYXB$BENuhw+ zO#7iDpsKpEE-OuNSLp7ozJh3UDsFJtCQ7h$?33`iJU?nDaR53|R;+Bf zUok38x+}FE-Q9uTWl+Q+)9cL0g;R6TOx5)0(vB@|eA&%`Ah|Z&AK!#=x9Z8Qm7}E9 zbZ5#5377$higLe$#!L*w5p=-1k)IF%3fs~5URQ9(^3;+_y9io8+HU)(ns3*R%x|I6 z5w`ARrZWnuV^~WSt{0;d`i%HHm&}adpnPO1i@Db|xYFc%AL48;)|TjMbl=73`Ng{Y z+r7u@BU&_n@9XzWbLwCzGGvI6M~@YwGU5)ZGBrgPxs@q{O0v zV(Ba;uV%dVfiz|7(OYIHA?d4PwF{)R!z`SDxURYg@W(%w*>?w~%G({uKE9|w z86T*@Vj(AmMfy9t*RpgT#zw(NX%6St)*uZfipcM#!8vNU|9V~<5@=&s^s2x|$V+&n zhr_nwaQLz!DIM{O1q1?eKK>XuGY}`>U||Fe!#vdkQn$cAiHHV58mNc{pF3ghjdGH=Ut<;g@1iWslrgAqi1=9m% zt69-;i^@5f>Q;IGzf8x&Lq>T#fsnuNO}Cj?uM{vpAhf(9Guh0E3h0`i0A6$9N3?#(%pnHKUEDJ9#JOZmLSy= zwvGAyHDz502Yf*OfI6yhw5|z2*-ruakMRU)Md&%Oi@C7QdOEqI`pta;kHnLr6h6+p zS;?b*l%zSl+#c3@MY7*}ABBH~+a~;rh3>&JvH;*@%g_E_S7#m#_4~!~nU6h7wz12W z?E4@Z*~cK;SduMjij*wFSTjTR$};4G(Ac+Z$tY!)qLh8hzOSJq;-}wK|9zi7p65L0 z+;i_e_s@IoeZLm9J^A8w-FNNFbgf7)=N?PUDql~GLL3d~Hgc?1=E#ljCD2lK<7ojy{tCb#%wx`7&hOw9#M#htz@E^+?h=L@4kK@!_{$nrU zaK}vwekO?mozhsEkS^4?IpX7zk*IbvyZfwI-ns$(HRX=d2R?WNj5mjcSm^xzs2358 zG^rv5g~~k6NSo#6MC*17AF`hifMmQAS5OGnv6)OeT$@aL#ZJ=x@)VnJ5)2a-KAkh; zZE{Z-9Y`t<SQVtKFDJqZ6I#8nyD^u4Lwn@D{Q-{k5ftM_Z?GlY;Z8OigMyb0#m@8ZBja4+s z-mYb^Ii7N*A|JeNR-m)k3!hT&RBzj{Llr86w!y%!v-h=vz#c zZfI5hHF2@xHsYF$2! z18!k-74N?!`R@yREp4fBA=;61e>a!a5pmj_dO{)ZCXKgcb?|g%Rf9sa(PeEHEqAn% z$Cx$*T1ove8~FU)B^t&hh{Wb|+9=<+K`FWbBT0{=0iCGGWvH3pS!IKPMyAJn!b6tV z_-Y@y;ucugM}oSj-s-Y`jRmKn+ z1r6Lsya?%=8hCGhD$WLSzGN)+T$TziQT@CdMc+H;^+&R81NRJgy$jZfj;X(J+j<_gSSup1RLEjAYe zv>wON#(&VZkij&|#p0Xhl5Wv%oNa5TeN>v~Jm-WwC{=wDy=Jzyb)>o0(c`(>%pi4F z{p%-ZcSGpf+dmV4QvUu!mE5;8e;=8sjD^&SzrIWukjy67g91I*^>CK*J?MbYDSfi$lrB3Rh!l7)fFxUJrQT#HO9KE!|Zu(+?caR#C2_d z&r*t`WiYCynl1U;rr1bNa=2}s^R0g@S6vUU6Rv$gHT5k$+Okr>OHCG!?q*#&C?yY^%kk$MxPKd>4+g;rDS$Sx=UZaKV8BbwUjQz)lQg*@Pk7?Qih7T-x8-jO&<#@OpE{U&nABuAST60zS1#%KOC*rebS$uqkOq}%ujXIWNf)>Xw&(<$r@Up{;^-gZ7HeEcP z$Wq3p*yLeyT^27?Vc*^Ea`7FfvOU-NvvpI8koDCyoI_j+( z>!)?vbk{Tf&2DJ6Uh#{e^`o){ebV%j zob@)`0JQBPn{rf?2;@aghV#|Y2N64DaXszF=GiJSyvxE@14R;VNvb8smCVlt4MDP) zjgX=`sVjPleJ8CERrLV7HICk}QiP`3HGjuP>v-CkrdXExFD!lKKU{_d z?+S5dWKJ;Wae2|9JFE(oS{3r&whG-ZTPrPOYwQ}HI|%f-Q(n=lpeJK@phCmXNHzJn zLf-^G8+ARXhATTVy5nTK<)H+!(12ZA;bNYa2*Z7HK6|5BO-WFGg&aIHp@4$jQN%O; z)}=1%!S>Boc~%Q1mY{ccJ*&+PK0UPk-zrL$mp3KR?&yx+VZ*R9%M<1=*7PTHtGj*v zVeFMLn}Z&UZ{T`+g6HcmCm>rG+?b`J1Is({#pR*UnN#M^2D!aLSf<6RMui>bX&0NY z3i=n9clIg_Fw}Dcya!YKMk=#?UT^XpF6s;7LSHBctoyVUiNXSGSOEu9al+fn>(|lL z0&$kVK2^Z2>CuV(kNbUll{8}|2!kW~4lwt29&Ecbd#r74Lamz718EDx)vDY$8F&Dm zPu3^X^KwyRJcba-MNvBw=bb(KQX(7(7FoXSR$lhywo-A!dZ?U1eLzsfKL8!>CixV~ zE#0ahFmgN%Q%)*23jDXzcG)Xqa+x>*U%wF`k;f@&-0i0Z)9O=b)!KU?$yn%O|0ATd zWqt0LATe(wUgVR2xXDyZ!lU9-2TIeDueo)n&?AwJ6YTGhK920R2dDy()msLbaSsGb zyyip3nrm$@UFSc}(u^6MHI5>1$Y@?il^-~JivR57Wqs&TvcTapxz$w~x5N{+muhw0 zU~{SETphCByIWKzCDPycC0p>@Dl&v#@F3`>GL3h3U5$=}NxRiBs6WeP{AzXa{ABhs z3PT;qeyWMh?tQ*u5j_5G)CrGHJi*y3IV(Of%B_9PHA0?dXIO_3&+^WwcvrqdP~u&Y zefiOEx@5kF9cMs;4WQNlWxN4xfCdiU@dlIuDL6>-2GoH(DRA5yPy;MfK{g)%0o+ps zEqnkIAVBTU%LPt)0;j;&K7cgPEd{RlP&_=B2PJ(e?`vtW+82O<;l6+ZkgD+K<3^KG z>-hB!2=fCp1j2Q$F4#gLkWc{fmtIc+*h8QYVanYGO`U^sfcN|WR_d=i>Aql!AHW4Q z1WWw@9cVVV=10lzt~w})1=OiPbpTwu4G4n%Sb$YvU+YTZxqA@EQ5M~Qd|rA6lCXdl zke~?8V1cs&N-eU)Ar=UvTNDCe{S%sU{zczU2Zj6rQ2}x9IywbPZb7vFwa82Zo&71b z7?A;=_ycG8!wQgGPWPY?+h4T*iOK>__yZTAEg)|I#r~iOyc|HOsYo%H8~{kr_GnVv GL;epz)2NRC -- Gitee From f6aeb0e32f5d84ceec0db85b1a8664061b631b27 Mon Sep 17 00:00:00 2001 From: qyt <486179@qq.com> Date: Mon, 15 Jul 2024 14:48:50 +0800 Subject: [PATCH 45/46] added:key file --- XEngine_Release/APPVer.key | Bin 0 -> 742 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 XEngine_Release/APPVer.key diff --git a/XEngine_Release/APPVer.key b/XEngine_Release/APPVer.key new file mode 100644 index 0000000000000000000000000000000000000000..9fe9b3e9d6abf57c1956f5b4d4bc9919e8979c45 GIT binary patch literal 742 zcmaJ;U2hUW6y?EZll~JQd@w$Y2Woj=F$n$7mg zX3IuZNe0J*ilXG5j?r;(R$S2|Uj|TpfO+|gzNfvab-d?C!0C{d)Zu^*P(Hsa{%%Iq z;&S&|UM=jJZ@&q}f|oqhWmR288x_kB=SU{N&dfBUQm>5RWo^x$3`Csf)l$6BJW zchC?c0jJ}rEmaMg81ouNIR#ElUgb#%S$(e$mkWNULy#9fY_wHCu|Kay9WdSf9?WB%79T1i_yPDAEbg)L-5h_OENf(N2MFMLjpFiNnLv@b2 z?p>T2k}JgBACw2t-8WzUUs zVSp+1>s4;!`W3D}pUp6Ftl1>zbMD3DmJ#&?gCR=Er^t9FfNj5yvROA3R)Lv=l&*d2 z%_&U@MdX6lXX%9;;!`3#>(-~UGc3EA$H~QH2-|7KUNG({QU|1mC9=8o{L)g4UBD0@ zAW750EcmcOFqH?zG~k!p|u!vn4nF(vP{ z+=;|fCR|@%o=-mV_*;A+gfUERS9CvKP9$S>ksv8^zaLeEs%Z#@SH3fsJuShTtKUab zxh9FO_(10}x(L?~CB*Y6^5e9Lb=vxB<4`MG{&WNlS&EGID{#`hqn?f?MFkeRCa Date: Mon, 15 Jul 2024 14:55:17 +0800 Subject: [PATCH 46/46] fixed:double close file handle --- .../XEngine_AuthorizeService/XEngine_AuthorizeService.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp index 45b470f..6b98133 100644 --- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp +++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.cpp @@ -357,8 +357,6 @@ int main(int argc, char** argv) { XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,授权文件失败,解密失败,数据不正确")); } - - fclose(pSt_File); } XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("所有服务成功启动,网络验证服务运行中,XEngien版本:%s%s,发行版本次数:%d,当前运行版本:%s。。。"), BaseLib_OperatorVer_XNumberStr(), BaseLib_OperatorVer_XTypeStr(), st_AuthConfig.st_XVer.pStl_ListVer->size(), st_AuthConfig.st_XVer.pStl_ListVer->front().c_str()); -- Gitee

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%0A0+u=Ic=TEWJe}T)ufqIFXP$*6)D)Fu}e^ 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%0DnBO~h){4H<&1@d9pdQK`QR&Hs*9 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 hTTT3LDwynL1!S-1 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 b7!n6ZMF9r<;t&vo;Ga_P)w?}-KZySWE^#Xi delta 136180 zcmY&ec_38p_ijT%N|Yt^$x_*O*|k|i60(kxbwc)a=2l2#U$ZMB>m>U+v{`{(b^d*6G`J@4~8=e+NG@9Dy_zmH~5Rb@%5ci4TIrg;@ex3q{>;EhF_ z(YRwmJx>Ze-}RQ<${3TlNAk=IP#650lAps-ntbZ1UytfLU%4Xgf5eg7w;V4S7bBBko5oZ=0aC~;@V5%aE=Y5RiZP=e6IN<-bwz<%i!=6t+Sy@G=#qns*MyC4D=Tl1a zJ<(4teHwUuwZEq^%CBuxxcao4274#-Qww&EmVgTbxaXQnBRcsu zXmirhK2y%)V#_#5=;woh%!w*F%rg&>nnZ!JCEZCxGuG_z&}j^uUGY!8Z1(dgcAC0f zH&C4~Id~;F!;#l5r{=qoh39PMmBaM$PP>!28P|e3@9g`2(Nj40Lhh$&L7qG4k?H9( zyeCeaIC~<_d|4l=4_Y~CoiTG#1OWYygx|*`oG-)Gun-ZfPd~d`$SGbd-LLh+sa^M} zuXT-zVC;I~%xn$qSlASrC#CL<#gv@jo&Nl!gHz`U_Er2T>_?uO@pDR( zZy!|CC{k;xYjZuNW2*eNZ@ILM?fzgncM7X-^=0GkC~57VU;ACFmaYK;@`URI01vGm z#s30jdKG)G{uEZIF}yCA`Zi^NGVw%5{}m^n(WB92Po95%u+w5Y#aANMe%vyhMl#Iq zEtobh-S7_*_0bT_FV9sm7X67y*~6~?s|38CR_(%WmuT~K`Wd#JT-QG%qHnP?`o}aN z6jWm=lHqwd-HqRjgJ&Y_jt6_V>He(h0`B#VY&EhWR`ci6(4SvF1`Fx6_^>ZGkHq>m zTUT2r0AN=&jUy)46^nb{&l*2T)kwOeneP;%b^1W=&6|6(wU#1_!x`PUuyI?xX$j`3 z|Bv?WUbcUR{b?!S(`u3A2(nJVr+?h{nh0+}SB}c!IkU&rM z<q|=ut@j5GqEnN&AT?3rUSdKRn0rdlG{Nynp2g#valqL=_T`LV`ycxpY;v7z zV|2b*Z)kG^VOJ$$@j5l8_^o++_eie;Uye233V%A6?6Vj#*3Cq@YvziQiJ1=VsLp5? zZSG4Kz8X-baK$3p&4sP5R(g$13L=o8p=VL`qr7MO&lrdw3cs_w%Rcfq^y8=MpL#y- zw)q|38T(OpGYG;3f4wux=QTbk{^a;E9_FkBj0X_&xioEq$pg!$Qw1B^&badcQKbf# z9U&)ASW{R}Ts&56s9(Sf`9QazATM8!K)EoVmyL7>ZdKzD6nRl-FZ4o~-m>ocD6foA zc&3}FV5E4s3p%U)!_VgSj`v&TwRxLhv@Ime*V7xG-_I?O-xM8rsiiu5dlus zqru?R9X$%S9)lK#rX5lNiU&XfqNokP;R+5QOuzspx zL`4Dtx;i%{?hB(on}T2-&I7t4Zbx+D5J0cUW&UenjvO7$0h9#h^07;dD3meb(R`B8 zU`Lx0B?559F~pR`{r>?ShoO(4X(M`!d^qK&9%Bl}^yOjB+IHwM3pVt)D91E)fann$c@0p>q8KLVQkVcJ5Ez7HpVfHOLD2mm>E&(>8hd^`o-vI!7Y zX28t7Um)hu6+Ifkk9p(=Jql$~QuOFkXyyX;nA;=laX3OCY%!gd4`QOBG;#`@JjD&C zAG7)sMjJyjr>K#X2~!$H9XP5+Gxl1T{l!qm2tWfiNdWC%OFtkOsW}W#kCFZWXOdFr z0KNraPB7PC0JB<;L6G-YVbWF*a3-Q+uY!%SB@Y~t<3M&F;Q9Z2FCViq4`& zMgxYn*a}LfADsvGy!D**=rlj(?_%Ad<6!=g;FNt3wGz!}rSFIW$MOJ+0ztHC=Kq4; zmj}qEa1qfR5bfwEaO6+@XUk;#&xjjnJ70VFVGjmS{h*A0>TsFaV#ZPq9KwJB4?^i! zIBf((+XpE7DZE4S04WZ{)br^8_VdxqBY?KA&Kx>Ug<>Ykkh}w^Z37H)9Gs%AcWg^5 z{-3}B+L{Do0>_-!qlGc{;`Hi(qY-X68p_y@1DJYrf*(NpSzNvsCkn%ZXnQTkcSM=T z2q6F_nCe3R38!Gu^bS#gm;kh}Fra@a^LmV9zsDLs#4#ftZo(rridEL&jEuUb9ys$~ zD3M&uIK&-d;Iz$YJ%+#-2soZRaQi+0dkYuYQe4WRLjfiRy$)x5Dt>uG>!2TWdE*!x zKLA@wXQVJG>dgIq0twF0v-^$yI{@F#WQw})q4RrE;G)IrKu`uPA5O0pg^2=te2aIO zX!tIG>xa%NPah|++#5~YrP+I9MLvEaBc$W3$%t&kT?QE ze4u2879ZLfn%E^FrYs_hhEVAwJi&ADkQ_xW+&m&`6$f@;CU#raW-U7OoDuL2bw+h? zhu(UBLoqR`8zB#*?=&~B>MTZZ?M`6GYoWR+2Lx0ilEg2GnSw%OkYDH>YHD5bRm#N^MU#HDZViLkWX_LhCGDpywW`; zFNpzyn_D)UiMjK*kh{tMk-wvf)CerZEP%K`B()#r%vS_sN;m{)^Fs9ROo7b;4z~*A5}mPl|A#u!6G-xP@-PfqjAhV1ufRw< zM7QC{eET@ZVuThN1MRQ?cO&S;sIEZK1wR-`3r?i3dsCF$BTxqgsD9o9h*7yR96@Ik z)RlG<>5L+3-3>d6d%GU0#R5UuFN(Z@5}lYLCTqFl3IWe?Sog>-0)as(hb@YNy}PMc z@`e=vbhX$56Vr`N^bi2z?DI1{3e{G-HRkuZ6y>D?O3`-}54@crq2>i?eqYcoFL@SA7(p!chP-k2bLAz@X zxZEL+^Scq&)s>C%!@71+z%azlMqz9Bx_o3%VRrKh4vSGGO*E4fA!!fK-z%cfL;Ngo z-FnU4Eja4oc0REiAbtTbVbEm5(WNlC7Ws5iyIrB9 zm;<+zA{cebFQR+Y0tarH&FNSL+Tlc`)-*lraQ0Zd@>-0DLXy0zu4yFh)Y1gi2_0A7 z?iUUfX^F=#xR#ghVEgIKBH_)VB8U?m{fAgy%<+bZ;_k5fn0|K&NHe zHS%z)(|LZp8c!KcSzwbJahTs1kDRwoQ7`;R-BC0%oZnADB)O&o=(y0Q2J3pkiVQ6Glx57q+q!;6W>`Hop(yd3&RUfNk#56)VM zjMEmKzz%)H(6s|?b&4k<*46nEfzZq)a>TAJ)JpfOr#-Y-UFiFC&nQ``g%s$UbQl%b z__!mrbH4vtZVMxTmfi$!{uY3Z#{A0KP<@pjERNLxn!Bc5+JN}SdRNBiliA|iqmI}q z;2oA^CrZ*mECha$nFt80+g*}}RI-SB)TMo-eLj6_jz?!8>RAFsjKKPtg{^P0ES$dTpjod$c!=kn(W&sYs6y z^NGumBRC5zIGvCmBRx?8Z8H}mrFC!8DE z=B0(-;{mWA|AI?-slZTLW9-4){l0@bz-KwC>ocu$)T4{ovS-k}dH(XNrd8#Z7HYZx z<+?wjklwfg0srd3h7}8^0K&y|6gtzE`5>bh7wRGHjBzm6L}$X$XnQ)zH~Yuie3ttWsrhEEh8)=cjQP>SCma zQ8T0b`s*&3;rUNuuf;*nQN9zkwOqnYw86bcbl+g;zc2TL`z(0s~wuJ2S z^pzp%-g&JXjBLbKC+8r;Xs9^4J=!^)9_n!N?PI+9Abm?mY8{H@muD2U7Sfz&NqpB7qd);n zleMeB&!nL)2MQBe1fgI8|A>Xr<8`On0`oF-J^j#*H4+zZ@QC5uasZ+d+D<635+ zRXbdT{13a*2F-}NlV^c#gxW<1Yo>H6mhb%6n%0040b@dv$my4g)dqfd3f(vwaKK5~ z7@^${gwWkT7*8?C|EMb;d^F-G8}$qic8@k1Eif&L#TE`HUB0CBt()}&D~tyjqTKW9 z@E<3^Gtv=XMK+v*wVMs{2YO{eDr80N{-QS>W$=Z4S-j7bNa342^N+E}_!}o25yur} z4tj~d%s3Facgu&%920~~967TyuECzZf&;@CrXRxE3zl^40y2}PVg);!b}RxKH9{NjIp zqzRGo!jSh%tH`3XYui&F+qk96;G1zxV`Lr>25DJ|_^_DISm<9|*eFlA(3e9BmtNnL zCqe%v1Yg$0AtL++gRErIU5`ecNc$&Ud}?+*A^<^zVL*`fKJfFxrWH3=2b8QU%Dy`p zUyQ(SE3?73Vh_ypXqEC7uCk=99-4|EVWl{k9TK(--cmPCENy@kuQ^2ZU!gyqka$j- zp+eq4Qs*9fhhqnRc+j_f?%2P!^>}QAOg0~f85%n19aJQp=Zz)YC9l1(nZHZkPG}$3 zy+#i5O?ZI%jd**@mDQinm}!+~TkFoF=Mixzge81GD#Blk?b-1Gxp zxROxuId2eHP08{_vyUK9)>u zv&Rj;)yy zSo9`2kKJg50L2*B%|K0Q3RVjoqOP`eR{vlk`zI~0Obrh7+PcBd2Q>aJzeK{mNxS zHqUV4&@+2v{wmSbv-AeJAmQbLS z#CIrpPP>%&)Lr$IaBe_= zL|;Mj-FcKX&#mHQma{vewUNDK)G=(i^ERx9k%xo!Jx_#yZ=A82>aq{~o7b+1|^~@hv;7j7;)ERy`L_Yyhb5CB)>iYJgL4ea~PB-`sxASPjQ-q;>bA@y-TiJ|^ zDQXhe-|$1X+Y8|yve!pze_u9uYBN!5e-?y~o2K3VY4ba0WzXX9L(utK+bFiExi(ewc~w-PkmZ)h z&k(Po^aqKp)%?cE#G5%*8_gagp_NeyUPC=MrI`%ay#CSr-ZrfQX(S#<-H zM>1G!@Y|kezRbGI&_1}`rRIb&K-U^7v_Wu1a}8RI;pIV)6)&Jyh!W)ks@W_wfXkf-FC&SNM!!+ zO}@n!Ly?PW=WZ=Ms5Wb=^yx{M^Uza_D9EW9$0&#OSNJ4wdD4cU88>&mJAL#U z@JMmX*34?<^AHsO+jq7eySI}Jsd+-L{S5CICnv| zPprjJh^?~I&FjV6l$~=m0^5HPJNvj6($v7VFhI69{P=oe4RjFNmo_BtVbv9B`=-{a zo2=r$Hfmuj+p+p?0c)-farQ(51S%u#U|4<8(sIq|Z5?HCwq7{HGqOV*eMlJ8 zh+O9^`P^|Gs&`T`l53Pyz0#${XsP>gy{)_E>+v#`aQ61q;{(c<44dcYOqT~1e)LC0s`%1-Qc;RV>1#vg1%)-J|CDViI)&~icPrS4 zb}k~j*jjB?oQz(i;i)ny)%7C%*AFJvuk<2hM{GOF4mL;Y*PQ-;zlgi5&GM(sZ%Qn>enfdmm!9s> zj2N!8d6#9;v2qdHW*P6puK37TxbRFsM~hylu3LRzT*1Lj2$c8LRpGI#ZU&Ic$E0*;!$OJEzW8bE3ev5V30q>}X&C!v{ofuoOTKMjIlqabu7sx6k(o-aqIeMJr z#yKr0OMtQl_VYb#JY`O(5VqBgg?4ZMaw^T%P5NBoq!n^5vQfw6z#Epgx~Q>gRq>(k zXVK5rZNG?zOMpF@&pbRA$;jDy1I<%ruJyG(`b!|S6@l^Vg#n)+e)%WvmATjUteH;B z|El-42uOU#Q@DRdHiCG|a)2!15z|V0saFrw*StS07cm&FbJmT$@1ggjU{@dtnHJT2a2zDW*?IL*zHfexfUR zPf-w)`@s%)CtBZVS?bbrgu3vTpCIvqtx35*g%V;^ul8ZHTe+esqnl33lpi8u=jRo1 zU;!0tfULzKRO!LxG~d$jV&#fTOCyQsmQwd{jiK9qwo&-U6XuTy7_XmiT{g#XiCtpgs1O0_{a7+&Hlbfc{6^^byr`Te=>0@0>2Kp5S2UMH18yNdf#O-LfY{cEcdYoLTF zZ?Cs}HXWWr+)=bJJKijgkK;b9eh>!!sbin^#O73p1&UAPOtpy^&S%S|+ZwLdah!C- zo=!B0|A54uJM9hG8Dj^Jo)-@FrR!Mw+WU4*b^dPOEFx?cakb~1MIm)=G*C5_42DC1 z<@!vw(72u+aVzE5ER@yC{&4vjd&&v5)kV)s)#W`(9y_Oeiza$6&4y@41jz~oEWTPX z6R<_jv%mu&I~`5AJe!7ZyDIx%drI0rUA(;deD{I^P9FQNHD1gSbVt?7Hfzy3y?q>< z_yLNL;t^nv{RvLKGoIh(ohj&Q7C0OWC{(D##vD~tKYYenZfG#8;GS|BOwi&Fz$km{ z*|RqICjaxh(QI^oYb?v5b$e2K)%Kb{8xnV-50Wl#pZMdCu!h0*=F9lGHKdkfacylVg39Rd2s&WSvHvAu4Rm9%5cKM1M=-4!rCtzA|pVwCD2C5D(V|m<1~-(!>!Qu zv1)%U@exm~=%y~onrl5Y~5A9wwILtdLK4P|?8`Rz~gs2x_h$Y12PS(nFASD;RfP;?D#^QYuSqO&|M{N}ow5{8y7sJN zb(%H0GkpZ(TUntDZ#Hev&{YMshPtJ?%cws&)udT{=Go^TyH!SilQ8_9lU~wjf$5ah zv^RW#Q|lAg5+9^*h4P;qK}XsaalT1)eI-n=TWUUcZtde*pc^0iz>x={9ZEK%?wG zZ(<@e$sK2U-4xdmGnhsdoGZ&M!%-y?Gb8)!?WtaI8@2{tT+&dB)eke4sYqfkJECZ| zo;r~1MoT&q{c1}pCc@MJNEv(X`u9)AMeVf=#pf((B-`s*y8$v0Qd7x#r2Z*v$hco^ zmccxXT;F0W4u9^(hKkpvw zhKhtly?F$qwdfZhpwN1@#V3!zWyqlHINT`z87rS&t^14Um> zxo$yTV?Jr|uiReiKmzQNN2^ z;ukN(Pt`!0#rF4Wuozj0vZ_yUHR+AFz)}{a(9$r&|D2DFA|GZN3H&RxylQBku#yIk z_Lm}~Ux}2~?4mVx(u$g1-04$mTjuZ)OM^U92#=9iSY z?PQV~P#&i}*Qcvo(Vu2{Hx1mQevkSTe){`2kNd3JvF!QaTH}O2DG`E_LOav;2i`>! zY`U3s-Tw&`zC7?!2GlLYd^2Qy%KDclZ``}o{kvDn0p4&|kf^>^@0fe3V!-beovbpJ z`b$(_ZBTwy_YqK8cU8NXRReARa%$`|E}f5Lht`wU4tFnW^6+@Irr`wlch*s}97;4l zZ#=)Mn-5-h_G|w);1lU_FFUtjI4qr@HtMHY#c>JucEEm`+SsbLcu#5ch9KU4B0v3> z?URDY%$&fccMtf_Wm$v24MiQARTCeynIx07Ve)}10!;wDPucqg_rnpNAwku2TTH{F za$ORmocg9%9^Oo}b8x?|dbt}`3*+_)=Q;T-vH6UbtuQ5#BpX)6ttI5ABR{QC9nrr5!TiL$dhpK%Yr`}Xd=U6>@F z~f#a!ALzGpAKBmk*8lw>$EC=Qt?HIkquKl2pC(OVueq2s`5-@$J znKqlP-+QOf<e2M(PqXJ?Fo0QA01_ zTe$WppaB*cO4E2T?{Z|Ip)Sj!Y$Fy~rC$y)p2=Gw;eiM}k& z`|?`G@p*)ep$r?Yj>mDwp#_tYbf8;0KdoKjAn2&Y3aV?#4qKjD+s?+dq>^)+vb2aTF z&kG?$U0UDCqYHhN>c0z71deTn{Pu)6!WJ8CcU`GASpSxISld1Kq<$V2W_;=Ge_>5t3P_ZS7GPvPfd3XT<#g zu6tnL>J3jUmLOM_ODb4$z*H57;px-O!E2n^^XVc(f#{fTREW!sOMJuyHdhC4-P{i4whP4_=ML7swpE5go2;W5K3hT; zu2w~k=^1kEW`=hC=~u?{e=p2H;%NckgS&`C_%nBwhXasTTS+;=Gz(R=NQXkHyGRt1E@7=PGioL>|Y|Yf~^+-I5Rj;gWbaTX! zIx%~FN(^w^Qr}P8j6k8pj{>lC=}@2PZUdbpg^FDbRhbr53;Ks4aXvfnHMi(pd5O|w zI8in3@uP;u4`8Bch=BS!SK}XSRQwyk zs|+u6=yy(Pp{77auqVEHeO=e@{8<(61iu4_WX)}_saFMGMw%(Y zU4fun=?jM^v_@bGy`*wBVjhq!FT8i(BdvP1E>BINPCGDz*AO|>DY+^jpaGe+itLMd z8Fulo;LSGojV>F*)16}EQ}-pknA#k-2gp`r70p}9X{F$CS>C-`aNS>q zADNVQ62aGDY;vK}Eh^6Y&EcqyCj1FN#J$|c(#lOrHP4+>s`I=BPXW$Lfruv$yb86k zkVAR$p%eUl`i;8}p2>i9Y&~X=0?E1@Xc?ci9IVCtvUP(u*M9j8x|+u*s-An$gyFAf z^h@Lmedb=zR~m@;Q=R?yC$1QD@^Yhe)hpXBK~am(`A$VLT16X5Fn-G@;AEyIQXmVlGVf!W&OXpOw3)20hy!u)CTBwIfrPkFlBY%Rw;@?L=Z z<&z3OVzZ^C^lsQ&`DxDCOZ0`SOg?fdaT!QZ zEp2D~+xK2?>Xw=D>q{p1w1<&>-engW?+>A$rE$1VEnK^jrt;;?^!?@S8JJQGxjfWE zOSw9)Pd5|3in}R?(AgS|x>^}o&j?g9>EJX*&qo;C{0}j8kt4Jf?EBN#NF}=6bZto^ z+R`p9+@4*?ti|L*8lat0qb`<~2@__n8+R(ny<1qj1xmw3FW$Zg9*^c6C=yD4!_ZxN z6lt)CUf8mQop0eg)3NUEHB)%&P4KolWOK8q)x6Eku*p{-G}py>_q0?q`4V4Ecg`^7 z2gv9j67nbQXgu2Sa0wawNql&ec8(US+@O8rb@66)vS`h23a~oU(?&U$ z;k`Gk&%Pv`GNM{ihk=R~NxG9L!r_vOT92={7OT~uv}Ya4(6_3KTf+1lGa&e~(~NRJ)y+78!aTp(S-Cb}4j$Oy zIh4`*w~475TmP9u-81jMJU#%MayaG2Ms_@$uGx?{`D}z_X%b|?TGHaqGL3AonN6Mf ztp05VrC#EEt_tMMrAEl=T2Yt1GSMH#J(!~?4ao%w0SLAC)*~m}qJJ!AzT|!Et$4K$ z)|h4ZPY=;v^bXt9wsXtvP32_Q4{NK>$~`_soC`Ez|DkTT^SUnXwY+@Sa5D#9%ZKrc zhClav{R&*w_!h`~ue9ziPxHT9oWigfHHC|1vY)D7SO5JA$+&twnwo3(Al(*Uo6(6W z_2AN;l?D>ZpeCY=A}1;l`I|9`rsw&*qS~dJlvJT*FfWbRj|chB2lUqkK+oF8J`c_( ztldd%M!sJCX){t$zc*o@gLa`#FFXk|H+9cZZGXh+)ROqQvLk+)^RHSI&!)P6!)tgz zV$E|Df5zLnb)n3HjIJ7Ci_hfXQTzX9WOW#K3f=%crR(o3v-L7~CWB^mE)Evh7mYuk zIIW-wX7;k^8=8pKbE%{ab}2uFD-l(6KHZqu63@*}{GRmV(t~kAdGyX_+sxlLBr{xt zLI<~md@f8`WBC6&#U;GuCB~9<(c{~h7WX>Uml?%>D(a`F+l6jqnUA1)_1`9KC|;n% zTNVDQ2M)=D0$;;7@TIH?B7=$pH50n}d+h$R*bsjdeiDA?ghQNy;dH0lWJFT-u&Vlv zXXc5sF}(V-PDyD}#rC#?^4qo5Ap%rD_>Hj9RJH zK>JUxK749!9D8X@`$zjiw|3PV^X0NvnWM^HnjkykolE=AhZHtMa11(~b4r@CCbjQJeC&+3XqX zAMbVfM?_qTn#zH^R{pmgtaT`}HE;LdiHvF+LwS~&(dkJ~lY~ew^NDeACocWb=jweMN5IglDBXDBrgqy?2>;AV_RVB7gPE6!K#pX32 z`B}q5J&Wb)VfVkLDln`Zlq@tcTaWcsi&_$uHri^r(%0`V@)phUSOUC?7YYpX; zJJ%B@E$&I=`I`=8c@5qcjqm72&XK45>q7=MevHX5#3`>P+h-@$q89nZYkKFpN&!aj z=$z?4_Y)O!)8fU-vuy8##>R|YSaZwU-Hd)c3h?F3ali16$?7i$*}L;(d|N6(yfrCu zJ1iYhAfT$x5uR4iB#HL$KHz3`l?}j##yFi|v$}4d*&>;k`bvNEi2HkO_ahP_EU>1wv4k?k?uJaKA@He7f!P%nCY}!}|GY){n|PQmt;6g?vP=LKh$29+O=C+N9~XUswZ#D=2|p-S#db3LBuPdl7WMIi&<6RtI$$+uWP zuQ#*=`_pm8scBu3P~NKlH@_^Vw!oj6!m+nu_1Su)c1L}u5QhBb@@v2z2w>e%%3weD zAKud=#}!GUkO*8eVb5b55Uhpd#cvAf7RyD6aXAJv+S9@k>gVM&m@r(KiTOkB94*qE!uQTfl zo8fQCuQS6tE0w1Ei#7zB?*BO&%CYp@dmTDlF=8(}MK2AVDmgu<*lj^^KRUTAX&%o_FIs*KT_$+&l#pF;**uH-Ajj6cksCG!~}4-*~dy~_f9Eka+-bv>s> zeV|X-918>@PW6rjm?Xt5u5udG4$*u3{w559b&4jyTA(|J2!=_OY1tM}R z4>06%eF<~#(H@bJ8467o{wuUh{DS*>-P?i3>^AV9>^oI@eCNI=gbSWj_|<%T^xMlI zq&c5^MArk)rHMR1Bg#D>)b_k1C1{Uyfh=GP;QQ>XY1x(-sVW+SQ=eT zugeClXRHpufNRW&jofgp%(EDg-<)hYj)Bp8-Zh`j5-N6_lTm?)m*bs?<=VE--nV(Z zr#VZS))S|O$9oGs@}|1PU;`DK%L_Jht;2K6kAueiuf&M66~765xQ3E9 z2lr$xH|AWEsRd|5!a}uHlZ=#Vst6LNz58c(OXlVdwdd>V$1(qUU(ACnV!CG9YMW$U z{u#gf-N5E)j);H_tTN-vy~*pdhP{(D#SMSnY9>`FdL~3!rAv$nY?V4m(zT>yCTv7* z;#7m*dtaDpYl~!CR}ELW!tx_>nRRN)cpX#s_!Cn2Y0k79cMh6&>#VGO?ady?{!j&R z-7MtV$7ez73kF#s*A1Vr|Cz?vHyGwSr9Zegh`|Az7hLA7InIjsw&tncUM#ZY=GUsZ zOxJqMohzH812GeLW-nd^idVaH=1bm93-%L7(p^6v_^?#PMu=W6i?6tUqXsp7N`8bR z;nfx~H^4V>Mm{ogHlFa!UBR`(=mXf2%in#0WnYO0R&bIh;OuXTFo7cy)%zj!+4QDt z&FC#WFgg?<^!urF|9-%O z@~-`x%HH|DeWYej+GSJmL`if!evM)~Dq4N${Q%&8fT<-X3qi{oAMs~bx#GR}e>aQ< zpVatWndj=_pd5|002!eJ6Wf1ww^&#&=d#6Qq<*H6-%pR~#YkCIn1o%{2ciIPF(&uu2& z%~{Rf-+zu&R#cw!U0@xSW|Qgf$sB-8PZTM*$7|Z(vP^uc^X{vRwR5T9jH7z7%MR}J zk9qChs@sO8v3YOSeo^vymgv9E!1#L*k)!qi4VRtWV!-;nK3JK3;HK#yENS)%ukvxr zi6pqpT0Uw%UM67ON0)2X`T5`JD@!iR)lnx^e+Qp_?!@}IGV)IMrC#^CH#QjC^;BEV zwgG)_rSf0- z-4Vkyd*$`oD@rL6!C7Z!iY`hbbzXQt+w4Z1>`~QE#;5WM_JiCF1X-jFy0kg2_d1{| zq<80tW44@4rZ!`+r_relWWw7RRTB><;C%1r$>&3FxW9Wq{^n@7v#k4anG$5Ot=|8gqDZP(!vdPhfKKByon z_(A7e;TNWB0=H%axOTjKF_*rpsEXda6X^U*BGwZjUjc}*Hq#34**!#6nAi!qbsdQ3 zsYhA={q0eSw*0iP7=r}wA=e6ny8!s+FOG37oqcP>B?HjtYfOP+2f?2FFx*@|41tQD zu6!$BJNjWF(+2a-{;{>~u#XV>8pLd*$almc#xG{k4wP&i`=!O4UJlE4^dHqfR15tq z^X}jWRIsRHSl!q2Y(>rF1-_qO?Xi+Sxvx5txZ~dzMonnVEBQ5WnYxA^Jps@#2eWSO zZG1LJ$d$M<{7_f$Fcc%?PuD5vw+An@flzE*)S{bV+TIEk!SXK?=2Fcjaj&NaK;>uB zWxARz4=ZY|k_BGpjLUuA_pWz1fW8#?g1Ybtl)HZ>devj?{F~5O9(LW?;ny`Nj4*=ACXl=XB4?Z7s zZ=Y`JL&#I?C3y`LJzn3qjpq+YI`yzE((Q3_;$l_6<8y`Jr3drN>%`9qHs~tcUGKV9GQ%HqGtkCN&+LnVean1RbLTV{ zx9khE5w1q#eK*sky}$>G{nvE|6%UT=9O}bA$>&|Y3omWo14;{;plsX3VI!SKdIfi& zKEK0$)RG(Pxeut@0gzg938jOL%sO@4dW|)_t_T!I}!rF!k#7P`bVt`?lq_g)G9WA zVtoS=H|_JCS}idhYN*wFSBEF7)ZF&Dh`m(VVVit0X(L!j6)nI$mT?G`2uZJvJ}gD? zdPU!UJmPZY-*|=8ICeG4G7{HwX{%){JyV;s?DN>gjdzX+UPqA6S0&{b!-O_nT(U zhmPi*%%!*hRiANm;=*p^mK5ZE_*Xah4#J9*x?s)86sy*Hajx5?zz{>!QI!ecn*zIu z?JQ+4qncR%vYi;Zm4+~3Wes-{359C>J3Y`CA;?zK@vi!5dwljPKSXkz=Lemv-|OV+ zIGS+XYI*#jBTzwkeM7}FId|6q=giRMnY>zBqJ}jsxUJnqF0W#{(1M&uy$hOcI_uF2 zDYQ6k@~&y1qMn@2?k(z<@o|E#yzEyAn>y<xq_tV>PlvZ4P6o3|jub8Dc3=~K%6ygye2K$Ca%0EKwI=C)ImT!dmf!Rc1ME|;*B{c-`lbhv*_mhV zz+BN1R0jOOdfM<8`qZCjg43V#5x%W~mYlD)>@Ex$eHzi0H>yR8kQ=CZ&H5LFS9v*@ ze9*t;x+xt{GLui6S><^euT?d8>K%RMKN;QMubmx`_cn@u>w88)cj&V{Idb=lMV>5g zIIew#+6UZIbQ|?P`r6-{KUwBN@^$gX`K_>!yd9czk_1wdmTE z)IBFpeA_ZFbI8~{6OF1>jC!Vgnq1B!Yh#Uhpqz>wa;TPBGeXO*^L=u4bSS)X$3u}R zk}hjQzfuH$WBCu*_ud)zmWtXylG?Ml6)mxIEfy3NpeYhPIBhh%D;9epJ3lCyq@ zer2ZXKp@$D%ZEhmNqq(Mb7$7M%Ars8c8-x_$@l?`f%=8I7toW7?%(TaQvdFTl(3x= zC!|PD4Mo0>3>5W}PgCBQx3h|}_m{K%v`e!p(`^cW#+9??GtHTwJM3y$vYH!HaO*wF zGujiArKTBIa;~Tt!IH=XJCwQ6vxYTkO@U8u%NPn&wz{^ugGrP^r?wQfgs`nOc;6iR zJi#P$pVRkE2k_J`-0dqPfVc}^G(ygRL7aBt0XCw6NseJw^@^&9?>ZwEg${-NH1)4( zaba$Mhx1My4|fL_1s zUX++^$20jH?tYr=RNDRr>KD+bnzc%iFE^7`+Nworj7Esm*cVA-zjV7&ke=%{a$xC& z9@veQQs(c_eZ2K9_XSmxLuR4@&b;o%U=*^t<|`&ii&=~a`cNy!=TgZ)5HnRi;$Vqbv9hWy5Rsn>x6zto;0)OB1BrAqLP%HD>TDrw@1>ZuG=oYXom6 zrjJ3QS|oo5J8IwP!w>HJM|O-)nNJfx&aCgj4@Sb8V^}YlM^_&pRh{SbaF?C=wBb7^ z+Wt6&$uo|0fQKj_sJWd~YN(#(Cqn zL1~w^n7rAPH?3tu7gMKxNbu*z3{L+3micX+eFwtGkAe(8iguC%9}? zF?F&;<-Q;jYy+NnzK<%b=NAbpu~$dvt2xbeQn=mIb3I}00Um30a0}}h*OJ$N`DKjM zP;zISoPzdcV72f)mEJi8tF#2G8Q}bFY&d{1>{V%4S!c}hWvx4MI_=dS9T>!C`ln|0 z=Q_q)Muqf1=%D}a}7rHAS*&-D(+iW6N#Im zwy#_BopmF&8OjqO*|}% z90IRyGk6Y7Xmh{m9QF7zYq7bEp_~Xiy9yW!2J0#JfkImq`}ICEAZA+8C$N}%E5}IF z_Kl%S{Uh;Wj1BCPxuV!1xwxHgD@>;tpj*Q&`(7ludLiU8H3G> zb8_C7%&46}2HoR8IXcIGBzL@myT+3ngV`hB2jRw?nC%l0MrRezv%{!zx=VNbT*nY-%Lle5=N zK=aBX)-LOCiu*ag56o%DYD|EY_NXsMf~_(o@=O^&fM!PwSGJgY@);Mqu(&K~Q?L>-ag=?4qssTmudOypHYeYINBk{gx0e#!ExmV;AGq=S9Y50c z^`)PzXnoBvt_`Cr)YX%aYTXw;?0DGD@9G4Kjnmng7j7(M>Tr;l9%)VTMN2ay%qBb`@ehi7$ zEpH6|_A4<9m(rxYHLNBA?de@uTo|~uZp(o`KEJ8_DO`Vz0k(Yg4%x6|W%lJl(JmlS zPus*$676_xaKx=cHatw}YhK%EfST{K!Azuo@2rB6|FhTJ27lrg2`;QF-$!XfS4&=~ z#vgsl>^MTcJnh2Wl-d#q5DP@jT5B%=w3IM9`)(A1><(TRX91sfJq=U~P$wnOmWda; zP8iMJJKX9yJqcLy7Y8JNM;;-glh-MVpHZ9(N)!`dJ0JT&VJqgC_%0v#y`&qGQl2fO!*rRuo=Iq9bl7IwPmWKq{QF%r~ zBITNEpd;o~b^Ld5*lDV4ABnhf<>yG&kBv}Y;i;!n?NQDGHpa^342M?nf3A*Dz)?DW zjCrGL$r<3iES!)ra$ps~AW>6QF-Q`Bd7i?hk;s-83UNrf``ev`rl(WfG9=Ko{X4St zS?Od9X4GP(Apz1U&Z{AL9Hn=LWOU}K6@7^WS9aN$k>&}_M>2zyF z*mSwBoSO>es)Y75I;7WN^yDm$#aX;-j1U@@L~VJ+6G;@=Y;il2Z1-d$B;f^rmlZH1 z452&=pmaFSY7O3Qrpocl_>RhkxPN|;990uJBs!nv`zRSo)T=S5+zJ6fvfOYE)~rY;r4EGCgUr)pP!c$aAy z?02w`_xpf%?S21fB8Eq-eh0UIBmUf!NFvu=&psM#=lKuuB^qjqk-*IzLL%^zPn%sB`988qS?lX}7EHMP zJ1p43WQ{RzbwfD=*{q5L>o+`>I=?oun5>pG=G~p#NOYj<6AS}*_U>hW$KNX_ac2m< zuc|gCktZ%zXp)7wp6dn_o%J%tz%o>1PU};d;%D9%fN{&0F)!{yo`pjN`ew)sx(T*XlCoJOmYJA~maJ5_r}NC;s-N{}737CV1oCCf2x+TsSnZ*!lZ zF>B1_axNdx7=7gnuS~Lk+$~-{4Rd;7BmDj69d`0bEAh&n_Q5$-YfW8B zllId#XS=?FO^O#SC3nQW#qXjxOQtJNi8Q1SSF1xJx>D!I&&cKU4ES?tk4ij<9_JWv z|2-{lH|7J>ufBpXQlAp|JK^hG>!%8iLdIE~SAd2h=SPubDW7`>Y+t~?|K?ZUkAhJ>-OXVAl5wt7J0*Q!SvC)&r_ubE0 z0}0P}`si{9iac|FC*t0e5HOzx;{CK9Yoc+ z#feEWL$K!gp$rsGj*~ z^BDTO8y1Rxv^JDwCi={n4|6Q{jzAjNQSB<`qe_XCJT$G#8L(96p0#i<4>g}AE8lks zNMZX~3i6e)VBHmlIb1dmXy@1 zbIL7(rmnRfG-laT!=J-|q^-=_!opWOM4syorBd$$p(0L@5*=j=gMk)-?oTUiNZ@Pp zX`3`t*&z?G(of-t{m!9hcF#@yKq37Y>!RyNojGPa%OPj*RD+u*>+xJ3NBWKGt%cU} zY3xydyu-ByFPg8a@djx)M8{fVgpriPrNoiT(`ZjOv%KHg-$(i-t}=Qw&(DxlmekXL zG{4O4P>*mP0C(A z_&(G+RgKM%Xf>N_@R1)YW-EygdGC8^ay=t|Br@vGBEia>r+(CYx29kwx@KxuY2?Oh zN(nvQns3I|U-duA2Y1+r{BjyE1D)3IuzNXLDUm%blmX2z|Fh&N0UQzE$fu1i3tuF> zz?}8yW0N_S$D&5N@c!ne8lvz!Bv|+g(Lv(;q}Qf(FB<>+a?8bl?Dvs{>oKcl3YE!! zAFh;~TIx|9ZrqNwq67Z+%x?;w|7tx-a%Aq%b)h_}f9FuX)^k%e)Zb@y&t_aq^c;#Q zcl;)5*f++;aOiKU>ikTf_OWTym9b72;IyV4k0nx+D_0Z^IgCnu1xgg$J|)UXzWmN6 zJlJb+NSEZUfWYRszYBKHBW;LLd9 z1C%)#GVmbEjl%nc5gb z@_FQqF22Q)*mDe+cgEHkJHrXfF{odTH6{4{6QMGWBCoc_i1KCEJRGM(h19-&-Y>C$ zvfqGBo_e*^@4&RE_e}{jL;7a8+ocaH=Q<>9!(z11!K8m@2dOXZ!ieXyq(p3;4Oz4H zfj)VDo}=$e;sS)@N2orZHfZL5a;B<|E=^9N>LR}aRA=Wt#He-a?59nb;d0%O)Mwp?x#?h%ryjJ{9?7)^=2HY! zD++IOW|R%MN!qG3($k%(R4|`L!}t5Vovr@bZ&>Q8(=%gCt9`cVmNl(^b)^VU6RBM$ z_fOTNNEtELGj1u5qghPuL|)D#BhCU`aJRWfg}%1*w{@MFj*PAAIr#+zq7ngfd7kZY z`y9F7RHLh;uP-Mjq33Q&;A&dG4Vxytw!s?F{x%vj zMG5Y{v?)mBZ1OCS(Eqi61}eyxv^vqsgKgy8W;w88EWk}Z+d6sb2Sz4+KwS)Iio7x8 zKC)+!w5BwFqI5`JbMZMCBc4}v1*6|18uZjI;16q}T99CTk_*Js^twnJ7WdAl@s`hJ zN0*sYCL(2b?EWIj;6pQrTxGI*+T=jEwp2=8^AQBhwUVCSMWy5Ct0GFz0eU71a z^hvCzZFeZdS4u!wTPu%>>te!{#NI?sdj|V0xdV;CDw|$4T*Pf@4ZF)SWj@%J(g-o{ zQ`OVA>KKQOe{jsCe%tlgYs*1#no%TzKKX2`Sasp;&T-hC`@p9fjs*T@$VwaQ-R`&|1cD^o?-uFss_;gBScvj_nQZAQOzF1(`-k6DvAKeZD{^m414 zc1Y%YQ>{?!-qP`KWKUjT&R|i;(qph7Wp?=`qjz3qzYWlTIF`ct9Rzs(Cnf8BKI?0% zh6goYbIdMSpR1!=&61G?M9H_ks{SzWDalX78i|_3oHaZyo2%x=pIfVnWH9~dfR}Ho z_svmtEXGW(+R`EBg%7wa2Ss{sJu-4`YcsatL{s^ZS{b+(!%V)ZdRj-Qe&;E2nh`Ue zlqT2tJ~mH(_D!Nc@V)1qMYC|Mb00{SfW6k-_&<&CqWL*mxqDw1^nRY7m#A*~&I%iV z7IJkYJdq64++g>mr&1!potZmcqw3rqGooy{-#|dNe%kcXk0o~%tcgHU%}pc5WTOX5 z<7?(E^Fox89BWX6Xx;NZeTgb(WvVfPt!W=29?XUKf9iOK}jwN|lfGR~>TZ^&%lYs&Cfb3<)dzqZ_KV^@48PTWI6x&d~`4zU8 zn&Q->%IoFj>&sySmeERyoK;= zID6IzCAtz|kf9`B%^hWeK+>z;hk56=#F?v=P2Ap$_} zw73|`uk-;0@Z~Abe4pb>#2G)-a8Pp$O_c~^^p+!wTVqHZ)szfOeSTBqj<#uznK_8L zs}NBomjUpz4)J}LplnEPZkPapoWv54h$!ZpUcPl^<%fc2!qxjIJ7glHL?@lL9Ii!w zG&;4I8tJp`YdNFjAN8hO%Bh|vtbAKDf+4Jo@3z+9eOu5$*4`PCEiF|N-?Y}?eOqBl z>XspyT2t^_QFQbe)spG)!~fmaj32yJRg1~T_fZ{;cfa=NTSdlRJm`1LDd@L4!8)AY zTO*OY)CkuMNS4Ga8{-q@HwCujCFj$B)Y&F7?meJai4P$Gq{=VHXA<4c-}x}(>n?!^ z{%na0kkg!Cd-7?zy(fazZGm;Gv@twpC0zH9B|KRLb4fc9brZiW-)9=(mE1eBaIU6$ zpV1e!_m2D=yEDh&aV~yK#YAp@;Oam`qNXd6izH5cp5RHz!P*l2mDA69L+@-^ISfIC zb0km6XT*E+Yk%&a?5B5k5^mXvmjsP-`g3nNy`%cR7=ulr_2|gyWsdT#MB$Yf8O)!z zIjunw?Cp6PDY0a^RtDy7N>3cCqSgcbG@WPCx_yJrP^7i1(B;6&rUX8JKBEzun~AdR zHD(!r!n}V>AQ}0&dGb$*69Q%U99gY`QvG=zdFB>zu|#ydmmQEQ-*jOOW*%K@%ezta zrVOsLEiSjzIWBG71fvD!G7JE0h;JzjlwQkZsdqx1Y zUjVDmwU(;ZMkb#&0`++}s?S<8<^VzkZ+b6qSs0 zo<;=NSK=w&=yGtA<_s=<=JG5cBwl-NmwO>I(r>VhBk_F9Hw-hm*4OAopPtdB2kf5v z;973FeAfFg;=8_o9+2(XxK8?LIF9kO>Gqz(mYSy5RDrRa8 z5G6Z}Jp)7~Q{6H;6S45?ZUmeEl6O|CFL_tK86z6wN6uhWV`pW9F(OR0N1-4eb7CV% zc#gG4WgD9V9RI3$r&oZPRfn6N!9K0M*7rl-vATaIc+bXvQZxMDot4KdtOZ1_C>Z>l zu?^;v#3p$A%XU_&U$n?+#sZN#>l3Q_&8-s%=(Pt#6&+^o(;OqKew)$gF494gKawMvS z4^JzQY#asjI6kArJP0CxQj4R^{ zojN`$!*Xx?K;;XBO71sQSo4uxHWKN%4>p+X^qnV? zQ>KvVboY`W_9tN|h04ncVJ$T-EM2kav&4zz8;l9+FbR`-)wf>Dacd#i$clz(bV%@eU=*8A{JZPS#n{`>r#vhr?~ELBW-liJP3%@VMi-mbNEZ)( z`I+x?9gLLv+5+1^c#rrU1gPMxXG(<0(>D`YQFvH7M2#GNueukQ8UkZIgHxud*1(e< zNBWH@SV4<&3^%y3;XHIzjP>P^06vis)*9Srs;5rl=YF8}$oGNRKC&i~`SuhztlyEM zZ0`e{ulv)&{j#`HkA5Jww>%{xx2QpXdj{|}>CXuf=u=Xf;-iy}Oh&yANJ;h;8F*8? zEBQ1vOW7~S7+r!>TMnhOr0!*>KJoC?+%VnkX{G69gnX>D7zsj_vJVuf2^W2l_@=qv zMqoLSN~*vVbCwPvVT$FB=Ylok6paW#l;217+Igjfs_4osM(=0Mn!C|Tm7!RFYyBAo zTKPUwa7qqxjAj>Uc}wgfH_0`CIsIhL$feDU&)=B=7x$bS!b1ceH8(~)lH8QI&GxdD z6%~B42a@_46?|!vlRU03GjN-wjbzMFFgZ6?O~%D=zi9)Nnh&=LWOP0aqW;V8i2o(i zkai==TysTj1L3s#9c9DYnkQ?2^gqoU@@LVxso!Uz-TGuLZuG3V`v|eAMyR=|UK967 z$w2+&imp3Ad%me2qo}g-X}&?9QvfFD)*9nuABmLJ-t)O9(p;(>&Mv?9wkn}ZEyl@0 zxt=r7#isYD7QuSC)foA#>_sB+j*d z6M5xnib-=t1?n|^so#-(xiYdK)yJL6b-NHj^jdW?wn(^L`b|bg6 zR8_Lx&a^h{54q4IW&nSG&Z?>JBalTO)UM*`sud~wdRA%WpZuKz!*l5ncsW?i{2feG zj(0sxSgvDFn6$yu>ub-jbTSF~w55Ag;lNn+1}`g3)=ZGAzA1?SOV8khr^q)Q_g{Zg z{c_&DqNvpNyfr~&CKpY;>0=&62Px5JJL5YuyZcCtjL3%f>8HVe4`tVtStt)XL(Kp~ zAYURSVp3TVKP#h`FwZffY^hz00M^QVfb6N!K;ou?;dy@e3)yk;t_g-tNBI@xqZxNK zYo$(SBJ_PX5%kn=F=eb`^;fUTvNl&wCK`bL7~-|%m}mo4|`(S_(h*NJDUu4 z@{Xn9&r*w!I|OQfui1&*%u4KYt*1@#O@3`5z*l-xv;NZj&{|OrEx2P#WHRzBeD1Jp zJ;q(%Gl0$0-8g>-iA%=cSe9Q<@GyI-B6Gie;MucEdqxVXDl%t)mnSXnd8qP4L?Nz# z&r9t;lvUOp&a=*1i4PgAV&2I>Hv=Q-a!|8ge7UR$k^5nPc;?AkcACrCBv83 z#hy1voXl%~&S;9c47CO_4}1DdTv~2hkC`ZhTph)QFmU-h!XCY^_t6`?f9I4kYKe$U zTG4i)4tS~gGzk{>sJW?y6R}DOBxdVgnTO`df(+DuA@!S#z%%i%^9hU78uny%X69~? z>|pD!S)XzrSphqrvX_~)B6;nJ>{0y+Yo4pa{h70W25Q!px+AA5b46S8`;5l1>FLcR ztiF2FOGR%+vYb&xWw|=wU1wtVy^G@IiW1CR!z(j3(#|fKni~nsT%GM-Qq{?O%sb}T z=hLJ+kE~upf~2;gGzGT7FSeN86t5#|I2L*W^<}Iz3A({L^~jc77&+^Kw#=-EK-Os3 zR=@Lqkl@HFAI*qAjSFCFj1KAfG)!R`7vnX)8~3D8{V}KRT{!4&)cPH^zk11(sAtNY z_yS+mwZ4n6LRWGM^C|JqH|4wIqpBH@$ONWjhMdnYr(FNa__eGm-pPEL@(u;H^*d^Y z_TJa}KS+7z7|p%X+Q2J66n2f7U@_AJ8~ieVd*0i+3?U9LYY@A$6MW|HK-r}SrgBYl z*wX$a4tKt(UCs8c-%&c|K=f0lB@2@-)Bl0u8ifObE3-)Lx$LL;No*)s4aYlKWa;`R-_8^I{ZF&3CxX5<|O?Sf6~; zW17?IRHZ@5m;XZoHSwsYx#k$sDVb4AH)p4RR|ohZ zY*W~s}T00pOS z#(LwN)qW#U_E-8qJwD}II#C5M+KAfmDn&$?a&GEu8}~$wDnl;&O~;5=?*rKl91QhM zhh$4%hJ=q%I}tY?g1p*QYTFTicjw#)1Y+y^Xan+Pts#3jAU)=D^;dX6Dt-AKK3GP~ zU;}Y7_uSUeWFTjtvMy2M>+=K9PyibQwD6WRscMm~*ymAuJfQw$lZ%$0D?20W(D$g#xjJ|FL%6f5dcp;P3m$>?D4wj(UG}o5@#+~ zhdafktKX4q?D(iMiQAbKcs!l?yepNPUR+=KD}c%?}H4 z^yFpK@8HayGiIk-oSsg(-}DP@Oydfsq^351hasPx8P*NDsmJWLL3Y4{JwObQ8kRx+ zXictw{L2lv4^u3^g35+Hv;Qm5-jO_jqrl~rD5}*b?fmwTaK&rgj`=b7y`Zi@FgnMa zx=NLWucsoCv;01P=R>JruBgT{f=~53nzG5iq(qO?ejk3xmlf5U=*+nCdTv_7z4CYT z%T64=YBzU%e$$J~lzu(uU7Rn!!UeaUk+~H}Xw6#16?I4BZrMRvBb46RZfvomW=--$ zwHj-nfw9Pc&3Xg7()KvV=$Dh4T!f2$n`#V37%BFaXqH)jnq1`ozT4V~u#OL<{Q0yG zG(rCkj923DWlu*5c|L7}AnM;a-bZ4KHr#kyB9(ACy!XT(phNjmGh}9R5BU{z#{em; zSv!m}s3|!?^y@TkHrqGJ==E1;8*A(h?{EE%>-3q7hjc$ayIgDVUfme;Y3S0@9^F*F zTp6n&`81z@18#C2W$B&mDTkf)7$jIm%chVw#68oqmQPE26!ux&M_EE5>rk(`)?5s9 zjI}y$MiK0k40@MbYxJ~2+d1a^f|`)2&^5fDcCuY^1_OnXco)5*aW2;V!=zvZ}#V_Z5LL$jqmfR);l$4nOv-gA$ksWM}OKWkF0nC}DqoTxB7-?-q{8l&mtm3E?b zlwWWg+EHpQmS0=h?wR$c3VOxGdImC)nJZA8EOD2oaXu6k=Pd&u(s{s*Ujo!oYXFSe zSlw-Zk-1A&fQ|Rjy>m&##q#?|<}7KU=%q(nrhZeYvGyrh_AmY3l`qg%dCRQNse4Oq z2tS%7en?d1*SbmVK9j3Ok+w`q?vT}4On(7yAgi;-uxc{Owt)tA{Q@TkXF}R8a9n3b z(B&|`@Q;$fKbH+lf=H|-qQqD3UXzrDx@AOj+a+of)2Q0|F=w<@cY#p^RcnCZtoiKZ8ePu02C!d@ zq#8O&dhUSiO(NUX4_L z+E8g@K*%vGOh-yC!S&4g!nwodgD6=X3w%@d? z$(S9>@^Q;N23|$jyxKcDcB3<>ow!>8bnG!VeKT&2oF|b@s`uI9xaK^kBtjdtZY0!l zeTDt5dad6FO7)p>q(PF{3_vp2pDkm5To|vAW!AplRa{?LkFJ74n6LDk4w_7tTphKn zS8Ajk=VNm_VmiX{Tz4?MHqN-x*Sl`2wqku#Z7YtRwVi`$C&xTLb5+TGw90P}v zdejYbZ&uC`fz;5ho`#}U$IzDG>1~P5O^MpuAvE_ybMM%DF+%3=sLRRN#*S8hP>EQM z`PP4KpX8X2N0 zeq<3Ep`yM8a6NUEzNDYD0(RDcY)Y+xwpLqzQyj($fN~69COvVrw4?n%juA`CXavll zpk1zxQ23H86g!xxv`GEV0)Cx;d0O}~gdcU+@45*=Tm$Vr z0mkZg5V>7h$G__)bSD0KU->1O#okxlauNly%T~14rkYABGIy2!Ki$)o`G)sCwZF!a z@66!tj+H2JtpSHYbE}l-evr}d9UHJK2AWRETl4tb2fHj~=BD<4o$gD2Zr|MJ)sAx)j8NZiR{@AEQy&N z+Yh}I5+_9RdGz@?wQ$K=5e7a;W1bQyDip#s>vQzIOkE|UdbWl|<%Y&3pN18B%CkL) z@-u?IpVF7f1GvkIOo`rq#L}gH;F&Y9(uq^u&y&NQXHH|Fclud799Q?;8WI`%nt|GK zsr;0%4zk8(zs?7AQH}xr%D$wI0zv(bnC@duAKgtqI_AXhutM%f!KZi7bp=O{)LCQWQo3vHVV4x{_ z_j16R3sJTN-)nw3Ev|itnt^`VM`9M(shrR=$E=tMa=)STxn-mTYaZxiJ`JQ1p-}w} zrmp7b07F3+mM2SFlUL$L4>^|Z)y#IgA6W%Vf~r6Fo4WTe8g^krCtv5GpQ{qsdeddU z0r#}z!O3WU$(PPR2jA@V$fxnZx(Z7jg3M;#^&nnohie9yt?ud1;bVSYeHOr4mh@P( z%AD53G#(?&m&`ouWWmXt8=7s&_nNg9*Z8ASGUEx(ohXyi(Y!;xMDvV%8XQQkfz)!N zQ4i^gwfBJ#I$(eP&V?8)cgTPrwEYHs*3})*p4cIOazzCXj(4uk4%w4TYKK~RY1f*y ziXAoFB{`m7eDni{S64?JLm{+%eTW5Qj{o4#b!_mET<++xf_Mb>d4f+J4l-tkvq&vm zzUlSE;*xfijw4IPP)zzuRvs?mac1?vabfdmEq3V$ol!&a;m6!(?qbPj%Cy=5nzXY045qo(B=S@UD zbD^;I;uLjGN2!&JaLt;eyWP^SDy#ENRS=%*l~0p|OPfN^6|k^;ANV&Jx_sIsA<(nN z1(o@QlW*2FY9x3@`+Y{3t+euqi&yiToEuAjIirTEgSlq8tKi=-&eqcyuw9GI(^dYN zbJI>w6Y_i-O#PP`V5!Qg3lRt9^<@#0j3(FhJ4%zf?odt>@qW%tto4;y-}5;NKXTpB zA_$S@4DbVHRzwC&JCb}K{v5P&h(vsF&M*a=d967Vp*%-p{TCpH5_mX;Q1V*-ELY! z=U^Ym3MBaz?LvEQ!*NWVs833FdOZ<;P08%bZgCpRPCOTvePT|32~wxk2?>N_AlG2Q zo0PFmu_{^dJSEEs37PvEE^W#T;R%<9I`qlev10k9FTFVH8syRmU&qQJ}yhZBM z658qB^ktAofikD=)xQMdzGeUwhPNjr%#gmFbz-`SlCkdw_u}+r0wJ4EGCtl2;=J-^jz}~6Vfsj#uqE>rURQZK= zE50elgxj2Wz6(bcw=Ktv>gkr~g_5@>E>nzC^%Zz*^g*5NA?Yu7-Py#+SO94+PEq%d z%2*NS@>ocKg1?NB@XQtE{&WOTwv&t8zoTL(t649s?vI`u(-x;*eFZ4DN7_~Tg3Acx zT0_jCBgvr7leQ@bG(j59E%4PB^yf4|qoWUe^o3|z&jyF20nj0V} zw0lZkxUutVD{Np7<`~RcuUt_PNESklIiFA+EqOl^p)y(lZ;6qAfev8>X)C@?DjPK}{{ch%Eo`(!>?(5H`DM9~^=Vg57Qkta5rRIh@aBh8o>ibHZ(1jXE ziC8{O8a;jVYX;s=B+NCd5X;Ddw##4!c>`**YO!ku*vb%Mr38zATG80EU zBuJ@Uw8!m!u9y7JClRc&X?hCgx+yB4#%it6AIxn9?6}~6lLt`59Vc0y`q6bI*?c4f zunOkaK1LWeccN;QuDZA+0++{H?*q@brtf@74P6-}fXv`YDsN3WS*v;skAc5IujryflU1;o0|!4m?L$ z0kVL94}4|0);gVM+|n4GCHpI|>*n$(jlpbKIWQQ}(Qz@?K?G=Gll!N~ zV1Mg%W5uI%&EHuOZlrdZL}V%_ZU)*c6dM+a+QQaizRuK|Vl=2N+mb8g&{qU~I9V{7 zxpzJT&5-YdUrcw1S_7WZS@^_}*Ts*Nzay}JJ@rnMm-&<>mc@7pNqQo2fDnkDIC`xyT&zoL+^eFh;#~Me|53PwxXn!S9M_ z8Y76``+9-PE{jVz)4A_;!C9Wz&Mf<{j8iv5C2=TN7P&Icv z_b0ua2gab6y2zTf6zQvCD8}&K%T^{?bPvh1z{}CfrhZ2z1wNuBHbSn!At+Srxr4f+ zt1d=+Pt~9OJ33^v9m1PJC6IHIA?$O1Iy%9Zhit~UGx`Jr+`KE^JHY<%GdY6`>bC7S zKE_-K2;BbG^BtZMiQBon91@H*edaDYq+(CT=vvhF&b2#0d42>#-sQ1)+Gqt|Uygr_ z8K-tHr(krGi!aA1n2zGze{c%KVapyRX_g&hl(kh>WJq|2wbtTwLUX14rD8vSebe6k zqw`9=kBrS#kss{Ng6_F{Nu=TGE8Oq8a;Ak(qMKb=_;}UD4!AIBBqx7x_ZSJa3e3KRz3i5mM$3ukC z{*@^vf%NFFEz6S~I*d_SP;s$;UnKjNxxtU7ea&%g43ioxB(SNghD7V<+6RKv-Zdqf z5}diK@VRCeKr?_Pt4J2f#d)s#lv9lYB7f(t^06|-(2-~-D;G-g;@IbD)RN|1OkKw4 zPLY;32OU>(?kX80c*j~d{!e0L+*1m@dQ~sjEnT=GK-Bp(F3C zk(tVBR&6(BMbaKsstC!P-&Fnw!Ah-;Hb>qzB`Ao}cV;082jrW|8Lh?0V%C~zS7eSv zj=k!CaCK7Um0c#W2E9Wxmz2A!_n9~S-c!FJQ{8(F2KU*Q8MuQBOKona@~AvN8p9=) zfUBThG(98TMzFP{?$y+PX?^E6UBLDV1>$$)WqKcIdg61}x-A3Kn7fMqqqSm=5iu(i z2+*Q-;)TT_(W$I;$hxXl$#1&q)m$C@JPj*Nuc$EJtEvaIQ*y~vwt@spRnJ;257)8Q zfH9~_ASH7%-T9qWsYrfp3}+qd6cfX`nBQlE2FiHixMr_HW{-G(okp+uH0EeB@*5-7 zR#kr_vj|2%4PKxaU5(kKa`J2MqGIXgjD}7E^0n5x{?e7#qfrFVGO73bOe4Y|r% z6)v7O>z9-J;LzE(t>|M>|Cu|4XS8Nyj^!jwQC^N)iTR&TlNrjI$j2QFQGlb?O)f{5 zotB6J<{hjusAG_ScM|+2`83ydM)QmT$n6=ZE$=gTtw>;Nzl}hBdwRnAlB9Jn2>9|% zO2aa|HFhj(odjB|pQbZJRTI$#I|yKT{8mPSz1D!ci|t~H6=m8@K6gq!lHxh*JE-}T zZ+icrhpp4-;>K!Q+J9W!*=I;PV3U`ryOHGmELMPDQV2_bX004Lgd6=nuuW+r4aM70 z96!V{$~PU>a^Zwj^4K7mwHl&Vu}6(R2mQ*g%}PYASYJ-dm8ozWo(3_N{^@8Ll-)LT z8PZjwFpVS|H#qkWj_JAT^v3Jx=UR6b3EuFsDM+M@@=dierAccI0I#U!lzjMRdFu7$ z+4@aY(g2iy=hJimDlQ#w3b~*D9A?L9E>z`%t%J5Z^})dC^sL{9cvWfG$ME;l+l3Bs z&E*N6pg_{k!V@-~8Sj-W@iRH=X@!t%36`HitigNUak1ygVhl>4)>m+quy0esEhrSc z-_a~HEv|=*P1a%?bBIgjx&iH-84FN;^h&-o*{4Z=?mf@K?1f(Wrt>WNl{=ASF7`sd zv&!k^iq0&d%<{;LsTl1yJrp|S$r1>D7jvwh*fR)vj}aez=MI4}OSGe>;kQgbSQ7!x zVgC*a)YkDzbD6%icQ{#lvH3hSg+m0DUk+n|t&mTn#xf)DSOLweR>bePor@iUM9L^F zArk$6OL}fNz|&`Xpr=jt4!t2KNe`KSL>*(kDgOsLqE_dCrzm`{-w|EOI0f1l z9&-N<{*c0)K9JguBB+{yt4uN_C3sg_TiR@Zyg3F#`;l*|Q1O`=b~Ig$L1&~PTWUK| z(-%3~JO`U=26qHKGA zypQlj_bV7UDIEfHjMBC2>S4^F=gS%3N%`a+1(na>9Y~#eniLp!DkUSskvmcD z0|QTv0R~E2Su}H0rR11-0%}hQ@Jf1MPo0*ILJL3SUg)a)rfO{N8O?(Q0+PwIJq@f! z&TUlER6T~10DP4h0g_MqW-hGvy=tUAjTMmEl9z=Ds%Jgu_48}XzMN@6YGQMLM?qR& zL5)pTox|;eLS`&rNR~o?8>6L0Yb5$;D^_)57QK>FAAI=K8L1yh(qvB3UX9hc=MEVa z@oA4fc@i37)aoo|mwqD}j)CyaF__acx`GWEnjufHY87?g`84dGJ!`e{?~H!oJ=5AT z&o;|jLzem-AXQPOlq`a2Ik#1RvY>aOR)|~T4>${IQ&W#pyyzin1{*w5-xx}X8u5w5 zUyLc&Ky}B}x7iLsn%0wkXgD$NH8)^71vn{T2V~4n;mdHWa||n_cQ1$z2Hza>hH}mw zzvHLK%)?WCefC;Xl%osnm(|%Njd~3Pu!~)C{C#v>Tg@8t*gIpL&=2T;mGjOLl+yh( zpQb~4>z!k5-hFf1Zb$3hV<1%WY_sDrc;pPA42lm0&jf@>Rag#&UVdYqIi<@>uK~PR zvT}MF)NN*LNEA!heov9BL zK^>`GG(iXAtv&jJ)><=v_fFz<%7Rp&d>7z}S)-vvk5_Xe(QU9a?CSV^5xLtXy=e)T#bo$5xsDq=C0DI zvhh2@K4SHy51{#YVfjtpqeX7r3z|ttJ>;9pJm_~(@AFo@mUkod`V?HqF?xI^wiVr> zlu7;$rL0LuJq_0%m5>s%f9}0A(TH=dHQr<1WAf4FyUUrs1E8Ols!I+ZW9kFF(i%ss3PA8DzYj*Ru6VPpg#h!*2`26t z6GCbT7oFd9MiP>!3E=}KWZkqcS&=n!he)MfjnO2r7xQGzK=swRf9dg(PGgMKSI{p9 zTX9PG)rsGcZiEue_u=p}zVm4__-O7o*%t&aJ;sgRvt9??d5&?mpSe2A%E#zgLmhot zw;k$q&EL`YC8J-j<)D%B1h2nf!0TyV=h@mt?gJJx$1HeL^G#P>C$nNlA%YUM{0f`E zW!5I4wwHI#8GvzVf38(?GXTYAO2iCX?`)f+m8TwF49!744ZD8k#Fd<*CFmI(qOECh z*}6g)^*j8=BXR4mU2Sgh*>Pww_oep%hWXhOsU!y|44L0Y)02B!X`_8s;%Z#Z?xs9H zN`}6y!SR|J+v@gHKAm3yD(vd7jST;bRWrz+6Q?Q&D$KgpFvlRf=$zgt5AGU5<{S4Xzrv-)rahy}sV}ZDu_`TKTUR0a?z$ZDt@qj1hI*z~ z)>V4kG}PS#HAMd z029b-%?O}wFua)_b2ufn577E@F-lv?4SG>jaCJS-E^4kuEOjlyOKwGy%a`dSmfBxK&duI_e>^&+6rol|D4yYk)bV`O2 z%e9v2${yDWNZ31>=^}v&%d?=V;+!}xF>+Drob{@sQqNi|F7VoVpLOqkIXw64v1gp( zz1^tnTx;wDo&A4r@SfGPLE6Ka%NQ34Y+il^rVCEUdY_F&k?}WK)#l4_<b@_4f1B1wm#U@S*8^j==iCN~WP1EQwQ}0Le{hm@ z?CA}Dx2M1G9t3?^we*Hd(^VtB_T*$g6YqkY$oDDxKvL!luLlWU+dB1f6^}D5NLffd zuFG6$W997!N6Qkx?%$F($;Nmh?e*?b5 zO3SaHCIoR_eIFbH`m?r#G1L^!Pu26j-H-LAe5o({;0f26n4bwU4{$G^wkgJ|Q*R91 zQE75iWx9IgSJ01a$^6gs((ogZe}020Z0j%g+O_S=6O2fwG24hhB#U$1sKhOiev^0^ zj-*;0Os}}%QZkw+mTx9Hs|F~aHk4IH8mG}uwz`6{P6i4j*Ffsyo&NS@^KkcS*77x~ z?oy)RM^-I~6@6Z5_sTNi#LN>so!+#62c+Z641^l{)T1ozTqp=2ut%;nf7iY9bC%%q z?sGce2Wi;>5(tOnuKH+5nbCcf6@1FFp_?>LL&7$iUGgu#910WeKW0y>Ho60CY*6gT3no9Co6Y6e-7_R%?> zeRbA%w83qjMu}qmB=SDxe}Of=SHRn$%ULgL^ZP5Tqm_FnuIqhGD|%X0ZYBTDw6dNu zeoX=!o;z_p(9!2PMeIAJKd0Zx6WpV|!pKb}wiUDSm)c8`S4TZ2kO`_Ue`i*am^Tx0 za`^NdvkJSnWV;F0=NR=ZiLaVAePc6bC-E-3oU`UQcZS2M(lsK_f40K=#-V5~CWwwWb9`Lf?sEn(WpF}plQp1I@d-YRN;M)RFq9V(1Y zs^8IGj6s?bb=^I;e^bALw(K-P%I=opTcQM6J%D~e)kQ^qVEx~gF6QQLX57{(ab*s6 z)Epy#k*6NHCFY{~3RnQuk<^X{%jUlK+}N;*cloIB=%AcJx+-}Ffz^zMD0w<|MU0^Y!rrAHOG zh&b1srT!Ime?MpN5+_ePM2dxpkn1);jd^bm)UCcJwW3bky;%GO<)9ogUNt12j1uq- z6(RNS?9V09+_13JVy@2cLDQ~MS2qZ2>V1Uy=6;{CIEmSo`*|(>wN-TO>Ains(cf$C zQC#DnFTXQtvHMMTg)Dh5*dBVP=bP#Qo4(mcU@W`Ge_Kwuv5XRsAdAeM$lu1uRWpEa zh5~O1rI@EtF0`{1AMOV_gM6BMA)`gZ*;R>EV*qZh)=1E(*v4}VY}3+DTW)7o<9*;q zv8mBBQR-(tO+8iSX_exs+Q~IofZ6&+Us$kxpTb*; z{MQW7sW#KyXJy>>R~Rlv-&uG7JGMR&EFFU+!55RdS6=h=&eNzhAEvB)pY^$AEC8{v zYJ~EPRGmDQw7lVcba>9aBS)!#p=KaQ+4X>Of3!%Na*vX{k}(JO=s<4d@915a9?NID z=<>9Y@L-&Y0s+H(%~=nqX{-=a&U#lxS$#aUf&?W<9$IP#-%`(Q$10I;y2D2FHI}wY~~m&!M&oI8+VT7?NO)>h@WF{%_dhE)Zk!s z%`sRBGSfASh3l)HV_;-byUdWF44xW;^rY=k%(XnN+y_7b_@nY^F4Xi6XJ|);RgO8p z-%7*Iqo6i3#Ux6ha|{UJnmLyF1=OGQGTLk6@XFn*vaV}})X*#X&OOSl@5=l6eph_fa@_`|KRs8P3JG6+ zpMht;a`#RfuPs-UCDvB-EI4?ye@^65B3-Q2;W&QMqXc$*GKO-DC_(E)7|nNo1!e<- zu%0%*-jB3H2HANdqO^2+XycMklkQ8ede+lv?KQxIPA%8ds5e2#mOu>TIbB4R)83gE z82F6PqAAg^Ciek@{MD<2RZ!wN=caK|Ru0e0;4;WlvZ(A!RPwByc=tP;e|bjhmUoHd za`y~^+=P_Pod`&P%DLWW-QeuSBCPO(72m z$yKx7#NV>wVBQW$m|Qo+j#t)JpsRT|KRMz{hR9JfP#SghnZsOu&AFnxyi7)%=bihW z=$RQ^^`7|anfKwW=G^owf6Cf_p^azv6eQ7rDA!uJ7xcG&M|;ny_4To8devjr*P0&x zd~9F5g85J$m62c-3RoCY^PM!sma8)W5Uu?+LuNkJo1%*8{#mNSoVgwYbJNx6BeQU`BeG{K zZB`+si*miswJIlV3C5hPO`0(gHnwPi_&JlwW`VWW_$y|hs*SZ#D@rnYwd5EETt>eZ z7{oo9h8CRN5D57+5#On-nni|C8;TsG(RXJ5;UB~;`%RAld#$J4RYWGHgyx0bEFI4h z{KB6&+Sg0>vq;#8QQ+zM?|w%6qezcUZ|SGe=o7LAvx2h9jxxJsVr5j zx=(~c^-Wb#;st2QyV08-A+2r?;xq~Usr>*qC7YSdl-*jhr=eqGul@;gj;52V-2}7&FWsQ+7 zIUZ+Azzx5QnY6ylG2-!=JA|#GVROF;2myNM(^xg>A*&ZMD!&}=nJYP>mU(1-a|W78 zys}R*3Kc=Nt>!kuMadnw%-Giw3%a;ayTc917jFASf2H7&@oSP%AXRf)#F#P~v5<&5 z47cl z2mz)hUvbm**LG!s!qo4;!_Ix?m|_b5atxxB#D^?EcZ?!zQ`TkTU!dgHRqzjRBMnrUQVy;>ldikz3pp+1$*XY7G^hlu+~kO z{Old#C~j>Z?3nH{0=UQ>ip}Nk9Q?V|i96cI^fi~`Caj!i;Xrqh5e&7#8kFaoN}8>S z!(T}D*5q=BNAeOZJaI^edecMQZtFKb`nykwe`?83pOSL~f>XnuBARXYl347Tn>2=K zXG&BIWyQ{NLIfwal|(EcPd&h z8(Nr}8zt7UjpY&r&FGhY8d&dBBVCG$Gv|u!V^9dk4B%7Ho0PpXda`wwIrVPn6zY_$ ze>auG>9vu(+j3adUY@BbNFHtBlRTxZ>V1?|`!^*rbQzt*J*wMa?Hz1~UwS^Sf-cYe zrt9Ol0oqyM7JHky$Gk z2S~eIYXQ}FS~ZyIkRZ0<`eX8ZpT$vxB10L@P3tjz|Yir zE!SXK;Z+3~%5S4?*qaTaM6z|IwQF@e3- zTBEe+*puc5;>xK*xOq-@K23W2nJdZ^yJwVIR&_dhhiv*2CPrr6;L>`ncLdxS`4J^i zk&&w-WQPj9-baT4aL1HTRmr@(>iVS}aE`%~)tY?YzUfiSmmNP)N~&W*f1WJ4Lp&ih zgF~RCZ>EDMo_QICsS2G^^Bs%o!k)pRqf(EdL$=(B@{OtmbJpm5lDTg^c9`HEqqZ-r zn%Cn%xYTolTWtMy;2G+toeGdLrn(Ai3wGA~;E~adu_WNVXR>8F+JbheDbO!q`pKt3 zU-!CQY>Ko)HdTN6SH;t)e-H(Mbu%eLhMp;HsY8`o($c+~Sdqf!{2fv1v?(?QpV(=R z;p=ABN)HTCoLV>SShR1<_qkhxjPDrp!AV&&&~{7}M@r-lw_KgOCYBjP;p@ss=T{g2 zyq-05qCqtSERAiCZX)tm=7Tpt!>(o>5^d1)cYwoFlWz~bRMYl{e?dVcmMaSC(Vbdc zO!}tgH%N=?j4aK^h0;PjdhR!=v94;~e`X{Ht;yw?=8R5m^DeQO zt22w3wHCv>(m8$^MRmZrM?r4(^e7Q=h^gkC1&niKuG$#H8oA>E5WegXSWw*ZwGWoT z)s^RTQIU~xSaBL^C+|7@E^~ISHAZ4H*BT|Ky4jqYu6bEyx&fc6G*THY7Wm`qdgRLz-`JQ^vVw#puS#+WIV@*=}}ylfE~a0kjprOX|_% z?VRSBL)zUHVw*k!+K1GeY7>TCI3*Y{6VZ+q2UIC%e<0-041t@nceHW!J8+P5_VU?O zmFeKj{N>#mI1ZI@tYdPaKk;2Q6z;h|{D?po}F zJPQ|WPp^)aQk~b_E=?>mD?cQAX05hM2qPnnQoA~%)|XQjilgI*bpyY~4OjY&Wbm)$ zn4!w+f8NG=EGkv^Dg7#r)MGaNj9LPtlTlFkKbfw&nT7-hP|X@fXUj|^OXH>tE61P+ zOl>)OvH^nR7sfckAkX1 zM2WhLdgemU~AN zO97*Ln(wx!l{Oe4wnQqiyC2<`hXlen-{&n~pLIF1bAw!~=B5S<1KbyhEK5sXN1_=7 zL8mjVTf0!qAyQ9Zw0Aan22oXX2uDY|wwZXF&I5WzY_m(1=_Tl!Li$ zf1>fXEnp(`%tYvAP)RbUi+EXh-TLKN#7#CAV*>*_x?mxG4rhujLY1{p3UG;%b z$r%35XKD{ji4A)vXDw@mP^e}AXufAxoc$M~yZj2u?iDNM(+*S%xp(GMP$=~Q64?D} z2`Z3#&H$8wnN~AcFw6G|R*+&V<``YSf6@-w!H!_yats`P#vpf%=(#2}M&nN|cS{DG zE+xaw%H6x(^{4$J5n0H6uqwSwzhu|G@ygu$F7b@aAm^t0LB@o3AiG9Y%AJZmm%we^?5+ z-F%--Ep|qJ_Dz9S>$mN?cTdipfi3c1b7KaG^nH=E$3K96B8oZ2-IT1|yIyjx%^Jg> z>(0-}GGAYwcCf0Bdp?cb&^FS+D{1@sP|4rlRF8u>BfGwm+X*! zau4-BlJbqF+fU}kJNFLbpgH|^f0?d5{d(@UC|l}LIJ;)z@JZdZsr?y=9YX=@L^_Denj0**;EnjbX2vP%b#nYVZX-WJW zRvuyhx)Bjm^AAc;_9%(GRgW16yshR2RfEJaB@o*gzsAA=Hc{(Ff1)XKX%~zD zLe6y-4s*sdnlo5GsBBWgH%u$-xKqA~h;kBdT~iDp1NNG$^SH4fb9LO>SbJ)2cwE3& zQlh5n%NX}u<_?b$g-u>}-EHjaT(_Z`mPnK$O zn+z_~TYu9RtVi$omn3PQe>wb?_~`3>q;j}gDN*^7-qeBaDybBm?P|65zbVC+dYP;+)@fhGb3#hGRbXjj6Ad>&wm5 z41|@hMBu@fxzF-!f9s2YyF8z!Ff=R3Jxw)UKTWTrL>(QAey)kuf~*}Oz?uQD$JXZu zq(jrI9>ZVA@1qK<<4E{MAS&{GHn^ufEeA?@>owp4F0GNYp}J=tT`3P(OU?kDk=llO z(|v|@&s~M6|JL@-eu?kr-Wl~w89|p!Qoo%#aU|gqA97I3e^-BPsnC0$ZHh@=TtN`1Uj zGB^fuCtjdr8QoXX_1rV&pj`o0zkV7F$d}&{HO%<+AqR%Vt7gs1L7kTp{ZBL6dR(IZ z8Rt7}DgPT!e>;U^I-_=uxLn#4GFFd!X5~rL-1YAuh0dxN-%U=Sb}#l(g)F6E@%9ad z@_HY1gQ!+hq8dFT3oszCD|K%}h~kmS8E9fQXSK>H|I^%b=tq&)=I>zDX#CshmIK$V z_ra|K_>>Zihgp52m$(#E>3CTC_r2Eu69;dmen%Q|e@>eZ{sIiXPKkW9o2m2xY^}Uz zkAe8iSimWt)d>Allw4c3oVB{{JdF@pSm(>KBatbtb1Gto|1(!q%#e*zGZ0Kf^Oh1U zOsU1r*XRYDJMlHTBh@X#hL@AbSu<{h!)pfbJ6v?G8~+FQagM=e`pj?2Gg|Z3JV`p+ zhl-cuf0*xs1W>@vH7gVxjdlb>Ge zi4w~U$H{&~@tjY4zxkUff&0y95z;NSzWIGVPjy)NK2%lreW4MNfux50D6h}k?EG*T zGI!{_!FrVaMxr5Re$x*`aQYbM=aBU6F)9v{e=p!v!0~FmL-NjCfd)jkPsWHzkdUXo z#yi>3yi*-mS6%34{$irk*Irno8FK&=va53MEb7A&NrvzD4FZ?Hqd#qHu|?PAXWsR) zV{Yzz8eZy*G@creODEMB#iY%yFQ)v38;E2iYV&EBt+Hn5T-D}g%vq&~T`Dz6B-KcryWV)t|5-8S(_)q-?0^Y1a=QfBz@AanJDixY< z3IoVVt}!xDN1uAcjvz!i<}K*nPlE>Pow!q%eFN@%rbGjsh>mEhoWbCP=^3oAGcjhT z3Ng|3dK!G9D?KG}N{KY*uX<_{|(DG752!xWMDJcsx?M5Q5n=1iD+6%RC}eh zAxNNRHCI$&MRTV^IKR4*Q}p`rNIy#+MO3%+j@$H&kiKS3vZb{lfPr46^nrtgN;JR1 zL%;XTu#4qAp`3FDPJJ?0T-u^`fB*XH!8_|+g+y8HVf_vo!Yi#?HQJ2z{MsZ}p9RcX z%_nrhm7ZxqswxnB>fgB@omst}mlncx>ZQchFXZ>Zj&x>z4wKHanR!%>eY$>u;!|go zEBe9?k$5Cga=C&$Su$!z-WZpA>6S4EaRuzGx!-t{C|&Do%OU9El9H#0e@Ks!$H;i^ z;415m%-5TnlXs)684EwpoaBO%kenMoCu`*|AU8Z>HAeJpYyBo=B$<~w^LH@Vx3-iw>)t9DI#ffH?LvP%*1Q2PxVYytZyBw^uA?QY@zNI4 zbLG{QoFwn=QV)irZAH#nf8I=CbFGdBe428mM9omvge@G;z>>z&S)H|#C z&$dILDjCJ~J4gn!%}WXP_SVXJ4|LavL4DR8RIZKBl-WL2LGMrR5Jfo<|2a22Ss7Dh zDq{=F6$RcAd9SBoN!0W{B`$_UJ6_=2Xkl`UKI|Ety!Kg6FLjk#xUTTOb{0jSZ3xMC zdg9mU+1+nC{KoWlf9X(h^1QQ1&@R@S9;%tLjzztY8qfR+=L02j-rMJATKoJ6)@asJ zGXT|6y48|tO|K1-L7iS&X$-})?So5Wt-c$t(cU@tDA+AFj+)!Z>174%1=HA=;EQ^Z z>dL1L+SI%kE@}D9v0U)lvDMwU@@c;1EM2k%*60c8o;Oqp~j~Xoo8fOM*qLEN>FIyRr{R9J({K z3qn7&QB@s9fAUbX8Wu4LdY8J#e;v_G@#~x$|A#1_HmF{6Cr&si z3wP^x_D|w11@eaO%co)6*sn*;0G?0~@|&dMuzp9HwC?R8;Zx>WU_xh4bz@-ZzRUnh zv(R*0&>Mo;)D;Wz7j5V7x7b>V4J{B_rp=n_)a2FW_XNapWgy=v_*Z}zG@##4bb zIC-8%e;GCXiRyP2)!>x}^fddrY*=>>=BBERB@xam)ZUP2S)Ff6vbOF;UN!gqBRi(T zz1|01rW8X;^g1s)#N1f76%Qf74%B<+7fP_yJDY~3t*_C(h#%M7cr1w|d)}nyl5c~= zRxH%fkN~3OY1Bu0Ej+m~vNEsSAxIz+`}Mr-f2@s)1P=+i&ip>y`eVzvA+=o!-|K11 z1BX_vn}Wcz_q7gddvSn!niyAWm%*RdcO&)=QK6avi8}3+fFo5tOKp~V=cC23-xM@nup%K;3-#Y3h=Y7@QE@ntewgoj+_ip-hiMZ*d1#PPDQvCE%G$A(3MFc ze}TlQxEKjsPeq)8t{w{ba=$4vf=I2oX*9c3PTbR6bd~iT5*AlKZKRA+?_8VkPTuI6 z!tHHw;aps{T2a^EZL6wg*>$dFYGvGOpNwP~0|k<{KlbbUk{TARAzt_L7lvdl&Jn*O zzwt$KQ1Z2+bW2z4cp7`OVh%&XpUZWFe|kEq(}dau(Y*8|NM85cJ7O*>Px^OMkyK{Y z?`*n7m*yk+Oy$>8Ix69cqn!j=tC*xoMw9J23;ILhYRMU(Nc^OxfN>a9HgSIL4=f9* zdogOLv3cegghG4HK$k9DT{Y$@>QPY~p4q5LsXJJ)3~Qq-yTLu6{xW}uxse_}e{L7Z zg!~=NgtA%%#7+;FyiZA9xUFgix?f{zOo@uk%2oTF0W-*_2@OhL*3;hdr)iIlVwt{! znRV{0+*LYEXD3lX<&l@qb<@frYZb>B;gH;K;(yP=$Y_En`nKlp=&rf8rkI?@J@t+x zh6qos8?ZTOZ*YAAPid3xA(^g#x%G#je8(FIG@(ER$ zJ4BH}W^9ake*m^>Zdx#*HE)TodAUP0H%_dF-`SvE^UG=9tLD0XN7?SDI1@DZd3|nQ zB$(8ye%qLtMVz;pwnfk0@l3Hq+dl_MFDO~fT3OE7H=xq?rSB5uARxKAb0Ex(V@ z#v>zu(hg2z>I1y)dwSyc?S0oJw`QO?YwtJZeIT{SF`G2TDF zZaobd)w`I6l#4GWijO%>XEX?=hU7<{H?J(w$sM^ofj#ar74=j1|9{RV_?di6V(P+IX4 zNIFoMeS(xmw`Tc=PUo(9m~HU*?#)=?S*1Jd{D1?`f$3SEwNfA95uz{QmG*6t<2 zf>gW8A9LI4O?{l#R%ldC>i~n+S9mb4m(0FAnBFp4v7+iHu!KBY@<^5tn6ODaq;}Qg zj>RRdTTvu6?4|vcuBolab>psJSZ+B`2;NA_jP9Hnib-+PaFPx9sU zwT1Ar3$3gf+-;vMC4YUFJn*{X*~#C*h@X)k2D!{t&l+AJe{IWgncmYYc<5mKtcq)d zvcnF^GpB#nT-7(myhL%1dLMV@nm2}2C=5pG5coHyXFhFt9*?r$^uT>f7UvjsA6Krm z=t1_Z^FHvk87Uc(?9r=MMkuS-?emNMK~(lA$(LN4mywsx z?=zcpMq4Gfe+|oZllE2-QEROmaUxV~9Ld9soZ3>n!=Bsx((5jN2UlkC^Z6Y}r9u!5 z37aDK8wn(F{tij&M1aDzs#y`wxMW&a2}S7WTE8>+TXlc@0o-O~zC2e!RZi){)lGoz*)UEO=01rqmW zy{R5zzFkUW|9g*)>{#_y0jZH-sJc+weS&7lH{J1HXNLX3qs-o{p60G^jkIGM%qR{j z)7L#ce-;v&H1CCDbi2*dI6TU#c#~OHXj=$Ll0}5}U2AmeMvU_38Q}>>j zAAxcfWZljry4}_e5j}9~dkh}4v;x?bx^b0lIf7}f$66f>`t1V>m4J2TT91>RdvrJq zf5|(kiqnYn^jts!^<{BU%Us&hJ5&XtuCi(zRF%WI4yn4ew4{WScnRiid?q+%6$wqfb?EU39jpLWDdVwL@tJAN940J#tNphxQvn;I8W z&Oj_8@vu*K^IjZll38kBTE9(~pnHBFoQs`fd1`ujW#k9!YFg5x6qI6?=NgRqe~FC4 zqWO`d%rzLj%Br5}3C$Z@m+I-K6t{o8g zFE^7M7+Q^bpH0t(;^(7a53$bNe^uKFW1RZ{jZDX{wWGYvy#^d6j$_RYc`syIOFmiq zFRH!Mzqz72pDE+y&p|)kS{bRWD!!V*;nM6oSf(p0LX;Y-MJR3{lGh8fNB+)RQ^T@| zg_Y@~{0ay3+dcO+)ZUTV^5=nRF7vb`gBYjgHdOpQwK4==BR;hll>_TBem_S74O79H%czka4rdTN0>nRy% zt$rG^%;FY?71Iqe{j3)gpl@0*Kl}r^ZlgtF#)$DD-;bmr*u{Wa_Gz*NjXjtqrJbfsfq1B%jQvjdC5;Ni{bG#ZzW*2Ye_yQ9U&a z#rM=R*gqY?c=BW@`9wY6l6F@#ud#_WE z-pnR}uOg&O?SF3ar+KpULvA1Nr3PwgeQ;Wy%%~aDe_SmbcWv%6PC@d~nYz{*)=*`2 zO2Ec@buLx!86Rc%b6HaJU3lx#;^LuCXa!>iZ&0>RT6WAT*_6`p_S!=;g?t*UdsfLA zquIrjW1uG9^|eP;PO`W>NkG4Pj3b;ed;oMg@g8H{vbxaP@R>^U3G%%=uKa$y-tV*% zNwoZ}f0IRts(Gjrtl!9M>$R2$T+>noKI2X0*A^i~p;%vmy$%}J68ydSwFSMO8Cj5= zQw?37E6IEPBAMUGwEBcX8Kk8-HySq25Awv%nLG=^=OTc0PTwLzbKcwU7k-ySS-)SK zTQg4y{_X9`b(0lYvg$$?0eil5Jjq>DsMY}df4ZxU->RLHKOQ7avb@hWW=Guv^LO|J ziK5cDgLdh;t-yJ?6W>mKMz+1p;4G*afCQh3xKW-ZGnBt0lY+4?I> zc*6ibGMnUHl-=~By0VKG${Lt zD|nc}J@T6_ESK~fIc6$c@|$9YlZdM~1t>Yws(G*Lv}T;|E&Ia!ucu*CNcQQ$0INMk z?kXkpnBMYfc5h}xr z(bn7$*=&h`aQ*4=mbclC;VdhIbTNR8&NH{Gn#!oIdPqiBt{Ws-SAV`yDNNN*f`h|z z?Hz*jF}a_OF}1{Xz7JuK*71kiIcrkhp!SV0#>6;6X7v?Fwm#eFTq&{~qn0Q$e<^Rl z5EP0vX0-L_JqmCmA(~?_Ctaz@HDI{fO5?Fi#l8l9u)*8sPSm0vnL*6}`fN+2g_e)* zncQy(V&@}I{k7_Al`AUT{AESeGp*^pzm;~Z#rnufw9;8uEpWuCJ0TCeMX3*_1#Mn_IgABp25Q}=?X#vPpQfF2lsjHE;F4TngG#%378D=} z+2vRG$ibx#XbhE5TA4(zf1}i5y4{|6F96lt@Z8iI=yvRO)Zqsw>R7$VV+ z()=ZOuYKjY`a?e~wp|(^&Uu7uinBTW))_&ZxNwR^3|j9i#3rPor(9B)y)-n`$OP z33m2qkD=4F= z@Zh7?0F@28y_D?Gj=9$I#HfpE49Wu6W=dW-g-W}Oh9f{xIp%|MKHo>8KsiK>;Vxt! zPnJKEFXOO$e*%tp{|;+8<47aLbM`*KdGg3;tB=F3$*-WgL&0LbkLr$QFZ{fic3J5( znndcboKIV&FLT{6V@vPm7y-q+gSCuMgIoH|cjE__Rwe$_M3_ju>gWjv>CW-!Ny~8&YvdS5pxDfNpeQrWRe>r9x;hw=qtToY_A6)0zEgA|& zCNzC?5{Rg>96p%T_RLC9trWd;>{{tm8|WChS1P=Rib!IqiP2t|5yPruIy>gM+u-bY59 z!MmVQe^ZCd$ZOLkSHJ$!v^3xJd@~(NBHVklzFr=;ww}-w+gN$FG0-&wkTy_Yka^kL6hgPC3(Oahu~ z)mk5KTwS?)4>9MgD*LFh*?I;C-sOxq>u)VW`l=atQKmymq)U1yo=oMe4+e^Ub>#^O ze@&im>RJF@%o*UW%}hSkg7P=Nf~K}t@9RMyl6g(hW|-+b!T7I%=WA}GU0QmfpNs9E z@lh2Q+GFHdAi3H~lfGpnZ}O)%rA$% z5t^aC>3lmd%+!~g5w0J3PDvc@o|_)5f0+Z*>hIg?XqKZ?qu!JRuqGvoczjv6^FZ$; zE81u)e;*T9kMOuj5__XB&5)`cwWn)Q%mmUMn>7{O}C<1z(jD-Day8(HR& zzjNwknosjOkF52bpOEHR^Q|KRq-@zpItt=F&aZ&6R4rxA?ddW}UuFg{0~D<>f6^tI zK(s{T^g4~Raw7d4a*P6x%n0CW9w7Z3Gr9%z+*Tc;dTu(Jr$(A>wnht+;GXIC!5^PB zku&FAg>KFIt>bTMvH1Ii?6HpZ4N8=04E=0bDr8fQ9wG27FR`l4JO^SFQnk zz6@%PQH|bfjVFa&QDdab+43o|f8R29sJw&&l>2}}oD;#Sat$~mb+6DyqjYAq5NCRa zW7V21a~@0riI{d@sPNAYZZ~sWs@MwLFcsyl$9wFV0uW?Dk?Vhz4L4U0=w zD9;OsS7!3(1#@iX4rg@lx+Lb@V9>L6Oep!H}*@p+#iI#T!QwUqsXk%Y)%w|3!CayE0;xCh#T#PqPY6|Fi7 z?R-6rN7-yX^WhS1y+fkHF`qVwpwhAfSYTA-m<2{NcQ2%0GZw(He|>E2d>Y5`%&&d$ z+0sLv)lGGDU%>3%JvBxs?Uh*(5@k@i6Zyf-2CT!J2vdITbC&e%r>*R&)a2@>WFKmE zpb%A6r9>94eI|8NS{2ur>v3yV=o#NSlH44l05N@WQu#M-QSShd##$fGU5+I$@mdkB}gsi!d=)+NO zI&L|H=kcZ_lvu6X;=pw`RaGC*>2MN-B>OQzw0J)U8I*R|VL|VWM>iL^%ttLi7xMrX% z)AgJZQG(1(e<5oIPR~;Un6M;5#l85N(+^gC%A?F#k0x1J$M5`p)?}bt_&8l<3df8R zCHM8DQa$;E7N>OXF9!ptKB?9X22ji@C5}R72(1~`y1IiGy_W2&dfEcLnK*}K8QmQ6 zYcmd{xbta)9HGZR`}h5`z%*v9?}BH+*3REqr*~HUe=W;}gd+C=Y~CmBs%3?O&uA;C zAy9J8U|rr@+HVVZr07P?S`O@$h-sbd@Tun4M$n}4BA@o=pyoFPQ|+1*)+5~dBcHY- zyXzTX&rKV40h3i>SWnw;)Ipw-9e}4T2La9QMFPAD*OG54eX1ZZXQ0|EV|K$q-qPRZ zwKD$mf6MK%*!>mu0cy;3lO2O!skt$CQ2(by@0qL&Ql^JYE_b2=zGfD|xxz@xTjr24 zNo##UvwF2o<0X3kHHO>{795C{f~{AS-2gIBPea-unw1iqO1%@|hoH=I47)BPa~Sls)hKHn8tSPc zFrS9A=YFO{71-2cPCOy`rusmw*$oABAA+^?j+lqQa%mSl{U7M;n%iKE%WTCuGEjTY z4bK9mpL!ZA`pSs&3WRt|uJQFfKxVmae`84AC3sShT<6@Fd|O)Hh<$+r`*(C%$cPM! zPb{Ep3KD44T+va`lsB!ado-+hP65ihGxv&T4h>$dwYWm#0x%Q;B<1&^Cc5rJy|qRh zx#PzjlNKbb{TG%USbL%9ycYnhuEe0*?W2QmzN!AwiJp;ZyFW5Nw}K2v=G4=ee+{Yy zQ!@JhUq`)I*K$G^pAh@pXJjYxL(Q+rs8Qn5YfnRO( zysD=yqHh@+vzmgzz-65^HtRaTU-`ASaW&>S)o-`Eeyu~2 zo-2vuWu8+K9QL(t`X;f;Qv&&P^wWN6oRnkS0I)z$znX2;xO|>dp2l6@*v$W|n9I9= zy_DV?3q;Le7g(@-AvnNx+Oe7VM8?QUkCRVD@H zM~->J66E__suU7iq+hq%<=pW)5F!4G-+_OCcc~q}4J>MU5+r&tmOj{US&JLi@9^E5 zjRcSx`m4SviNn}W6W0AQ1{-hQ&VSpTX_wfDO)&=I$DFnP0*Q9i1^)KPoGY~h(2=v& z{`8R;GvO++(>imTGXCxsu#L!5?(0#d$AYT&89iW=n*kc?t+8&6!P^Jl)Dln2T{T$U z6W6I<9sG6w4y;z@jM!oF6?Gan491{#IXBm4`ZB7Wh2MJC+kHx#Lia|&+kes&kh*ZM zJ%ewo!<&-)cgB@nOi}`Q7TzPfoM#Rn|C$yGW(MWUxvLaWb_Pl{;3NT4D>~}4GV`sA z0if)aVI(X0R{`8CnST}0p2=;N--oG;7rMUOss6Ngysn@})|YJO?gq+JypsNcCp z4Q}4sXo8hwsmU*8j2Q{m z=faM!)3^)FfxX5IfGS@Cu`NM`QLD4xUiz%|7@&#F^6a;v`G4xJ-&H0pUw-G*3^K>~ z*n47eb}xz!xZZ~?*nLIxw0bOwrQUTC-7;UlV<+!=^j#iBL&%%~{+-NPc@o@U?dx6k zM;otv+66{jXPZ(6jLWAncTl0%(;hpXgqnt?W_ z@Qx{=cQU5B%YXH?pJh*hE?)Vx?MwE>j>7ShGkCo}tnzxAjy>vcQlevNM$C2|3oJ^G zq5U&gp!etIg!}_9lF`&egi1n(%x}?MJIcVy5YVT2GPPJcQ2bpjvJPJf4CrG5up!IyOd`q7{%$Edu|`V#d4h|$g(BVoTJu5(}gN;0wUBjI@DtXH|V z%oOkVua`t2?)v2bAmrRs-X}Z6?mB%ZVgMWoAUD? z@+`o9%^5x38Oxu}{*@ZZbpaGyv*v-l?ti%t@GR_!SkuQxNG9J0&%&NDRRu0` zMyW#v$y-|Z&`@aRa&>m-+Kk8VqsAuvdbN!}GI<(zmQd#FcOIA!cCFh1JlVF`u?=%D z$Dor-)X|`gK-pGf0HUz&rbI82%#Q6mqi5Rwc=lL>M?MWosK4pCb4>Dmv`B0&9VC2$ z9)G#kdW;Gi)(rSRU%obKh$VRmc6A?J^UV>*c2O%jDn*V&Op}0%)tf?SKGuvM>BArsTYBU*-n3m;3FINwF2`Y3}CEj!E|EM3w8Nx`Vr! zPqS=^YQdAt&#L{V?(%`!FrT(EmCux@s((&zS3L7eCLbHuO-Q7krrrD_dGm1AO-dYd zj2f5prsOBlPUgB%E$@u79oi{%A2kvY-`rKm!GR=eZqN6GUMnTjbIEuw5=$Y6x-}0y zb~r%!H2km`OA|%H51VVCG3k+L6WK;YZ~3)H{wM1-oe^bVrCkp6b6w|(o&3qCtAF>= zO@hyzl2NT+_ngYpSU%O=PXJ%GO)K%yAfslD;Tv?YPsK$IB-c;yv)1bhq?90?B(%6yqx#kfq%?R33ts6D}c;dN=}4nJ?6wuUbp7)IkiyEJ<6N< zWNvDJ)0gy5HT6(jm^uVd2}M)QntOW7sNtddMnQOvQLQ+o_D2hF^}UUK;A*`yW0}jS z;XxuVpEKAsFit%>@2@5Ol4AyIN%YJyi;pIQmS!lo=2sTN2e{003es{*AAj&zMnl;= zCGuI1Ubkg>Y2RLJfYz#69}mn3pglQe!9`VGHMT?j8~c4W1jqd}nkO?u$ATH5*MPxy zwB`c}?)=Xok^k;}y-uo{^UMJOF1_P%`gQf1c!Q1!xdyBBSX-Tn_&YCi2)XM3R9|5| zUe}otQ2R64V%)!9a9kV~WPimu>upeY7h$0d)RF%->vvDc=Bf+(e{ zW=C7!XJ!>8R@EToK2RKmOrTarPOp)R$8|!0*BCSyqQtci&YP~2S?TmkrDDeUPINs92y527 z1qEj*(HkgZ>nAt7HS9Ss<7wgJd}Ma!?v+(s)33+E^m^uP27gBUY@YfdaRb%+@X?!T zh=rz#y)@s+x}MTL7?LHk|L1d1N#|Gat*@+WJD(yYsjo3E;>hT^S?zo7c+9Acm_CKE z8u3Y@_CHTBX!x1BSLK@WpFEAQ!d+eXOXN1QNiGcSX>*6z*0QekO|^gM4uv985@)$? zvVbDK`Ls*->wnxk8gO&cYYgCT_uIv1g#S8E7GA?SGt#HnBojY>XMV~Tq{RM6+y9ie zn=^WR!a8orhp(;TV@Z1l3}4_scgQrUo62=lZzjf6vz|We>-^f&@uhPhE99(87_Ps}6Hd)q?pu=iQ=~L=_e@Iwc&5%&c;9 zxWV}q4laLY*iX(gBuM^_nv0A^oF{6NWX8sztbcV!uFkkjGR}8me818=)Cm%BFyBX4 z-KBS;4|F8r^AtQ_N!Oe50mYn4a!HS61n`6seYF-N!A_S?LqL~#CNNb&-CVa(mXpX* zllHXSy(p@>^Vx~|49RBBjZVz$@_Av^$T<0VtzXy&P7L`#?CP+X7WY{*?&d_pL>++tZ{ceO`ooN^6y-h^LW+WI3$fI zbm+B2%hi$BT=Le0f>Cx}T1?vt3DkU=h2DA}(4wd(>rFWenl_{ao;!Wo>&@58N`Px{ zwswoo(Br0TJ?M3gJ!KrkoL>Q>o;tO9+Wh)} z6MT`#*{4LGhpds7UB`i!CzzQCGmuZ?X(smgnq|k*%fWDfz&Fq73^9<={fl4H_6~{0 z%Q$ah3O#Z5C17W>Vhiot)$$oPw-GW4{ zwcc-^?(liRTQ;uqlACI8isX%NJby>gUE40QR&0kHgMl?MfR{F}SLyDgwnG6n=!L{JFEZ_ z?A)dKNK~Dd|09!g#}1J@5d=Ns{>I33^_yZ+lT@p(jU_8%Po4%5TPU3&VJP<8F6AX* zsVYdBU9~xbA*sCC7=MEnC%?ixtF7p#K~wa)X*H3R8lza|A#ho%v$$znS1tDs6E4Sa zv#O5rbwk{AFHdhs;5Xw&Cz&*j*zDSyEbqJ*R3K^8l}}^ZRqp{$+nWoKgn#$mdvtX>S9J1q+n%bl zb8e^y&;!-nbl(voZHYeLd4AApI9@qMXN11dH!S{Z?t@M5fp?xClH`o@rl+t+&W-uV zysf!O{%8r4k_GQdz7LqWC~=Mv?JYFj3pLRrSszJMF}C%jxFYM(UmA1>zvb#2gNY;e zo8Wb##yxFtT7UG@nCq?ML9Y_Q>S=DQiXX7dsVP7VocFs(G9;OvRUXGEpbzaz1l`9@;^{mRQ3 zk^$DOJ*uJY-Zvn33J+_Jk+CVBQ}z}VV&U*f5R4T@lYeA@7HW@zSE$`yDw@ueFoi8dh5%R3LRq^t*bUg|B*%Oah@fYYDBw^Qjg! zyYv@+DStOhZHcx|L3+NaXh<@G`JJUBW+aCXo?q^9sG}?`CL_+_Ej=n{rV~i+_~)zp z@<2Ta?-zE3M1@On%90Gy(%gxIb-yAqV+=}*tG>^`epS567`|q4+{ka}ui0l|B>yYF zZ4BsDF^iC(EUjn+iLlt084S!^*)9NC=;ZRuL4V?8e8=zXwrH*>dlilcN|R zV^0jBL9AO(gZ;vClM?CW>cZrA)T*>?iCQFk+8Q%xHIDinPMdD7UZ<#}mrL9{e=a1!5pRnqT46;h?JI zybpwAF-nje-Y4&$>!$Ne{tl`Mwtqv-dVq_n?nA|_7B?9`xXW~b%I4DsR5$m5y$j8>D*ee2D(VI{Zqo_M@U>_L~699PKnrLep94^Qh(L;O&@p! zlIN7`vB@2lP9%9E^vM~ZTFv;V@_v!+oPnHP*8aa9HoOx1`W^9R%<3t@DPFZaFE{Xe zPap7s@gsX(7=wl)GoB;}Yx4Vy3Z&E_0-c!ZbKTUoBhsw*QBIWz6-3PttW}jcBya5H z^|aC1E2B~mb(~kv`Za&f%zw-1_=r#m@u`bA#NM21|)hXJ$z;$;pr9 zS-=(z@}Eyr!Ixer62J*)p~g%C&KWt?&{hYP+}A3tl>6q>1l`jfMFp%YK&* zDdjW$Mh^OmAzN#WEOT#dIWm!jQ{`Xm%D3~&;iq_}74Xnv`pBr^1Nsd0a?Nd_`7+MO z=2di_Uwc7pl{v7-GD{}q8mOevK{01AFsJ#o7b(xoc&aP^V%Z7U4YWo6&ZVxc;uNDn z)l~d0*qyP(WNh%U4u6j_&$iT|(wv&X$_%NF7JdihvpDnzzqDLVt{ZTO%D?;_ogRwq z+|w{QSKY@i5`;DRwCl}5EQxBO?2e>o?C^Gbj4QD3V8nd_<@r0#Tz^x(=8;i0kbV&T z+*O-O&h*~F;?x`G8tB3VE?jd1!(0<>f>sehM(%@szAfpwK7aP*(>A%x3lLSVC|W^H zSaWU{t0LFnfMLoUiyCD3o!nJ}kgJfTp#D0l_w9^2NesQ_cIed7_5nJDj`KZ^>y5#q zo`!w^Lq$r^G-hmLP~!oaGG=IhQ;N-P;^!puFY>fd&a*R{LEKje%$>x95`{>^#bh_r#V1B9smUrx) zD}H|xRS)U0C_Dj<%Nby1=*$o}AsADgdgK(3XZrO3Kf`IM_tCIN4PQzI?N@#Ur?fLe z!zs`fEuSWol((57F8f>qk|XaQzwg-R-Vx-(<(V_UTYr?69q1WsQGRW0xzDPGkWS;9 zrA?vH5>1{vUdBkSw&wPtmeU?p(dD4zo2r-D`b{yHpLtH7e*Z{&)KWJO#_I`czb9Ud zL}f#1ORnLAQC@E<*6M0V$?;yR-pmXxu!Yi=Btj^4MEf#nQFUM9T{PAKF^KMk)) z;;WwW_9*Hm4_n#7rtOXFX`l@}A>@-sjA4D8^8`l{--fqAL;8gBnj4 z*7|Zd*5=GEKUeHti2`||6zmv2h4ef!XY^D>@_$L|R%<*tqw-Im8#a{U?|nVliBs!d zY}!-R>EWGGyL{$pR8&3p4Y<#eeK|K|@O%220Na{fYF>kX$ zh1iyZU}AE3!OwctFHbvO`zL43=2O~Tdxy=ZR<9(;o3znPi3)*?hAa9|@z!Gi*Q-+f zrGGUnO_BGuNc~(j?8YqbM$>`CDPcHs)(2C$=XNL|FWXYXk+=S0^|Wj1+CGgG7L7or z9J9S|Xq5@(?E^%YpkoPXM!wJn-#fABVg;Ij6c9>LCPof7$D>Nn>m zMm%Mn_7_8>SQ~VPok#eo*4nR3nYp7b?@9}5j1*@ zZVILC!$nh1x=RIZxgy|V7%1WyQ8kiF+29a{Bn!4 zn7L35U~i3aCQ(h3duL^!J3*T&hsb`0PdgM95O-qKnh64=F>fhefZa!csZTx&HPHffI0HLvyc zK_&LhgsA@0?<4$|{0Ae|_nv!)9O6~!A=@60>__QoY>JE{Nn)t>${nJH19H69K>c=d zl8tNorkg^Jk&y0NQ&YIEYJb*#8!9Y!l@|s6s^7VeQL&j4jOLlo5`bi&>^Vk7VrmK$ zA^JC#eK5Fh@C(P&pbz+(wK^os*gA70pvPaHh6k{;80GkH!n}28a_JX~3n`JCukSD6@sudODT2sHh!PVg0a*Vo2kV_aiqNakK0gr!$vBY(tpT*7%T%oZUdny5P- zjoM?~-y7)%OhL!zx~Xo5p3L_--)o!6TKJ7$nk$Y!3F-7J%^?BOzrb52p#WVzXWtUTQ=8jh8 za!9&cv@w_(Gk+pO0=$`DPNe?K9Lw9L+Or;=buZAD>xR{7Y8|gY;LGk6!|zI4R3u`z zdCw`9R1RHVZum_7ru*p2lRJK3Juh`L+ZoC{MYdM4Kn@yp5pnVK2l)qHb4~f1~ z^*hHvGvtnk=)g*rWAwl7dqIy73FaK5$698s-thh?mVaxE_7oWUQUV!}XjJMI@mQWy zJhYFjYkQx%(56?QnUU@TJp-MZGsE!)U%e9P=aTC#7~>q=-x(*D5`nnM8DNh>AzZ7Y zzverm$NEm+*Ub6~xpU{r+8A}vXL^+CPT>7(ZdTg+l;$H5{i>Zf!Ef$qT>A06FTj?9-RAEzyAt@-^2>g50X*?fZ&pzkaJVsOjSNF?uP zRz9k@GrQ7>n$)}Q^UTqej!^9bkiA#p2BCx`O7oNep>(A>l%3C7H->n_TiCE>FmU+2 zd$HOo@2D|?C>nXDWNy|+_#v_NtiF*2q?2;@!o0o{*QtG^Tt?0STtI<)%}wxY&)PnA z%YU$~atypcBJkjgIbf;ZCYhnctxqJ3%lsWUyXp)iZp%umE*L}dS=08{E|h*rU4@GG z${fFD5|~Nz%+YS`i33DQ@#l`8IR$BTDr{gn9D{WJxE zeb=jMzA{6IuHcI&F(lH`^*$@zn^?9%;jcYxjRF4_Olrwn`@)g{&NnI<@K^(g+`T$Y zh*;&*^zCbXun&sdoExt|!G1ms)V#mkXl>uxQn$gSSX0%FNu{TsrK0SKhNxx$^M9k1 z=8L4+B|$2OLZ~q(d`QO0r;}yZ>!yGmePBLKMml5BqkZHv<6;1kQn-0%k?5pZzk?7= zv@<304y{Ka%`w*G7%oy~1AL#3@g;U%p0aJTN)ZfpvMDC+H zO^jBZ7`St8f^X`EYSywM9lOPY=z;Z3Aqj>opQhhn;zv=C4@b1d3_Q|aC-@`B(zs}e zHWalv1AmMIE`LYeW8(SHblm|rat!UCRhgg1`K9)sTM|qY%aNK3jU?E>n%i^31WsIwtga zZDMI<1&rc)NVi%Y$g8&fHI5Sase4W_?HBw3iOgM(VfFUjk;uRvSaW;N>cDcpaWuEg z&k3Nskg?~}@Yy9g{WJW9tbbo{Wr~&L+*F@t*N9;xilOAJCnA;N$5kHPvc``_Qjad zCM(BW@XGnLK_HxnPn0L0?6$5C7Ewk)KYWblulneX*L;v4?dIvrnt%0tL2ss}P-r`4 zE$N3}BHLC^sezw3`Q{}>cBEH^nckg;3XeE312h6j|@lK*Ki(^clkaCXlqtav+mV_<=z<{OL_&P z^nYm^78JBI#iNO)CLy&tBw{Zu5#7iYl@O=oa}2WAd;ZR7z@0G^2}fcl;7lIQ0- zTpD>AFSc@8Pe2BGE!7^Km4jp-8=8`O$$SZk1YzBpGXnji`e%6>oLySC^IgGn`r9OK z^g0V@8qosO8h@Z^1PrKsF#B$LjmMXpRfK#p$FIf}2BW?L9~7d!&cY0sr>8{z4qn}i zdKg1lm4%{;l9y9w!95~^-4elwjP47Z4#-W-4Ka5|oK=bdf#e!IWD(N7o>kXxdA0>; zC86?7*#ON~gQ|srl3!allx9GkRk)n}6`uMor&TlaTYoz<ejhN9_F}ZRK z07TxWN-L)3B%Ae1z>Jnp)7>ml$!be(Xkl{90B-c$zC{TzbH8K)>uIXq+uoV=2W*bq zS*Y=oo__?%iMIeUPh%LbQoMmz0a(|OCyCVLm6fW0o-k|z(-LNew{m2>6{r#q} zY}~UNqp5G_G3Mnqo$1%li=OTonH!QleI}BROMf+IussEMQi2OUqtx>vYM3~oS%H9J z`Fh%li!gBkpoZ@=^JcOeuQOR~XI1BoGMHEHcE68O#W~|H`nC_qa?VuBw44ppLc-$u>av0-Bs5InW%4o}mWv)%(dmIT`_c zH-AYG-M{Fp%AJ*`h*)cdA;?v-4o9osgXxrUKAz#HF|?-Wr@1`%LJxSU`aR$Rt%fyk z3Qc6LdfsrodPKMNzGn_u8@^`VYBp7IGJ831yXru>D@&fXCo%8D=u^)QU)9{nFDGC} z=AcFg0||^bE!34$C2`&_;;gxTR8M>)YJYEr&HM7TA@G`YK13;I zKvLr<0?&NfxO?Y(vmMPD7n@a(yb^;!&*Du?C*Ol~*Q;LYMaiCOLkO|81L*=ePk*}& znnItaByG3M`tp|m*6L}P%P9V}ldBJPR|-CQ&4T1pE6ZU9IZ}5D`X$7p>ZD!7GqLXS zJ)*stmsxHC6{%JxHwM6&zZCQgIK18ic=gDf_`;h5yv;Vkpvl5o#(Yo3!$m5o<1W;= z-pzPpA=_Q^S}mh5DpiZ@Dao4ZHGeg4{e-T~ zT=fF_{K`Crs$;JuZzv1A8YQOe0Y7iMmxWR#&~{qx*q`|{fyOoQqe>6JiT2YVNK+Ac zQNIMlD|;Y*kZ15BAcQ!TZS2Z>olLHY>c{7oL!3H#rx+>+c~_?OqzBn+hJRbnH^c&Z zI@Rm93}Iq*l_8|-lwX0u4H5l%nkpr&kfFs}N%3j}1G439osQ0Z&oh_?xfopbZRl4e zx^{sHBQRM#5Pa&)H-MMpEcZm$!K^_}@q}7);u9B#$&nrX(gdYL9`Nw{5w8=|(y!eKWZd+gR>mD8P-l zQQ4CBkzd=Ld`pzhveWKJCK`)eTlZiEaLPSIa(nNc0`WvJxW?chEq~nSwo6*0&rrH} zl(~lpdURccMV<-vDtmy6o%!vBHYx?hY_s6G_U{=wG8K1OFlpR3>S+jkugr8UN+7A7 zo^5!I$udP=BR#oh8|bgTC#sLJC8mBkCCd|8x~SjCqs#YTK=rA432bMqW^twAir3Rv z&W!3RPm7G5^WcJ=?|*TV?ECUdNiNdU$sWKaB<^;(a1}FG0C$C1UH7-uJzk00c+V