AWS_DOTNET_API void aws_dotnet_auth_sign_http_request()

in native/src/signing.c [283:347]


AWS_DOTNET_API void aws_dotnet_auth_sign_http_request(
    const char *method,
    const char *uri,
    struct aws_dotnet_http_header headers[],
    uint32_t header_count,
    struct aws_dotnet_stream_function_table body_stream_delegates,
    struct aws_signing_config_native native_signing_config,
    uint64_t callback_id,
    aws_dotnet_auth_on_signing_complete_fn *on_signing_complete) {

    int32_t error_code = AWS_ERROR_SUCCESS;
    struct aws_dotnet_signing_callback_state *continuation = NULL;

    struct aws_signing_config_aws config;
    AWS_ZERO_STRUCT(config);

    struct aws_allocator *allocator = aws_dotnet_get_allocator();

    continuation = aws_mem_calloc(allocator, 1, sizeof(struct aws_dotnet_signing_callback_state));
    if (continuation == NULL) {
        goto on_error;
    }

    if (s_initialize_signing_config(&config, &native_signing_config, continuation)) {
        goto on_error;
    }

    continuation->callback_id = callback_id;
    continuation->on_signing_complete = on_signing_complete;
    continuation->signature_type = native_signing_config.signature_type;
    continuation->should_sign_header = native_signing_config.should_sign_header;
    continuation->request = aws_build_http_request(method, uri, headers, header_count, &body_stream_delegates);
    if (continuation->request == NULL) {
        goto on_error;
    }

    continuation->body_stream = aws_http_message_get_body_stream(continuation->request);
    continuation->original_request_signable = aws_signable_new_http_request(allocator, continuation->request);
    if (continuation->original_request_signable == NULL) {
        goto on_error;
    }

    /* Sign the native request */
    if (aws_sign_request_aws(
            allocator,
            continuation->original_request_signable,
            (struct aws_signing_config_base *)&config,
            s_aws_signing_complete,
            continuation)) {
        goto on_error;
    }

    return;

on_error:

    s_destroy_signing_callback_state(continuation);

    error_code = aws_last_error();
    if (error_code == AWS_ERROR_SUCCESS) {
        error_code = AWS_ERROR_UNKNOWN;
    }

    on_signing_complete(callback_id, error_code, NULL, 0, NULL, NULL, 0);
}