diff options
| author | Adnan Maolood <[email protected]> | 2021-02-24 08:24:47 -0500 |
|---|---|---|
| committer | Adnan Maolood <[email protected]> | 2021-02-24 08:24:49 -0500 |
| commit | de339490f43bd2ca169e3b82bbe44c106ed95bba (patch) | |
| tree | 713fb6876fb45909735be4269f87bc763cf626ee | |
| parent | Remove ResponseWriter.Hijack method (diff) | |
| download | go-gemini-de339490f43bd2ca169e3b82bbe44c106ed95bba.tar.xz go-gemini-de339490f43bd2ca169e3b82bbe44c106ed95bba.zip | |
Move ResponseWriter Conn and TLS methods to Request
| -rw-r--r-- | request.go | 18 | ||||
| -rw-r--r-- | response.go | 20 | ||||
| -rw-r--r-- | server.go | 2 |
3 files changed, 19 insertions, 21 deletions
@@ -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 +} diff --git a/response.go b/response.go index 487e58b..d9d7503 100644 --- a/response.go +++ b/response.go @@ -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() {} @@ -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 { |