SimpleTorrent
宏定义 | 函数
butil.c 文件参考

基于 B 编码语法树的工具函数实现 更多...

#include "butil.h"
#include "metainfo.h"
#include <string.h>
#include <arpa/inet.h>
#include <openssl/sha.h>
butil.c 的引用(Include)关系图:

宏定义

#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 BNodedfs_bcode (const struct BNode *node, const char *key)
 深度优先搜索 bencode 树中字典里的某个键 key, 返回对应的值结点 更多...
 
const struct BNodequery_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 编码语法树的工具函数实现

函数说明

static const struct BNode* dfs_bcode ( const struct BNode node,
const char *  key 
)
static

深度优先搜索 bencode 树中字典里的某个键 key, 返回对应的值结点

参数
node语法树根结点
key要搜索的键
返回
键对应的值结点,没有则返回 NULL.

这是这个函数的调用关系图:

void make_info_hash ( const struct BNode root,
unsigned char *  md 
)

计算 torrent 文件的 info hash

参数
root语法树根
mdsha1 输出缓冲区(至少 HASH_SIZE 字节)

这是这个函数的调用关系图:

void print_bcode ( const struct BNode node,
int  indent,
int  flag 
)

打印以 node 为根的 bencode 树

参数
node语法树根结点
indent起始缩进
flag特殊打印要求

这是这个函数的调用关系图:

static void print_dict ( const struct BNode dict,
int  indent,
int  flags 
)
static

打印字典

参数
dict字典结点
indent缩进级别
flags打印格式要求

这是这个函数的调用关系图:

static void print_int ( const struct BNode bi,
int  indent 
)
static

打印整型

参数
bi整型结点
indent缩进级别

这是这个函数的调用关系图:

static void print_list ( const struct BNode list,
int  indent,
int  flags 
)
static

打印列表

参数
list列表结点
indent缩进级别
flags打印格式要求

这是这个函数的调用关系图:

static void print_str ( const struct BNode b,
int  indent,
int  flags 
)
static

打印串

参数
b串结点
indent缩进级别
flags打印格式要求

这是这个函数的调用关系图:

static void put_indent ( int  indent)
inlinestatic

输出缩进

参数
indent缩进量

这是这个函数的调用关系图:

const struct BNode* query_bcode_by_key ( const struct BNode tree,
const char *  key 
)

搜索 bencode 树中字典里的某个键 key, 返回对应的值结点

参数
tree语法树根结点
key要搜索的键
返回
键对应的值结点,没有则返回 NULL.

这是这个函数的调用关系图: