/* conflux.h -- generated by Trunnel v1.5.3.
 * https://gitweb.torproject.org/trunnel.git
 * You probably shouldn't edit this file.
 */
#ifndef TRUNNEL_CONFLUX_H
#define TRUNNEL_CONFLUX_H

#include <stdint.h>
#include "trunnel.h"

#define CONFLUX_UX_NO_OPINION 0
#define CONFLUX_UX_MIN_LATENCY 1
#define CONFLUX_UX_LOW_MEM_LATENCY 2
#define CONFLUX_UX_HIGH_THROUGHPUT 3
#define CONFLUX_UX_LOW_MEM_THROUGHPUT 4
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_CONFLUX_LINK)
struct trn_cell_conflux_link_st {
  uint8_t version;
  TRUNNEL_DYNARRAY_HEAD(, uint8_t) payload;
  uint8_t trunnel_error_code_;
};
#endif
typedef struct trn_cell_conflux_link_st trn_cell_conflux_link_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_CONFLUX_LINK_PAYLOAD_V1)
struct trn_cell_conflux_link_payload_v1_st {
  uint8_t nonce[32];
  uint64_t last_seqno_sent;
  uint64_t last_seqno_recv;
  uint8_t desired_ux;
  uint8_t trunnel_error_code_;
};
#endif
typedef struct trn_cell_conflux_link_payload_v1_st trn_cell_conflux_link_payload_v1_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_CONFLUX_LINKED)
struct trn_cell_conflux_linked_st {
  uint8_t version;
  TRUNNEL_DYNARRAY_HEAD(, uint8_t) payload;
  uint8_t trunnel_error_code_;
};
#endif
typedef struct trn_cell_conflux_linked_st trn_cell_conflux_linked_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_CONFLUX_LINKED_ACK)
struct trn_cell_conflux_linked_ack_st {
  TRUNNEL_DYNARRAY_HEAD(, uint8_t) payload;
  uint8_t trunnel_error_code_;
};
#endif
typedef struct trn_cell_conflux_linked_ack_st trn_cell_conflux_linked_ack_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_TRN_CELL_CONFLUX_SWITCH)
struct trn_cell_conflux_switch_st {
  uint32_t seqnum;
  uint8_t trunnel_error_code_;
};
#endif
typedef struct trn_cell_conflux_switch_st trn_cell_conflux_switch_t;
/** Return a newly allocated trn_cell_conflux_link with all elements
 * set to zero.
 */
trn_cell_conflux_link_t *trn_cell_conflux_link_new(void);
/** Release all storage held by the trn_cell_conflux_link in 'victim'.
 * (Do nothing if 'victim' is NULL.)
 */
void trn_cell_conflux_link_free(trn_cell_conflux_link_t *victim);
/** Try to parse a trn_cell_conflux_link 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_cell_conflux_link_t. On failure, return -2 if the
 * input appears truncated, and -1 if the input is otherwise invalid.
 */
ssize_t trn_cell_conflux_link_parse(trn_cell_conflux_link_t **output, const uint8_t *input, const size_t len_in);
/** Return the number of bytes we expect to need to encode the
 * trn_cell_conflux_link 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_cell_conflux_link_encoded_len(const trn_cell_conflux_link_t *obj);
/** Try to encode the trn_cell_conflux_link 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_cell_conflux_link_encode(uint8_t *output, size_t avail, const trn_cell_conflux_link_t *input);
/** Check whether the internal state of the trn_cell_conflux_link in
 * 'obj' is consistent. Return NULL if it is, and a short message if
 * it is not.
 */
const char *trn_cell_conflux_link_check(const trn_cell_conflux_link_t *obj);
/** Clear any errors that were set on the object 'obj' by its setter
 * functions. Return true iff errors were cleared.
 */
int trn_cell_conflux_link_clear_errors(trn_cell_conflux_link_t *obj);
/** Return the value of the version field of the
 * trn_cell_conflux_link_t in 'inp'
 */
uint8_t trn_cell_conflux_link_get_version(const trn_cell_conflux_link_t *inp);
/** Set the value of the version field of the trn_cell_conflux_link_t
 * in 'inp' to 'val'. Return 0 on success; return -1 and set the error
 * code on 'inp' on failure.
 */
