|
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 | 缩进量 |

1.8.11