1a74702c6SGeorge Wang/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */ 2758aff32SDmitri Tikhonov/* QPACK Experiment record */ 3758aff32SDmitri Tikhonov 4758aff32SDmitri Tikhonov#ifndef LSQUIC_QPACK_EXP_H 5758aff32SDmitri Tikhonov#define LSQUIC_QPACK_EXP_H 6758aff32SDmitri Tikhonov 7758aff32SDmitri Tikhonovstruct qpack_exp_record 8758aff32SDmitri Tikhonov{ 9758aff32SDmitri Tikhonov enum { 10758aff32SDmitri Tikhonov QER_SERVER = 1 << 0, /* Client or server */ 11758aff32SDmitri Tikhonov QER_ENCODER = 1 << 1, /* If not set, this is decoder */ 12758aff32SDmitri Tikhonov } qer_flags; 13758aff32SDmitri Tikhonov 14758aff32SDmitri Tikhonov /* Timestamp of the first request */ 15758aff32SDmitri Tikhonov lsquic_time_t qer_first_req; 16758aff32SDmitri Tikhonov 17758aff32SDmitri Tikhonov /* Timestamp of the last request */ 18758aff32SDmitri Tikhonov lsquic_time_t qer_last_req; 19758aff32SDmitri Tikhonov 20758aff32SDmitri Tikhonov /* Number of header blocks passed through the encoder or the decoder */ 21758aff32SDmitri Tikhonov unsigned qer_hblock_count; 22758aff32SDmitri Tikhonov 23758aff32SDmitri Tikhonov /* Cumulative size of all header blocks processed */ 24758aff32SDmitri Tikhonov unsigned qer_hblock_size; 25758aff32SDmitri Tikhonov 26758aff32SDmitri Tikhonov /* For encoder, the "peer max size" is the maximum size advertised by 27758aff32SDmitri Tikhonov * the peer and the "used max size" is the maximum size that our 28758aff32SDmitri Tikhonov * encoder ends up using (the value selected by experiment). 29758aff32SDmitri Tikhonov * 30758aff32SDmitri Tikhonov * For decoder, the "used max size" is the maximum size we advertize 31758aff32SDmitri Tikhonov * (selecte by experiment), while the "peer max size" is the size the 32758aff32SDmitri Tikhonov * encoder uses as given by the value of the last TSU instruction. 33758aff32SDmitri Tikhonov */ 34758aff32SDmitri Tikhonov unsigned qer_peer_max_size; 35758aff32SDmitri Tikhonov unsigned qer_used_max_size; 36758aff32SDmitri Tikhonov 37758aff32SDmitri Tikhonov /* For encoder, the "peer max blocked" is the maximum number of blocked 38758aff32SDmitri Tikhonov * streams advertised by the peer, while the "used max blocked" is the 39758aff32SDmitri Tikhonov * self-imposed limit (selected by experiment). 40758aff32SDmitri Tikhonov * 41758aff32SDmitri Tikhonov * For decoder, the "used max blocked" is the maximum number of blocked 42758aff32SDmitri Tikhonov * streams that we advertised (selected by experiment) and the "peer max 43758aff32SDmitri Tikhonov * blocked" is the total number of times a header was blocked. Note 44758aff32SDmitri Tikhonov * that the latter does not count the duration of blockage and it may be 45758aff32SDmitri Tikhonov * insignificant. For example, a single packet may have header block 46758aff32SDmitri Tikhonov * packaged before the required encoder stream update, in which case the 47758aff32SDmitri Tikhonov * header block will be blocked and then unblocked immediately. 48758aff32SDmitri Tikhonov */ 49758aff32SDmitri Tikhonov unsigned qer_peer_max_blocked; 50758aff32SDmitri Tikhonov unsigned qer_used_max_blocked; 51758aff32SDmitri Tikhonov 52758aff32SDmitri Tikhonov /* The compression ratio is taken when experiment concludes via 53758aff32SDmitri Tikhonov * lsqpack_enc_ratio() or lsqpack_dec_ratio(). 54758aff32SDmitri Tikhonov */ 55758aff32SDmitri Tikhonov float qer_comp_ratio; 56758aff32SDmitri Tikhonov 57758aff32SDmitri Tikhonov /* Either 'Server:' or 'User-Agent:' */ 58758aff32SDmitri Tikhonov char *qer_user_agent; 59758aff32SDmitri Tikhonov}; 60758aff32SDmitri Tikhonov 61758aff32SDmitri Tikhonovstruct qpack_exp_record * 62758aff32SDmitri Tikhonovlsquic_qpack_exp_new (void); 63758aff32SDmitri Tikhonov 64758aff32SDmitri Tikhonovvoid 65758aff32SDmitri Tikhonovlsquic_qpack_exp_destroy (struct qpack_exp_record *); 66758aff32SDmitri Tikhonov 67758aff32SDmitri Tikhonov/* Returns same as snprintf(3) */ 68758aff32SDmitri Tikhonovint 69758aff32SDmitri Tikhonovlsquic_qpack_exp_to_xml (const struct qpack_exp_record *, char *, size_t); 70758aff32SDmitri Tikhonov 71758aff32SDmitri Tikhonov#endif 72