uint32_t aws_event_stream_compute_headers_required_buffer_len()

in source/event_stream.c [119:146]


uint32_t aws_event_stream_compute_headers_required_buffer_len(const struct aws_array_list *headers) {
    if (!headers || !aws_array_list_length(headers)) {
        return 0;
    }

    size_t headers_count = aws_array_list_length(headers);
    size_t headers_len = 0;

    for (size_t i = 0; i < headers_count; ++i) {
        struct aws_event_stream_header_value_pair *header = NULL;

        aws_array_list_get_at_ptr(headers, (void **)&header, i);

        headers_len += sizeof(header->header_name_len) + header->header_name_len + 1;

        if (header->header_value_type == AWS_EVENT_STREAM_HEADER_STRING ||
            header->header_value_type == AWS_EVENT_STREAM_HEADER_BYTE_BUF) {
            headers_len += sizeof(header->header_value_len);
        }

        if (header->header_value_type != AWS_EVENT_STREAM_HEADER_BOOL_FALSE &&
            header->header_value_type != AWS_EVENT_STREAM_HEADER_BOOL_TRUE) {
            headers_len += header->header_value_len;
        }
    }

    return (uint32_t)headers_len;
}