int trn_cell_conflux_link_set_version(trn_cell_conflux_link_t *inp, uint8_t val);
/** Return the length of the dynamic array holding the payload field
 * of the trn_cell_conflux_link_t in 'inp'.
 */
size_t trn_cell_conflux_link_getlen_payload(const trn_cell_conflux_link_t *inp);
/** Return the element at position 'idx' of the dynamic array field
 * payload of the trn_cell_conflux_link_t in 'inp'.
 */
uint8_t trn_cell_conflux_link_get_payload(trn_cell_conflux_link_t *inp, size_t idx);
/** As trn_cell_conflux_link_get_payload, but take and return a const
 * pointer
 */
uint8_t trn_cell_conflux_link_getconst_payload(const trn_cell_conflux_link_t *inp, size_t idx);
/** Change the element at position 'idx' of the dynamic array field
 * payload of the trn_cell_conflux_link_t in 'inp', so that it will
 * hold the value 'elt'.
 */
int trn_cell_conflux_link_set_payload(trn_cell_conflux_link_t *inp, size_t idx, uint8_t elt);
/** Append a new element 'elt' to the dynamic array field payload of
 * the trn_cell_conflux_link_t in 'inp'.
 */
int trn_cell_conflux_link_add_payload(trn_cell_conflux_link_t *inp, uint8_t elt);
/** Return a pointer to the variable-length array field payload of
 * 'inp'.
 */
uint8_t * trn_cell_conflux_link_getarray_payload(trn_cell_conflux_link_t *inp);
/** As trn_cell_conflux_link_get_payload, but take and return a const
 * pointer
 */
const uint8_t  * trn_cell_conflux_link_getconstarray_payload(const trn_cell_conflux_link_t *inp);
/** Change the length of the variable-length array field payload of
 * 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on success;
 * return -1 and set the error code on 'inp' on failure.
 */
int trn_cell_conflux_link_setlen_payload(trn_cell_conflux_link_t *inp, size_t newlen);
/** Return a newly allocated trn_cell_conflux_link_payload_v1 with all
 * elements set to zero.
 */
trn_cell_conflux_link_payload_v1_t *trn_cell_conflux_link_payload_v1_new(void);
/** Release all storage held by the trn_cell_conflux_link_payload_v1
 * in 'victim'. (Do nothing if 'victim' is NULL.)
 */
void trn_cell_conflux_link_payload_v1_free(trn_cell_conflux_link_payload_v1_t *victim);
/** Try to parse a trn_cell_conflux_link_payload_v1 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_cell_conflux_link_payload_v1_t. On failure,
 * return -2 if the input appears truncated, and -1 if the input is
 * otherwise invalid.
 */
ssize_t trn_cell_conflux_link_payload_v1_parse(trn_cell_conflux_link_payload_v1_t **output, const uint8_t *input, const size_t len_in);
/** Return the number of bytes we expect to need to encode the
 * trn_cell_conflux_link_payload_v1 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_cell_conflux_link_payload_v1_encoded_len(const trn_cell_conflux_link_payload_v1_t *obj);
/** Try to encode the trn_cell_conflux_link_payload_v1 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_cell_conflux_link_payload_v1_encode(uint8_t *output, size_t avail, const trn_cell_conflux_link_payload_v1_t *input);
/** Check whether the internal state of the
 * trn_cell_conflux_link_payload_v1 in 'obj' is consistent. Return
 * NULL if it is, and a short message if it is not.
 */
const char *trn_cell_conflux_link_payload_v1_check(const trn_cell_conflux_link_payload_v1_t *obj);
/** Clear any errors that were set on the object 'obj' by its setter
 * functions. Return true iff errors were cleared.
 */
int trn_cell_conflux_link_payload_v1_clear_errors(trn_cell_conflux_link_payload_v1_t *obj);
/** Return the (constant) length of the array holding the nonce field
 * of the trn_cell_conflux_link_payload_v1_t in 'inp'.
 */
size_t trn_cell_conflux_link_payload_v1_getlen_nonce(const trn_cell_conflux_link_payload_v1_t *inp);
/** Return the element at position 'idx' of the fixed array field
 * nonce of the trn_cell_conflux_link_payload_v1_t in 'inp'.
 */
uint8_t trn_cell_conflux_link_payload_v1_get_nonce(trn_cell_conflux_link_payload_v1_t *inp, size_t idx);
/** As trn_cell_conflux_link_payload_v1_get_nonce, but take and return
 * a const pointer
 */
