litespeed-quic/test/prog.h
Dmitri Tikhonov bfc7bfd842 Latest changes
- [API Change] lsquic_engine_connect() returns pointer to the connection
  object.
- [API Change] Add lsquic_conn_get_engine() to get engine object from
  connection object.
- [API Change] Add lsquic_conn_status() to query connection status.
- [API Change] Add add lsquic_conn_set_ctx().
- [API Change] Add new timestamp format, e.g. 2017-03-21 13:43:46.671345
- [OPTIMIZATION] Process handshake STREAM frames as soon as packet
  arrives.
- [OPTIMIZATION] Do not compile expensive send controller sanity check
  by default.
- [OPTIMIZATION] Add fast path to gquic_be_gen_reg_pkt_header.
- [OPTIMIZATION] Only make squeeze function call if necessary.
- [OPTIMIZATION] Speed up Q039 ACK frame parsing.
- [OPTIMIZATION] Fit most used elements of packet_out into first 64 bytes.
- [OPTIMIZATION] Keep track of scheduled bytes instead of calculating.
- [OPTIMIZATION] Prefetch next unacked packet when processing ACK.
- [OPTIMIZATION] Leverage fact that ACK ranges and unacked list are.
  ordered.
- [OPTIMIZATION] Reduce function pointer use for STREAM frame generation
- Fix: reset incoming streams that arrive after we send GOAWAY.
- Fix: delay client on_new_conn() call until connection is fully set up.
- Fixes to buffered packets logic: splitting, STREAM frame elision.
- Fix: do not dispatch on_write callback if no packets are available.
- Fix WINDOW_UPDATE send and resend logic.
- Fix STREAM frame extension code.
- Fix: Drop unflushed data when stream is reset.
- Switch to tracking CWND using bytes rather than packets.
- Fix TCP friendly adjustment in cubic.
- Fix: do not generate invalid STOP_WAITING frames during high packet
  loss.
- Pacer fixes.
2018-02-26 16:01:16 -05:00

88 lines
2 KiB
C

/* Copyright (c) 2017 LiteSpeed Technologies Inc. See LICENSE. */
/*
* prog.h -- common setup and options for QUIC program
*/
#ifndef PROG_H
#define PROG_H 1
struct event;
struct event_base;
struct lsquic_hash;
struct sport_head;
struct prog
{
struct packout_buf_allocator prog_pba;
struct lsquic_engine_settings prog_settings;
struct lsquic_engine_api prog_api;
unsigned prog_engine_flags;
struct service_port prog_dummy_sport; /* Use for options */
unsigned prog_packout_max;
#define PROG_DEFAULT_PERIOD_USEC (10 * 1000) /* 10 ms default */
unsigned prog_period_usec;
unsigned short prog_max_packet_size;
int prog_version_cleared;
struct event_base *prog_eb;
struct event *prog_timer,
*prog_onetimer,
*prog_usr1;
struct sport_head *prog_sports;
struct lsquic_engine *prog_engine;
const char *prog_hostname;
};
void
prog_init (struct prog *, unsigned lsquic_engine_flags, struct sport_head *,
const struct lsquic_stream_if *, void *stream_if_ctx);
#if HAVE_SENDMMSG
# define SENDMMSG_FLAG "g"
#else
# define SENDMMSG_FLAG ""
#endif
#if LSQUIC_DONTFRAG_SUPPORTED
# define IP_DONTFRAG_FLAG "D"
#else
# define IP_DONTFRAG_FLAG ""
#endif
#define PROG_OPTS "i:m:c:y:L:l:o:H:s:S:Y:z:" SENDMMSG_FLAG IP_DONTFRAG_FLAG
/* Returns:
* 0 Applied
* 1 Not applicable
* -1 Error
*/
int
prog_set_opt (struct prog *, int opt, const char *arg);
struct event_base *
prog_eb (struct prog *);
int
prog_run (struct prog *);
void
prog_cleanup (struct prog *);
void
prog_stop (struct prog *);
int
prog_prep (struct prog *);
int
prog_connect (struct prog *);
void
prog_print_common_options (const struct prog *, FILE *);
void
prog_maybe_set_onetimer (struct prog *);
int
prog_is_stopped (void);
#endif