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

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

?? shahashset.h

?? Pipe類 Pipe類 Pipe類 Pipe類 Pipe類
?? H
字號:
//this file is part of eMule
//Copyright (C)2002-2006 Merkur ( strEmail.Format("%s@%s", "devteam", "emule-project.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.


/* 
 SHA haset basically exists of 1 Tree for all Parts (9.28MB) + n  Trees
 for all blocks (180KB) while n is the number of Parts.
 This means it is NOT a complete hashtree, since the 9.28MB is a given level, in order
 to be able to create a hashset format similar to the MD4 one.

 If the number of elements for the next level are odd (for example 21 blocks to spread into 2 hashs)
 the majority of elements will go into the left branch if the parent node was a left branch
 and into the right branch if the parent node was a right branch. The first node is always
 taken as a left branch.

Example tree:
	FileSize: 19506000 Bytes = 18,6 MB

								X (18,6)                                   MasterHash
							 /     \
						 X (18,55)   \
					/		\	       \
                   X(9,28)  x(9,28)   X (0,05MB)						   PartHashs
			   /      \    /       \        \
		X(4,75)   X(4,57) X(4,57)  X(4,75)   \

						[...............]
X(180KB)   X(180KB)  [...] X(140KB) | X(180KB) X(180KB [...]			   BlockHashs
									v
						 Border between first and second Part (9.28MB)

HashsIdentifier:
When sending hashs, they are send with a 16bit identifier which specifies its postion in the
tree (so StartPosition + HashDataSize would lead to the same hash)
The identifier basically describes the way from the top of the tree to the hash. a set bit (1)
means follow the left branch, a 0 means follow the right. The highest bit which is set is seen as the start-
postion (since the first node is always seend as left).

Example

								x                   0000000000000001
							 /     \		
						 x		    \				0000000000000011
					  /		\	       \
                    x       _X_          x 	        0000000000000110


Version 2 of AICH also supports 32bit identifiers to support large files, check CAICHHashSet::CreatePartRecoveryData


*/

#pragma once

#define HASHSIZE		20
#define KNOWN2_MET_FILENAME			_T("known2_64.met")
#define OLD_KNOWN2_MET_FILENAME		_T("known2.met")
#define KNOWN2_MET_VERSION			0x02

enum EAICHStatus {
	AICH_ERROR = 0,
	AICH_EMPTY,
	AICH_UNTRUSTED,
	AICH_TRUSTED,
	AICH_VERIFIED,
	AICH_HASHSETCOMPLETE
};

class CFileDataIO;
class CKnownFile;
class CSafeMemFile;
class CPartFile;
class CUpDownClient;
/////////////////////////////////////////////////////////////////////////////////////////
///CAICHHash
class CAICHHash 
{
public:
	~CAICHHash()									{;}
	CAICHHash()										{ ZeroMemory(m_abyBuffer, HASHSIZE); }
	CAICHHash(uchar* data)							{ Read(data); }
	CAICHHash(const CAICHHash& k1)					{ *this = k1; }
	CAICHHash&	operator=(const CAICHHash& k1)		{ memcpy(m_abyBuffer, k1.m_abyBuffer, HASHSIZE); return *this; }
	friend bool operator==(const CAICHHash& k1,const CAICHHash& k2)	{ return memcmp(k1.m_abyBuffer, k2.m_abyBuffer, HASHSIZE) == 0;}
	friend bool operator!=(const CAICHHash& k1,const CAICHHash& k2)	{ return !(k1 == k2); }
	void		Read(uchar* data)					{ memcpy(m_abyBuffer, data, HASHSIZE); }
	CString		GetString() const;
	uchar*		GetRawHash()						{ return m_abyBuffer; }

	static int	GetHashSize()						{ return HASHSIZE;}
private:
	uchar m_abyBuffer[HASHSIZE];
};

/////////////////////////////////////////////////////////////////////////////////////////
///CAICHHashAlgo
class CAICHHashAlgo 
{
public:
	virtual void	Reset() = 0;
	virtual void	Add(LPCVOID pData, DWORD nLength) = 0;
	virtual void	Finish(CAICHHash& Hash) = 0;
	virtual void	GetHash(CAICHHash& Hash) = 0;
};

