diff --git a/Classes/Games/DDZ/DDZ_Player.cpp b/Classes/Games/DDZ/DDZ_Player.cpp index 7531b967..9a92df06 100644 --- a/Classes/Games/DDZ/DDZ_Player.cpp +++ b/Classes/Games/DDZ/DDZ_Player.cpp @@ -20,6 +20,7 @@ bool DDZPlayer::init() //玩家昵称; m_pTxtNickName = static_cast(m_pRootLayout->getChildByName("nickname")); CC_ASSERT(m_pTxtNickName!=nullptr); + m_pTxtNickName->setFontName(""); m_pTxtNickName->setString(""); //工会名称; diff --git a/Classes/Games/PDK/PDK_Player.cpp b/Classes/Games/PDK/PDK_Player.cpp index 501f1109..ed5c65c9 100644 --- a/Classes/Games/PDK/PDK_Player.cpp +++ b/Classes/Games/PDK/PDK_Player.cpp @@ -20,6 +20,7 @@ bool PDKPlayer::init() //玩家昵称; m_pTxtNickName = static_cast(m_pRootLayout->getChildByName("nickname")); CC_ASSERT(m_pTxtNickName!=nullptr); + m_pTxtNickName->setFontName(""); m_pTxtNickName->setString(""); //工会名称; diff --git a/Classes/Scenes/GameUnionScene.cpp b/Classes/Scenes/GameUnionScene.cpp index d1517458..2276a57a 100644 --- a/Classes/Scenes/GameUnionScene.cpp +++ b/Classes/Scenes/GameUnionScene.cpp @@ -602,7 +602,7 @@ void GameUnionScene::ShowRoomList(tagRoomItemList* pRoomItemList) } else if (NN_KIND_ID == pUnionRoomItem->wKindID) { - strGameName = NN_GAME_NAME; + strGameName = "\xe7\x89\x9b\xe7\x89\x9b"; cbChairCount = NN_GAME_PLAYER; } else if (SSS_KIND_ID == pUnionRoomItem->wKindID) @@ -868,7 +868,7 @@ void GameUnionScene::ShowAutoRoomList(tagAutoRoomItemList* pRoomItemList) } else if (NN_KIND_ID == pUnionRoomItem->wKindID) { - strGameName = NN_GAME_NAME; + strGameName = "\xe7\x89\x9b\xe7\x89\x9b"; } else if (SSS_KIND_ID == pUnionRoomItem->wKindID) { diff --git a/Classes/Scenes/MainScene.cpp b/Classes/Scenes/MainScene.cpp index d7d136b7..170820fe 100644 --- a/Classes/Scenes/MainScene.cpp +++ b/Classes/Scenes/MainScene.cpp @@ -619,7 +619,7 @@ void MainScene::showUnionRoomList(tagRoomItemList *pRoomItemList) } else if (NN_KIND_ID == pUnionRoomItem->wKindID) { - strGameName = NN_GAME_NAME; + strGameName = "\xe7\x89\x9b\xe7\x89\x9b"; cbChairCount = NN_GAME_PLAYER; } else if (SSS_KIND_ID == pUnionRoomItem->wKindID) diff --git a/Servers/鏈嶅姟鍣ㄧ粍浠/娓告垙鏈嶅姟鍣/DataBaseEngineSink.cpp b/Servers/鏈嶅姟鍣ㄧ粍浠/娓告垙鏈嶅姟鍣/DataBaseEngineSink.cpp index 98a4411a..8e25e3cc 100644 --- a/Servers/鏈嶅姟鍣ㄧ粍浠/娓告垙鏈嶅姟鍣/DataBaseEngineSink.cpp +++ b/Servers/鏈嶅姟鍣ㄧ粍浠/娓告垙鏈嶅姟鍣/DataBaseEngineSink.cpp @@ -2,6 +2,8 @@ #include "ServiceUnits.h" #include "DataBaseEngineSink.h" +////////////////////////////////////////////////////////////////////////////////// + //鏋勯犲嚱鏁 CDataBaseEngineSink::CDataBaseEngineSink() { @@ -1604,7 +1606,7 @@ bool CDataBaseEngineSink::OnRequestQueryTransferUserInfo(DWORD dwContextID, VOID //閾惰淇℃伅 TransferUserInfo.cbActivityGame=pQueryTransferUserInfo->cbActivityGame; TransferUserInfo.dwGameID=m_TreasureDBAide.GetValue_DWORD(TEXT("GameID")); - m_TreasureDBAide.GetValue_String(TEXT("NickName"), TransferUserInfo.szNickName, CountArray(TransferUserInfo.szNickName)); + m_TreasureDBAide.GetValue_String(TEXT("NickName"),TransferUserInfo.szNickName,CountArray(TransferUserInfo.szNickName)); //鍙戦佺粨鏋 m_pIDataBaseEngineEvent->OnEventDataBaseResult(DBO_GR_USER_INSURE_USER_INFO,dwContextID,&TransferUserInfo,sizeof(TransferUserInfo)); diff --git a/Servers/鏈嶅姟鍣ㄧ粍浠/鐧诲綍鏈嶅姟鍣/AttemperEngineSink.cpp b/Servers/鏈嶅姟鍣ㄧ粍浠/鐧诲綍鏈嶅姟鍣/AttemperEngineSink.cpp index 32a81cd6..d9f7d9f7 100644 --- a/Servers/鏈嶅姟鍣ㄧ粍浠/鐧诲綍鏈嶅姟鍣/AttemperEngineSink.cpp +++ b/Servers/鏈嶅姟鍣ㄧ粍浠/鐧诲綍鏈嶅姟鍣/AttemperEngineSink.cpp @@ -1177,7 +1177,7 @@ bool CAttemperEngineSink::OnTCPNetworkMainPCUserService(WORD wSubCmdID, VOID * p { CopyMemory(&ModifyIndividual.szNickName,pDataBuffer,DataDescribe.wDataSize); ModifyIndividual.szNickName[CountArray(ModifyIndividual.szNickName)-1]=0; - //ConvertUtf8ToGBK(ModifyIndividual.szNickName, LEN_NICKNAME); + ConvertUtf8ToGBK(ModifyIndividual.szNickName, LEN_NICKNAME); } break; } @@ -1534,7 +1534,7 @@ bool CAttemperEngineSink::OnTCPNetworkSubPCRegisterAccounts(VOID * pData, WORD w //处理消息 CMD_GP_RegisterAccounts * pRegisterAccounts=(CMD_GP_RegisterAccounts *)pData; - //ConvertUtf8ToGBK(pRegisterAccounts->szNickName,LEN_NICKNAME); + ConvertUtf8ToGBK(pRegisterAccounts->szNickName,LEN_NICKNAME); pRegisterAccounts->szOpenId[CountArray(pRegisterAccounts->szOpenId) - 1] = 0; pRegisterAccounts->szUnionid[CountArray(pRegisterAccounts->szUnionid) - 1] = 0; pRegisterAccounts->szAccounts[CountArray(pRegisterAccounts->szAccounts)-1]=0; diff --git a/Servers/鏈嶅姟鍣ㄧ粍浠/缃戠珯缃戝叧鏈嶅姟鍣/ParseData.cpp b/Servers/鏈嶅姟鍣ㄧ粍浠/缃戠珯缃戝叧鏈嶅姟鍣/ParseData.cpp index 00ec4fae..45cf4521 100644 --- a/Servers/鏈嶅姟鍣ㄧ粍浠/缃戠珯缃戝叧鏈嶅姟鍣/ParseData.cpp +++ b/Servers/鏈嶅姟鍣ㄧ粍浠/缃戠珯缃戝叧鏈嶅姟鍣/ParseData.cpp @@ -37,7 +37,7 @@ CParseData::~CParseData(void) bool CParseData::ParseRequests(LPBYTE pData, int nLen) { //m_strBuffer = DecodeData(pData, nLen); - m_strBuffer = pData; + m_strBuffer = CString((LPCSTR)pData, nLen); CString strTemp; int nIndex; @@ -122,6 +122,14 @@ void CParseData::ProcessRequests() // add url to header collection m_Headers.Add("url", strURL); + // [Trace] log parsed request line + { + CString strLog; + strLog.Format(_T("[WebGate][Parse] method=[%s], url=[%s], version=[%s]"), + strMethod, strURL, strVersion); + CTraceService::TraceString(strLog, TraceLevel_Normal); + } + // check for arguments nIndex = strURL.Find('?'); if (nIndex != -1) diff --git a/Servers/鏈嶅姟鍣ㄧ粍浠/缃戠珯缃戝叧鏈嶅姟鍣/ServerSocketItem.cpp b/Servers/鏈嶅姟鍣ㄧ粍浠/缃戠珯缃戝叧鏈嶅姟鍣/ServerSocketItem.cpp index 1654a738..9adc9d40 100644 --- a/Servers/鏈嶅姟鍣ㄧ粍浠/缃戠珯缃戝叧鏈嶅姟鍣/ServerSocketItem.cpp +++ b/Servers/鏈嶅姟鍣ㄧ粍浠/缃戠珯缃戝叧鏈嶅姟鍣/ServerSocketItem.cpp @@ -32,6 +32,18 @@ bool CServerSocketItem::Close() bool CServerSocketItem::processRecvData(void* data, DWORD len) { + // [Trace] log raw incoming data + if (data != NULL && len > 0 && len != (DWORD)SOCKET_ERROR) + { + int nTraceLen = (len > 200) ? 200 : (int)len; + CString strRaw((LPCSTR)data, nTraceLen); + strRaw.Replace(_T("\r"), _T("")); + strRaw.Replace(_T("\n"), _T(" | ")); + CString strLog; + strLog.Format(_T("[WebGate] Recv len=%d, head=[%s]"), len, strRaw); + CTraceService::TraceString(strLog, TraceLevel_Normal); + } + switch (len) { case 0: @@ -52,8 +64,22 @@ bool CServerSocketItem::processRecvData(void* data, DWORD len) { try { + // Filter non-HTTP data (TLS handshake / binary protocol) + BYTE cbFirstByte = ((LPBYTE)data)[0]; + if (cbFirstByte == 0x16 || cbFirstByte == 0x15 || cbFirstByte == 0x00) + { + CString strLog; + strLog.Format(_T("[WebGate] Non-HTTP data (first=0x%02X, len=%d), rejected"), cbFirstByte, len); + CTraceService::TraceString(strLog, TraceLevel_Warning); + SendResult(_T("{\"result\":%d}"), 1); + break; + } + if ( false==m_ParseData.ParseRequests((LPBYTE)data, len) ) { + CString strLog; + strLog.Format(_T("[WebGate] ParseRequests failed, len=%d"), len); + CTraceService::TraceString(strLog, TraceLevel_Exception); SendResult(_T("{\"result\":%d}"), 1); break; } @@ -63,18 +89,42 @@ bool CServerSocketItem::processRecvData(void* data, DWORD len) CString strUrl; m_ParseData.GetServerVariable(_T("script_name"), strUrl); + // [Trace] log parsed request info + { + CString strLog; + strLog.Format(_T("[WebGate] Parsed: method=%d, url=[%s], query=[%s], form=[%s]"), + m_ParseData.GetRequestMethod(), strUrl, + m_ParseData.m_QueryParams, m_ParseData.m_FormVars); + CTraceService::TraceString(strLog, TraceLevel_Normal); + } + if ( strUrl.Compare(_T("/active.do"))==0 ) { bool bRet = ExecuteRequest(); if ( bRet ) break; + + // [Trace] ExecuteRequest returned false + { + CString strLog; + strLog.Format(_T("[WebGate] ExecuteRequest failed, url=[%s], query=[%s], form=[%s]"), + strUrl, m_ParseData.m_QueryParams, m_ParseData.m_FormVars); + CTraceService::TraceString(strLog, TraceLevel_Exception); + } } else { + // [Trace] URL does not match /active.do + { + CString strLog; + strLog.Format(_T("[WebGate] URL mismatch: got=[%s] (len=%d), expected=[/active.do]"), + strUrl, strUrl.GetLength()); + CTraceService::TraceString(strLog, TraceLevel_Exception); + } SendResult(_T("{\"result\":%d}"), 1); if ( strUrl == _T("/favicon.ico") ) break; } - CTraceService::TraceString(_T("请求地址错误: ") + strUrl, TraceLevel_Exception); + CTraceService::TraceString(_T("Request URL error: ") + strUrl, TraceLevel_Exception); } catch(...) { @@ -106,26 +156,40 @@ bool CServerSocketItem::ExecuteRequest() m_ParseData.GetQueryString(_T("way"), strWay); int nWay = _ttoi(strWay.GetBuffer()); + // [Trace] log way parameter + { + CString strLog; + strLog.Format(_T("[WebGate] ExecuteRequest: way=%d (raw=[%s]), method=%d"), + nWay, strWay, nRequestMethod); + CTraceService::TraceString(strLog, TraceLevel_Normal); + } + switch(nWay) { case eWebNull: case eWebCardLib: { + CTraceService::TraceString(_T("[WebGate] -> WebSetCardLibRequest"), TraceLevel_Normal); WebSetCardLibRequest(); break; } case eWebCheatUser: { + CTraceService::TraceString(_T("[WebGate] -> WebSetCheatUserRequest"), TraceLevel_Normal); WebSetCheatUserRequest(); break; } case eWebCardLibGlobalCfg: { + CTraceService::TraceString(_T("[WebGate] -> WebCardLibGlobalCfgRequest"), TraceLevel_Normal); WebCardLibGlobalCfgRequest(); break; } default: { + CString strLog; + strLog.Format(_T("[WebGate] Unknown way=%d, returning false"), nWay); + CTraceService::TraceString(strLog, TraceLevel_Exception); return false; } } @@ -133,7 +197,7 @@ bool CServerSocketItem::ExecuteRequest() return true; } -//设置牌库 +// Set card library bool CServerSocketItem::WebSetCardLibRequest() { CString strLibID, strSet, strLibKindID, strLibCustomID, strLibCardData, strSign; @@ -150,6 +214,14 @@ bool CServerSocketItem::WebSetCardLibRequest() TCHAR szMD5Result[33]; CWHEncrypt::MD5Encrypt(strData, szMD5Result); + // [Trace] log sign verification for CardLib + { + CString strLog; + strLog.Format(_T("[WebGate] CardLib sign check: recv=[%s], calc=[%s], id=[%s], set=[%s], kid=[%s], cid=[%s]"), + strSign, szMD5Result, strLibID, strSet, strLibKindID, strLibCustomID); + CTraceService::TraceString(strLog, TraceLevel_Normal); + } + if (strSign.CompareNoCase(szMD5Result) == 0) { CMD_CS_SetCardLib mCardLib; @@ -181,13 +253,13 @@ bool CServerSocketItem::WebSetCardLibRequest() else { SendResult(_T("{\"result\":%d}"), OPER_VERIFY_ERROR); - SaveLog(_T("%s"), "请求验证错误!"); + SaveLog(_T("%s"), "Sign verify failed!"); } return true; } -//设置作弊玩家 +// Set cheat user bool CServerSocketItem::WebSetCheatUserRequest() { CString strUserID, strSet, strLibIndex, strLibStartTime, strLibStopTime, strSign; @@ -204,6 +276,14 @@ bool CServerSocketItem::WebSetCheatUserRequest() TCHAR szMD5Result[33]; CWHEncrypt::MD5Encrypt(strData, szMD5Result); + // [Trace] log sign verification for CheatUser + { + CString strLog; + strLog.Format(_T("[WebGate] CheatUser sign check: recv=[%s], calc=[%s], uid=[%s], set=[%s]"), + strSign, szMD5Result, strUserID, strSet); + CTraceService::TraceString(strLog, TraceLevel_Normal); + } + if ( strSign.CompareNoCase(szMD5Result) == 0 ) { CMD_CS_SetCheatUser mCheatUser; @@ -243,13 +323,13 @@ bool CServerSocketItem::WebSetCheatUserRequest() else { SendResult(_T("{\"result\":%d}"), OPER_VERIFY_ERROR); - SaveLog(_T("%s"), "请求验证错误!"); + SaveLog(_T("%s"), "Sign verify failed!"); } return true; } -//牌库全局配置; +// Card library global config bool CServerSocketItem::WebCardLibGlobalCfgRequest() { CString strSet, strLibKindID, strCardLibCount, strLibStartTime, strLibStopTime, strSign; @@ -266,6 +346,14 @@ bool CServerSocketItem::WebCardLibGlobalCfgRequest() TCHAR szMD5Result[33]; CWHEncrypt::MD5Encrypt(strData, szMD5Result); + // [Trace] log sign verification for GlobalCfg + { + CString strLog; + strLog.Format(_T("[WebGate] GlobalCfg sign check: recv=[%s], calc=[%s], set=[%s], kid=[%s], libcount=[%s]"), + strSign, szMD5Result, strSet, strLibKindID, strCardLibCount); + CTraceService::TraceString(strLog, TraceLevel_Normal); + } + if (strSign.CompareNoCase(szMD5Result) == 0) { CMD_CS_CardLibGlobalCfg mGlobalCfg; @@ -300,7 +388,7 @@ bool CServerSocketItem::WebCardLibGlobalCfgRequest() else { SendResult(_T("{\"result\":%d}"), OPER_VERIFY_ERROR); - SaveLog(_T("%s"), "请求验证错误!"); + SaveLog(_T("%s"), "Sign verify failed!"); } return true; @@ -336,9 +424,9 @@ bool CServerSocketItem::HttpResponse(LPCTSTR lpszMessage) strHeader += _T("Last-Modified: "); strHeader += CString(buff); - //在http1.1中,client和server都是默认对方支持长链接的, - //如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close; - //如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close. + // In HTTP1.1, client and server support keep-alive by default. + // If client does not want keep-alive, set Connection: close in header. + // If server does not support keep-alive, response should also say Connection: close. // connection strHeader += _T("Connection: close"); @@ -352,7 +440,7 @@ bool CServerSocketItem::HttpResponse(LPCTSTR lpszMessage) return true; } -//发送结果 +// Send result bool CServerSocketItem::SendResult(LPCTSTR pstrFormat, ...) { try