123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- #ifndef NGTCP2_PV_H
- #define NGTCP2_PV_H
- #ifdef HAVE_CONFIG_H
- # include <config.h>
- #endif
- #include <ngtcp2/ngtcp2.h>
- #include "ngtcp2_cid.h"
- #include "ngtcp2_ringbuf.h"
- #define NGTCP2_PV_MAX_ENTRIES 8
- #define NGTCP2_PV_NUM_PROBE_PKT 2
- typedef struct ngtcp2_log ngtcp2_log;
- typedef struct ngtcp2_frame_chain ngtcp2_frame_chain;
- #define NGTCP2_PV_ENTRY_FLAG_NONE 0x00u
- #define NGTCP2_PV_ENTRY_FLAG_UNDERSIZED 0x01u
- typedef struct ngtcp2_pv_entry {
-
- ngtcp2_tstamp expiry;
-
- uint8_t flags;
-
- uint8_t data[8];
- } ngtcp2_pv_entry;
- void ngtcp2_pv_entry_init(ngtcp2_pv_entry *pvent, const uint8_t *data,
- ngtcp2_tstamp expiry, uint8_t flags);
- #define NGTCP2_PV_FLAG_NONE 0x00u
- #define NGTCP2_PV_FLAG_DONT_CARE 0x01u
- #define NGTCP2_PV_FLAG_CANCEL_TIMER 0x02u
- #define NGTCP2_PV_FLAG_FALLBACK_ON_FAILURE 0x04u
- #define NGTCP2_PV_FLAG_PREFERRED_ADDR 0x10u
- typedef struct ngtcp2_pv ngtcp2_pv;
- ngtcp2_static_ringbuf_def(pv_ents, NGTCP2_PV_MAX_ENTRIES,
- sizeof(ngtcp2_pv_entry))
- struct ngtcp2_pv {
- const ngtcp2_mem *mem;
- ngtcp2_log *log;
-
- ngtcp2_dcid dcid;
-
- ngtcp2_dcid fallback_dcid;
-
- ngtcp2_static_ringbuf_pv_ents ents;
-
- ngtcp2_duration timeout;
-
- ngtcp2_duration fallback_pto;
-
- ngtcp2_tstamp started_ts;
-
- size_t round;
-
- size_t probe_pkt_left;
-
- uint8_t flags;
- };
- int ngtcp2_pv_new(ngtcp2_pv **ppv, const ngtcp2_dcid *dcid,
- ngtcp2_duration timeout, uint8_t flags, ngtcp2_log *log,
- const ngtcp2_mem *mem);
- void ngtcp2_pv_del(ngtcp2_pv *pv);
- void ngtcp2_pv_add_entry(ngtcp2_pv *pv, const uint8_t *data,
- ngtcp2_tstamp expiry, uint8_t flags, ngtcp2_tstamp ts);
- int ngtcp2_pv_full(ngtcp2_pv *pv);
- int ngtcp2_pv_validate(ngtcp2_pv *pv, uint8_t *pflags, const uint8_t *data);
- void ngtcp2_pv_handle_entry_expiry(ngtcp2_pv *pv, ngtcp2_tstamp ts);
- int ngtcp2_pv_should_send_probe(ngtcp2_pv *pv);
- int ngtcp2_pv_validation_timed_out(ngtcp2_pv *pv, ngtcp2_tstamp ts);
- ngtcp2_tstamp ngtcp2_pv_next_expiry(ngtcp2_pv *pv);
- void ngtcp2_pv_cancel_expired_timer(ngtcp2_pv *pv, ngtcp2_tstamp ts);
- #endif
|