SimpleTorrent
|
基于 B 编码语法树的工具函数实现 更多...
#include "butil.h"
#include "metainfo.h"
#include <string.h>
#include <arpa/inet.h>
#include <openssl/sha.h>
宏定义 | |
#define | PIECE_HASH (1 << 0) |
打印 hash 的 flag | |
#define | PEERS (1 << 1) |
打印二进制 peers 列表的 flag | |
#define | print_with_indent(indent, fmt, ...) printf("%*s" fmt, indent, "", ## __VA_ARGS__) |
带缩进的格式化打印 | |
函数 | |
static void | put_indent (int indent) |
输出缩进 更多... | |
static void | print_int (const struct BNode *bi, int indent) |
打印整型 更多... | |
static void | print_str (const struct BNode *b, int indent, int flags) |
打印串 更多... | |
static void | print_list (const struct BNode *list, int indent, int flags) |
打印列表 更多... | |
static void | print_dict (const struct BNode *dict, int indent, int flags) |
打印字典 更多... | |
void | print_bcode (const struct BNode *node, int indent, int flags) |
打印以 node 为根的 bencode 树 更多... | |
static const struct BNode * | dfs_bcode (const struct BNode *node, const char *key) |
深度优先搜索 bencode 树中字典里的某个键 key, 返回对应的值结点 更多... | |
const struct BNode * | query_bcode_by_key (const struct BNode *node, const char *key) |
搜索 bencode 树中字典里的某个键 key, 返回对应的值结点 更多... | |
void | make_info_hash (const struct BNode *root, unsigned char *md) |
计算 torrent 文件的 info hash 更多... | |
基于 B 编码语法树的工具函数实现
深度优先搜索 bencode 树中字典里的某个键 key, 返回对应的值结点
node | 语法树根结点 |
key | 要搜索的键 |
void make_info_hash | ( | const struct BNode * | root, |
unsigned char * | md | ||
) |
计算 torrent 文件的 info hash
root | 语法树根 |
md | sha1 输出缓冲区(至少 HASH_SIZE 字节) |
void print_bcode | ( | const struct BNode * | node, |
int | indent, | ||
int | flag | ||
) |
打印以 node 为根的 bencode 树
node | 语法树根结点 |
indent | 起始缩进 |
flag | 特殊打印要求 |
|
static |
打印字典
dict | 字典结点 |
indent | 缩进级别 |
flags | 打印格式要求 |
|
static |
打印整型
bi | 整型结点 |
indent | 缩进级别 |
|
static |
打印列表
list | 列表结点 |
indent | 缩进级别 |
flags | 打印格式要求 |
|
static |
打印串
b | 串结点 |
indent | 缩进级别 |
flags | 打印格式要求 |
|
inlinestatic |
输出缩进
indent | 缩进量 |