uint8_t trn_cell_conflux_link_payload_v1_getconst_nonce(const trn_cell_conflux_link_payload_v1_t *inp, size_t idx);
/** Change the element at position 'idx' of the fixed array field
 * nonce of the trn_cell_conflux_link_payload_v1_t in 'inp', so that
 * it will hold the value 'elt'.
 */
int trn_cell_conflux_link_payload_v1_set_nonce(trn_cell_conflux_link_payload_v1_t *inp, size_t idx, uint8_t elt);
/** Return a pointer to the 32-element array field nonce of 'inp'.
 */
uint8_t * trn_cell_conflux_link_payload_v1_getarray_nonce(trn_cell_conflux_link_payload_v1_t *inp);
/** As trn_cell_conflux_link_payload_v1_get_nonce, but take and return
 * a const pointer
 */
const uint8_t  * trn_cell_conflux_link_payload_v1_getconstarray_nonce(const trn_cell_conflux_link_payload_v1_t *inp);
/** Return the value of the last_seqno_sent field of the
 * trn_cell_conflux_link_payload_v1_t in 'inp'
 */
uint64_t trn_cell_conflux_link_payload_v1_get_last_seqno_sent(const trn_cell_conflux_link_payload_v1_t *inp);
/** Set the value of the last_seqno_sent field of the
 * trn_cell_conflux_link_payload_v1_t in 'inp' to 'val'. Return 0 on
 * success; return -1 and set the error code on 'inp' on failure.
 */
int trn_cell_conflux_link_payload_v1_set_last_seqno_sent(trn_cell_conflux_link_payload_v1_t *inp, uint64_t val);
/** Return the value of the last_seqno_recv field of the
 * trn_cell_conflux_link_payload_v1_t in 'inp'
 */
uint64_t trn_cell_conflux_link_payload_v1_get_last_seqno_recv(const trn_cell_conflux_link_payload_v1_t *inp);
/** Set the value of the last_seqno_recv field of the
 * trn_cell_conflux_link_payload_v1_t in 'inp' to 'val'. Return 0 on
 * success; return -1 and set the error code on 'inp' on failure.
 */
int trn_cell_conflux_link_payload_v1_set_last_seqno_recv(trn_cell_conflux_link_payload_v1_t *inp, uint64_t val);
/** Return the value of the desired_ux field of the
 * trn_cell_conflux_link_payload_v1_t in 'inp'
 */
uint8_t trn_cell_conflux_link_payload_v1_get_desired_ux(const trn_cell_conflux_link_payload_v1_t *inp);
/** Set the value of the desired_ux field of the
 * trn_cell_conflux_link_payload_v1_t in 'inp' to 'val'. Return 0 on
 * success; return -1 and set the error code on 'inp' on failure.
 */
int trn_cell_conflux_link_payload_v1_set_desired_ux(trn_cell_conflux_link_payload_v1_t *inp, uint8_t val);
/** Return a newly allocated trn_cell_conflux_linked with all elements
 * set to zero.
 */
trn_cell_conflux_linked_t *trn_cell_conflux_linked_new(void);
/** Release all storage held by the trn_cell_conflux_linked in
 * 'victim'. (Do nothing if 'victim' is NULL.)
 */
void trn_cell_conflux_linked_free(trn_cell_conflux_linked_t *victim);
/** Try to parse a trn_cell_conflux_linked 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_cell_conflux_linked_t. On failure, return -2 if the
 * input appears truncated, and -1 if the input is otherwise invalid.
 */
ssize_t trn_cell_conflux_linked_parse(trn_cell_conflux_linked_t **output, const uint8_t *input, const size_t len_in);
/** Return the number of bytes we expect to need to encode the
 * trn_cell_conflux_linked 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_cell_conflux_linked_encoded_len(const trn_cell_conflux_linked_t *obj);
/** Try to encode the trn_cell_conflux_linked 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_cell_conflux_linked_encode(uint8_t *output, size_t avail, const trn_cell_conflux_linked_t *input);
/** Check whether the internal state of the trn_cell_conflux_linked in
 * 'obj' is consistent. Return NULL if it is, and a short message if
 * it is not.
 */
