summaryrefslogtreecommitdiff
path: root/src/hos_client.h
blob: 657a51c20c8ff94f115b845b387322faa074c9f8 (plain)
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/*************************************************************************
    > File Name: hos_client.h
    > Author: pxz
    > Created Time: Thu 10 Sep 2020 03:13:59 PM CST
 ************************************************************************/
#ifndef __HOS_CLIENT_INIT__
#define __HOS_CLIENT_INIT__

/*hos instance */
typedef struct hos_instance_s{
  bool result;
  int  error_code;
  char error_message[1024];
  const char *hos_url_prefix;
}* hos_instance;

#define HOS_CLIENT_OK 0

/* fd mode */
#define FILE_MODE   0x00
#define BUFF_MODE   0x01
#define APPEND_MODE 0x02    /* 默认不追加 */

/* hos 错误码 */
enum hoserrors
{
    HOS_PARAMETER_ERROR = -1,
    HOS_FILE_NOT_EXIST = -2,
    HOS_HASH_NOT_FIND = -3,
    HOS_FD_NOT_ENOUGH = -4,
    HOS_SEND_FAILED = -5,
    HOS_RUNTIME_LOG_FAILED = -6,
    HOS_CONF_ERROR = -7,
    HOS_BUCKET_NOT_EXIST = -8,

};

/* s3 的错误码 */
enum s3errors
{
  //From Core Aws::S3::S3Error + 1//
  //////////////////////////////////////////////////////////////////////////////////////////
  INCOMPLETE_SIGNATURE = 1,
  INTERNAL_FAILURE = 2,
  INVALID_ACTION = 3,
  INVALID_CLIENT_TOKEN_ID = 4,
  INVALID_PARAMETER_COMBINATION = 5,
  INVALID_QUERY_PARAMETER = 6,
  INVALID_PARAMETER_VALUE = 7,
  MISSING_ACTION = 8, // SDK should never allow
  MISSING_AUTHENTICATION_TOKEN = 9, // SDK should never allow
  MISSING_PARAMETER = 10, // SDK should never allow
  OPT_IN_REQUIRED = 11,
  REQUEST_EXPIRED = 12,
  SERVICE_UNAVAILABLE = 13,
  THROTTLING = 14,
  VALIDATION = 15,
  ACCESS_DENIED = 16,
  RESOURCE_NOT_FOUND = 17,   // Shared with multiple services
  UNRECOGNIZED_CLIENT = 18,  // Most likely caused by an invalid access key or secret key
  MALFORMED_QUERY_STRING = 19,  
  SLOW_DOWN = 20,
  REQUEST_TIME_TOO_SKEWED = 21,
  INVALID_SIGNATURE = 22,
  SIGNATURE_DOES_NOT_MATCH = 23,
  INVALID_ACCESS_KEY_ID = 24,
  REQUEST_TIMEOUT = 25,
  NETWORK_CONNECTION = 100,   // General failure to send message to service

  // These are needed for logical reasons
  UNKNOWN = 101,
  CLIENT_SIGNING_FAILURE = 102, // Client failed to sign the request
  USER_CANCELLED = 103, // User cancelled the request
  SERVICE_EXTENSION_START_RANGE = 129,
  BUCKET_ALREADY_EXISTS= SERVICE_EXTENSION_START_RANGE + 1,
  BUCKET_ALREADY_OWNED_BY_YOU,
  NO_SUCH_BUCKET,
  NO_SUCH_KEY,
  NO_SUCH_UPLOAD,
  OBJECT_ALREADY_IN_ACTIVE_TIER,
  OBJECT_NOT_IN_ACTIVE_TIER
};

typedef void (*put_finished_callback)(bool, const char *, const char *, const char *, void *);

/*//FIXME 改为static,不再对外提供 
*************************************************************************************
 * 函数名: hos_instance
 * 参数:   const char *serverip        目的地址,如"192.168.44.12"
 *          size_t port                 端口号
 *          const char *accesskeyid     AWS access key ID,如"default"
 *          const char *secretkey       AWS secret key,如"default"
 *          siez_t pool_size            线程池大小
 *          size_t thread_sum           线程总数
 * 返回值: 成功返回一个实例,失败返回NULL。
*************************************************************************************
hos_instance hos_client_create(const char *serverip, size_t port, const char *accesskeyid, const char *secretkey, size_t pool_size);
*/

