storj/pkg/rpc/rpcpeer/peer.go

38 lines
867 B
Go
Raw Normal View History

// 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)
}