const char *trn_cell_conflux_linked_check(const trn_cell_conflux_linked_t *obj);
/** Clear any errors that were set on the object 'obj' by its setter
 * functions. Return true iff errors were cleared.
 */
int trn_cell_conflux_linked_clear_errors(trn_cell_conflux_linked_t *obj);
/** Return the value of the version field of the
 * trn_cell_conflux_linked_t in 'inp'
 */
uint8_t trn_cell_conflux_linked_get_version(const trn_cell_conflux_linked_t *inp);
/** Set the value of the version field of the
 * trn_cell_conflux_linked_t in 'inp' to 'val'. Return 0 on success;
 * return -1 and set the error code on 'inp' on failure.
 */
int trn_cell_conflux_linked_set_version(trn_cell_conflux_linked_t *inp, uint8_t val);
/** Return the length of the dynamic array holding the payload field
 * of the trn_cell_conflux_linked_t in 'inp'.
 */
size_t trn_cell_conflux_linked_getlen_payload(const trn_cell_conflux_linked_t *inp);
/** Return the element at position 'idx' of the dynamic array field
 * payload of the trn_cell_conflux_linked_t in 'inp'.
 */
uint8_t trn_cell_conflux_linked_get_payload(trn_cell_conflux_linked_t *inp, size_t idx);
/** As trn_cell_conflux_linked_get_payload, but take and return a
 * const pointer
 */
uint8_t trn_cell_conflux_linked_getconst_payload(const trn_cell_conflux_linked_t *inp, size_t idx);
/** Change the element at position 'idx' of the dynamic array field
 * payload of the trn_cell_conflux_linked_t in 'inp', so that it will
 * hold the value 'elt'.
 */
int trn_cell_conflux_linked_set_payload(trn_cell_conflux_linked_t *inp, size_t idx, uint8_t elt);
/** Append a new element 'elt' to the dynamic array field payload of
 * the trn_cell_conflux_linked_t in 'inp'.
 */
int trn_cell_conflux_linked_add_payload(trn_cell_conflux_linked_t *inp, uint8_t elt);
/** Return a pointer to the variable-length array field payload of
 * 'inp'.
 */
uint8_t * trn_cell_conflux_linked_getarray_payload(trn_cell_conflux_linked_t *inp);
/** As trn_cell_conflux_linked_get_payload, but take and return a
 * const pointer
 */
const uint8_t  * trn_cell_conflux_linked_getconstarray_payload(const trn_cell_conflux_linked_t *inp);
/** Change the length of the variable-length array field payload of
 * 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on success;
 * return -1 and set the error code on 'inp' on failure.
 */
int trn_cell_conflux_linked_setlen_payload(trn_cell_conflux_linked_t *inp, size_t newlen);
/** Return a newly allocated trn_cell_conflux_linked_ack with all
 * elements set to zero.
 */
trn_cell_conflux_linked_ack_t *trn_cell_conflux_linked_ack_new(void);
/** Release all storage held by the trn_cell_conflux_linked_ack in
 * 'victim'. (Do nothing if 'victim' is NULL.)
 */
void trn_cell_conflux_linked_ack_free(trn_cell_conflux_linked_ack_t *victim);
/** Try to parse a trn_cell_conflux_linked_ack 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_cell_conflux_linked_ack_t. On failure, return
 * -2 if the input appears truncated, and -1 if the input is otherwise
 * invalid.
 */
ssize_t trn_cell_conflux_linked_ack_parse(trn_cell_conflux_linked_ack_t **output, const uint8_t *input, const size_t len_in);
/** Return the number of bytes we expect to need to encode the
 * trn_cell_conflux_linked_ack 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_cell_conflux_linked_ack_encoded_len(const trn_cell_conflux_linked_ack_t *obj);
/** Try to encode the trn_cell_conflux_linked_ack 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_cell_conflux_linked_ack_encode(uint8_t *output, size_t avail, const trn_cell_conflux_linked_ack_t *input);
/** Check whether the internal state of the
 * trn_cell_conflux_linked_ack in 'obj' is consistent. Return NULL if
 * it is, and a short message if it is not.
 */
const char *trn_cell_conflux_linked_ack_check(const trn_cell_conflux_linked_ack_t *obj);
/** Clear any errors that were set on the object 'obj' by its setter
 * functions. Return true iff errors were cleared.
 */
