38 lines
867 B
Go
38 lines
867 B
Go
|
// Copyright (C) 2019 Storj Labs, Inc.
|
||
|
// See LICENSE for copying information.
|
||
|
|
||
|
package rpcpeer
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"crypto/tls"
|
||
|
"net"
|
||
|
|
||
|
"github.com/zeebo/errs"
|
||
|
)
|
||
|
|
||
|
// Error is the class of errors returned by this package.
|
||
|
var Error = errs.Class("rpcpeer")
|
||
|
|
||
|
// Peer represents an rpc peer.
|
||
|
type Peer struct {
|
||
|
Addr net.Addr
|
||
|
State tls.ConnectionState
|
||
|
}
|
||
|
|
||
|
// peerKey is used as a unique value for context keys.
|
||
|
type peerKey struct{}
|
||
|
|
||
|
// NewContext returns a new context with the peer associated as a value.
|
||
|
func NewContext(ctx context.Context, peer *Peer) context.Context {
|
||
|
return context.WithValue(ctx, peerKey{}, peer)
|
||
|
}
|
||
|
|
||
|
// FromContext returns the peer that was previously associated by NewContext.
|
||
|
func FromContext(ctx context.Context) (*Peer, error) {
|
||
|
if peer, ok := ctx.Value(peerKey{}).(*Peer); ok {
|
||
|
return peer, nil
|
||
|
}
|
||
|
return internalFromContext(ctx)
|
||
|
}
|