@miconda I would mainly love some pointers as to how/where to implement this.
My initial thought was to modify handle_new_connect()
to change the connection state to S_CONN_OK
instead of S_CONN_ACCEPT
, and then peek the connection to see if we are getting a PROXY v1/v2 header, and the override the connection information structs. However, this obviously runs amuck of clean code, and obviously might wait a long time if the header isn't sent immediately.
Would it, instead, make more sense to attempt to parse it in a fashion not unlike the tcp_read_hep3
/tcp_header_headers
combination in tcp_read.c
around line 1490:
if(unlikely(ksr_tcp_accept_hep3!=0)) {
bytes=tcp_read_hep3(con, read_flags);
if (bytes>=0) {
if(!(con->req.flags & F_TCP_REQ_HEP3)) {
/* not hep3, try to read headers */
bytes=tcp_read_headers(con, read_flags);
}
}
} else {
bytes=tcp_read_headers(con, read_flags);
}
So for example:
if(unlikely(ksr_tcp_accept_hep3!=0)) {
bytes=tcp_read_hep3(con, read_flags);
if (bytes>=0) {
if(!(con->req.flags & F_TCP_REQ_HEP3)) {
/* not hep3, try to read headers */
goto read_headers
}
}
} else {
read_headers:
if (unlikely(read_proxy_protocol!=0)) {
tcp_read_proxy_protocol(con, read_flags);
}
bytes=tcp_read_headers(con, read_flags);
}
Obviously, the above is just imaginary pseudocode. Thoughts?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.