gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

peer.go (1495B)


      1 /*
      2  *
      3  * Copyright 2014 gRPC authors.
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  *
     17  */
     18 
     19 // Package peer defines various peer information associated with RPCs and
     20 // corresponding utils.
     21 package peer
     22 
     23 import (
     24 	"context"
     25 	"net"
     26 
     27 	"google.golang.org/grpc/credentials"
     28 )
     29 
     30 // Peer contains the information of the peer for an RPC, such as the address
     31 // and authentication information.
     32 type Peer struct {
     33 	// Addr is the peer address.
     34 	Addr net.Addr
     35 	// AuthInfo is the authentication information of the transport.
     36 	// It is nil if there is no transport security being used.
     37 	AuthInfo credentials.AuthInfo
     38 }
     39 
     40 type peerKey struct{}
     41 
     42 // NewContext creates a new context with peer information attached.
     43 func NewContext(ctx context.Context, p *Peer) context.Context {
     44 	return context.WithValue(ctx, peerKey{}, p)
     45 }
     46 
     47 // FromContext returns the peer information in ctx if it exists.
     48 func FromContext(ctx context.Context) (p *Peer, ok bool) {
     49 	p, ok = ctx.Value(peerKey{}).(*Peer)
     50 	return
     51 }