lsquic_full_conn.h revision 7d09751d
17d09751dSDmitri Tikhonov/* Copyright (c) 2017 - 2020 LiteSpeed Technologies Inc. See LICENSE. */ 250aadb33SDmitri Tikhonov#ifndef LSQUIC_FULL_CONN_H 350aadb33SDmitri Tikhonov#define LSQUIC_FULL_CONN_H 450aadb33SDmitri Tikhonov 550aadb33SDmitri Tikhonovstruct lsquic_conn; 650aadb33SDmitri Tikhonovstruct lsquic_engine_public; 750aadb33SDmitri Tikhonov 850aadb33SDmitri Tikhonovstruct lsquic_conn * 95392f7a3SLiteSpeed Techlsquic_gquic_full_conn_client_new (struct lsquic_engine_public *, 10a0e1aeeeSDmitri Tikhonov unsigned versions, 1150aadb33SDmitri Tikhonov unsigned flags /* Only FC_SERVER and FC_HTTP */, 128ca33e0eSDmitri Tikhonov const char *hostname, unsigned short max_packet_size, 135392f7a3SLiteSpeed Tech int is_ipv4, 148ca33e0eSDmitri Tikhonov const unsigned char *zero_rtt, size_t zero_rtt_len); 1550aadb33SDmitri Tikhonov 165392f7a3SLiteSpeed Techstruct lsquic_conn * 175392f7a3SLiteSpeed Techlsquic_ietf_full_conn_client_new (struct lsquic_engine_public *, 18a0e1aeeeSDmitri Tikhonov unsigned versions, 195392f7a3SLiteSpeed Tech unsigned flags /* Only FC_SERVER and FC_HTTP */, 205392f7a3SLiteSpeed Tech const char *hostname, unsigned short max_packet_size, int is_ipv4, 215392f7a3SLiteSpeed Tech const unsigned char *zero_rtt, size_t, 225392f7a3SLiteSpeed Tech const unsigned char *token, size_t); 235392f7a3SLiteSpeed Tech 245392f7a3SLiteSpeed Techtypedef struct lsquic_conn * 255392f7a3SLiteSpeed Tech(*server_conn_ctor_f) (struct lsquic_engine_public *, 265392f7a3SLiteSpeed Tech unsigned flags /* Only FC_SERVER and FC_HTTP */, 275392f7a3SLiteSpeed Tech struct lsquic_conn *mini_conn); 285392f7a3SLiteSpeed Tech 295392f7a3SLiteSpeed Techstruct lsquic_conn * 305392f7a3SLiteSpeed Techlsquic_gquic_full_conn_server_new (struct lsquic_engine_public *, 315392f7a3SLiteSpeed Tech unsigned flags /* Only FC_SERVER and FC_HTTP */, 325392f7a3SLiteSpeed Tech struct lsquic_conn *mini_conn); 335392f7a3SLiteSpeed Tech 345392f7a3SLiteSpeed Techstruct lsquic_conn * 355392f7a3SLiteSpeed Techlsquic_ietf_full_conn_server_new (struct lsquic_engine_public *, 365392f7a3SLiteSpeed Tech unsigned flags /* Only FC_SERVER and FC_HTTP */, 375392f7a3SLiteSpeed Tech struct lsquic_conn *mini_conn); 385392f7a3SLiteSpeed Tech 395392f7a3SLiteSpeed Techstruct dcid_elem 405392f7a3SLiteSpeed Tech{ 415392f7a3SLiteSpeed Tech /* This is never both in the hash and on the retirement list */ 425392f7a3SLiteSpeed Tech union { 435392f7a3SLiteSpeed Tech struct lsquic_hash_elem hash_el; 445392f7a3SLiteSpeed Tech TAILQ_ENTRY(dcid_elem) next_to_ret; 455392f7a3SLiteSpeed Tech } de_u; 465392f7a3SLiteSpeed Tech#define de_hash_el de_u.hash_el 475392f7a3SLiteSpeed Tech#define de_next_to_ret de_u.next_to_ret 485392f7a3SLiteSpeed Tech lsquic_cid_t de_cid; 495392f7a3SLiteSpeed Tech unsigned de_seqno; 505392f7a3SLiteSpeed Tech enum { 515392f7a3SLiteSpeed Tech DE_SRST = 1 << 0, /* de_srst is set */ 525392f7a3SLiteSpeed Tech DE_ASSIGNED = 1 << 1, /* de_cid has been assigned to a path */ 535392f7a3SLiteSpeed Tech } de_flags; 545392f7a3SLiteSpeed Tech unsigned char de_srst[IQUIC_SRESET_TOKEN_SZ]; 555392f7a3SLiteSpeed Tech}; 565392f7a3SLiteSpeed Tech 575392f7a3SLiteSpeed Techint 585392f7a3SLiteSpeed Techlsquic_gquic_full_conn_srej (struct lsquic_conn *); 5950aadb33SDmitri Tikhonov 6050aadb33SDmitri Tikhonov#endif 61