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
mi_record_size
: Record size of MICE.src
: Raw HTTP response object.dst
: Encoded HTTP response object to be replaced. Previous contents will be discarded.
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
target
: Target HTTP response to release memory.
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
src
: Encoded HTTP response whose header integrity is calculated.target
: A buffer to store the integrity.
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);