Пример #1
0
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;
}
Пример #2
0
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;
	}
}
Пример #3
0
//
// 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;
}
Пример #4
0
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;
	}
}
Пример #5
0
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
};
Пример #6
0
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
};
Пример #7
0
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
};
Пример #8
0
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);
	}
}