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

📄 genfunc.h

📁 linux下http和ftp下载工具
💻 H
字号:
//#include "DandiBase.h"
#include <stdint.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/errno.h>
#include <stdarg.h>
//#include <tidy.h>
#include <pthread.h>
#include <fcntl.h>
#include <sys/time.h>
#include <math.h>
#include <sys/stat.h>
#include <fcntl.h>

#define MAXTHREADS 30
#define SIZEBETWEENTHREADS 16384
#define BUFLEN 1024 
#define sdd_ThreadBlockMinSize	262144 //the least size of each thread
#define HTTPFTP_MAGICCODE "httpftp"

#define sdd_ErrReturn(info,ret)	\
							{ \
							printf(info); \
							return ret; \
							}\

typedef  int (*fnDLoadFinish)(void *);

struct arg{
    int threadnumber;//0-30
    int a1; //range fromn a1 to a2 also lseed set to a1
    int a2;  //range end 
    int fd; //local file
    int booldown;//indict whether a thread has begun
    int allowotherdown;//0 other thread cannot download this thread, 1 not
	int bytesleft;//how many bytes left for this thread to download?
	int boolend;//whether this thread has returned.first will be set to 0;
};

typedef struct tagDLoadFileInfo
{
    char magiccode[16];         /*magic code*/
    int  nthread;               /*线程总数*/    
    int  filelength;            /*文件长度*/
    int  sizeget;               /*已下载文件大小*/
    int  hosttype;              /*主机协议类型,HTTP,FTP */
    char host[256];             /*从URL解析的主机的地址*/
    char path[256];             /*从URL解析的路径*/
    char filename[256];         /*下载的文件名*/
    char user[100];              /*user*/
    char pass[20];              /*password*/
    char localpath[256];        /*文件保存的路径*/
    char referpath[256];
    union                       /*port*/
    {
        int httpPort;
        int ftpPort;
    };
    int threadId;               /*线程的序号*/
    struct arg astPthread[MAXTHREADS];      /*线程信息数组*/    
}DLoadFileInfo;

typedef enum  tagExitCause
{
    FTPHTTP_NORMAL, /*正常的,未退出*/
    FTPHTTP_PAUSE,  /*暂停导致的退出*/
    FTPHTTP_DEL,    /*删除导致的退出*/
    FTPHTTP_UNREACH,/*连接不到服务器*/
}ExitCause;

typedef struct tagFtpHttpDLoadInfo
{
    ExitCause bTaskExit;              /*退出下载任务:暂停、删除*/
    int bBreakPoint;            /*是否为断点下载的*/ 
    int TotalLastGet;           /*上次下载的数据大小,用于计算即时下载速度*/
    fnDLoadFinish fnFinish;     /*下载完成回调函数*/
    DLoadFileInfo FileInfo;     /*下载的文件信息,需要保存,用于断点续传*/
    pthread_mutex_t lock;
    struct timeval tpstart,tpend; /*开始下载时间,下载完成时间*/
}FtpHttpDLoadInfo;


typedef struct tagDloadForCreatThread
{
    FtpHttpDLoadInfo *pInfo;
    int threadId;
}DloadForCreatThread;


extern int SaveThreadStat(DLoadFileInfo *FileInfo, char *zxwfile);
extern int GetThreadStat(DLoadFileInfo *FileInfo, char *zxwfile);

extern void printprocess(int sizeget, int filelength);

extern int ReadEn(int sock,int n);
extern int GetConnectSocket(char* host,int iport);
extern int GetThreadSize(DLoadFileInfo *pFileInfo);

⌨️ 快捷键说明

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