資源簡介
自行編寫的全套BT源代碼,C++編寫,完全實現BT的功能,并且經過了大量和長期的實際應用。是可以提供正常商業服務的基礎P2P文件共享軟件。

代碼片段和文件信息
//?Bdecode.cpp:?implementation?of?the?CBdecode?class.
//
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“testBT.h“
#include?“Bdecode.h“
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBdecode::CBdecode()
{
m_lsize?=?0;
m_pBuf?=?0;
}
CBdecode::~CBdecode()
{
}
CVal*?CBdecode::decode_int(long?&lPos)
{
//*
long?lOldPos?=?lPos;
for?(;?lPos {
if?(m_pBuf[lPos]?==?‘e‘)
{
lPos?++;
break;
}
}
if?(lPos?>?m_lsize)
return?0;
char*?pstrStop?=?0;
long?l?=?strtol(m_pBuf+lOldPos?&pstrStop?10);
if?(pstrStop[0]?!=?‘e‘)
return?0;
return?new?CVal(l);
}
CVal*?CBdecode::decode_string(long?&lPos)
{
long?lOldPos?=?lPos;
for?(;?lPos {
if?(m_pBuf[lPos]?==?‘:‘)
{
lPos?++;
break;
}
}
if?(lPos?>?m_lsize)
return?0;
char*?pstrStop?=?0;
long?len?=?strtol(m_pBuf+lOldPos?&pstrStop?10);
if?(pstrStop[0]?!=?‘:‘)
return?0;
if?((lPos+len)?>?m_lsize)
return?0;
CVal*?pVal?=?new?CVal(m_pBuf+lPos?len);
lPos?+=?len;
?
return?pVal;
}
void?ClearList(VALLIST*?pls)
{
VALLIST::iterator?iter?=?pls->begin();
while(iter?!=?pls->end())
{
delete?*iter;
iter++;
}
}
CVal*?CBdecode::decode_list(long?&lPos)
{
VALLIST*?ls?=?new?VALLIST();
for?(;?lPos {
if?(m_pBuf[lPos]?==?‘e‘)
{
lPos++;
break;
}
CVal*?pRet?=?bdecode_rec(lPos);
if?(!pRet)
{
ClearList(ls);
delete?ls;
return?0;
}
ls->push_back(pRet);
}
if?(lPos?>?m_lsize)
{
ClearList(ls);
delete?ls;
return?0;
}
return?new?CVal(ls);
}
void?ClearMap(VALMAP*?pmap)
{
VALMAP::iterator?iter?=?pmap->begin();
while(iter?!=?pmap->end())
{
delete?(*iter).second;
iter++;
}
}
CVal*??CBdecode::decode_dict(long&?lPos)
{
VALMAP*?pmap?=?new?VALMAP();
string?strLast;
for?(;?lPos {
if?(m_pBuf[lPos]?==?‘e‘)
{
lPos++;
break;
}
CVal*?pRet?=?decode_string(lPos);
if?(!pRet)
{
ClearMap(pmap);
delete?pmap;
return?0;
}
string?strCur?=?pRet->pstrVal;
delete?pRet;
if?(strLast.size()?>?0)
{
if?(strCur?<=?strLast)
{
ClearMap(pmap);
delete?pmap;
return?0;
}
}
strLast?=?strCur;
CVal*?pRetVal?=?bdecode_rec(lPos);
if?(!pRetVal)
{
ClearMap(pmap);
delete?pmap;
return?0;
}
(*pmap)[strLast]?=?pRetVal;
}
if?(lPos?>?m_lsize)
{
ClearMap(pmap);
delete?pmap;
return?0;
}
return?new?CVal(pmap);
}
CVal*?CBdecode::bdecode_rec(long&?lPos)
{
CVal*?pRet?=?0;
char?t?=?m_pBuf[lPos];
switch?(t)
{
case?‘i‘:
return
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄??????????0??2004-02-27?14:59??GGBT
?????文件??????33490??2003-09-25?23:04??GGBT\sizecbar.cpp
?????文件???????4835??2003-08-02?23:00??GGBT\ctrlext.h
?????文件???????2747??2003-08-02?22:55??GGBT\ctrlext.cpp
?????文件???????8432??1980-04-26?13:45??GGBT\ctrlext.inl
?????文件??????24093??2004-02-27?15:04??GGBT\testBT.clw
?????文件??????13995??2004-02-27?15:21??GGBT\testBT.plg
?????文件??????49968??2003-10-29?10:48??GGBT\testBT.rc
?????文件??????18224??2003-10-29?17:45??GGBT\testBT.dsp
?????文件???????6335??2003-09-25?23:04??GGBT\sizecbar.h
?????文件???????1544??2003-09-22?01:46??GGBT\Downloader.h
?????文件????????705??2003-08-03?02:21??GGBT\BTFormat.h
?????文件???????2011??2003-09-29?10:56??GGBT\Connection.h
?????文件???????2347??2003-10-12?11:23??GGBT\testBT.h
?????文件????????522??2003-08-02?23:00??GGBT\Parseargs.h
?????文件???????4969??2003-08-24?02:16??GGBT\Choker.cpp
?????文件?????749952??2003-09-25?15:46??GGBT\ip.dat
?????文件???????1013??2003-08-02?22:55??GGBT\Common.cpp
?????文件???????1428??2003-10-06?18:44??GGBT\StdAfx.h
?????文件???????1415??2003-09-28?01:05??GGBT\MonitorBar.h
?????文件????????537??2003-09-19?11:36??GGBT\testBT.dsw
?????文件????????900??2003-08-02?23:00??GGBT\SortClass.h
?????文件???????2694??2003-10-06?13:05??GGBT\MenuSpawn.h
?????文件???????2195??2003-09-29?01:43??GGBT\testBTDoc.h
?????文件???????3661??2003-10-11?02:01??GGBT\Download.h
?????文件???????4229??2004-02-27?15:13??GGBT\IPLocater.cpp
?????文件????????783??2003-08-02?23:00??GGBT\Measure.h
?????文件???????2985??2003-10-12?13:59??GGBT\ButtonEx.h
?????文件???????4203??2003-10-07?23:37??GGBT\ExpandingDialog.cpp
?????文件????????212??2003-08-02?22:55??GGBT\StdAfx.cpp
............此處省略193個文件信息
評論
共有 條評論