17e9044c0f
we don't know if an incoming connection is from drpc or grpc during the migration time, so check both. Change-Id: I2418dde8b651dcc4a23726057178465224a48103
43 lines
1.1 KiB
Go
43 lines
1.1 KiB
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
|
|
} else if peer, drpcErr := drpcInternalFromContext(ctx); drpcErr == nil {
|
|
return peer, nil
|
|
} else if peer, grpcErr := grpcInternalFromContext(ctx); grpcErr == nil {
|
|
return peer, nil
|
|
} else {
|
|
return nil, errs.Combine(drpcErr, grpcErr)
|
|
}
|
|
}
|