libed2k源码导读:(一)从ed2k链接开始

本文介绍了libed2k库的使用,特别是如何解析ed2k链接,创建emule任务清单,添加链接并下载,以及日志系统和消息过滤。通过conn程序框架分析,展示了libed2k如何处理下载任务和异步消息通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一章的目的是大致了解libed2k怎么使用,libed2k库自带了一个测试工程conn,这一章我们将分析conn,让从我们最关心的下载文件开始。

1.1 解析ed2k链接

通常在网上分享的电驴资源时都是通过ed2k链接的方式,ED2K链接格式为:

ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|h=TQXCJQ2QAYCXKMFQKKHRZJ4WE34T3TDA|/

解析链接的代码在libed2k\include\libed2k\file.hpp中:

static emule_collection_entry fromLink(const std::string& strLink);

它的实现如下:

(1)读取0-13字节并检查是否为“ed2k://|file|”

(2)读取从13字节开始到下一个“|”,得到文件名。

(3)读取从文件名之后到下一个“|”的位置,得到文件大小

(4)读取从文件大小之后到下一个“|”的位置,得到hash值。

(5)丢弃剩余部分“h=TQXCJQ2QAYCXKMFQKKHRZJ4WE34T3TDA”

得到文件名,大小和哈希值后存放到结构体emule_collection_entry中。这个结构体内的成员与这些值一一对应。直接用if(emule_collection_entry)函数可以判断是否是有意义的一个结构体(重载了bool ()操作符)。

 

1.2 emule任务清单

 

emule文件集合类(叫做emule任务清单或许更恰当)emule_collection封装了std::deque<emule_collection_entry>并提供了一些额外的操作。

静态函数:

(1)提供从“ed2k://”链接到emule_collection_entry的转换的fromLink方法(见1.1)。

(2)提供从文件名,文件大小和哈希值生成“ed2k://”链接的toLink方法。

(3)从磁盘文件中读取任务清单的fromFile方法。

成员函数:

(1)保存任务清单到文件的save方法。

(2)添加文件到任务清单的add_file方法(需要文件名,文件大小和哈希值)。

(3)添加“ed2k://”链接到任务清单的add_link方法。

(4)从任务清单中根据序号(index)获取emule_collection_entry元素并生成“ed2k://”链接的get_ed2k_link方法。

(5)重载的==操作符,用于对比两个emule_collection是否相同

成员变量:

(1)emule_collection_entry集合

(2)集合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值