亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? functions.cpp

?? Pipe類 Pipe類 Pipe類 Pipe類 Pipe類
?? CPP
字號:
//this file is part of eMule
//Copyright (C)2004 Merkur ( merkur-@users.sourceforge.net / http://www.emule-project.net )
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either
//version 2 of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

#include "stdafx.h"
#include <Wininet.h>

#include "functions.h"
#include "FileHasher.h"
#include "SHAHashSet.h"

CString CreateED2kLink(const CKnownFile* f, const CString strAdditionalParameter, bool bAICH, bool bHashset)
{
	const CKnownFile* pFile = f;
	CString strLink;
	CString strAICH;
	CString strHS;

	if (bAICH && f->m_pAICHHashSet->GetStatus() == AICH_HASHSETCOMPLETE)
		strAICH = _T("h=")+f->m_pAICHHashSet->GetMasterHash().GetString()+_T("|");

	if (bHashset)
	{
		if (pFile->GetHashCount() > 0 && pFile->GetHashCount() == pFile->GetED2KPartHashCount())
		{
			strHS= _T("p=");
			for (int i = 0; i < pFile->GetHashCount(); i++)
			{
				if (i > 0)
					strHS += _T(':');
				strHS += EncodeBase16(pFile->GetPartHash(i), 16);
			}
			strHS += _T('|');
		}
	} else
		strHS=_T("");


	strLink.Format(_T("ed2k://|file|%s|%I64u|%s|%s%s%s/"),
		StripInvalidFilenameChars(f->GetFileName(), false),	// spaces to dots
		f->GetFileSize(),
		EncodeBase16(f->GetFileHash(),16),
		strHS,
		strAICH,
		strAdditionalParameter
		);

	return strLink;
}

CString EncodeBase16(const unsigned char* buffer, unsigned int bufLen)
{
	CString Base16Buff;

	for(unsigned int i = 0; i < bufLen; i++) {
		Base16Buff += base16Chars[buffer[i] >> 4];
		Base16Buff += base16Chars[buffer[i] & 0xf];
	}

    return Base16Buff;
}

CString CreateED2kHashsetLink(const CKnownFile* pFile, const CString strAdditionalParameter, bool bAICH)
{
	return CreateED2kLink(pFile,strAdditionalParameter,bAICH,true);
}

CString StripInvalidFilenameChars(CString strText, bool bKeepSpaces)
{
	LPTSTR pszBuffer = strText.GetBuffer();
	LPTSTR pszSource = pszBuffer;
	LPTSTR pszDest = pszBuffer;

	while (*pszSource != '\0')
	{
		if (!((*pszSource <= 31 && *pszSource >= 0)	|| // lots of invalid chars for filenames in windows :=)
			*pszSource == '\"' || *pszSource == '*' || *pszSource == '<'  || *pszSource == '>' ||
			*pszSource == '?'  || *pszSource == '|' || *pszSource == '\\' || *pszSource == '/' || 
			*pszSource == ':') )
		{
			if (!bKeepSpaces && *pszSource == ' ')
				*pszDest = '.';
			*pszDest = *pszSource;
			pszDest++;
		}
		pszSource++;
	}
	*pszDest = '\0';
	strText.ReleaseBuffer();
	return strText;
}

