概述
一.种子解析模块的功能
负责解析种子文件,从中获取Tracker服务器的地址,待下载文件的文件名和长度,piece长度。各个piece的hash值。
二.模块内部函数实现
1.int read_metafile(char *metafile_name)
–功能–:将metafile中的内容读入metafile_content缓冲区,后续方便处理
–参数–:metafile_name为种子文件名
–返回值–:成功返回0,否则返回1
某些说明:
种子以二进制方式打开,(种子文件可能出现piece的hash值为0x00,若以字符形式打开,遇到该字符,库函数将认为读取文件结束)
实现:
//read the metafile's content to metafile_content
int ParseMetafile::read_metafile(char *metafile_name)
{
long i;
//open file by binary, real only
FILE *fp = fopen(metafile_name, "rb");
if(NULL == fp)
{
printf("%s:%d can not open filen", __FILE__, __LINE__);
return -1;
}
// get metafile's length
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
if(filesize == -1)
{
printf("%s:%d fseek failedn", __FILE__, __LINE__);
return -1;
}
// read content to metafile_content
char buffer[filesize + 1];
bzero(buffer, filesize + 1);
fseek(fp, 0, SEEK_SET);
for(i = 0; i < filesize; ++i)
buffer[i] = fgetc(fp);
buffer[i] = '