44 lines
1.2 KiB
Go
44 lines
1.2 KiB
Go
|
package gus
|
||
|
|
||
|
import (
|
||
|
"crypto/tls"
|
||
|
"net"
|
||
|
"net/url"
|
||
|
)
|
||
|
|
||
|
// Request represents a request over any small web protocol.
|
||
|
//
|
||
|
// Because protocols have so many differences, this type represents a
|
||
|
// greatest common denominator of request/response-oriented protocols.
|
||
|
type Request struct {
|
||
|
// URL is the specific URL being fetched by the request.
|
||
|
*url.URL
|
||
|
|
||
|
// Server is the server which received the request.
|
||
|
//
|
||
|
// This is only populated in servers.
|
||
|
// It is unused on the client end.
|
||
|
Server Server
|
||
|
|
||
|
// RemoteAddr is the address of the other side of the connection.
|
||
|
//
|
||
|
// This will be the server address for clients, or the connecting
|
||
|
// client's address in servers.
|
||
|
//
|
||
|
// Be aware though that proxies (and reverse proxies) can confuse this.
|
||
|
RemoteAddr net.Addr
|
||
|
|
||
|
// TLSState contains information about the TLS encryption over the connection.
|
||
|
//
|
||
|
// This includes peer certificates and version information.
|
||
|
TLSState *tls.ConnectionState
|
||
|
}
|
||
|
|
||
|
// UnescapedQuery performs %XX unescaping on the URL query segment.
|
||
|
//
|
||
|
// Like URL.Query(), it silently drops malformed %-encoded sequences.
|
||
|
func (req Request) UnescapedQuery() string {
|
||
|
unescaped, _ := url.QueryUnescape(req.RawQuery)
|
||
|
return unescaped
|
||
|
}
|