mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 15:17:01 +02:00
REORG: quic: Move the QUIC DCID parser to quic_sock.c
Move quic_get_dgram_dcid() from quic_conn.c to quic_sock.c because only used in this file and define it as static.
This commit is contained in:
parent
3b91756ebe
commit
f74d882ef0
@ -191,8 +191,6 @@ void quic_set_connection_close(struct quic_conn *qc, const struct quic_err err);
|
|||||||
void quic_set_tls_alert(struct quic_conn *qc, int alert);
|
void quic_set_tls_alert(struct quic_conn *qc, int alert);
|
||||||
int quic_set_app_ops(struct quic_conn *qc, const unsigned char *alpn, size_t alpn_len);
|
int quic_set_app_ops(struct quic_conn *qc, const unsigned char *alpn, size_t alpn_len);
|
||||||
int qc_check_dcid(struct quic_conn *qc, unsigned char *dcid, size_t dcid_len);
|
int qc_check_dcid(struct quic_conn *qc, unsigned char *dcid, size_t dcid_len);
|
||||||
int quic_get_dgram_dcid(unsigned char *buf, const unsigned char *end,
|
|
||||||
unsigned char **dcid, size_t *dcid_len);
|
|
||||||
struct quic_cid quic_derive_cid(const struct quic_cid *orig,
|
struct quic_cid quic_derive_cid(const struct quic_cid *orig,
|
||||||
const struct sockaddr_storage *addr);
|
const struct sockaddr_storage *addr);
|
||||||
int quic_get_cid_tid(const unsigned char *cid, size_t cid_len,
|
int quic_get_cid_tid(const unsigned char *cid, size_t cid_len,
|
||||||
|
@ -1592,47 +1592,6 @@ int qc_check_dcid(struct quic_conn *qc, unsigned char *dcid, size_t dcid_len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Retrieve the DCID from a QUIC datagram or packet at <pos> position,
|
|
||||||
* <end> being at one byte past the end of this datagram.
|
|
||||||
* Returns 1 if succeeded, 0 if not.
|
|
||||||
*/
|
|
||||||
int quic_get_dgram_dcid(unsigned char *pos, const unsigned char *end,
|
|
||||||
unsigned char **dcid, size_t *dcid_len)
|
|
||||||
{
|
|
||||||
int ret = 0, long_header;
|
|
||||||
size_t minlen, skip;
|
|
||||||
|
|
||||||
TRACE_ENTER(QUIC_EV_CONN_RXPKT);
|
|
||||||
|
|
||||||
if (!(*pos & QUIC_PACKET_FIXED_BIT)) {
|
|
||||||
TRACE_PROTO("fixed bit not set", QUIC_EV_CONN_RXPKT);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
long_header = *pos & QUIC_PACKET_LONG_HEADER_BIT;
|
|
||||||
minlen = long_header ? QUIC_LONG_PACKET_MINLEN :
|
|
||||||
QUIC_SHORT_PACKET_MINLEN + QUIC_HAP_CID_LEN + QUIC_TLS_TAG_LEN;
|
|
||||||
skip = long_header ? QUIC_LONG_PACKET_DCID_OFF : QUIC_SHORT_PACKET_DCID_OFF;
|
|
||||||
if (end - pos < minlen)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
pos += skip;
|
|
||||||
*dcid_len = long_header ? *pos++ : QUIC_HAP_CID_LEN;
|
|
||||||
if (*dcid_len > QUIC_CID_MAXLEN || end - pos <= *dcid_len)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
*dcid = pos;
|
|
||||||
|
|
||||||
ret = 1;
|
|
||||||
leave:
|
|
||||||
TRACE_LEAVE(QUIC_EV_CONN_RXPKT);
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
err:
|
|
||||||
TRACE_PROTO("wrong datagram", QUIC_EV_CONN_RXPKT);
|
|
||||||
goto leave;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Notify upper layer of a fatal error which forces to close the connection. */
|
/* Notify upper layer of a fatal error which forces to close the connection. */
|
||||||
void qc_notify_err(struct quic_conn *qc)
|
void qc_notify_err(struct quic_conn *qc)
|
||||||
{
|
{
|
||||||
|
@ -208,6 +208,48 @@ struct task *quic_lstnr_dghdlr(struct task *t, void *ctx, unsigned int state)
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Retrieve the DCID from a QUIC datagram or packet at <pos> position,
|
||||||
|
* <end> being at one byte past the end of this datagram.
|
||||||
|
* Returns 1 if succeeded, 0 if not.
|
||||||
|
*/
|
||||||
|
static int quic_get_dgram_dcid(unsigned char *pos, const unsigned char *end,
|
||||||
|
unsigned char **dcid, size_t *dcid_len)
|
||||||
|
{
|
||||||
|
int ret = 0, long_header;
|
||||||
|
size_t minlen, skip;
|
||||||
|
|
||||||
|
TRACE_ENTER(QUIC_EV_CONN_RXPKT);
|
||||||
|
|
||||||
|
if (!(*pos & QUIC_PACKET_FIXED_BIT)) {
|
||||||
|
TRACE_PROTO("fixed bit not set", QUIC_EV_CONN_RXPKT);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
long_header = *pos & QUIC_PACKET_LONG_HEADER_BIT;
|
||||||
|
minlen = long_header ? QUIC_LONG_PACKET_MINLEN :
|
||||||
|
QUIC_SHORT_PACKET_MINLEN + QUIC_HAP_CID_LEN + QUIC_TLS_TAG_LEN;
|
||||||
|
skip = long_header ? QUIC_LONG_PACKET_DCID_OFF : QUIC_SHORT_PACKET_DCID_OFF;
|
||||||
|
if (end - pos < minlen)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
pos += skip;
|
||||||
|
*dcid_len = long_header ? *pos++ : QUIC_HAP_CID_LEN;
|
||||||
|
if (*dcid_len > QUIC_CID_MAXLEN || end - pos <= *dcid_len)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
*dcid = pos;
|
||||||
|
|
||||||
|
ret = 1;
|
||||||
|
leave:
|
||||||
|
TRACE_LEAVE(QUIC_EV_CONN_RXPKT);
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
err:
|
||||||
|
TRACE_PROTO("wrong datagram", QUIC_EV_CONN_RXPKT);
|
||||||
|
goto leave;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Retrieve the DCID from the datagram found at <pos> position and deliver it to the
|
/* Retrieve the DCID from the datagram found at <pos> position and deliver it to the
|
||||||
* correct datagram handler.
|
* correct datagram handler.
|
||||||
* Return 1 if a correct datagram could be found, 0 if not.
|
* Return 1 if a correct datagram could be found, 0 if not.
|
||||||
|
Loading…
Reference in New Issue
Block a user