rpc: add PeerInfo (#24255)
This replaces the sketchy and undocumented string context keys for HTTP requests with a defined interface. Using string keys with context is discouraged because they may clash with keys created by other packages. We added these keys to make connection metadata available in the signer, so this change also updates signer/core to use the new PeerInfo API.
This commit is contained in:
@ -145,3 +145,38 @@ func (s *RPCService) Modules() map[string]string {
|
||||
}
|
||||
return modules
|
||||
}
|
||||
|
||||
// PeerInfo contains information about the remote end of the network connection.
|
||||
//
|
||||
// This is available within RPC method handlers through the context. Call
|
||||
// PeerInfoFromContext to get information about the client connection related to
|
||||
// the current method call.
|
||||
type PeerInfo struct {
|
||||
// Transport is name of the protocol used by the client.
|
||||
// This can be "http", "ws" or "ipc".
|
||||
Transport string
|
||||
|
||||
// Address of client. This will usually contain the IP address and port.
|
||||
RemoteAddr string
|
||||
|
||||
// Addditional information for HTTP and WebSocket connections.
|
||||
HTTP struct {
|
||||
// Protocol version, i.e. "HTTP/1.1". This is not set for WebSocket.
|
||||
Version string
|
||||
// Header values sent by the client.
|
||||
UserAgent string
|
||||
Origin string
|
||||
Host string
|
||||
}
|
||||
}
|
||||
|
||||
type peerInfoContextKey struct{}
|
||||
|
||||
// PeerInfoFromContext returns information about the client's network connection.
|
||||
// Use this with the context passed to RPC method handler functions.
|
||||
//
|
||||
// The zero value is returned if no connection info is present in ctx.
|
||||
func PeerInfoFromContext(ctx context.Context) PeerInfo {
|
||||
info, _ := ctx.Value(peerInfoContextKey{}).(PeerInfo)
|
||||
return info
|
||||
}
|
||||
|
Reference in New Issue
Block a user