关于插件
=========
	1. 插件是一个以 db_ 作为文件名前缀的DLL.
	2. 插件位于Tracker主程序所在目录的子目录Plugins下
	3. 此DLL有5个导出函数, 原型为:
		BOOL CALL_TYPE db_connect(LPSTR);
		BOOL CALL_TYPE db_update(const unsigned char* , int, int, int);
		BOOL CALL_TYPE db_disconnect();
		int  CALL_TYPE db_fetch(info_list_t** phead);
		int  CALL_TYPE db_fetch2(info_list_t** phead);
	其中: 
		CALL_TYPE是函数的调用规约(Calling Convention), 为使Tracker能准确地与DLL进行参数传递, 此处必须定义为
		#define CALL_TYPE __fastcall

		info_list_t 是保存 info_hash 的单链表结构，定义如下：
		typedef struct info_list_s {
			struct info_list_s	*next;
			char info[40];
		}info_list_t;			

	函数功能说明：
		db_connect      连接数据库  参数为简单字符串, 具体形式可由用户自行定义
		db_update       向数据库更新数据    参数从左至右依次为 
		                info_hash的字节表示(共20Byte), 新增的完成数, 活动的peer数, 活动的种子数 
		db_fetch        第一次从数据中读取新增数据    
				参数为 info_hash 的单链表结构指针的指针, BCTracker负责释放链表内存。
				返回的结果是读入记录的个数
		db_fetch2       第一次以后从数据中读取新增数据 
		                参数为 info_hash 的单链表结构指针的指针, BCTracker负责释放链表内存。
				返回的结果是读入记录的个数
		db_disconnect   断开数据库连接

如何编写自己的插件
===================
示例SDK以编写mysql数据库接口为例, 说明如何编写数据库插件.
	1. 在编译本SDK之前, 需要mysql提供的开发包, 包括头文件(.h), 静态链接库文件(.lib), 和动态链接库(.dll). 此开发包可通过安装windows版的mysql获得(http://dev.mysql.com/downloads/index.html). 在我们提供的zip文件的plugin_sdk/db_mysql/mysql中也包含了最新的开发包.
	2. 将头文件所有的目录加入到VS的头文件包含目录列表, 将静态库文件所有的目录加入到VS的静态链接库目录列表.
	3. 用.def定义导出符号. 其编写格式可参考示例SDK的.def, 在链接属性中将其设置为模块定义文件
	4. 编译dll. 将编译好的db_mysql.dll置于Plugins目录中后, 将libmySQL.dll置于Tracker主程序同一目录下, 即db_mysql.dll的上一级目录, 或置于系统目录system32下.
	5. 定义连接字符串. 示例程序定义的连接字符串形式为 host:user:passwd:db
	   分别为: 主机名(可为域名或IP地址), 数据库的用户名(如root), 用户名对应的密码(如为空, 则不填), 数据库名
	   中间不能有空格或TAB符
	   如	1.2.3.4:root:abc123:bt_db  -   在1.2.3.4上的bt_db数据库, 访问用户名为root, root的密码为abc123
		db.abc.com:sa::bt_db       -   在db.abc.com上的bt_db数据库, 访问用户名为sa, sa的密码为空
	   如使用ADO作为数据库引擎时, 可直接使用ADO的连接字符串. 具体的编写请参考Microsoft关于ADO的说明，参阅ado_conn.txt。
