string
NA NA NA NA NA
可选的。字符串条件。字符串值是“Audio”、“Video”、“Pro”或“Image”其中之一。类型域是3字节:0x1 0x0 0x3
File Type Constraint 可变的
Min Size Constraint 可变的
可选的。整数条件。提供的文件大小单位是M。类型域是4字节:0x1 0x1 0x0 0x2
Max Size Constraint 可变的
Availability Constraint
Filename Extension 可变的 constrain
可变的
可选的。整数条件。提供的文件大小单位是M。类型域是4字节:0x2 0x1 0x0 0x2
可选的。整数条件。设置一个较低的限制在提供搜索文件的客户端数目上。类型域是4字节:0x1 0x1 0x0 0x15
可选的。字符串条件。类型域是3字节:0x1 0x0 0x3
解析的搜索字符串格式
解析的搜索字符串用布尔操作符‘AND’、‘OR’和‘NOT’与字符串操作数来编码一个表达式的二叉树。树是用预先顺序编码的。操作符编码成2字节整数,0x0对应‘AND’, 0x100对应‘OR’,0x200对应‘NOT’。字符串用TLV格式编码,这里,类型的域是一个字节值为0x1,长度的域是2字节整数。注意,当搜索字符串是一个单词,它就作为单个字符串操作数(没有操作符)编码。以后的eMule版本编码一个只有”AND”操作符的字符串搜索表达式,用空格符代替“AND”,这样适合服务器的搜索字符串解析,把一个语句分成一系列的用“AND”操作符分隔的单词。
可选的条件格式
条件是一序列的条目。每个条目以“AND”描述符(2字节0x00)开始,紧接着是已编码的条件。这样,整个搜索行格式是<“搜索字符串” AND 条件1 AND 条件2 等>,如下面的例子示意图所示。编码的条件被分成3个域:
1. 种类 – 单字节,描述是字符串条件(0x2)还是整数条件(0x3) 2. 值 - 要么是类型长度编码的字符串,要么是4字节整型值 3. 类型 – 3或4字节,描述条件的种类(查看上面的主表)
36
6.2.10 搜索结果
从服务器发送到客户端的消息,作为对搜索请求的回应。这个消息通常被压缩。消息大小可变的。
名称 字节大小 默认值 注释 Protocol 1 0xE3
Size 4 消息大小是以字节为单位,不包括头部和大小的域
Type 1 0x16 OP_SEARCHRESULT操作码的值
Result Count 4 NA 消息中搜索结果的数目
Result list 可变的 NA 搜索结果列表
37
名称
File Hash Client ID
Client Port
Tag Count Tag list
名称 Protocol Size Type
File hash
搜索结果列表项格式
下面的表格描述了一个搜索结果列表项的格式。每个搜索结果包含了一个哈希,这个哈希唯一地标识文件,连同拥有这个文件的其它eMule客户端的细节。也有几个标签描述了文件属性。标签列表如下所述。注意,大部分的标签是可选的,它们的次序是不保证的。标签编码规则在本章开头详细描述。
字节大小 默认值 注释
16 NA 哈希值,用来文件的唯一的身份证明
4 NA 拥有文件的eMule客户端的ID
2 NA 拥有文件的客户端的TCP端口
4 NA 下面描述符标签的个数
可变的 NA 描述符标签列表
6.2.11 获得源
该消息从客户端发送到服务器,为文件请求源(其它客户端)。消息大小是22字节。
字节大小 默认值 注释 1 0xE3
4 消息大小是以字节为单位,不包括头部和大小的域
1 0x19 OP_GETSOURCERS操作码的值
16 NA 请求文件的哈希
38
6.2.12 已找到的源
该消息从服务器发送到客户端,带有请求文件的源(其它客户端)。消息大小可变的。
名称 Protocol Size Type
File hash
Sources Count
List of sources
源列表项格式
下面表格描述了源列表项的格式。每个源包含了拥有该文件的eMule客户端的细节。
名称 Client ID
Client Port
6.2.13 回调请求
该消息从客户端发送到服务器,请求其它客户端回调 – 例如,连接到请求中的客户端。有高ID的、想连接到一个低ID客户端(见2.4节)发送该消息。消息大小是10字节。
名称 Protocol
字节大小 1
默认值 0xE3
注释
字节大小 4 2
默认值 NA NA
注释
拥有该文件的eMule客户端的客户ID
拥有该文件的eMule客户端的TCP端口
字节大小 1 4 1 16 1 可变的
默认值 0xE3 0x42 NA NA NA
注释
消息大小是以字节为单位,不包括头部和大小的域
OP_FOUNDSOURCERS操作码的值
请求文件的哈希
消息中源的个数 源列表
39
Size Type Client ID
4 1 4
0x1C NA
消息大小是以字节为单位,不包括头部和大小的域
OP_CALLBACKREQUEST操作码的值
被请求回调客户ID
6.2.14 被请求回调
该消息从服务器发送到客户端,指出另一个客户端要求接收的客户端连接它。当接收的客户端是低ID(见2.4节),发送该消息。消息大小是12字节。接收的客户端尝试连接这个由回调请求包指定的IP和端口。
名称 Protocol Size Type Client IP
Client TCP Port
6.2.15 回调失败
该消息从服务器发送到客户端,指出客户端的回调请求失败。消息大小是6字节。接收的客户端把这个消息记日志,然后丢弃它。
名称 Protocol
字节大小 1
默认值 0xE3
注释
字节大小 1 4 1 4 2
默认值 0xE3 0x35 NA NA
注释
消息大小是以字节为单位,不包括头部和大小的域
OP_CALLBACKREQUESTED操作码的值
请求呼叫自己的客户端IP
客户端监听的TCP端口
40