⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dload.h

📁 linux下http和ftp下载工具
💻 H
字号:
/***********************************************************************
* File name: Dload.h
* Author: Version: Date: likun
* Description: 
*
* Others:
* Function List:
* 1. ....
* History:
* 1. Date:2008-3-21
* Author:likun create this file
* Modification:
* 2. ...
*************************************************************************/

#ifndef __DLOAD_H__
#define __DLOAD_H__

#include "hos.h"
#ifdef __cplusplus
extern "C" {
#endif

extern MsgHeader;

/*同时下载最大任务数*/
#define DLOAD_MAX_TASK  5
#define DLOAD_MAX_TREADNUM 10
#define DLOAD_MAX_HOSTNAME 256

/*存放下载任务记录文件的目录,用于断点续传*/
#define DLOAD_RECORD_FILE "/mnt/"

/*DLOAD模块一个消息的最大长度*/
#define DLOAD_MSG_MAXSIZE 1024 

/*DLOAD模块消息队列的最大消息数码*/
#define DLOAD_MSG_MAXNUM 256

/*同步消息超时时间*/
#define DLOAD_MSG_TIMEOUT 1000

/*文件名长度*/
#define DLOAD_FILENAME_LEN  256 

/*url长度*/
#define DLOAD_URL_LEN  256

/*file path 长度*/
#define DLOAD_PATH_LEN 256

/*username*/
#define DLOAD_USERNAME_LEN 100

/*password*/
#define DLOAD_PASSWD_LEN  20

#define DLOAD_INST_ID 0

#define DLOAD_PRINT(fmt,arg...)  {\
           fprintf(stderr,"\r\n%s:%04d, "fmt, __FILE__, __LINE__, ##arg);\
        }


typedef int DLoadTaskHandle;/*下载协议相关的信息,具体内容由协议生成*/
typedef void * HDLProtocolHandle;

/*断点续传信息的文件扩展名*/
#define DLOAD_BTBRFILE_EXT  "btbrfile"  


//#define DLOAD_FILE_MAGICCODE "likun716"

typedef enum tagDLOAD_PROTOCOL
{
	DLOAD_PROTOCOL_HTTP,
	DLOAD_PROTOCOL_FTP,
	DLOAD_PROTOCOL_BT,
	DLOAD_PROTOCOL_BULL
} DLOAD_PROTOCOL;

typedef  enum tagDLoadTaskStat
{
	DLOAD_STAT_DOING,     /*正在下载*/
	DLOAD_STAT_PAUSE,	  /*暂停下载*/
	DLOAD_STAT_WAIT,      /*等待下载*/
	DLOAD_STAT_FINISH,	  /*下载完成*/
	DLOAD_STAT_UNREACH,   /*服务器不可达*/
	DLOAD_STAT_BUTT
}DLoadTaskStat;

/* likun 下载任务信息结构体,对外提供*/
typedef struct tagDLoadTaskPubInfo
{
    DLoadTaskHandle hDloadTask;
    //下载类型
    //url
    //文件ID
    //char acSrcUrl[256];   /*从服务端获取的url信息*/
    int  RetCode;
    char acFileName[DLOAD_FILENAME_LEN]; /*文件名*/
    int  FileSize;        /*文件大小*/
    int  SizeGet;         /*已下载*/
    float  rate;         /*下载速度*/
    float  scale;        /*下载进度*/
    DLoadTaskStat  CurStat;         /*状态*/
}DLoadTaskPubInfo;

typedef struct tagfnDLoadPlug
{
    int (*fnStartTask)(void *);
    int (*fnPauseTask)(void *);
    int (*fnResumeTask)(void *);
    int (*fnDelTask)(void*);
    int (*fnFinishTask)(void*);
    int (*fnUninitProtocolInfo)(void*);
    int (*fnGetTaskInfo)(void *, DLoadTaskPubInfo *);
}fnDLoadPlug;

typedef enum tagDLoadErrCode
{
    DLOAD_ERR_ =  ERR_DEF(MODULEID_DLOAD,1),
}DLoadErrCode;

/*内部消息定义*/
typedef enum tagDLoadAreaMsgDef
{
   DLOAD_SYNC_DLOAD_ADDTASK = MSG_DEF(MODULEID_DLOAD,1),
   DLOAD_ASYN_DLOAD_CTRLCMD = MSG_DEF(MODULEID_DLOAD,2),
   DLOAD_SYNC_DLOAD_GETFIRSTTASK_INFO = MSG_DEF(MODULEID_DLOAD,3),
   DLOAD_SYNC_DLOAD_GETTASK_INFO_BYHANDLE = MSG_DEF(MODULEID_DLOAD,4),
   DLOAD_SYNC_DLOAD_GETNEXTTASK_INFO_BYHANDLE = MSG_DEF(MODULEID_DLOAD,5),
   DLOAD_SYNC_DLOAD_GET_TASKNUM = MSG_DEF(MODULEID_DLOAD,6),
   /*likun add for test*/
   DLOAD_SYNC_DLOAD_ADDTASK_TEST =  MSG_DEF(MODULEID_DLOAD,7),
}DLoadAreaMsgDef;

typedef  enum tagDLoadCtrCmd
{
    DLOAD_CMD_START,
    DLOAD_CMD_PAUSE,
    DLOAD_CMD_RESUME,
    DLOAD_CMD_DEL,
}DLoadCtrCmd;


/*用于发送控制命令的消息结构体*/
typedef struct tagDLoadMsgCtrCmd
{
    MsgHeader stMsgHdl;
    DLoadTaskHandle hTaskHandle;
    DLoadCtrCmd cmd;
}DLoadMsgCtrCmd;

typedef struct tagDLoadNewTask
{
    int ProtocolType;   /*下载协议类型*/
    char FileID[20];     /*文件唯一标识*/
}DLoadNewTask;

typedef struct tagDLoadMsgAddATask
{
    MsgHeader stMsgHdl;
    DLoadNewTask stNewTask;
}DLoadMsgAddATask;

/*likun add for test*/
typedef struct tagDLoadMsgAddATaskTest
{
    MsgHeader stMsgHdl;
    char   url[DLOAD_URL_LEN];
}DLoadMsgAddATaskTest;

typedef struct tagDLoadUrlInfo
{
    int protocolType;
    int threadNum;
    char FilePath[DLOAD_PATH_LEN];
    char DownloadUrl[DLOAD_URL_LEN];
    char Account[DLOAD_USERNAME_LEN];
    char Password[DLOAD_PASSWD_LEN];
}DLoadUrlInfo;


typedef struct tagDLoadMsgTaskPubInfo
{
    MsgHeader stMsgHdl;
    DLoadTaskPubInfo pubInfo;
}DLoadMsgTaskPubInfo;

typedef struct tagDLoadMsgTaskNum
{
    MsgHeader stMsgHdl;
    int taskNum;
}DLoadMsgTaskNum;


typedef struct tagDLoadMsgGetInfo
{
    MsgHeader stMsgHdl;
    DLoadTaskHandle hTaskHandle;
}DLoadMsgGetInfo;


/*下载管理内部维护的下载任务信息结构体定义*/
typedef struct tagDLoadTaskPrivateInfo
{
    DLoadTaskHandle hDloadTaskHandle;
    char           url[DLOAD_URL_LEN];
    DLoadTaskStat  CurStat;         /*状态*/
    fnDLoadPlug    fnPlug;          /*根据下载协议类型注册的相应操作函数*/
    HDLProtocolHandle pProtocolInfo;  /*协议相关的信息指针,文件下载完成或者删除下载任务时需要释放*/
}DLoadTaskPrivateInfo;



#ifdef _cplusplus
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -