void aws_crt_http_message_to_blob()

in src/http_message.c [118:152]


void aws_crt_http_message_to_blob(const aws_crt_http_message *message, aws_crt_buf *out_blob) {
    aws_crt_http_message *mutable_message = (aws_crt_http_message *)message;

    struct aws_byte_cursor method;
    aws_http_message_get_request_method(message->message, &method);

    struct aws_byte_cursor path;
    aws_http_message_get_request_path(message->message, &path);

    struct aws_http_headers *http_headers = aws_http_message_get_headers(message->message);
    aws_crt_buf header_buf;
    aws_crt_http_headers headers = {
        .headers = http_headers,
    };

    aws_crt_http_headers_to_blob(&headers, &header_buf);
    struct aws_byte_cursor header_blob = {
        .ptr = header_buf.blob,
        .len = header_buf.length,
    };

    aws_byte_buf_clean_up(&mutable_message->encoded_message);
    aws_byte_buf_init(
        &mutable_message->encoded_message,
        aws_crt_default_allocator(),
        sizeof(uint32_t) + sizeof(uint32_t) + method.len + path.len + header_blob.len);
    aws_byte_buf_write_be32(&mutable_message->encoded_message, (uint32_t)method.len);
    aws_byte_buf_write_from_whole_cursor(&mutable_message->encoded_message, method);
    aws_byte_buf_write_be32(&mutable_message->encoded_message, (uint32_t)path.len);
    aws_byte_buf_write_from_whole_cursor(&mutable_message->encoded_message, path);
    aws_byte_buf_write_from_whole_cursor(&mutable_message->encoded_message, header_blob);

    out_blob->blob = message->encoded_message.buffer;
    out_blob->length = message->encoded_message.len;
}