mirror of
https://git.sr.ht/~adnano/go-gemini
synced 2024-11-23 16:52:06 +01:00
request: Add Conn and TLS methods
This commit is contained in:
parent
b2bbb83827
commit
45e432a71b
33
request.go
33
request.go
@ -23,9 +23,6 @@ type Request struct {
|
|||||||
// For international domain names, Host may be in Punycode or
|
// For international domain names, Host may be in Punycode or
|
||||||
// Unicode form. Use golang.org/x/net/idna to convert it to
|
// Unicode form. Use golang.org/x/net/idna to convert it to
|
||||||
// either format if needed.
|
// either format if needed.
|
||||||
//
|
|
||||||
// For server requests, Host specifies the host on which the URL
|
|
||||||
// is sought.
|
|
||||||
Host string
|
Host string
|
||||||
|
|
||||||
// For client requests, Certificate optionally specifies the
|
// For client requests, Certificate optionally specifies the
|
||||||
@ -33,20 +30,7 @@ type Request struct {
|
|||||||
// This field is ignored by the Gemini server.
|
// This field is ignored by the Gemini server.
|
||||||
Certificate *tls.Certificate
|
Certificate *tls.Certificate
|
||||||
|
|
||||||
// RemoteAddr allows Gemini servers and other software to record
|
conn net.Conn
|
||||||
// the network address that sent the request, usually for
|
|
||||||
// logging. This field is not filled in by ReadRequest.
|
|
||||||
// This field is ignored by the Gemini client.
|
|
||||||
RemoteAddr net.Addr
|
|
||||||
|
|
||||||
// TLS allows Gemini servers and other software to record
|
|
||||||
// information about the TLS connection on which the request
|
|
||||||
// was received. This field is not filled in by ReadRequest.
|
|
||||||
// The Gemini server in this package sets the field for
|
|
||||||
// TLS-enabled connections before invoking a handler;
|
|
||||||
// otherwise it leaves the field nil.
|
|
||||||
// This field is ignored by the Gemini client.
|
|
||||||
TLS *tls.ConnectionState
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRequest returns a new request.
|
// NewRequest returns a new request.
|
||||||
@ -111,3 +95,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
|
||||||
|
// response was received.
|
||||||
|
func (r *Request) TLS() *tls.ConnectionState {
|
||||||
|
if tlsConn, ok := r.conn.(*tls.Conn); ok {
|
||||||
|
state := tlsConn.ConnectionState()
|
||||||
|
return &state
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
11
server.go
11
server.go
@ -366,16 +366,7 @@ func (srv *Server) serveConn(ctx context.Context, conn net.Conn) error {
|
|||||||
w.WriteHeader(StatusBadRequest, "Bad request")
|
w.WriteHeader(StatusBadRequest, "Bad request")
|
||||||
return w.Flush()
|
return w.Flush()
|
||||||
}
|
}
|
||||||
|
req.conn = conn
|
||||||
// Store the TLS connection state
|
|
||||||
if tlsConn, ok := conn.(*tls.Conn); ok {
|
|
||||||
state := tlsConn.ConnectionState()
|
|
||||||
req.TLS = &state
|
|
||||||
req.Host = state.ServerName
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store remote address
|
|
||||||
req.RemoteAddr = conn.RemoteAddr()
|
|
||||||
|
|
||||||
h := srv.Handler
|
h := srv.Handler
|
||||||
if h == nil {
|
if h == nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user