`
tiantian911
  • 浏览: 224848 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BT-makemetainfo-源代码阅读

阅读更多
晚上花了一点时间读了点代码,4.03版本,简单一些,做种的模块叫btmaketorrent.py,但是只有几句,是调用bittorrent/makemetafile.py,其中的逻辑都在这个文件中,没有gui的部分。
def make_meta_files(url, files, flag=Event(), progressfunc=dummy,
                    filefunc=dummy, piece_len_pow2=None, target=None,
                    comment=None, filesystem_encoding=None):
def make_meta_file(path, url, piece_len_exp, flag=Event(), progress=dummy,
                   comment=None, target=None, encoding='ascii'):
def makeinfo(path, piece_length, flag, progress, encoding):

其中核心的方法有这三个,前两个是做预处理和调用第三个makeinfo。

#getfilesystemencoding()
#  Return the name of the encoding used to convert Unicode filenames into system file names, or None if the system default encoding is used. The result value depends on the operating system:
#   * On Windows 9x, the encoding is ``mbcs''.
#   * On Mac OS X, the encoding is ``utf-8''.
#   * On Unix, the encoding is the user's preference according to the result of nl_langinfo(CODESET), or None if the nl_langinfo(CODESET) failed.
#   * On Windows NT+, file names are Unicode natively, so no conversion is performed. getfilesystemencoding() still returns 'mbcs', as this is the encoding that applications should use when they explicitly want to convert Unicode strings to byte strings that are equivalent when used as file names.


作者使用了一些措施来保证filesystem的编码是否正确,防止encoding错误的情况下会出现找不到文件的情况。
print  sys.getfilesystemencoding()


在我的机器上是mbcs,大概是ms的代码吧。

另外,把几个range定义为无效的字符:
range(0xD800, 0xE000)
range(0xFDD0, 0xFDF0)
range(0xFFFE, 0xFFFF)
使用string的translate方法除去再和原来的比较,如果不等于说明文件名中含有无效的字符,不能生成metainfo。

然后生成头信息:
data = {'info': info, 'announce': url.strip(),'creation date': int(time())}
data['comment'] = comment


作者的递归算法写的比较奇怪,下面是我的ruby代码
puts "Total size of file is #{File.size(file)}"
digest_hash={}
i=1
#generate digest of every piece and put them into 
while i<=File.size(file)/(piece_length) do
  block = file.sysread(piece_length)
  digest = Digest::MD5.hexdigest(block)
  puts digest+"  "+i.to_s
  digest_hash.store(i, digest)
  i+=1
end
i-=1
last=File.size(file)-piece_length*i
puts "The last block size is #{last}"
block =file.sysread(last)
digest = Digest::MD5.hexdigest(block)
i+=1
puts "last one is #{digest}, #{i}" 
digest_hash.store(i, digest)

这里只考虑到一个文件的情况,每次取piece_len,然后用digest_hash去生成摘要。

Python的语法非常简单,以前没有接触过,只是边看代码边参考python2.5的手册和docs.python.org就可以很好的理解。

贴一点看到的比较好玩的代码:

dict={"a":2,"b":3,"c":54,"d":5}

def print4(a,b,c,d):
  print a,b,c,c

print4(**dict)


还有

piece_length = 2 ** piece_len_exp


2的exp次幂。

0
0
分享到:
评论

相关推荐

    Agilent3070_BT-BASIC_输入输出语法设置

    Agilent3070_BT-BASIC_输入输出语法设置Agilent3070_BT-BASIC_输入输出语法设置Agilent3070_BT-BASIC_输入输出语法设置Agilent3070_BT-BASIC_输入输出语法设置Agilent3070_BT-BASIC_输入输出语法设置Agilent3070_BT-...

    三菱PLC AJ65BT-64AD视频教程+程序 三菱Q远程设备站CC-LINK AJ65BT-64AD教程.zip

    《三菱PLC AJ65BT-64AD视频教程+程序 三菱Q远程设备站CC-LINK AJ65BT-64AD教程》 本文将深入探讨三菱PLC中的AJ65BT-64AD模块及其在CC-LINK通信网络中的应用。这个教程集合包含了从基础到进阶的全方位学习材料,包括...

    MITSUBISHI三菱高速计数器模块类型AJ65BT-D62_AJ65BT-D62D_AJ65BT-D62D-S1用户手册

    MITSUBISHI的高速计数器模块,如AJ65BT-D62、AJ65BT-D62D以及AJ65BT-D62D-S1,是专为工业自动化应用设计的高效能部件,用于精确地监测和处理高速输入信号。这些模块提供了高精度的计数功能,适用于各种生产线监控和...

    Agilent3070 BT-BASIC语法介绍(官方英文)

    在 BT-BASIC 语言中,符号的正确使用对于编写高效的代码至关重要。例如: - `%` 表示非字母字符,例如 `%` 可能被用来标识注释或特定类型的变量。 - `&` 在 BT-BASIC 中有不同的含义。 - `*` 和 `+`、`-` 等基本...

    BT宝通BT-450s

    BT宝通BT-450s是一款针对无线通信领域的专业设备,主要应用于蓝牙技术。BT在信息技术领域通常代表“Bluetooth”,这是一种短距离无线通信技术,用于连接各种设备,如手机、耳机、电脑、智能家电等,实现数据传输或...

    MITSUBISHI三菱AJ65BT-64DAV_DAI型数-模转换用户手册(详细篇).pdf

    MITSUBISHI三菱AJ65BT-64DAV_DAI型数-模转换用户手册(详细篇) 本手册是MITSUBISHI三菱AJ65BT-64DAV_DAI型数-模转换用户手册的详细篇,提供了使用本产品前需要了解的重要安全注意事项、设计注意事项、安装注意事项...

    AvantGarde-Bk-BT-Normal以及CommonBullets-Normal

    本文将深入探讨"AvantGarde-Bk-BT-Normal"和"CommonBullets-Normal"这两种经典字体及其在不同场景下的应用。 "AvantGarde-Bk-BT-Normal"是一款源自20世纪70年代的无衬线字体,由 Herb Lubalin 和 Tom Carnase 设计...

    aria2自动更新bt下载的bt-trackers的脚本,亲测可用

    aria2自动更新bt下载的bt-trackers的脚本,trackers的列表来自于23k 星 的XIU2/TrackersListCollection库。可以放在cron里定时更新: 在Linux系统中使用Cron 打开终端。 输入 crontab -e 来编辑cron作业。 添加下面...

    能研BT-C3100多功能充电器使用说明书

    "能研BT-C3100多功能充电器使用说明书" 本使用说明书旨在指导用户正确使用能研BT-C3100多功能充电器,本充电器可对镍镉、镍氢和3.7V锂电池进行充电和放电管理。以下是本使用说明书的详细内容: 一、设计使用场合 ...

    pi3-miniuart-bt-overlay.dtb

    ~$ sudo cp pi3-miniuart-bt-overlay.dtb /boot/overlays 2、编辑/boot目录下的config.txt文件 ~$ sudo vim /boot/config.txt 3、添加或修改下面内容: dtoverlay=pi3-miniuart-bt-overlay force_turbo=1 4、关闭...

    RivieraWaves系统 RW-BT-KERNEL-SW-FS.pdf

    根据提供的文件信息,我们可以提炼出一系列关于RivieraWaves系统 RW-BT-KERNEL-SW-FS.pdf文档的知识点,主要包括了文档的版本信息、内容概述以及技术细节。以下是详细的知识点说明: 1. RivieraWaves系统概述: ...

    MTK-BT-API

    "MTK-BT-API.pdf"这份文档是开发过程中的关键参考资料,它详尽地阐述了MTK-BT-API的使用方法、注意事项及示例代码,是开发者理解和掌握API的必备工具。 总之,MTK-BT-API为蓝牙设备的软件开发提供了强大而全面的...

    著名的BT下载软件BitTorrent的源代码

    标题提到的"著名的BT下载软件BitTorrent的源代码"是指BitTorrent客户端的原始编程代码,它通常用C++这种强大的编程语言编写。开发者和学习者可以通过研究源代码来理解其内部工作原理,包括如何建立和维护P2P网络、...

    MITSUBISHI三菱AJ65BT-64RD3_AJ65BT-64RD4型铂金测温电阻体Pt100温度输入模块用户手册(详细)

    1. 安全注意事项:在使用AJ65BT-64RD3/AJ65BT-64RD4型铂金测温电阻体Pt100温度输入模块前,必须阅读用户手册并遵守安全注意事项,以避免危险后果。 2. 警告和注意事项:在使用AJ65BT-64RD3/AJ65BT-64RD4型铂金测温...

    能研BT-C3100智能充电器中文说明书.pdf

    能研BT-C3100智能充电器中文说明书

    北洋打印机驱动BT-T080

    北洋打印机驱动BT-T080是一款专为BT-T080型号打印机设计的驱动程序,它在操作系统与打印机之间扮演着至关重要的角色。驱动程序是任何硬件设备正常运行的基础,因为它允许软件(如文字处理软件或图像编辑工具)与...

    BT-05资料,BT-05资料,BT-05资料

    BT-05是一种基于蓝牙技术的设备或系统,其相关资料涵盖了从软件应用到硬件操作的多个方面。蓝牙技术是一种短距离无线通信标准,广泛应用于移动设备、家用电器、汽车和医疗设备等,以实现数据交换和设备间的互联互通...

    bt-10.0.3.14-win1064_mainlym2k_socket_bt1516_

    标题“bt-10.0.3.14-win1064_mainlym2k_socket_bt1516_”暗示这可能是一个针对Windows 10 64位操作系统的蓝牙驱动或软件更新包。其中,“bt”通常代表“Bluetooth”,即蓝牙技术。“10.0.3.14”可能是版本号,表明这...

    delphi 写的BT下载的工具 源代码

    标题中的“delphi 写的BT下载的工具 源代码”表明这是一份使用Delphi编程语言编写的BT(BitTorrent)下载软件的源代码。Delphi是一种基于Object Pascal的集成开发环境,以其高效、易用而受到许多开发者喜爱。BT下载...

    【基恩士】BT-1000_1500_600系列BT-HD10应用程序开发手册(简体中文).pdf

    【基恩士】BT-1000_1500_600系列BT-HD10应用程序开发手册(简体中文).pdf

Global site tag (gtag.js) - Google Analytics