/////////////////////////////////////////////////////////////////////////////////////////
///CAICHHashTree
class CAICHHashTree
{
	friend class CAICHHashTree;
	friend class CAICHHashSet;
public:
	CAICHHashTree(uint64 nDataSize, bool bLeftBranch, uint64 nBaseSize);
	~CAICHHashTree();
	void			SetBlockHash(uint64 nSize, uint64 nStartPos, CAICHHashAlgo* pHashAlg);
	bool			ReCalculateHash(CAICHHashAlgo* hashalg, bool bDontReplace );
	bool			VerifyHashTree(CAICHHashAlgo* hashalg, bool bDeleteBadTrees);
	CAICHHashTree*	FindHash(uint64 nStartPos, uint64 nSize)					{uint8 buffer = 0; return FindHash(nStartPos, nSize, &buffer);}

protected:
	CAICHHashTree*	FindHash(uint64 nStartPos, uint64 nSize, uint8* nLevel);
	CAICHHashTree*	m_pLeftTree;
	CAICHHashTree*	m_pRightTree;

public:
	CAICHHash		m_Hash;
	uint64			m_nDataSize;		// size of data which is covered by this hash
	uint64			m_nBaseSize;		// blocksize on which the lowest hash is based on
	bool			m_bIsLeftBranch;	// left or right branch of the tree
	bool			m_bHashValid;		// the hash is valid and not empty
};

/////////////////////////////////////////////////////////////////////////////////////////
///CAICHHashSet
class CAICHHashSet
{
public:
	CAICHHashSet(CKnownFile*	pOwner);
	~CAICHHashSet(void);
	bool			ReCalculateHash(bool bDontReplace = false);
	bool			VerifyHashTree(bool bDeleteBadTrees);
	void			SetStatus(EAICHStatus bNewValue)			{m_eStatus = bNewValue;}
	EAICHStatus		GetStatus()	const							{return m_eStatus;}
	void			SetOwner(CKnownFile* val)					{m_pOwner = val;}
	
	void			FreeHashSet();
	void			SetFileSize(EMFileSize nSize);
	
	CAICHHash&		GetMasterHash()						{return m_pHashTree.m_Hash;} 
	void			SetMasterHash(const CAICHHash& Hash, EAICHStatus eNewStatus);
	bool			HasValidMasterHash()				{return m_pHashTree.m_bHashValid;}

	CAICHHashAlgo*	GetNewHashAlgo();

