void String::ConvertToAscii() { if ( !unicode ) return; unicode = false; Buffer new_buffer( GetTotalLengthInBytes() ); WCharToChar( buffer.ptr.As< wchar_t >(), new_buffer.ptr.As< char >(), GetTotalLength() ); buffer = new_buffer; }
void CLocalHtmlFile::RewriteAttr(DOM_NODE *node, char *attr) { const char *attrVal = domElementGetAttribute(node, attr); if (attrVal != NULL) { CString value = CharToWChar(attrVal); CString url = MakeAbsoluteUrl(value, Server, ActivePath); char *s = WCharToChar(url); domElementSetAttribute(node, attr, s); delete [] s; } }
// // Rewrite URL // CString RewriteUrl(const CString &sUrl, CArray<CRewriteRule *, CRewriteRule *> &rules) { LOG1(5, "RewriteUrl('%S', )", sUrl); CString newUrl = sUrl; char *url = WCharToChar(sUrl, CP_ACP); BOOL found = FALSE; for (int i = 0; i < rules.GetSize() && !found; i++) { // prepare regexp char *matchPattern = WCharToChar(rules[i]->Match, CP_ACP); regex_t re; if (regcomp(&re, matchPattern, REG_EXTENDED) == 0) { #define NSUBS 10 regmatch_t subs[NSUBS]; if (regexec(&re, url, NSUBS, subs, 0) == 0) { // match(!) -> rewrite newUrl = rules[i]->Replace; for (int k = 1; k < NSUBS; k++) { if (subs[k].rm_so != -1) { CString sNum; sNum.Format(_T("\\%d"), k); CString sSub = sUrl.Mid(subs[k].rm_so, subs[k].rm_eo - subs[k].rm_so); newUrl.Replace(sNum, sSub); } } found = TRUE; } } regfree(&re); delete [] matchPattern; } delete [] url; LOG1(5, "- rewritten to: %S", newUrl); return newUrl; }
void CHttpRequest::Send(CHttpSocket *socket, CStringArray *addHttpHeaders/* = NULL*/) { char *buffer; // start line buffer = WCharToChar(StartLine); socket->Send(buffer, strlen(buffer)); delete [] buffer; // headers POSITION pos = Headers.GetHeadPosition(); while (pos != NULL) { CHttpHeader *header = Headers.GetNext(pos); CString sLine; sLine.Format(_T("%s: %s\r\n"), header->Name, header->Value); buffer = WCharToChar(sLine); socket->Send(buffer, strlen(buffer)); delete [] buffer; } // additional HTTP headers if (addHttpHeaders != NULL) { for (int i = 0; i < addHttpHeaders->GetSize(); i++) { CString sLine; sLine.Format(_T("%s\r\n"), addHttpHeaders->GetAt(i)); buffer = WCharToChar(sLine); socket->Send(buffer, strlen(buffer)); delete [] buffer; } } // and CRLF socket->Send("\r\n", 2); // send POST body if (Method == HTTP_METHOD_POST) { // send the body buffer = WCharToChar(Body); socket->Send(buffer, strlen(buffer)); delete [] buffer; } }
char* TCharToChar(TCHAR* tszInput,bool bUTF_8){ //caller release the resource assert(tszInput); #ifdef _UNICODE return WCharToChar(tszInput,bUTF_8); #else char* szTmp=new char[strlen(tszInput)+1]; if(!szTmp) return 0; ::strcpy(szTmp,tszInput); return szTmp; #endif };
TCHAR* WCharToTChar(wchar_t* wszInput){ //caller release the resource assert(wszInput); #ifdef _UNICODE wchar_t* wszTmp=new wchar_t[wcslen(wszInput)+1]; if(!wszTmp) return 0; ::wcscpy(wszTmp,wszInput); return wszTmp; #else return WCharToChar(wszInput); #endif };
TCHAR* CharToTChar(const char* szInput,bool bUTF_8){ //caller release the resource assert(szInput); #ifdef _UNICODE return CharToWChar(szInput,bUTF_8); #else char* szTmp=0; if(bUTF_8){ wchar_t* tszTmp=CharToWChar(szInput,true); szTmp=WCharToChar(tszTmp,false); delete tszTmp; }else{ szTmp=new char[strlen(szInput)+1]; if(!szTmp) return 0; ::strcpy(szTmp,szInput); } return szTmp; #endif };
void CLocalHtmlFile::TranslateForOffline(DOM_NODE *node) { LOG1(5, "CLocalHtmlFile::TranslateForOffline(%p)", node); // const char *tag = domNodeGetName(node); if (tag != NULL && node != NULL) { if (_stricmp(tag, "img") == 0) { // LOG1(1, "img: %s", domElementGetAttribute(node, "src")); const char *src = domElementGetAttribute(node, "src"); if (src != NULL) { CString value = CharToWChar(src); // CString url = MakeAbsoluteUrl(value, Server, ActivePath); CString url; url.Format(_T("%S"),MakeAbsoluteUrl(value, Server, ActivePath)); if (IsHTMLCached(url, FALSE)) { CString fileName = UrlToFileName(url, FALSE); CString path = GetCachePath(FILE_TYPE_HTML, Config.CacheLocation); CString strFileName = MakeOfflineUrl(path, fileName); char *s = WCharToChar(strFileName); domElementSetAttribute(node, "src", s); delete [] s; } else domElementSetAttribute(node, "src", ""); } } } DOM_NODE *child = domNodeGetFirstChild(node); while (child != NULL) { TranslateForOffline(child); child = domNodeGetNextSibling(child); } }
void ChannelLogonManager::OnHandleLogonInfo(ServerClientData* pClient, LO_Cmd_ChannelLogon* pMsg) { if (!pMsg || !pClient) { ASSERT(false); return; } //处理客户端发送来的变长命令 LO_Cmd_ChannelLogon* pNewChannelInfo = (LO_Cmd_ChannelLogon*)malloc(pMsg->CmdSize); memcpy_s(pNewChannelInfo, pMsg->CmdSize, pMsg, pMsg->CmdSize); std::vector<TCHAR*> pVec; GetStringArrayVecByData(pVec, &pMsg->channelInfo); if (pVec.size() != pMsg->channelInfo.HandleSum) { free(pNewChannelInfo); ASSERT(false); return; } TCHAR PostUrl[1024]; swprintf_s(PostUrl, CountArray(PostUrl), TEXT("game_agent/checkLogin?userId=%s&channel=%s&token=%s&productCode=%s"), pVec[0], pVec[4], pVec[6], pVec[3]); UINT Count = 0; char* pPostUrl = WCharToChar(PostUrl, Count); //URL 产生后 我们异步 处理 AE_CRC_PAIRS pThree; AECrc32(pThree, pVec[0], CountArray(pVec[0])*sizeof(TCHAR), 0, 0x73573); //订单转化的CRC 数据 DWORD Crc1 = pThree.Crc1; DWORD Crc2 = pThree.Crc2; unsigned __int64 i64Value = Crc1; i64Value = (i64Value << 32); i64Value += Crc2;//唯一的订单号 WORD RequestID = g_FishServer.GetChannelLogonID(); UINT64* pID = new UINT64(i64Value); HashMap < unsigned __int64, LogonTempInfo>::iterator Iter = m_RoleLogonMap.find(i64Value); if (Iter != m_RoleLogonMap.end()) { free(Iter->second.pMsg); m_RoleLogonMap.erase(Iter); LogInfoToFile("LogonError.txt", TEXT("客户端渠道登陆 顶掉以前的渠道数据")); } LogonTempInfo pInfo; pInfo.pMsg = pNewChannelInfo; pInfo.ClientID = static_cast<BYTE>(pClient->OutsideExtraData); pInfo.ChannelID = GetCrc32(pVec[0]); TCHARCopy(pInfo.MacAddress, CountArray(pInfo.MacAddress), pMsg->MacAddress, _tcslen(pMsg->MacAddress)); m_RoleLogonMap.insert(HashMap<unsigned __int64, LogonTempInfo>::value_type(i64Value, pInfo)); vector<TCHAR*>::iterator IterVec = pVec.begin(); for (; IterVec != pVec.end(); ++IterVec) { free(*IterVec); } if (g_FishServerConfig.GetIsOperateTest()) { OnHandleLogonResult(i64Value, "true", strlen("true")); delete pID; } else { if (!g_FishServer.GetHttpClient().AddRequest((UINT_PTR)pID, RequestID, pPostUrl)) { delete(pID); free(pNewChannelInfo); free(pPostUrl); return; } free(pPostUrl); } }