/*************************************************************************************
 * 函数名:   hos_init_instance
 * 输入参数: conf_path 配置文件路径
 *           thread_num 线程数    
 * 返回值:   hos 实例创建结果
*************************************************************************************/
hos_instance hos_init_instance(const char *conf_path, const char *module, size_t thread_num, const char *bucket);
/*************************************************************************************
 * 函数名: hos_create_bucket
 * 参数:    const char *bucket  桶名称
 * 返回值: bool 成功返回true,失败返回false
*************************************************************************************/
//bool hos_verify_bucket(const char *bucket);
/*************************************************************************************
 * 函数名: hos_create_bucket
 * 参数:   const char * bucket         桶名称
 * 返回值: int  成功返回0,S3错误返回s3errors错误码,hos client错误返回hoserrors错误码
*************************************************************************************/
int hos_create_bucket(hos_instance instance, const char *bucket);
/*************************************************************************************
 * 函数名: hos_upload_file
 * 参数:   hos_instance instance    非空句柄
 *          const char * bucket         桶名称
 *          const char * file_path         上传对象路径
 *          put_finished_callback callback upload操作结束时调用的回调函数
 *          void *userdata              用户自定义数据
 *          size_t thread_id            当前线程id
 * 返回值   int                         成功返回0,失败返回hoserros错误码
*************************************************************************************/
int hos_upload_file(hos_instance instance, const char *bucket, const char *file_path, put_finished_callback callback, void* userdata, size_t thread_id);
/*************************************************************************************
 * 函数名: hos_upload_buf
 * 参数:   hos_instance instance    非空句柄
 *          const char * bucket         桶名称
 *          const char * object         上传对象名称
 *          const char *buf             上传的buf
 *          size_t buf_len              上传的buf的长度
 *          put_finished_callback callback upload操作结束时调用的回调函数
 *          void *userdata              用户自定义数据
 *          size_t thread_id            当前线程id
 * 返回值   int                         成功返回0,失败返回hoserros错误码
*************************************************************************************/
int hos_upload_buf(hos_instance instance, const char *bucket, const char *object, const char *buf, size_t buf_len, put_finished_callback callback, void *userdata, size_t thread_id);
/*************************************************************************************
 * 函数名: hos_open_fd
 * 参数:   const char * bucket         桶名称
 *          const char * object         上传对象名称
 *          put_finished_callback callback upload操作结束时调用的回调函数
 *          void *data                  用户回调函数自定义数据
 *          size_t thread_id            线程ID
 *          int mode                    模式 (FILE OR BUFFER, APPEND OR NOT)
 * 返回值   int                         成功返回fd(fd >=3),失败返回hoserros错误码
*************************************************************************************/
int hos_open_fd(const char *bucket, const char *object, put_finished_callback callback, void *userdata, size_t thread_id, int mode);
/*************************************************************************************
 * 函数名: hos_write
 * 参数:   size_t fd                     hos_open_fd返回的fd
 *          const char * stream         待上传的数据
 *          size_t stream               待上传的数据长度
 *          size_t thread_id            线程ID
 *          size_t position             append模式下的每段内容编号
 * 返回值   int                         成功返回0,失败返回hoserror
*************************************************************************************/
int hos_write(size_t fd, const char *stream, size_t stream_len, size_t thread_id);
/*************************************************************************************
 * 函数名: hos_close_fd
 * 参数:   size_t fd                   fd
 *          size_t thread_id            线程ID
 * 返回值   int                         成功返回0,失败返回hoserros错误码
*************************************************************************************/
int hos_close_fd(size_t fd, size_t thread_id);
/*************************************************************************************
 * 函数名: hos_shutdown_instance
 * 返回值   int                         成功返回0,失败返回hoserros错误码
*************************************************************************************/
int hos_shutdown_instance();
#endif