in source/event_stream.c [151:206]
size_t aws_event_stream_write_headers_to_buffer(const struct aws_array_list *headers, uint8_t *buffer) {
if (!headers || !aws_array_list_length(headers)) {
return 0;
}
size_t headers_count = aws_array_list_length(headers);
uint8_t *buffer_alias = buffer;
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);
*buffer_alias = (uint8_t)header->header_name_len;
buffer_alias++;
memcpy(buffer_alias, header->header_name, (size_t)header->header_name_len);
buffer_alias += header->header_name_len;
*buffer_alias = (uint8_t)header->header_value_type;
buffer_alias++;
switch (header->header_value_type) {
case AWS_EVENT_STREAM_HEADER_BOOL_FALSE:
case AWS_EVENT_STREAM_HEADER_BOOL_TRUE:
break;
case AWS_EVENT_STREAM_HEADER_BYTE:
*buffer_alias = header->header_value.static_val[0];
buffer_alias++;
break;
/* additions of integers here assume the endianness conversion has already happened */
case AWS_EVENT_STREAM_HEADER_INT16:
memcpy(buffer_alias, header->header_value.static_val, sizeof(uint16_t));
buffer_alias += sizeof(uint16_t);
break;
case AWS_EVENT_STREAM_HEADER_INT32:
memcpy(buffer_alias, header->header_value.static_val, sizeof(uint32_t));
buffer_alias += sizeof(uint32_t);
break;
case AWS_EVENT_STREAM_HEADER_INT64:
case AWS_EVENT_STREAM_HEADER_TIMESTAMP:
memcpy(buffer_alias, header->header_value.static_val, sizeof(uint64_t));
buffer_alias += sizeof(uint64_t);
break;
case AWS_EVENT_STREAM_HEADER_BYTE_BUF:
case AWS_EVENT_STREAM_HEADER_STRING:
aws_write_u16(header->header_value_len, buffer_alias);
buffer_alias += sizeof(uint16_t);
memcpy(buffer_alias, header->header_value.variable_len_val, header->header_value_len);
buffer_alias += header->header_value_len;
break;
case AWS_EVENT_STREAM_HEADER_UUID:
memcpy(buffer_alias, header->header_value.static_val, 16);
buffer_alias += header->header_value_len;
break;
}
}
return buffer_alias - buffer;
}