643 lines
25 KiB
C
643 lines
25 KiB
C
#include "aos_log.h"
|
|
#include "aos_util.h"
|
|
#include "aos_string.h"
|
|
#include "aos_status.h"
|
|
#include "oss_auth.h"
|
|
#include "oss_util.h"
|
|
#include "oss_xml.h"
|
|
#include "oss_api.h"
|
|
|
|
char *oss_gen_signed_url(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
int64_t expires,
|
|
aos_http_request_t *req)
|
|
{
|
|
aos_string_t signed_url;
|
|
char *expires_str = NULL;
|
|
aos_string_t expires_time;
|
|
int res = AOSE_OK;
|
|
|
|
expires_str = apr_psprintf(options->pool, "%" APR_INT64_T_FMT, expires);
|
|
aos_str_set(&expires_time, expires_str);
|
|
oss_get_object_uri(options, bucket, object, req);
|
|
res = oss_get_signed_url(options, req, &expires_time, &signed_url);
|
|
if (res != AOSE_OK) {
|
|
return NULL;
|
|
}
|
|
return signed_url.data;
|
|
}
|
|
|
|
aos_status_t *oss_put_object_from_buffer(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
aos_list_t *buffer,
|
|
aos_table_t *headers,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
return oss_do_put_object_from_buffer(options, bucket, object, buffer,
|
|
headers, NULL, NULL, resp_headers, NULL);
|
|
}
|
|
|
|
aos_status_t *oss_do_put_object_from_buffer(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
aos_list_t *buffer,
|
|
aos_table_t *headers,
|
|
aos_table_t *params,
|
|
oss_progress_callback progress_callback,
|
|
aos_table_t **resp_headers,
|
|
aos_list_t *resp_body)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
|
|
headers = aos_table_create_if_null(options, headers, 2);
|
|
set_content_type(NULL, object->data, headers);
|
|
apr_table_add(headers, OSS_EXPECT, "");
|
|
|
|
query_params = aos_table_create_if_null(options, params, 0);
|
|
|
|
oss_init_object_request(options, bucket, object, HTTP_PUT,
|
|
&req, query_params, headers, progress_callback, 0, &resp);
|
|
oss_write_request_body_from_buffer(buffer, req);
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_body(resp, resp_body);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
if (is_enable_crc(options) && has_crc_in_response(resp)) {
|
|
oss_check_crc_consistent(req->crc64, resp->headers, s);
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_put_object_from_file(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
const aos_string_t *filename,
|
|
aos_table_t *headers,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
return oss_do_put_object_from_file(options, bucket, object, filename,
|
|
headers, NULL, NULL, resp_headers, NULL);
|
|
}
|
|
|
|
aos_status_t *oss_do_put_object_from_file(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
const aos_string_t *filename,
|
|
aos_table_t *headers,
|
|
aos_table_t *params,
|
|
oss_progress_callback progress_callback,
|
|
aos_table_t **resp_headers,
|
|
aos_list_t *resp_body)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
int res = AOSE_OK;
|
|
|
|
s = aos_status_create(options->pool);
|
|
|
|
headers = aos_table_create_if_null(options, headers, 2);
|
|
set_content_type(filename->data, object->data, headers);
|
|
apr_table_add(headers, OSS_EXPECT, "");
|
|
|
|
query_params = aos_table_create_if_null(options, params, 0);
|
|
|
|
oss_init_object_request(options, bucket, object, HTTP_PUT, &req,
|
|
query_params, headers, progress_callback, 0, &resp);
|
|
|
|
res = oss_write_request_body_from_file(options->pool, filename, req);
|
|
if (res != AOSE_OK) {
|
|
aos_file_error_status_set(s, res);
|
|
return s;
|
|
}
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_body(resp, resp_body);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
if (is_enable_crc(options) && has_crc_in_response(resp)) {
|
|
oss_check_crc_consistent(req->crc64, resp->headers, s);
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_get_object_to_buffer(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
aos_table_t *headers,
|
|
aos_table_t *params,
|
|
aos_list_t *buffer,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
return oss_do_get_object_to_buffer(options, bucket, object, headers,
|
|
params, buffer, NULL, resp_headers);
|
|
}
|
|
|
|
aos_status_t *oss_do_get_object_to_buffer(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
aos_table_t *headers,
|
|
aos_table_t *params,
|
|
aos_list_t *buffer,
|
|
oss_progress_callback progress_callback,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
|
|
headers = aos_table_create_if_null(options, headers, 0);
|
|
params = aos_table_create_if_null(options, params, 0);
|
|
|
|
oss_init_object_request(options, bucket, object, HTTP_GET,
|
|
&req, params, headers, progress_callback, 0, &resp);
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_body(resp, buffer);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
if (is_enable_crc(options) && has_crc_in_response(resp) &&
|
|
!has_range_or_process_in_request(req)) {
|
|
oss_check_crc_consistent(resp->crc64, resp->headers, s);
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_get_object_to_file(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
aos_table_t *headers,
|
|
aos_table_t *params,
|
|
aos_string_t *filename,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
return oss_do_get_object_to_file(options, bucket, object, headers,
|
|
params, filename, NULL, resp_headers);
|
|
}
|
|
|
|
aos_status_t *oss_do_get_object_to_file(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
aos_table_t *headers,
|
|
aos_table_t *params,
|
|
aos_string_t *filename,
|
|
oss_progress_callback progress_callback,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
int res = AOSE_OK;
|
|
aos_string_t tmp_filename;
|
|
|
|
headers = aos_table_create_if_null(options, headers, 0);
|
|
params = aos_table_create_if_null(options, params, 0);
|
|
|
|
oss_get_temporary_file_name(options->pool, filename, &tmp_filename);
|
|
|
|
oss_init_object_request(options, bucket, object, HTTP_GET,
|
|
&req, params, headers, progress_callback, 0, &resp);
|
|
|
|
s = aos_status_create(options->pool);
|
|
res = oss_init_read_response_body_to_file(options->pool, &tmp_filename, resp);
|
|
if (res != AOSE_OK) {
|
|
aos_file_error_status_set(s, res);
|
|
return s;
|
|
}
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
if (is_enable_crc(options) && has_crc_in_response(resp) &&
|
|
!has_range_or_process_in_request(req)) {
|
|
oss_check_crc_consistent(resp->crc64, resp->headers, s);
|
|
}
|
|
|
|
oss_temp_file_rename(s, tmp_filename.data, filename->data, options->pool);
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_head_object(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
aos_table_t *headers,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
|
|
headers = aos_table_create_if_null(options, headers, 0);
|
|
|
|
query_params = aos_table_create_if_null(options, query_params, 0);
|
|
|
|
oss_init_object_request(options, bucket, object, HTTP_HEAD,
|
|
&req, query_params, headers, NULL, 0, &resp);
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_delete_object(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *headers = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
|
|
headers = aos_table_create_if_null(options, headers, 0);
|
|
query_params = aos_table_create_if_null(options, query_params, 0);
|
|
|
|
oss_init_object_request(options, bucket, object, HTTP_DELETE,
|
|
&req, query_params, headers, NULL, 0, &resp);
|
|
oss_get_object_uri(options, bucket, object, req);
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_copy_object(const oss_request_options_t *options,
|
|
const aos_string_t *source_bucket,
|
|
const aos_string_t *source_object,
|
|
const aos_string_t *dest_bucket,
|
|
const aos_string_t *dest_object,
|
|
aos_table_t *headers,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
char *copy_source = NULL;
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
char buffer[AOS_MAX_QUERY_ARG_LEN*3+1];
|
|
int res = -1;
|
|
|
|
s = aos_status_create(options->pool);
|
|
|
|
headers = aos_table_create_if_null(options, headers, 2);
|
|
query_params = aos_table_create_if_null(options, query_params, 0);
|
|
|
|
/* init headers */
|
|
res = aos_url_encode(buffer, source_object->data, AOS_MAX_QUERY_ARG_LEN);
|
|
if (res != AOSE_OK) {
|
|
aos_status_set(s, res, AOS_URL_ENCODE_ERROR_CODE, NULL);
|
|
return s;
|
|
}
|
|
|
|
copy_source = apr_psprintf(options->pool, "/%.*s/%s",
|
|
source_bucket->len, source_bucket->data, buffer);
|
|
apr_table_set(headers, OSS_CANNONICALIZED_HEADER_COPY_SOURCE, copy_source);
|
|
set_content_type(NULL, dest_object->data, headers);
|
|
|
|
oss_init_object_request(options, dest_bucket, dest_object, HTTP_PUT,
|
|
&req, query_params, headers, NULL, 0, &resp);
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_append_object_from_buffer(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
int64_t position,
|
|
aos_list_t *buffer,
|
|
aos_table_t *headers,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
|
|
/* init query_params */
|
|
query_params = aos_table_create_if_null(options, query_params, 2);
|
|
apr_table_add(query_params, OSS_APPEND, "");
|
|
aos_table_add_int64(query_params, OSS_POSITION, position);
|
|
|
|
/* init headers */
|
|
headers = aos_table_create_if_null(options, headers, 2);
|
|
set_content_type(NULL, object->data, headers);
|
|
apr_table_add(headers, OSS_EXPECT, "");
|
|
|
|
oss_init_object_request(options, bucket, object, HTTP_POST,
|
|
&req, query_params, headers, NULL, 0, &resp);
|
|
oss_write_request_body_from_buffer(buffer, req);
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_do_append_object_from_buffer(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
int64_t position,
|
|
uint64_t init_crc,
|
|
aos_list_t *buffer,
|
|
aos_table_t *headers,
|
|
aos_table_t *params,
|
|
oss_progress_callback progress_callback,
|
|
aos_table_t **resp_headers,
|
|
aos_list_t *resp_body)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
|
|
/* init query_params */
|
|
query_params = aos_table_create_if_null(options, params, 2);
|
|
apr_table_add(query_params, OSS_APPEND, "");
|
|
aos_table_add_int64(query_params, OSS_POSITION, position);
|
|
|
|
/* init headers */
|
|
headers = aos_table_create_if_null(options, headers, 2);
|
|
set_content_type(NULL, object->data, headers);
|
|
apr_table_add(headers, OSS_EXPECT, "");
|
|
|
|
oss_init_object_request(options, bucket, object, HTTP_POST, &req, query_params,
|
|
headers, progress_callback, init_crc, &resp);
|
|
oss_write_request_body_from_buffer(buffer, req);
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
oss_fill_read_response_body(resp, resp_body);
|
|
|
|
if (is_enable_crc(options) && has_crc_in_response(resp)) {
|
|
oss_check_crc_consistent(req->crc64, resp->headers, s);
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_append_object_from_file(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
int64_t position,
|
|
const aos_string_t *append_file,
|
|
aos_table_t *headers,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
int res = AOSE_OK;
|
|
|
|
/* init query_params */
|
|
query_params = aos_table_create_if_null(options, query_params, 2);
|
|
apr_table_add(query_params, OSS_APPEND, "");
|
|
aos_table_add_int64(query_params, OSS_POSITION, position);
|
|
|
|
/* init headers */
|
|
headers = aos_table_create_if_null(options, headers, 2);
|
|
set_content_type(append_file->data, object->data, headers);
|
|
apr_table_add(headers, OSS_EXPECT, "");
|
|
|
|
oss_init_object_request(options, bucket, object, HTTP_POST,
|
|
&req, query_params, headers, NULL, 0, &resp);
|
|
res = oss_write_request_body_from_file(options->pool, append_file, req);
|
|
|
|
s = aos_status_create(options->pool);
|
|
if (res != AOSE_OK) {
|
|
aos_file_error_status_set(s, res);
|
|
return s;
|
|
}
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_do_append_object_from_file(const oss_request_options_t *options,
|
|
const aos_string_t *bucket,
|
|
const aos_string_t *object,
|
|
int64_t position,
|
|
uint64_t init_crc,
|
|
const aos_string_t *append_file,
|
|
aos_table_t *headers,
|
|
aos_table_t *params,
|
|
oss_progress_callback progress_callback,
|
|
aos_table_t **resp_headers,
|
|
aos_list_t *resp_body)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
int res = AOSE_OK;
|
|
|
|
/* init query_params */
|
|
query_params = aos_table_create_if_null(options, params, 2);
|
|
apr_table_add(query_params, OSS_APPEND, "");
|
|
aos_table_add_int64(query_params, OSS_POSITION, position);
|
|
|
|
/* init headers */
|
|
headers = aos_table_create_if_null(options, headers, 2);
|
|
set_content_type(append_file->data, object->data, headers);
|
|
apr_table_add(headers, OSS_EXPECT, "");
|
|
|
|
oss_init_object_request(options, bucket, object, HTTP_POST, &req, query_params,
|
|
headers, progress_callback, init_crc, &resp);
|
|
res = oss_write_request_body_from_file(options->pool, append_file, req);
|
|
|
|
s = aos_status_create(options->pool);
|
|
if (res != AOSE_OK) {
|
|
aos_file_error_status_set(s, res);
|
|
return s;
|
|
}
|
|
|
|
s = oss_process_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
oss_fill_read_response_body(resp, resp_body);
|
|
|
|
if (is_enable_crc(options) && has_crc_in_response(resp)) {
|
|
oss_check_crc_consistent(req->crc64, resp->headers, s);
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_put_object_from_buffer_by_url(const oss_request_options_t *options,
|
|
const aos_string_t *signed_url,
|
|
aos_list_t *buffer,
|
|
aos_table_t *headers,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
|
|
/* init query_params */
|
|
headers = aos_table_create_if_null(options, headers, 0);
|
|
query_params = aos_table_create_if_null(options, query_params, 0);
|
|
|
|
oss_init_signed_url_request(options, signed_url, HTTP_PUT,
|
|
&req, query_params, headers, &resp);
|
|
|
|
oss_write_request_body_from_buffer(buffer, req);
|
|
|
|
s = oss_process_signed_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
if (is_enable_crc(options) && has_crc_in_response(resp)) {
|
|
oss_check_crc_consistent(req->crc64, resp->headers, s);
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_put_object_from_file_by_url(const oss_request_options_t *options,
|
|
const aos_string_t *signed_url,
|
|
aos_string_t *filename,
|
|
aos_table_t *headers,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
int res = AOSE_OK;
|
|
|
|
s = aos_status_create(options->pool);
|
|
|
|
headers = aos_table_create_if_null(options, headers, 0);
|
|
query_params = aos_table_create_if_null(options, query_params, 0);
|
|
|
|
oss_init_signed_url_request(options, signed_url, HTTP_PUT,
|
|
&req, query_params, headers, &resp);
|
|
res = oss_write_request_body_from_file(options->pool, filename, req);
|
|
if (res != AOSE_OK) {
|
|
aos_file_error_status_set(s, res);
|
|
return s;
|
|
}
|
|
|
|
s = oss_process_signed_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
if (is_enable_crc(options) && has_crc_in_response(resp)) {
|
|
oss_check_crc_consistent(req->crc64, resp->headers, s);
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_get_object_to_buffer_by_url(const oss_request_options_t *options,
|
|
const aos_string_t *signed_url,
|
|
aos_table_t *headers,
|
|
aos_table_t *params,
|
|
aos_list_t *buffer,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
|
|
headers = aos_table_create_if_null(options, headers, 0);
|
|
params = aos_table_create_if_null(options, params, 0);
|
|
|
|
oss_init_signed_url_request(options, signed_url, HTTP_GET,
|
|
&req, params, headers, &resp);
|
|
|
|
s = oss_process_signed_request(options, req, resp);
|
|
oss_fill_read_response_body(resp, buffer);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
if (is_enable_crc(options) && has_crc_in_response(resp) &&
|
|
!has_range_or_process_in_request(req)) {
|
|
oss_check_crc_consistent(resp->crc64, resp->headers, s);
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
aos_status_t *oss_get_object_to_file_by_url(const oss_request_options_t *options,
|
|
const aos_string_t *signed_url,
|
|
aos_table_t *headers,
|
|
aos_table_t *params,
|
|
aos_string_t *filename,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
int res = AOSE_OK;
|
|
aos_string_t tmp_filename;
|
|
|
|
s = aos_status_create(options->pool);
|
|
|
|
headers = aos_table_create_if_null(options, headers, 0);
|
|
params = aos_table_create_if_null(options, params, 0);
|
|
|
|
oss_get_temporary_file_name(options->pool, filename, &tmp_filename);
|
|
|
|
oss_init_signed_url_request(options, signed_url, HTTP_GET,
|
|
&req, params, headers, &resp);
|
|
|
|
res = oss_init_read_response_body_to_file(options->pool, filename, resp);
|
|
if (res != AOSE_OK) {
|
|
aos_file_error_status_set(s, res);
|
|
return s;
|
|
}
|
|
|
|
s = oss_process_signed_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
if (is_enable_crc(options) && has_crc_in_response(resp) &&
|
|
!has_range_or_process_in_request(req)) {
|
|
oss_check_crc_consistent(resp->crc64, resp->headers, s);
|
|
}
|
|
|
|
oss_temp_file_rename(s, tmp_filename.data, filename->data, options->pool);
|
|
|
|
return s;
|
|
}
|
|
|
|
|
|
aos_status_t *oss_head_object_by_url(const oss_request_options_t *options,
|
|
const aos_string_t *signed_url,
|
|
aos_table_t *headers,
|
|
aos_table_t **resp_headers)
|
|
{
|
|
aos_status_t *s = NULL;
|
|
aos_http_request_t *req = NULL;
|
|
aos_http_response_t *resp = NULL;
|
|
aos_table_t *query_params = NULL;
|
|
|
|
headers = aos_table_create_if_null(options, headers, 0);
|
|
query_params = aos_table_create_if_null(options, query_params, 0);
|
|
|
|
oss_init_signed_url_request(options, signed_url, HTTP_HEAD,
|
|
&req, query_params, headers, &resp);
|
|
|
|
s = oss_process_signed_request(options, req, resp);
|
|
oss_fill_read_response_header(resp, resp_headers);
|
|
|
|
return s;
|
|
}
|