Emule框架 Emule的概述 (1) emule_p2p:主要处理两个客户端之间的交互。 (2) emule_data_manage:主要处理数据输入输出,数据验证,数据纠错,数据保存。 (3) emule_hub:主要处理与迅雷服务器(hub、tracker)的交互。 (4) emule_cs:主要处理与ed2k服务器的交互。 (5) emule_kad:主要处理DHT
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
,在DHT网络中寻源。 (6) emule_nat_traverse:用于与veryCD emule版本进行内网穿透。 emule_p2p 每个文件的下载需构造一个task,提供该文件的源是称为resource,与该resource的每个连接是一个pipe,对于同一个pipe实现了两个逻辑——上传和下载。Emule目前的resource上只开启一个连接。因此task、resource和pipe的关系为: Task Resource A Pipe emule_download_pipe/emule_upload_pipe Resource B Pipe emule_download_pipe/emule_upload_pipe …… …… …… Resource N Pipe emule_download_pipe/emule_upload_pipe 任务的组成: 任务主要有以下元素组成: (1) emule_download_logic: 该类对任务中的一些关键事件进行监听,并对这些事件进行处理。任务中的关键事件包括文件创建、文件完成、服务器连接成功、服务器连接失败、连接握手成功、数据管理器出现异常等事件。 (2) emule_data_manager: 该类对数据进行管理,自动处理数据的输入输出,数据纠错,状态保存等。任务通过其监听接口对该类进行管理。 (3) emule_source_list: 备份当前的所有下载资源。 (4) dispatcher_bridge: 每一个新到达的下载资源都会加入到该类中,该类对所有的下载资源进行操作,包括建立连接、重连、断开连接等。 (5) emule_tracker_logic: 处理与后台服务器打交道的逻辑。包括tracker查源,向hub
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
下载完成信息,向hub查询文件信息等。 每个任务有一个调度器,调度器通过获取resource的信息来决定创建pipe的个数,对于emule,每个resource从头至尾只创建一个pipe,通过pipe的信息和当前文件的信息,调度每个pipe的下载范围。每个resource有一个实现读写数据的对象emule_p2p_tcp_handler。该对象对socket进行封装,实现异步的读写。 Emule_peer类结构如下: 任务接口实现详看IEmule.doc emule_data_manage 数据管理器主要功能为数据写磁盘emule_data_output和数据读磁盘emule_data_input,读写磁盘操作有文件io系统xl_file_io_system实现。在写磁盘过程中对数据进行验证emule_part_check,验证失败将对数据进行纠错处理。纠错分aich和ich修复。 确认正确的数据或是纠错成功的数据,将计算它们的bcid,提供给迅雷p2p使用。 纠错实现: 数据管理器通过监听接口向emule_download_logic报告当前出错的块,调度器通过error_correct_interface获取错误块的信息,从新下载该块,并避免从错误的源获取。error_correct_interface接口为: struct correct_process_info { range_queue complete_range_queue; std::string resource_id; }; virtual void error_ranges( std::vector
& result ) = 0; // 报告错误块 virtual bool can_correct( const range& r, IDataPipe* pipe_ptr ) =0; // 判断该块是否能从制定pipe上下到非错误的数据。 virtual void get_correct_process_info( const range& r, std::vector& result ) = 0; // 获取纠错进程信息 emule_hub 迅雷的hub服务器主要管理已经完成下载的资源,tracker服务器提供正在下载过程中的资源。Emule在启动前要分别到hub和tracker上查询迅雷服务器保存的该文件的emule资源。 emule_cs emule有提供源信息的服务器,称为ed2k服务器,该服务器不是迅雷公司维护,主要为国外的服务器。 emule_kad emule实现的DHT网络,用于分布式寻源,以实现无服务器情况下依然能找到源。 emule_nat_traverse VeryCD emule版本的emule自己设计了一套内网穿透的协议,主要用于veryCD版本的emule之间,为了实现与其穿透连接,thunder也根据其协议实现与其穿透的功能。