bool CopyTextToClipboard( CString strText )
{
	if (strText.IsEmpty())
		return false;

	//allocate global memory & lock it
	HGLOBAL hGlobal = GlobalAlloc(GHND | GMEM_SHARE, (strText.GetLength() + 1)*sizeof(TCHAR));
	if(hGlobal == NULL)
		return false;

	PTSTR pGlobal = static_cast<PTSTR>(GlobalLock(hGlobal));
	if( pGlobal == NULL ){
		GlobalFree(hGlobal);
		return false;
	}

	//copy the text
	_tcscpy(pGlobal, (LPCTSTR)strText);
	GlobalUnlock(hGlobal);

	//Open the Clipboard and insert the handle into the global memory
	bool bResult = false;
	if( OpenClipboard(NULL) )
	{
		if( EmptyClipboard() )
#ifdef _UNICODE
			bResult = (SetClipboardData(CF_UNICODETEXT,hGlobal) != NULL);
#else
			bResult = (SetClipboardData(CF_TEXT,hGlobal) != NULL);
#endif
		CloseClipboard();
	}
	GlobalFree(hGlobal);
	return bResult;
}
static byte base32Chars [33] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
CString EncodeBase32(const unsigned char* buffer, unsigned int bufLen)
{
	CString Base32Buff;

	unsigned int i, index;
	unsigned char word;

	for(i = 0, index = 0; i < bufLen;) {

		// Is the current word going to span a byte boundary?
		if (index > 3) {
			word = (buffer[i] & (0xFF >> index));
			index = (index + 5) % 8;
			word <<= index;
			if (i < bufLen - 1)
				word |= buffer[i + 1] >> (8 - index);

			i++;
		} else {
			word = (buffer[i] >> (8 - (index + 5))) & 0x1F;
			index = (index + 5) % 8;
			if (index == 0)
				i++;
		}

		Base32Buff += (char) base32Chars[word];
	}

	return Base32Buff;
}

uint32 DecodeBase32(LPCTSTR pszInput, uchar* paucOutput, uint32 nBufferLen)
{
	if (pszInput == NULL)
		return false;
	uint32 nDecodeLen = (_tcslen(pszInput)*5)/8;
	if ((_tcslen(pszInput)*5) % 8 > 0)
		nDecodeLen++;
	uint32 nInputLen = _tcslen( pszInput );
	if (paucOutput == NULL || nBufferLen == 0)
		return nDecodeLen;
	if (nDecodeLen > nBufferLen || paucOutput == NULL) 
		return 0;

	DWORD nBits	= 0;
	int nCount	= 0;

	for ( int nChars = nInputLen ; nChars-- ; pszInput++ )
	{
		if ( *pszInput >= 'A' && *pszInput <= 'Z' )
			nBits |= ( *pszInput - 'A' );
		else if ( *pszInput >= 'a' && *pszInput <= 'z' )
			nBits |= ( *pszInput - 'a' );
		else if ( *pszInput >= '2' && *pszInput <= '7' )
			nBits |= ( *pszInput - '2' + 26 );
		else
			return 0;

		nCount += 5;

		if ( nCount >= 8 )
		{
			*paucOutput++ = (BYTE)( nBits >> ( nCount - 8 ) );
			nCount -= 8;
		}

		nBits <<= 5;
	}

	return nDecodeLen;
}

uint32 DecodeBase32(LPCTSTR pszInput, CAICHHash& Hash){
	return DecodeBase32(pszInput, Hash.GetRawHash(), Hash.GetHashSize());
}