	CAICHHashTree	m_pHashTree;
private:
	CKnownFile*		m_pOwner;
	EAICHStatus		m_eStatus;
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀久久久99精品久久久久久| 国产欧美一区二区三区在线看蜜臀 | 亚洲丝袜美腿综合| 成人黄色综合网站| 国产精品国产三级国产普通话蜜臀 | 欧美性生活一区| 亚洲乱码一区二区三区在线观看| 91美女片黄在线观看91美女| 亚洲一线二线三线久久久| 精品视频1区2区3区| 精品一区二区在线看| 久久久国产午夜精品| 成人性视频免费网站| 国产精品成人一区二区三区夜夜夜| aaa国产一区| 五月天激情综合| 久久综合久久综合久久| 不卡av免费在线观看| 亚洲国产成人高清精品| 日韩视频一区在线观看| 高清日韩电视剧大全免费| 亚洲精品国产精品乱码不99| 欧美日本在线播放| 精久久久久久久久久久| 亚洲人成在线观看一区二区| 51精品久久久久久久蜜臀| 国产91富婆露脸刺激对白| 亚洲精品免费在线观看| 日韩午夜在线影院| aaa欧美日韩| 麻豆成人av在线| 中文字幕一区二| 日韩一级黄色大片| 91视频91自| 狠狠色伊人亚洲综合成人| 亚洲人妖av一区二区| 欧美一级精品大片| 一本大道av一区二区在线播放| 日本欧美一区二区| 亚洲视频1区2区| 久久只精品国产| 久久精品一区二区三区不卡牛牛| 在线日韩一区二区| 春色校园综合激情亚洲| 日韩av高清在线观看| 亚洲精品国久久99热| 国产欧美一区二区精品秋霞影院| 欧美高清性hdvideosex| 色综合天天综合给合国产| 国产一区二区三区在线观看精品| 亚洲成人免费av| 亚洲欧美日韩一区二区 | 国产精品免费丝袜| 日韩免费一区二区| 欧美日本视频在线| 欧美性猛片xxxx免费看久爱| 本田岬高潮一区二区三区| 国产原创一区二区三区| 日本免费在线视频不卡一不卡二| 一区二区在线观看视频| ㊣最新国产の精品bt伙计久久| 久久久噜噜噜久噜久久综合| 欧美大片在线观看一区二区| 欧美亚男人的天堂| 日本高清成人免费播放| 91亚洲精品久久久蜜桃网站| 成人av资源站| 丁香六月久久综合狠狠色| 久久丁香综合五月国产三级网站| 午夜精品久久久久久久| 亚欧色一区w666天堂| 亚洲一区免费视频| 亚洲香蕉伊在人在线观| 亚洲图片欧美色图| 亚洲成人午夜影院| 五月婷婷色综合| 五月天激情小说综合| 日韩成人精品在线| 欧美aⅴ一区二区三区视频| 日韩中文字幕一区二区三区| 亚洲国产日韩精品| 首页国产丝袜综合| 三级一区在线视频先锋| 蜜桃视频第一区免费观看| 激情综合色播五月| 国产成人自拍高清视频在线免费播放| 国内成人精品2018免费看| 国产一区二三区| 成人激情小说网站| 色www精品视频在线观看| 欧美日韩在线电影| 欧美一区二区精品在线| 久久嫩草精品久久久精品一| 日本一区二区在线不卡| 亚洲精品高清在线| 午夜精彩视频在线观看不卡| 蜜臀久久99精品久久久画质超高清 | 在线观看www91| 91麻豆精品国产91久久久更新时间| 日韩欧美中文字幕制服| 久久久九九九九| 亚洲激情av在线| 美腿丝袜在线亚洲一区| 国产福利一区在线观看| 一本色道a无线码一区v| 91麻豆精品国产91久久久| 久久久久国产免费免费 | 亚洲午夜久久久久| 麻豆国产91在线播放| 99综合电影在线视频| 欧美日韩三级一区| 国产区在线观看成人精品| 一区二区不卡在线播放| 激情综合网激情| 91激情五月电影| 久久综合999| 亚洲成人福利片| 国产成人高清视频| 91麻豆精品国产91久久久 | 奇米色777欧美一区二区| 高清国产一区二区三区| 欧美日韩一区二区三区四区| 久久综合一区二区| 亚洲不卡一区二区三区| 丁香婷婷综合色啪| 欧美肥妇bbw| 亚洲天堂福利av| 国产一区二区久久| 欧美日韩精品专区| 亚洲啪啪综合av一区二区三区| 精品一区二区三区在线观看国产| 色婷婷综合久久| 久久精品视频免费观看| 日本成人中文字幕在线视频| 日韩一区二区在线免费观看| 国产精品美女久久久久av爽李琼| 日本va欧美va精品发布| 在线观看亚洲精品| 国产精品天美传媒沈樵| 美女视频网站黄色亚洲| 日本高清不卡一区| 国产精品二三区| 国产成人免费av在线| 欧美一级久久久| 丝袜亚洲另类欧美| 在线免费观看成人短视频| 国产精品久久午夜夜伦鲁鲁| 国产一区美女在线| 精品欧美一区二区久久| 日韩专区欧美专区| 在线不卡一区二区| 亚洲高清中文字幕| 欧美午夜一区二区三区免费大片| 亚洲欧洲一区二区三区| 成人短视频下载| 中文字幕欧美三区| 福利电影一区二区| 国产欧美一区视频| 懂色av噜噜一区二区三区av| 久久日一线二线三线suv| 麻豆免费看一区二区三区| 欧美一区三区四区| 日韩成人免费电影| 在线不卡的av| 麻豆精品国产传媒mv男同| 欧美大片国产精品| 紧缚捆绑精品一区二区| 日韩一级视频免费观看在线| 老司机免费视频一区二区| 日韩亚洲欧美高清| 韩日欧美一区二区三区| 精品久久久影院| 国产精品一卡二卡在线观看| 久久久99久久精品欧美| 成人网男人的天堂| 国产精品成人网| 91视频免费播放| 午夜精品国产更新| 欧美不卡一区二区三区四区| 国产综合成人久久大片91| 久久久久99精品国产片| 成人av电影在线| 一个色在线综合| 67194成人在线观看| 国产专区欧美精品| 中文字幕视频一区二区三区久| 91浏览器在线视频| 亚洲va欧美va人人爽午夜| 欧美一个色资源| 懂色一区二区三区免费观看| 亚洲欧美二区三区| 69堂成人精品免费视频| 久久精品国产久精国产爱| 亚洲国产精品精华液2区45| 日本精品一区二区三区高清| 亚洲成人免费电影| 中文字幕乱码一区二区免费| 一本一道综合狠狠老| 日本成人在线不卡视频| 欧美极品aⅴ影院|