@@ -19,10 +19,10 @@ import (
1919 "golang.org/x/net/http2"
2020)
2121
22- // listenHTTP creates instances of TLS listeners that will be used to run an
22+ // listenHTTPS creates instances of TLS listeners that will be used to run an
2323// H1/H2 server. Returns the address the listener actually listens to (useful
2424// in the case if port 0 is specified).
25- func (p * Proxy ) listenHTTP (addr * net.TCPAddr ) (laddr * net.TCPAddr , err error ) {
25+ func (p * Proxy ) listenHTTPS (addr * net.TCPAddr ) (laddr * net.TCPAddr , err error ) {
2626 tcpListen , err := net .ListenTCP ("tcp" , addr )
2727 if err != nil {
2828 return nil , fmt .Errorf ("tcp listener: %w" , err )
@@ -38,6 +38,21 @@ func (p *Proxy) listenHTTP(addr *net.TCPAddr) (laddr *net.TCPAddr, err error) {
3838 return tcpListen .Addr ().(* net.TCPAddr ), nil
3939}
4040
41+ // listenHTTP creates instances of TCP listeners that will be used to run an
42+ // H1 server. Returns the address the listener actually listens to (useful
43+ // in the case if port 0 is specified).
44+ func (p * Proxy ) listenHTTP (addr * net.TCPAddr ) (laddr * net.TCPAddr , err error ) {
45+ tcpListen , err := net .ListenTCP ("tcp" , addr )
46+ if err != nil {
47+ return nil , fmt .Errorf ("tcp listener: %w" , err )
48+ }
49+ log .Info ("Listening to http://%s" , tcpListen .Addr ())
50+
51+ p .httpListen = append (p .httpListen , tcpListen )
52+
53+ return tcpListen .Addr ().(* net.TCPAddr ), nil
54+ }
55+
4156// listenH3 creates instances of QUIC listeners that will be used for running
4257// an HTTP/3 server.
4358func (p * Proxy ) listenH3 (addr * net.UDPAddr ) (err error ) {
@@ -70,10 +85,9 @@ func (p *Proxy) createHTTPSListeners() (err error) {
7085
7186 for _ , addr := range p .HTTPSListenAddr {
7287 log .Info ("Creating an HTTPS server" )
73-
74- tcpAddr , lErr := p .listenHTTP (addr )
75- if lErr != nil {
76- return fmt .Errorf ("failed to start HTTPS server on %s: %w" , addr , lErr )
88+ tcpAddr , err := p .listenHTTPS (addr )
89+ if err != nil {
90+ return fmt .Errorf ("failed to start HTTPS server on %s: %w" , addr , err )
7791 }
7892
7993 if p .HTTP3 {
@@ -90,6 +104,26 @@ func (p *Proxy) createHTTPSListeners() (err error) {
90104 return nil
91105}
92106
107+ // createHTTPListeners creates the cleartext HTTP listener for DNS-over-HTTPS (behind a proxy doing TLS termination).
108+ func (p * Proxy ) createHTTPListeners () (err error ) {
109+ p .httpServer = & http.Server {
110+ Handler : p ,
111+ ReadHeaderTimeout : defaultTimeout ,
112+ WriteTimeout : defaultTimeout ,
113+ }
114+
115+ for _ , addr := range p .HTTPListenAddr {
116+ log .Info ("Creating an HTTP server" )
117+
118+ _ , err := p .listenHTTP (addr )
119+ if err != nil {
120+ return fmt .Errorf ("failed to start HTTP server on %s: %w" , addr , err )
121+ }
122+ }
123+
124+ return nil
125+ }
126+
93127// ServeHTTP is the http.Handler implementation that handles DoH queries.
94128// Here is what it returns:
95129//
0 commit comments