153 lines
3.9 KiB
C
153 lines
3.9 KiB
C
#ifndef LIBAOS_TRANSPORT_H
|
|
#define LIBAOS_TRANSPORT_H
|
|
|
|
#include "aos_define.h"
|
|
#include "aos_buf.h"
|
|
|
|
|
|
AOS_CPP_START
|
|
|
|
typedef struct aos_http_request_s aos_http_request_t;
|
|
typedef struct aos_http_response_s aos_http_response_t;
|
|
typedef struct aos_http_transport_s aos_http_transport_t;
|
|
typedef struct aos_http_controller_s aos_http_controller_t;
|
|
|
|
typedef struct aos_http_request_options_s aos_http_request_options_t;
|
|
typedef struct aos_http_transport_options_s aos_http_transport_options_t;
|
|
typedef struct aos_curl_http_transport_s aos_curl_http_transport_t;
|
|
|
|
typedef int (*aos_read_http_body_pt)(aos_http_request_t *req, char *buffer, int len);
|
|
typedef int (*aos_write_http_body_pt)(aos_http_response_t *resp, const char *buffer, int len);
|
|
|
|
typedef void (*oss_progress_callback)(int64_t consumed_bytes, int64_t total_bytes);
|
|
|
|
void aos_curl_response_headers_parse(aos_pool_t *p, aos_table_t *headers, char *buffer, int len);
|
|
aos_http_transport_t *aos_curl_http_transport_create(aos_pool_t *p);
|
|
int aos_curl_http_transport_perform(aos_http_transport_t *t);
|
|
|
|
struct aos_http_request_options_s {
|
|
int speed_limit;
|
|
int speed_time;
|
|
int dns_cache_timeout;
|
|
int connect_timeout;
|
|
int64_t max_memory_size;
|
|
int enable_crc;
|
|
char *proxy_host;
|
|
char *proxy_auth;
|
|
};
|
|
|
|
struct aos_http_transport_options_s {
|
|
char *user_agent;
|
|
char *cacerts_path;
|
|
uint32_t ssl_verification_disabled:1;
|
|
};
|
|
|
|
#define AOS_HTTP_BASE_CONTROLLER_DEFINE \
|
|
aos_http_request_options_t *options; \
|
|
aos_pool_t *pool; \
|
|
int64_t start_time; \
|
|
int64_t first_byte_time; \
|
|
int64_t finish_time; \
|
|
uint32_t owner:1; \
|
|
void *user_data;
|
|
|
|
struct aos_http_controller_s {
|
|
AOS_HTTP_BASE_CONTROLLER_DEFINE
|
|
};
|
|
|
|
typedef struct aos_http_controller_ex_s {
|
|
AOS_HTTP_BASE_CONTROLLER_DEFINE
|
|
// private
|
|
int error_code;
|
|
char *reason; // can't modify
|
|
} aos_http_controller_ex_t;
|
|
|
|
typedef enum {
|
|
BODY_IN_MEMORY = 0,
|
|
BODY_IN_FILE,
|
|
BODY_IN_CALLBACK
|
|
} aos_http_body_type_e;
|
|
|
|
struct aos_http_request_s {
|
|
char *host;
|
|
char *proto;
|
|
char *signed_url;
|
|
|
|
http_method_e method;
|
|
char *uri;
|
|
char *resource;
|
|
aos_table_t *headers;
|
|
aos_table_t *query_params;
|
|
|
|
aos_list_t body;
|
|
int64_t body_len;
|
|
char *file_path;
|
|
aos_file_buf_t *file_buf;
|
|
|
|
aos_pool_t *pool;
|
|
void *user_data;
|
|
aos_read_http_body_pt read_body;
|
|
|
|
aos_http_body_type_e type;
|
|
|
|
oss_progress_callback progress_callback;
|
|
uint64_t crc64;
|
|
int64_t consumed_bytes;
|
|
};
|
|
|
|
struct aos_http_response_s {
|
|
int status;
|
|
aos_table_t *headers;
|
|
|
|
aos_list_t body;
|
|
int64_t body_len;
|
|
char *file_path;
|
|
aos_file_buf_t* file_buf;
|
|
int64_t content_length;
|
|
|
|
aos_pool_t *pool;
|
|
void *user_data;
|
|
aos_write_http_body_pt write_body;
|
|
|
|
aos_http_body_type_e type;
|
|
|
|
oss_progress_callback progress_callback;
|
|
uint64_t crc64;
|
|
};
|
|
|
|
typedef enum {
|
|
TRANS_STATE_INIT,
|
|
TRANS_STATE_HEADER,
|
|
TRANS_STATE_BODY_IN,
|
|
TRANS_STATE_BODY_OUT,
|
|
TRANS_STATE_ABORT,
|
|
TRANS_STATE_DONE
|
|
} aos_transport_state_e;
|
|
|
|
#define AOS_HTTP_BASE_TRANSPORT_DEFINE \
|
|
aos_http_request_t *req; \
|
|
aos_http_response_t *resp; \
|
|
aos_pool_t *pool; \
|
|
aos_transport_state_e state; \
|
|
aos_array_header_t *cleanup; \
|
|
aos_http_transport_options_t *options; \
|
|
aos_http_controller_ex_t *controller;
|
|
|
|
struct aos_http_transport_s {
|
|
AOS_HTTP_BASE_TRANSPORT_DEFINE
|
|
};
|
|
|
|
struct aos_curl_http_transport_s {
|
|
AOS_HTTP_BASE_TRANSPORT_DEFINE
|
|
CURL *curl;
|
|
char *url;
|
|
struct curl_slist *headers;
|
|
curl_read_callback header_callback;
|
|
curl_read_callback read_callback;
|
|
curl_write_callback write_callback;
|
|
};
|
|
|
|
AOS_CPP_END
|
|
|
|
#endif
|