Move ResponseWriter Conn and TLS methods to Request
This commit is contained in:
parent
b488146cc6
commit
de339490f4
18
request.go
18
request.go
@ -4,6 +4,7 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"io"
|
"io"
|
||||||
|
"net"
|
||||||
"net/url"
|
"net/url"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -26,6 +27,8 @@ type Request struct {
|
|||||||
// TLS certificate to present to the other side of the connection.
|
// TLS certificate to present to the other side of the connection.
|
||||||
// This field is ignored by the Gemini server.
|
// This field is ignored by the Gemini server.
|
||||||
Certificate *tls.Certificate
|
Certificate *tls.Certificate
|
||||||
|
|
||||||
|
conn net.Conn
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRequest returns a new request.
|
// NewRequest returns a new request.
|
||||||
@ -89,3 +92,18 @@ func (r *Request) Write(w io.Writer) error {
|
|||||||
}
|
}
|
||||||
return bw.Flush()
|
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
|
||||||
|
}
|
||||||
|
20
response.go
20
response.go
@ -156,13 +156,6 @@ type ResponseWriter interface {
|
|||||||
// Any blocked Write operations will be unblocked and return errors.
|
// Any blocked Write operations will be unblocked and return errors.
|
||||||
Close() error
|
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
|
// unexported method so we can extend this interface over time
|
||||||
// without breaking existing code. Implementers must embed a concrete
|
// without breaking existing code. Implementers must embed a concrete
|
||||||
// type from elsewhere.
|
// type from elsewhere.
|
||||||
@ -175,7 +168,6 @@ type responseWriter struct {
|
|||||||
mediatype string
|
mediatype string
|
||||||
wroteHeader bool
|
wroteHeader bool
|
||||||
bodyAllowed bool
|
bodyAllowed bool
|
||||||
conn net.Conn
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newResponseWriter(w io.WriteCloser) *responseWriter {
|
func newResponseWriter(w io.WriteCloser) *responseWriter {
|
||||||
@ -232,16 +224,4 @@ func (w *responseWriter) Close() error {
|
|||||||
return w.cl.Close()
|
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() {}
|
func (w *responseWriter) unexported() {}
|
||||||
|
@ -360,13 +360,13 @@ func (srv *Server) serveConn(ctx context.Context, conn net.Conn) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
w := newResponseWriter(cw)
|
w := newResponseWriter(cw)
|
||||||
w.conn = conn
|
|
||||||
|
|
||||||
req, err := ReadRequest(r)
|
req, err := ReadRequest(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.WriteHeader(StatusBadRequest, "Bad request")
|
w.WriteHeader(StatusBadRequest, "Bad request")
|
||||||
return w.Flush()
|
return w.Flush()
|
||||||
}
|
}
|
||||||
|
req.conn = conn
|
||||||
|
|
||||||
h := srv.Handler
|
h := srv.Handler
|
||||||
if h == nil {
|
if h == nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user