From 7f7a2a92ff9f3c7e7251ca583723ab7af2dad5cf Mon Sep 17 00:00:00 2001 From: Dengke Date: Tue, 10 Dec 2024 14:47:24 -0800 Subject: [PATCH] move to config init --- source/s3_auto_ranged_put.c | 72 ------------------------------------- source/s3_checksums.c | 9 +++++ 2 files changed, 9 insertions(+), 72 deletions(-) diff --git a/source/s3_auto_ranged_put.c b/source/s3_auto_ranged_put.c index e6e2bdd8..71004885 100644 --- a/source/s3_auto_ranged_put.c +++ b/source/s3_auto_ranged_put.c @@ -313,78 +313,6 @@ static struct aws_s3_meta_request_vtable s_s3_auto_ranged_put_vtable = { .pause = s_s3_auto_ranged_put_pause, }; -static int s_init_and_verify_checksum_config_from_headers( - struct checksum_config_storage *checksum_config, - const struct aws_http_message *message, - const void *log_id) { - /* Check if the checksum header was set from the message */ - struct aws_http_headers *headers = aws_http_message_get_headers(message); - enum aws_s3_checksum_algorithm header_algo = AWS_SCA_NONE; - struct aws_byte_cursor header_value; - AWS_ZERO_STRUCT(header_value); - - for (size_t i = 0; i < AWS_ARRAY_SIZE(s_checksum_algo_priority_list); i++) { - enum aws_s3_checksum_algorithm algorithm = s_checksum_algo_priority_list[i]; - const struct aws_byte_cursor algorithm_header_name = - aws_get_http_header_name_from_checksum_algorithm(algorithm); - if (aws_http_headers_get(headers, algorithm_header_name, &header_value) == AWS_OP_SUCCESS) { - if (header_algo == AWS_SCA_NONE) { - header_algo = algorithm; - } else { - /* If there are multiple checksum headers set, it's malformed request */ - AWS_LOGF_ERROR( - AWS_LS_S3_META_REQUEST, - "id=%p Could not create auto-ranged-put meta request; multiple checksum headers has been set", - log_id); - return aws_raise_error(AWS_ERROR_INVALID_ARGUMENT); - } - } - } - if (header_algo == AWS_SCA_NONE) { - /* No checksum header found, done */ - return AWS_OP_SUCCESS; - } - - /* Found the full object checksum from the header, check if it matches the explicit setting from config */ - if (checksum_config->checksum_algorithm != AWS_SCA_NONE && checksum_config->checksum_algorithm != header_algo) { - AWS_LOGF_ERROR( - AWS_LS_S3_META_REQUEST, - "id=%p: Could not create auto-ranged-put meta request; checksum config mismatch the checksum from header.", - log_id); - return aws_raise_error(AWS_ERROR_INVALID_ARGUMENT); - } - if (checksum_config->has_full_object_checksum) { - /* If the full object checksum has been set, it's malformed request */ - AWS_LOGF_ERROR( - AWS_LS_S3_META_REQUEST, - "id=%p: Could not create auto-ranged-put meta request; full object checksum is set from multiple ways.", - log_id); - return aws_raise_error(AWS_ERROR_INVALID_ARGUMENT); - } - - AWS_LOGF_DEBUG( - AWS_LS_S3_META_REQUEST, - "id=%p: Setting the full-object checksum from header; algorithm: " PRInSTR ", value: " PRInSTR ".", - log_id, - AWS_BYTE_CURSOR_PRI(aws_get_checksum_algorithm_name(header_algo)), - AWS_BYTE_CURSOR_PRI(header_value)); - /* Set algo */ - checksum_config->checksum_algorithm = header_algo; - if (checksum_config->location == AWS_SCL_NONE) { - /* Set the checksum location to trailer for the parts, complete MPU will still have the checksum in the header. - * But to keep the data integrity for the parts, we need to set the checksum location to trailer to send the - * parts level checksums. - */ - checksum_config->location = AWS_SCL_TRAILER; - } - - /* Set full object checksum from the header value. */ - aws_byte_buf_init_copy_from_cursor( - &checksum_config->full_object_checksum, checksum_config->allocator, header_value); - checksum_config->has_full_object_checksum = true; - return AWS_OP_SUCCESS; -} - /* Allocate a new auto-ranged put meta request */ struct aws_s3_meta_request *aws_s3_meta_request_auto_ranged_put_new( struct aws_allocator *allocator, diff --git a/source/s3_checksums.c b/source/s3_checksums.c index 12f46052..d1d561ad 100644 --- a/source/s3_checksums.c +++ b/source/s3_checksums.c @@ -363,6 +363,15 @@ static int s_init_and_verify_checksum_config_from_headers( return AWS_OP_SUCCESS; } + if (checksum_config->has_full_object_checksum) { + /* If the full object checksum has been set, it's malformed request */ + AWS_LOGF_ERROR( + AWS_LS_S3_META_REQUEST, + "id=%p: Could not create auto-ranged-put meta request; full object checksum is set from multiple ways.", + log_id); + return aws_raise_error(AWS_ERROR_INVALID_ARGUMENT); + } + AWS_LOGF_DEBUG( AWS_LS_S3_META_REQUEST, "id=%p Setting the full-object checksum from header; algorithm: " PRInSTR ", value: " PRInSTR ".",