in source/event_stream.c [476:580]
int aws_event_stream_message_to_debug_str(FILE *fd, const struct aws_event_stream_message *message) {
struct aws_array_list headers;
aws_event_stream_headers_list_init(&headers, message->alloc);
aws_event_stream_message_headers(message, &headers);
fprintf(
fd,
"{\n " DEBUG_STR_PRELUDE_TOTAL_LEN "%d,\n " DEBUG_STR_PRELUDE_HDRS_LEN "%d,\n " DEBUG_STR_PRELUDE_CRC
"%d,\n",
aws_event_stream_message_total_length(message),
aws_event_stream_message_headers_len(message),
aws_event_stream_message_prelude_crc(message));
int count = 0;
uint16_t headers_count = (uint16_t)aws_array_list_length(&headers);
fprintf(fd, " \"headers\": [");
for (uint16_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);
fprintf(fd, " {\n");
fprintf(fd, " " DEBUG_STR_HEADER_NAME "\"");
fwrite(header->header_name, sizeof(char), (size_t)header->header_name_len, fd);
fprintf(fd, "\",\n");
fprintf(fd, " " DEBUG_STR_HEADER_TYPE "%d,\n", header->header_value_type);
if (header->header_value_type == AWS_EVENT_STREAM_HEADER_BOOL_FALSE) {
fprintf(fd, " " DEBUG_STR_HEADER_VALUE "false\n");
} else if (header->header_value_type == AWS_EVENT_STREAM_HEADER_BOOL_TRUE) {
fprintf(fd, " " DEBUG_STR_HEADER_VALUE "true\n");
} else if (header->header_value_type == AWS_EVENT_STREAM_HEADER_BYTE) {
int8_t int_value = (int8_t)header->header_value.static_val[0];
fprintf(fd, " " DEBUG_STR_HEADER_VALUE "%d\n", (int)int_value);
} else if (header->header_value_type == AWS_EVENT_STREAM_HEADER_INT16) {
int16_t int_value = aws_read_u16(header->header_value.static_val);
fprintf(fd, " " DEBUG_STR_HEADER_VALUE "%d\n", (int)int_value);
} else if (header->header_value_type == AWS_EVENT_STREAM_HEADER_INT32) {
int32_t int_value = (int32_t)aws_read_u32(header->header_value.static_val);
fprintf(fd, " " DEBUG_STR_HEADER_VALUE "%d\n", (int)int_value);
} else if (
header->header_value_type == AWS_EVENT_STREAM_HEADER_INT64 ||
header->header_value_type == AWS_EVENT_STREAM_HEADER_TIMESTAMP) {
int64_t int_value = (int64_t)aws_read_u64(header->header_value.static_val);
fprintf(fd, " " DEBUG_STR_HEADER_VALUE "%lld\n", (long long)int_value);
} else {
size_t buffer_len = 0;
aws_base64_compute_encoded_len(header->header_value_len, &buffer_len);
char *encoded_buffer = (char *)aws_mem_acquire(message->alloc, buffer_len);
if (!encoded_buffer) {
return aws_raise_error(AWS_ERROR_OOM);
}
struct aws_byte_buf encode_output = aws_byte_buf_from_array((uint8_t *)encoded_buffer, buffer_len);
if (header->header_value_type == AWS_EVENT_STREAM_HEADER_UUID) {
struct aws_byte_cursor to_encode =
aws_byte_cursor_from_array(header->header_value.static_val, header->header_value_len);
aws_base64_encode(&to_encode, &encode_output);
} else {
struct aws_byte_cursor to_encode =
aws_byte_cursor_from_array(header->header_value.variable_len_val, header->header_value_len);
aws_base64_encode(&to_encode, &encode_output);
}
fprintf(fd, " " DEBUG_STR_HEADER_VALUE "\"%s\"\n", encoded_buffer);
aws_mem_release(message->alloc, encoded_buffer);
}
fprintf(fd, " }");
if (count < headers_count - 1) {
fprintf(fd, ",");
}
fprintf(fd, "\n");
count++;
}
aws_event_stream_headers_list_cleanup(&headers);
fprintf(fd, " ],\n");
size_t payload_len = aws_event_stream_message_payload_len(message);
const uint8_t *payload = aws_event_stream_message_payload(message);
size_t encoded_len = 0;
aws_base64_compute_encoded_len(payload_len, &encoded_len);
char *encoded_payload = (char *)aws_mem_acquire(message->alloc, encoded_len);
if (!encoded_payload) {
return aws_raise_error(AWS_ERROR_OOM);
}
struct aws_byte_cursor payload_buffer = aws_byte_cursor_from_array(payload, payload_len);
struct aws_byte_buf encoded_payload_buffer = aws_byte_buf_from_array((uint8_t *)encoded_payload, encoded_len);
aws_base64_encode(&payload_buffer, &encoded_payload_buffer);
fprintf(fd, " \"payload\": \"%s\",\n", encoded_payload);
fprintf(fd, " " DEBUG_STR_MESSAGE_CRC "%d\n}\n", aws_event_stream_message_message_crc(message));
return AWS_OP_SUCCESS;
}