Move ResponseWriter Conn and TLS methods to Request

This commit is contained in:
Adnan Maolood 2021-02-24 08:24:47 -05:00
parent b488146cc6
commit de339490f4
3 changed files with 19 additions and 21 deletions

View File

@ -4,6 +4,7 @@ import (
"bufio"
"crypto/tls"
"io"
"net"
"net/url"
)
@ -26,6 +27,8 @@ type Request struct {
// TLS certificate to present to the other side of the connection.
// This field is ignored by the Gemini server.
Certificate *tls.Certificate
conn net.Conn
}
// NewRequest returns a new request.
@ -89,3 +92,18 @@ func (r *Request) Write(w io.Writer) error {
}
return bw.Flush()
}
// Conn returns the network connection on which the request was received.
func (r *Request) Conn() net.Conn {
return r.conn
}
// TLS returns information about the TLS connection on which the
// request was received.
func (r *Request) TLS() *tls.ConnectionState {
if tlsConn, ok := r.conn.(*tls.Conn); ok {
state := tlsConn.ConnectionState()
return &state
}
return nil
}

View File

@ -156,13 +156,6 @@ type ResponseWriter interface {
// Any blocked Write operations will be unblocked and return errors.
Close() error
// Conn returns the underlying network connection.
// To take over the connection, use Hijack.
Conn() net.Conn
// TLS returns information about the underlying TLS connection.
TLS() *tls.ConnectionState
// unexported method so we can extend this interface over time
// without breaking existing code. Implementers must embed a concrete
// type from elsewhere.
@ -175,7 +168,6 @@ type responseWriter struct {
mediatype string
wroteHeader bool
bodyAllowed bool
conn net.Conn
}
func newResponseWriter(w io.WriteCloser) *responseWriter {
@ -232,16 +224,4 @@ func (w *responseWriter) Close() error {
return w.cl.Close()
}
func (w *responseWriter) Conn() net.Conn {
return w.conn
}
func (w *responseWriter) TLS() *tls.ConnectionState {
if tlsConn, ok := w.conn.(*tls.Conn); ok {
state := tlsConn.ConnectionState()
return &state
}
return nil
}
func (w *responseWriter) unexported() {}

View File

@ -360,13 +360,13 @@ func (srv *Server) serveConn(ctx context.Context, conn net.Conn) error {
}
w := newResponseWriter(cw)
w.conn = conn
req, err := ReadRequest(r)
if err != nil {
w.WriteHeader(StatusBadRequest, "Bad request")
return w.Flush()
}
req.conn = conn
h := srv.Handler
if h == nil {