-
Notifications
You must be signed in to change notification settings - Fork 65
/
Copy pathpcs.h
124 lines (99 loc) · 3.96 KB
/
pcs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
* Copyright (c) 2013 [email protected]
*/
#ifndef _BAIDU_PCS_H
#define _BAIDU_PCS_H
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "http_client.h"
#include "cJSON.h"
#define PCS_TOKEN_SIZE 1024
#define PCS_KEY_SIZE 1024
#define PCS_SECRET_SIZE 1024
/* 文件切片 */
typedef struct PCSFileBlock_s PCSFileBlock;
struct PCSFileBlock_s {
uint64_t offset; /*文件偏移量 */
uint64_t size; /*切片尺寸 */
char md5[33]; /*文件MD5 */
PCSFileBlock *next; /*链表用 */
FILE *fp; /*上传文件时用的读句柄 */
uint64_t readed_size; /*上传读取偏移量 */
};
/* 文件对象 */
typedef struct PCSFile_s PCSFile;
struct PCSFile_s {
char *path; /*文件路径 */
char md5[33]; /*文件MD5 */
char is_link; /*是否为链接 */
char is_dir; /*是否为目录 */
uint64_t size; /*文件大小 */
unsigned int ctime; /*创建时间 */
unsigned int mtime; /*修改时间 */
uint64_t block_size; /*分片大小 */
PCSFileBlock *block; /*文件切片 */
PCSFile *next; /*链表用 */
void *userdata; /*对象多用。。 */
};
typedef struct PCSFileList_s {
PCSFile *first;
} PCSFileList;
/* 空间信息 */
typedef struct BaiduPCSInfo_s {
uint64_t quota;
uint64_t used;
} BaiduPCSInfo;
/* API 对象 */
typedef struct BaiduPCS_s {
HttpClient *client; /*Curl */
char token[PCS_TOKEN_SIZE]; /*api_token */
char key[PCS_KEY_SIZE]; /*api_key */
char secret[PCS_SECRET_SIZE]; /*api_secret */
char error[4096]; /*错误信息 */
int error_code; /*错误码 */
char util_buffer0[4096];
char util_buffer1[4096];
struct stat file_st; /*文件信息缓冲 */
} BaiduPCS;
BaiduPCS *BaiduPCS_New();
void BaiduPCS_Free(BaiduPCS *api);
#define BaiduPCS_ThrowError(api, format, ...) snprintf(api->error, 4096, format, ##__VA_ARGS__)
#define BaiduPCS_ResetError(api) {api->error[0] = '\0'; api->error_code = 0;}
const char *BaiduPCS_GetError(BaiduPCS *api);
const char *BaiduPCS_Auth(BaiduPCS *api);
/* 获取空间信息 */
void BaiduPCS_Info(BaiduPCS *api, BaiduPCSInfo *info);
/* 上传单个文件 */
PCSFile *BaiduPCS_Upload(BaiduPCS *api, PCSFile *local_file, const char *remote_file, uint64_t split_threshold, const char *ondup);
/* 下载单个文件 */
void BaiduPCS_Download(BaiduPCS *api, const char *remote_file, FILE *local_fp);
/* 移动远程文件 */
void BaiduPCS_Move(BaiduPCS *api, const char *remote_from, const char * remote_to);
/* 复制远程文件 */
void BaiduPCS_Copy(BaiduPCS *api, const char *remote_from, const char * remote_to);
/* 删除远程文件 */
void BaiduPCS_Remove(BaiduPCS *api, const char *remote_file);
/* 列出远程目录的文件 */
PCSFileList *BaiduPCS_ListRemoteDir(BaiduPCS *api, const char *path);
/* 从远程路径创建文件对象 */
PCSFile *BaiduPCS_NewRemoteFile(BaiduPCS *api, const char *path);
/* 从本地路径创建文件对象 */
PCSFile *BaiduPCS_NewLocalFile(BaiduPCS *api, const char *path);
/* 文件切片 */
PCSFileBlock *PCSFileBlock_New();
void PCSFileBlock_Free(PCSFileBlock *block);
/* 文件对象 */
PCSFile *PCSFile_New();
/* 修改路径 */
void PCSFile_SetPath(PCSFile *file, const char *path);
void PCSFile_Free(PCSFile *file);
void PCSFile_Dump(PCSFile *file);
/* 文件列表 */
PCSFileList *PCSFileList_New();
void PCSFileList_Free(PCSFileList *file);
void PCSFileList_Prepend(PCSFileList *list, PCSFile *file);
PCSFile *PCSFileList_Find(PCSFileList *list, const char *path);
PCSFile *PCSFileList_Shift(PCSFileList *list);
void PCSFileList_Dump(PCSFileList *list);
#endif