Skip to the content.

sxg_encoded_response_t

Represents HTTP response header and payload. Header includes [:status, content-encoding, mi-sha256] parameters. The payload is Merkle-Integrity-Content-Encoding(MICE) encoded. You can find the specification here.

Fields

You can read all fields via sxg_header API and sxg_buffer API. Encoded data is not intended to be directly modified. This instance should always be created via sxg_encode_response API.

sxg_header_t header

Header of encoded http response. It should always include [:status, content-encoding, mi-sha256] directives.

sxg_buffer_t payload

Payload of HTTP response, it can be arbitrary binary.

Functions

sxg_encoded_response_t sxg_empty_encoded_response()

Creates empty response. Never fails.

Arguments

Nothing.

Returns

Empty sxg_encoded_response_t.

bool sxg_encode_response(const size_t mi_record_size, const sxg_raw_response_t* src, sxg_encoded_response_t* dst)

Encodes and generates encoded_response_t from raw_response_t with MICE encoding record size.

Arguments

Returns

Returns true on success. On failure, dst will become empty.

Example

Do encoding on HTTP response.

sxg_raw_response_t src = sxg_empty_raw_response();
sxg_encoded_response_t dst = sxg_empty_encoded_response();

sxg_encode_response(4096, &src, &dst);

sxg_raw_response_release(&src);
sxg_encoded_response_release(&dst);

void sxg_encoded_response_release(sxg_encoded_response_t* target)

Releases memory of encoded_response_t.

Arguments

Returns

Nothing.

bool sxg_write_header_integrity(const sxg_encoded_response_t* src, sxg_buffer_t* target)

Writes the header integrity into given buffer. The calculated integrity is appended to the end of the target sxg_buffer.

Arguments

Returns

Returns true on success. On fail, target may contain incomplete data.

Example

Print integrity.

sxg_raw_response_t src = sxg_empty_raw_response();
sxg_encoded_response_t encoded = sxg_empty_encoded_response();
sxg_encode_response(4096, &src, &encoded);
sxg_buffer_t integrity = sxg_empty_buffer();

sxg_write_header_integrity(&encoded, &integrity);
sxg_write_byte('\0', &integrity);  // Null-termination.
printf("integrity: %s\n", integrity.data);

sxg_raw_response_release(&src);
sxg_encoded_response_release(&encoded);
sxg_buffer_release(&integrity);