/* congestion_control.h -- generated by Trunnel v1.5.3. * https://gitweb.torproject.org/trunnel.git * You probably shouldn't edit this file. */ #ifndef TRUNNEL_CONGESTION_CONTROL_H #define TRUNNEL_CONGESTION_CONTROL_H #include #include "trunnel.h" #define TRUNNEL_EXT_TYPE_CC_FIELD_REQUEST 1 #define TRUNNEL_EXT_TYPE_CC_FIELD_RESPONSE 2 #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_EXTENSION_FIELD_CC) struct trn_extension_field_cc_st { uint8_t sendme_inc; uint8_t trunnel_error_code_; }; #endif typedef struct trn_extension_field_cc_st trn_extension_field_cc_t; /** Return a newly allocated trn_extension_field_cc with all elements * set to zero. */ trn_extension_field_cc_t *trn_extension_field_cc_new(void); /** Release all storage held by the trn_extension_field_cc in * 'victim'. (Do nothing if 'victim' is NULL.) */ void trn_extension_field_cc_free(trn_extension_field_cc_t *victim); /** Try to parse a trn_extension_field_cc from the buffer in 'input', * using up to 'len_in' bytes from the input buffer. On success, * return the number of bytes consumed and set *output to the newly * allocated trn_extension_field_cc_t. On failure, return -2 if the * input appears truncated, and -1 if the input is otherwise invalid. */ ssize_t trn_extension_field_cc_parse(trn_extension_field_cc_t **output, const uint8_t *input, const size_t len_in); /** Return the number of bytes we expect to need to encode the * trn_extension_field_cc in 'obj'. On failure, return a negative * value. Note that this value may be an overestimate, and can even be * an underestimate for certain unencodeable objects. */ ssize_t trn_extension_field_cc_encoded_len(const trn_extension_field_cc_t *obj); /** Try to encode the trn_extension_field_cc from 'input' into the * buffer at 'output', using up to 'avail' bytes of the output buffer. * On success, return the number of bytes used. On failure, return -2 * if the buffer was not long enough, and -1 if the input was invalid. */ ssize_t trn_extension_field_cc_encode(uint8_t *output, size_t avail, const trn_extension_field_cc_t *input); /** Check whether the internal state of the trn_extension_field_cc in * 'obj' is consistent. Return NULL if it is, and a short message if * it is not. */ const char *trn_extension_field_cc_check(const trn_extension_field_cc_t *obj); /** Clear any errors that were set on the object 'obj' by its setter * functions. Return true iff errors were cleared. */ int trn_extension_field_cc_clear_errors(trn_extension_field_cc_t *obj); /** Return the value of the sendme_inc field of the * trn_extension_field_cc_t in 'inp' */ uint8_t trn_extension_field_cc_get_sendme_inc(const trn_extension_field_cc_t *inp); /** Set the value of the sendme_inc field of the * trn_extension_field_cc_t in 'inp' to 'val'. Return 0 on success; * return -1 and set the error code on 'inp' on failure. */ int trn_extension_field_cc_set_sendme_inc(trn_extension_field_cc_t *inp, uint8_t val); #endif