Linux平台下基于BitTorrent应用层协议的下载软件开发--缓冲管理模块(data.h)

#ifndef DATA_H
#define DATA_H
#include "peer.h"

// 每个Btcache结点维护一个长度为16KB的缓冲区,该缓冲区保存一个slice的数据
typedef struct _Btcache {
	unsigned char   *buff;        // 指向缓冲区的指针
	int             index;        // 数据所在的piece块的索引    //以piece为单位
	int             begin;        // 数据在piece块中的起始位置  //以字节为单位
	int             length;       // 数据的长度               //以字节为单位

	unsigned char   in_use;       // 该缓冲区是否在使用中
	unsigned char   read_write;   // 是发送给peer的数据还是接收到的数据
	                              // 若数据是从硬盘读出,read_write值为0
	                              // 若数据将要写入硬盘,read_write值为1
	unsigned char   is_full;      // 缓冲区是否满
	unsigned char   is_writed;    // 缓冲区中的数据是否已经写入到硬盘中
	int             access_count; // 对该缓冲区的访问计数

	struct _Btcache *next;
} Btcache;

Btcache* initialize_btcache_node();  // 为Btcache结点分配内存空间并进行初始化
int  create_btcache();               // 创建总大小为16K*1024即16MB的缓冲区
void release_memory_in_btcache();    // 释放data.c中动态分配的内存

int get_files_count();               // 获取种子文件中待下载的文件个数
int create_files();                  // 根据种子文件中的信息创建保存下载数据的文件

// 判断一个Btcache结点中的数据要写到哪个文件的哪个位置,并写入
int write_btcache_node_to_harddisk(Btcache *node);
// 从硬盘读出一个slice的数据存放到缓冲区中,在peer需要时发送给peer
// 要读的slice的索引index、begin、length已存到node所指向的结点中
int read_slice_from_harddisk(Btcache *node);
// 检查一个piece的数据是否正确,若正确则写入硬盘上的文件
int write_piece_to_harddisk(int sequence,Peer *peer);
// 从硬盘上的文件中读取一个piece存放到p所指向的缓冲区中
int read_piece_from_harddisk(Btcache *p, int index);

// 将16MB缓冲区中已下载的数据写入到硬盘上的文件中
int write_btcache_to_harddisk(Peer *peer);
// 当缓冲区不够用时,释放那些从硬盘上读取的piece
int release_read_btcache_node(int base_count);
// 从btcache缓冲区中清除那些未完成下载的piece
void clear_btcache_before_peer_close(Peer *peer);

// 将刚刚从peer处获取的一个slice存放到缓冲区中
int write_slice_to_btcache(int index,int begin,int length,
						   unsigned char *buff,int len,Peer *peer);
// 从缓冲区获取一个slice,读取的slice存放到peer的发送缓冲区中
int read_slice_for_send(int index,int begin,int length,Peer *peer);


// 以下是为下载和上传最后一个piece而增加的函数 
// 最后一个piece较为特殊,因为它是一个不完整的piece
int write_last_piece_to_btcache(Peer *peer);
int write_slice_to_last_piece(int index,int begin,int length,
							  unsigned char *buff,int len,Peer *peer);
int read_last_piece_from_harddisk(Btcache *p, int index);
int read_slice_for_send_last_piece(int index,int begin,int length,Peer *peer);
void release_last_piece();

#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值