int trn_cell_conflux_linked_ack_clear_errors(trn_cell_conflux_linked_ack_t *obj);
/** Return the length of the dynamic array holding the payload field
 * of the trn_cell_conflux_linked_ack_t in 'inp'.
 */
size_t trn_cell_conflux_linked_ack_getlen_payload(const trn_cell_conflux_linked_ack_t *inp);
/** Return the element at position 'idx' of the dynamic array field
 * payload of the trn_cell_conflux_linked_ack_t in 'inp'.
 */
uint8_t trn_cell_conflux_linked_ack_get_payload(trn_cell_conflux_linked_ack_t *inp, size_t idx);
/** As trn_cell_conflux_linked_ack_get_payload, but take and return a
 * const pointer
 */
uint8_t trn_cell_conflux_linked_ack_getconst_payload(const trn_cell_conflux_linked_ack_t *inp, size_t idx);
/** Change the element at position 'idx' of the dynamic array field
 * payload of the trn_cell_conflux_linked_ack_t in 'inp', so that it
 * will hold the value 'elt'.
 */
int trn_cell_conflux_linked_ack_set_payload(trn_cell_conflux_linked_ack_t *inp, size_t idx, uint8_t elt);
/** Append a new element 'elt' to the dynamic array field payload of
 * the trn_cell_conflux_linked_ack_t in 'inp'.
 */
int trn_cell_conflux_linked_ack_add_payload(trn_cell_conflux_linked_ack_t *inp, uint8_t elt);
/** Return a pointer to the variable-length array field payload of
 * 'inp'.
 */
uint8_t * trn_cell_conflux_linked_ack_getarray_payload(trn_cell_conflux_linked_ack_t *inp);
/** As trn_cell_conflux_linked_ack_get_payload, but take and return a
 * const pointer
 */
const uint8_t  * trn_cell_conflux_linked_ack_getconstarray_payload(const trn_cell_conflux_linked_ack_t *inp);
/** Change the length of the variable-length array field payload of
 * 'inp' to 'newlen'.Fill extra elements with 0. Return 0 on success;
 * return -1 and set the error code on 'inp' on failure.
 */
int trn_cell_conflux_linked_ack_setlen_payload(trn_cell_conflux_linked_ack_t *inp, size_t newlen);
/** Return a newly allocated trn_cell_conflux_switch with all elements
 * set to zero.
 */
trn_cell_conflux_switch_t *trn_cell_conflux_switch_new(void);
/** Release all storage held by the trn_cell_conflux_switch in
 * 'victim'. (Do nothing if 'victim' is NULL.)
 */
void trn_cell_conflux_switch_free(trn_cell_conflux_switch_t *victim);
/** Try to parse a trn_cell_conflux_switch 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_cell_conflux_switch_t. On failure, return -2 if the
 * input appears truncated, and -1 if the input is otherwise invalid.
 */
ssize_t trn_cell_conflux_switch_parse(trn_cell_conflux_switch_t **output, const uint8_t *input, const size_t len_in);
/** Return the number of bytes we expect to need to encode the
 * trn_cell_conflux_switch 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_cell_conflux_switch_encoded_len(const trn_cell_conflux_switch_t *obj);
/** Try to encode the trn_cell_conflux_switch 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_cell_conflux_switch_encode(uint8_t *output, size_t avail, const trn_cell_conflux_switch_t *input);
/** Check whether the internal state of the trn_cell_conflux_switch in
 * 'obj' is consistent. Return NULL if it is, and a short message if
 * it is not.
 */
const char *trn_cell_conflux_switch_check(const trn_cell_conflux_switch_t *obj);
/** Clear any errors that were set on the object 'obj' by its setter
 * functions. Return true iff errors were cleared.
 */
int trn_cell_conflux_switch_clear_errors(trn_cell_conflux_switch_t *obj);
/** Return the value of the seqnum field of the
 * trn_cell_conflux_switch_t in 'inp'
 */
uint32_t trn_cell_conflux_switch_get_seqnum(const trn_cell_conflux_switch_t *inp);
/** Set the value of the seqnum field of the trn_cell_conflux_switch_t
 * in 'inp' to 'val'. Return 0 on success; return -1 and set the error
 * code on 'inp' on failure.
 */
int trn_cell_conflux_switch_set_seqnum(trn_cell_conflux_switch_t *inp, uint32_t val);


#endif
