...

Source file src/google.golang.org/grpc/tap/tap.go

Documentation: google.golang.org/grpc/tap

     1  /*
     2   *
     3   * Copyright 2016 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 tap defines the function handles which are executed on the transport
    20  // layer of gRPC-Go and related information.
    21  //
    22  // # Experimental
    23  //
    24  // Notice: This API is EXPERIMENTAL and may be changed or removed in a
    25  // later release.
    26  package tap
    27  
    28  import (
    29  	"context"
    30  
    31  	"google.golang.org/grpc/metadata"
    32  )
    33  
    34  // Info defines the relevant information needed by the handles.
    35  type Info struct {
    36  	// FullMethodName is the string of grpc method (in the format of
    37  	// /package.service/method).
    38  	FullMethodName string
    39  
    40  	// Header contains the header metadata received.
    41  	Header metadata.MD
    42  
    43  	// TODO: More to be added.
    44  }
    45  
    46  // ServerInHandle defines the function which runs before a new stream is
    47  // created on the server side. If it returns a non-nil error, the stream will
    48  // not be created and an error will be returned to the client.  If the error
    49  // returned is a status error, that status code and message will be used,
    50  // otherwise PermissionDenied will be the code and err.Error() will be the
    51  // message.
    52  //
    53  // It's intended to be used in situations where you don't want to waste the
    54  // resources to accept the new stream (e.g. rate-limiting). For other general
    55  // usages, please use interceptors.
    56  //
    57  // Note that it is executed in the per-connection I/O goroutine(s) instead of
    58  // per-RPC goroutine. Therefore, users should NOT have any
    59  // blocking/time-consuming work in this handle. Otherwise all the RPCs would
    60  // slow down. Also, for the same reason, this handle won't be called
    61  // concurrently by gRPC.
    62  type ServerInHandle func(ctx context.Context, info *Info) (context.Context, error)
    63  

View as plain text