UINT64 GetHTTPRequestDataSize(CString strSource) 
{
	UINT64 dwFileSize=0;

	// prepare url components
	CString host,res;
	int port=0;

	if (strSource.Left(7).CompareNoCase("http://")==0)
		host=strSource.Mid(7);
	else 
		host=strSource;

	int pos=host.Find(':');
	int posr=host.Find('/');
	if (posr==-1)
		return 0;
	if (pos>-1 && posr>pos)
		port=atoi(host.Mid(pos+1,posr-pos-1));
	res=host.Mid(posr);
	host=host.Left( (pos>0)?pos: posr);


	// Initialize use of the WinINet functions
	HINTERNET hInternet=InternetOpen(
		"LinkCreatorAgent",
		INTERNET_OPEN_TYPE_PRECONFIG,
		NULL,
		NULL,
		0
		);

	if (hInternet==NULL)
		return 0;

	// Opens an HTTP session for the ressources host
	HINTERNET hConnect = ::InternetConnect(hInternet, host, (port)?port:INTERNET_DEFAULT_HTTP_PORT, "", "", INTERNET_SERVICE_HTTP, 0, 0);
	if (!hConnect) {
		InternetCloseHandle(hInternet);
		return 0;
	}

	// requests a ressource via http
	HINTERNET hHttpFile = ::HttpOpenRequest(hConnect, "GET", res, HTTP_VERSION, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
	if (!hHttpFile) {
		InternetCloseHandle(hConnect);
		InternetCloseHandle(hInternet);
		return 0;
	}

	// Get the size of the requested file
	BOOL bSendRequest = ::HttpSendRequest(hHttpFile, NULL, 0, 0, 0);
	char achQueryBuf[16];
	DWORD dwQueryBufLen = sizeof(achQueryBuf);

	BOOL bQuery = ::HttpQueryInfo(hHttpFile,HTTP_QUERY_CONTENT_LENGTH, achQueryBuf,&dwQueryBufLen, NULL);
	if (bQuery)
		dwFileSize = _atoi64 (achQueryBuf);


	// Close the HINTERNET handles.
	if (hHttpFile)
		InternetCloseHandle(hHttpFile);
	if (hConnect)
		InternetCloseHandle(hConnect);
	if (hInternet)
		InternetCloseHandle(hInternet);

	return dwFileSize;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久久久黄色 | 久久精品夜夜夜夜久久| 成人午夜激情在线| 午夜精品久久久久久| 国产精品美女www爽爽爽| 欧美精品一二三区| 一本一道久久a久久精品| 久久99在线观看| 亚洲国产一区视频| 亚洲视频免费在线| 欧美极品aⅴ影院| 日韩午夜中文字幕| 欧美精品粉嫩高潮一区二区| 99在线精品一区二区三区| 美日韩黄色大片| 亚洲综合激情网| 中文字幕欧美一| 国产人妖乱国产精品人妖| 欧美一区二区三区色| 欧美日韩中文字幕一区| 91浏览器打开| 成人性生交大片免费看中文| 国产一区二区三区四区在线观看| 日韩精品1区2区3区| 亚洲成人av在线电影| 亚洲免费观看高清完整版在线| 久久久国产午夜精品| 精品福利av导航| 日韩视频国产视频| 欧美一级在线观看| 欧美精品久久天天躁| 欧美日韩精品系列| 91久久国产综合久久| 91免费看视频| 99国产欧美久久久精品| 97久久超碰精品国产| 91视频一区二区三区| www.视频一区| 99vv1com这只有精品| 波多野结衣在线一区| 成人午夜在线免费| 国产成人精品影院| av男人天堂一区| 99久久免费精品| 91美女蜜桃在线| 91福利小视频| 欧美日韩电影在线播放| 日韩一级成人av| 久久精品亚洲精品国产欧美kt∨| 久久精品一区二区三区四区| 国产欧美一区视频| 亚洲色图欧美偷拍| 一二三区精品福利视频| 亚洲电影中文字幕在线观看| 日本aⅴ精品一区二区三区 | 亚洲成人在线网站| 日韩精品色哟哟| 久久99九九99精品| 国产激情一区二区三区桃花岛亚洲| 成人高清免费观看| 91国偷自产一区二区使用方法| 欧美视频三区在线播放| 91精品国产一区二区三区蜜臀| wwww国产精品欧美| 亚洲久草在线视频| 亚洲成av人片一区二区三区 | 99r精品视频| 欧美亚洲国产bt| 欧美成人r级一区二区三区| 久久亚洲免费视频| 亚洲色图欧美偷拍| 欧美a级一区二区| 国产99精品视频| 色老汉av一区二区三区| 91精品国产综合久久精品麻豆| 久久精品亚洲精品国产欧美| 亚洲精品ww久久久久久p站| 蜜臀av性久久久久蜜臀aⅴ| 国产成人精品亚洲午夜麻豆| 欧美日韩亚洲综合一区 | 亚洲无人区一区| 九九九久久久精品| 99麻豆久久久国产精品免费| 欧美日韩成人激情| 中文幕一区二区三区久久蜜桃| 亚洲综合小说图片| 国产精品白丝jk白祙喷水网站| 在线观看亚洲一区| 国产欧美精品国产国产专区| 亚洲大片免费看| 粉嫩一区二区三区性色av| 欧美无乱码久久久免费午夜一区 | 99久久精品99国产精品| 91精品福利在线一区二区三区| 国产精品国产自产拍高清av | 2023国产精品视频| 亚洲综合丁香婷婷六月香| 国产精品一区二区久久不卡| 91国模大尺度私拍在线视频| 久久女同精品一区二区| 午夜精品福利一区二区蜜股av| 成人福利电影精品一区二区在线观看| 欧美美女一区二区在线观看| 中文字幕欧美一| 国产精品系列在线观看| 91精品国产综合久久久蜜臀粉嫩| 亚洲欧美日韩成人高清在线一区| 久久99国产精品免费网站| 欧美综合一区二区三区| 综合自拍亚洲综合图不卡区| 国产剧情一区二区| 日韩欧美在线综合网| 午夜不卡av在线| 91视频一区二区三区| 国产精品久久久一本精品| 国产一区二区按摩在线观看| 91精品国产色综合久久久蜜香臀| 最新成人av在线| 成人不卡免费av| 久久久国产一区二区三区四区小说 | 国产一区二区不卡老阿姨| 欧美一区二区三区在线观看| 亚洲国产一区在线观看| 91福利社在线观看| 亚洲男人的天堂在线观看| 成人av综合在线| 国产免费成人在线视频| 国产精品18久久久久| 久久久久久99久久久精品网站| 美女视频黄 久久| 日韩免费观看2025年上映的电影 | 国产剧情一区在线| 久久毛片高清国产| 国产精品影音先锋| 中文在线资源观看网站视频免费不卡| 韩国欧美一区二区| 久久久久国产精品麻豆ai换脸| 激情亚洲综合在线| 久久伊人蜜桃av一区二区| 精品午夜久久福利影院| 精品国产亚洲在线| 国产传媒欧美日韩成人| 国产精品久久久久久久第一福利| 成人激情综合网站| 日韩毛片高清在线播放| 欧美亚洲另类激情小说| 日韩在线一区二区三区| 日韩亚洲欧美中文三级| 国产精品资源网| 国产精品区一区二区三区| www.在线欧美| 亚洲二区在线视频| 日韩午夜电影在线观看| 国产精品资源在线观看| 亚洲人成亚洲人成在线观看图片 | 青青草一区二区三区| 精品国产乱码久久久久久老虎| 国产一区二区在线电影| 亚洲国产精品ⅴa在线观看| av动漫一区二区| 午夜婷婷国产麻豆精品| 精品国一区二区三区| 成人中文字幕在线| 一个色综合av| 日韩午夜av电影| 成人app软件下载大全免费| 亚洲桃色在线一区| 欧美一区二区成人| 国产福利91精品| 一区二区三区在线观看视频| 91精品国产综合久久国产大片 | 国产a视频精品免费观看| 综合久久给合久久狠狠狠97色| 欧美午夜宅男影院| 裸体在线国模精品偷拍| 国产精品美日韩| 欧美日韩高清影院| 国产v综合v亚洲欧| 亚洲五月六月丁香激情| 国产网红主播福利一区二区| 91成人在线免费观看| 韩国av一区二区三区在线观看| 亚洲精品亚洲人成人网在线播放| 日韩亚洲欧美综合| 91性感美女视频| 久久91精品久久久久久秒播| 日韩毛片精品高清免费| 精品国产自在久精品国产| 色综合久久久久久久久| 久久国产精品一区二区| 一区二区三区高清在线| 久久久久国色av免费看影院| 欧美喷水一区二区| 成人av网站在线观看| 精品一二三四区| 亚洲一区欧美一区| 18欧美乱大交hd1984| 久久先锋影音av| 制服丝袜一区二区三区| 色综合久久天天综合网|