in source/event_stream.c [985:1047]
static int s_read_header_type(
struct aws_event_stream_streaming_decoder *decoder,
const uint8_t *data,
size_t len,
size_t *processed) {
(void)len;
uint8_t type = *data;
decoder->running_crc = aws_checksums_crc32(data, 1, decoder->running_crc);
*processed += 1;
decoder->message_pos++;
decoder->current_header_value_offset++;
struct aws_event_stream_header_value_pair *current_header = &decoder->current_header;
if (type >= AWS_EVENT_STREAM_HEADER_BOOL_FALSE && type <= AWS_EVENT_STREAM_HEADER_UUID) {
current_header->header_value_type = (enum aws_event_stream_header_value_type)type;
switch (type) {
case AWS_EVENT_STREAM_HEADER_STRING:
case AWS_EVENT_STREAM_HEADER_BYTE_BUF:
decoder->state = s_read_header_value_len;
break;
case AWS_EVENT_STREAM_HEADER_BOOL_FALSE:
current_header->header_value_len = 0;
current_header->header_value.static_val[0] = 0;
decoder->on_header(decoder, &decoder->prelude, current_header, decoder->user_context);
s_reset_header_state(decoder, 1);
break;
case AWS_EVENT_STREAM_HEADER_BOOL_TRUE:
current_header->header_value_len = 0;
current_header->header_value.static_val[0] = 1;
decoder->on_header(decoder, &decoder->prelude, current_header, decoder->user_context);
s_reset_header_state(decoder, 1);
break;
case AWS_EVENT_STREAM_HEADER_BYTE:
current_header->header_value_len = 1;
decoder->state = s_read_header_value;
break;
case AWS_EVENT_STREAM_HEADER_INT16:
current_header->header_value_len = sizeof(uint16_t);
decoder->state = s_read_header_value;
break;
case AWS_EVENT_STREAM_HEADER_INT32:
current_header->header_value_len = sizeof(uint32_t);
decoder->state = s_read_header_value;
break;
case AWS_EVENT_STREAM_HEADER_INT64:
case AWS_EVENT_STREAM_HEADER_TIMESTAMP:
current_header->header_value_len = sizeof(uint64_t);
decoder->state = s_read_header_value;
break;
case AWS_EVENT_STREAM_HEADER_UUID:
current_header->header_value_len = 16;
decoder->state = s_read_header_value;
break;
default:
return aws_raise_error(AWS_ERROR_EVENT_STREAM_MESSAGE_UNKNOWN_HEADER_TYPE);
}
return AWS_OP_SUCCESS;
}
return aws_raise_error(AWS_ERROR_EVENT_STREAM_MESSAGE_UNKNOWN_HEADER_TYPE);
}