BT下载软件开发笔记——种子解析模块的设计与实现

一.种子解析模块的功能

负责解析种子文件,从中获取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 file\n", __FILE__, __LINE__);
        return -1;
    }

    // get metafile's length
    fseek(fp, 0, SEEK_END);
    filesize = ftell(fp); 
    if(filesize == -1)
    {
        printf("%s:%d fseek failed\n", __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] = '\0';
    metafile_content = shared_ptr<string> (new string(buffer));

#if __DEBUG__
    cout<<"metafile_content: "<<*metafile_content<<endl;
#endif
    // close file
    fclose(fp);
    return 0;
}

持续更新中…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值