commit
be947697d7
4195 changed files with 234007 additions and 59115 deletions
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,192 @@ |
||||
# gRPC over HTTP2 |
||||
|
||||
## Introduction |
||||
This document serves as a detailed description for an implementation of gRPC carried over HTTP2 draft 17 framing. It assumes familiarity with the HTTP2 specification. |
||||
|
||||
## Protocol |
||||
Production rules are using <a href="http://tools.ietf.org/html/rfc5234">ABNF syntax</a>. |
||||
|
||||
### Outline |
||||
|
||||
The following is the general sequence of message atoms in a GRPC request & response message stream |
||||
|
||||
* Request → Request-Headers *Delimited-Message EOS |
||||
* Response → (Response-Headers *Delimited-Message Trailers) / Trailers-Only |
||||
|
||||
|
||||
### Requests |
||||
|
||||
* Request → Request-Headers *Delimited-Message EOS |
||||
|
||||
Request-Headers are delivered as HTTP2 headers in HEADERS + CONTINUATION frames. |
||||
|
||||
* **Request-Headers** → Call-Definition *Custom-Metadata |
||||
* **Call-Definition** → Method Scheme Path TE [Authority] [Timeout] [Content-Type] [Message-Type] [Message-Encoding] [Message-Accept-Encoding] [User-Agent] |
||||
* **Method** → “:method POST” |
||||
* **Scheme** → “:scheme ” (“http” / “https”) |
||||
* **Path** → “:path” {_path identifying method within exposed API_} |
||||
* **Authority** → “:authority” {_virtual host name of authority_} |
||||
* **TE** → “te” “trailers” # Used to detect incompatible proxies |
||||
* **Timeout** → “grpc-timeout” TimeoutValue TimeoutUnit |
||||
* **TimeoutValue** → {_positive integer as ASCII string of at most 8 digits_} |
||||
* **TimeoutUnit** → Hour / Minute / Second / Millisecond / Microsecond / Nanosecond |
||||
* **Hour** → “H” |
||||
* **Minute** → “M” |
||||
* **Second** → “S” |
||||
* **Millisecond** → “m” |
||||
* **Microsecond** → “u” |
||||
* **Nanosecond** → “n” |
||||
* **Content-Type** → “content-type” “application/grpc” [(“+proto” / “+json” / {_custom_})] |
||||
* **Content-Coding** → “gzip” / “deflate” / “snappy” / {_custom_} |
||||
* **Message-Encoding** → “grpc-encoding” Content-Coding |
||||
* **Message-Accept-Encoding** → “grpc-accept-encoding” Content-Coding *("," Content-Coding) |
||||
* **User-Agent** → “user-agent” {_structured user-agent string_} |
||||
* **Message-Type** → “grpc-message-type” {_type name for message schema_} |
||||
* **Custom-Metadata** → Binary-Header / ASCII-Header |
||||
* **Binary-Header** → {lowercase ASCII header name ending in “-bin” } {_base64 encoded value_} |
||||
* **ASCII-Header** → {lowercase ASCII header name} {_value_} |
||||
|
||||
|
||||
HTTP2 requires that reserved headers, ones starting with “:” appear before all other headers. Additionally implementations should send **Timeout** immediately after the reserved headers and they should send the **Call-Definition** headers before sending **Custom-Metadata**. |
||||
|
||||
If **Timeout** is omitted a server should assume an infinite timeout. Client implementations are free to send a default minimum timeout based on their deployment requirements. |
||||
|
||||
**Custom-Metadata** is an arbitrary set of key-value pairs defined by the application layer. Aside from transport limits on the total length of HTTP2 HEADERS the only other constraint is that header names starting with “grpc-” are reserved for future use. |
||||
|
||||
Note that HTTP2 does not allow arbitrary octet sequences for header values so binary header values must be encoded using Base64 as per https://tools.ietf.org/html/rfc4648#section-4. Implementations MUST accept padded and un-padded values and should emit un-padded values. Applications define binary headers by having their names end with “-bin”. Runtime libraries use this suffix to detect binary headers and properly apply base64 encoding & decoding as headers are sent and received. |
||||
|
||||
The repeated sequence of **Delimited-Message** items is delivered in DATA frames |
||||
|
||||
* **Delimited-Message** → Compressed-Flag Message-Length Message |
||||
* **Compressed-Flag** → 0 / 1 # encoded as 1 byte unsigned integer |
||||
* **Message-Length** → {_length of Message_} # encoded as 4 byte unsigned integer |
||||
* **Message** → *{binary octet} |
||||
|
||||
A **Compressed-Flag** value of 1 indicates that the binary octet sequence of **Message** is compressed using the mechanism declared by the **Message-Encoding** header. A value of 0 indicates that no encoding of **Message** bytes has occurred. Compression contexts are NOT maintained over message boundaries, implementations must create a new context for each message in the stream. If the **Message-Encoding** header is omitted then the **Compressed-Flag** must be 0. |
||||
|
||||
For requests, **EOS** (end-of-stream) is indicated by the presence of the END_STREAM flag on the last received DATA frame. In scenarios where the **Request** stream needs to be closed but no data remains to be sent implementations MUST send an empty DATA frame with this flag set. |
||||
|
||||
###Responses |
||||
|
||||
* **Response** → (Response-Headers *Delimited-Message Trailers) / Trailers-Only |
||||
* **Response-Headers** → HTTP-Status [Message-Encoding] [Message-Accept-Encoding] Content-Type *Custom-Metadata |
||||
* **Trailers-Only** → HTTP-Status Content-Type Trailers |
||||
* **Trailers** → Status [Status-Message] *Custom-Metadata |
||||
* **HTTP-Status** → “:status 200” |
||||
* **Status** → “grpc-status” <status-code-as-ASCII-string> |
||||
* **Status-Message** → “grpc-message” <descriptive text for status as ASCII string> |
||||
|
||||
**Response-Headers** & **Trailers-Only** are each delivered in a single HTTP2 HEADERS frame block. Most responses are expected to have both headers and trailers but **Trailers-Only** is permitted for calls that produce an immediate error. Status must be sent in **Trailers** even if the status code is OK. |
||||
|
||||
For responses end-of-stream is indicated by the presence of the END_STREAM flag on the last received HEADERS frame that carries **Trailers**. |
||||
|
||||
Implementations should expect broken deployments to send non-200 HTTP status codes in responses as well as a variety of non-GRPC content-types and to omit **Status** & **Status-Message**. Implementations must synthesize a **Status** & **Status-Message** to propagate to the application layer when this occurs. |
||||
|
||||
####Example |
||||
|
||||
Sample unary-call showing HTTP2 framing sequence |
||||
|
||||
**Request** |
||||
|
||||
``` |
||||
HEADERS (flags = END_HEADERS) |
||||
:method = POST |
||||
:scheme = http |
||||
:path = /google.pubsub.v2.PublisherService/CreateTopic |
||||
:authority = pubsub.googleapis.com |
||||
grpc-timeout = 1S |
||||
content-type = application/grpc+proto |
||||
grpc-encoding = gzip |
||||
authorization = Bearer y235.wef315yfh138vh31hv93hv8h3v |
||||
|
||||
DATA (flags = END_STREAM) |
||||
<Delimited Message> |
||||
``` |
||||
**Response** |
||||
``` |
||||
HEADERS (flags = END_HEADERS) |
||||
:status = 200 |
||||
grpc-encoding = gzip |
||||
|
||||
DATA |
||||
<Delimited Message> |
||||
|
||||
HEADERS (flags = END_STREAM, END_HEADERS) |
||||
grpc-status = 0 # OK |
||||
trace-proto-bin = jher831yy13JHy3hc |
||||
``` |
||||
####User Agents |
||||
|
||||
While the protocol does not require a user-agent to function it is recommended that clients provide a structured user-agent string that provides a basic description of the calling library, version & platform to facilitate issue diagnosis in heterogeneous environments. The following structure is recommended to library developers |
||||
``` |
||||
User-Agent → “grpc-” Language ?(“-” Variant) “/” Version ?( “ (“ *(AdditionalProperty “;”) “)” ) |
||||
``` |
||||
E.g. |
||||
|
||||
``` |
||||
grpc-java/1.2.3 |
||||
grpc-ruby/1.2.3 |
||||
grpc-ruby-jruby/1.3.4 |
||||
grpc-java-android/0.9.1 (gingerbread/1.2.4; nexus5; tmobile) |
||||
``` |
||||
####HTTP2 Transport Mapping |
||||
|
||||
#####Stream Identification |
||||
All GRPC calls need to specify an internal ID. We will use HTTP2 stream-ids as call identifiers in this scheme. NOTE: These id’s are contextual to an open HTTP2 session and will not be unique within a given process that is handling more than one HTTP2 session nor can they be used as GUIDs. |
||||
|
||||
#####Data Frames |
||||
DATA frame boundaries have no relation to **Delimited-Message** boundaries and implementations should make no assumptions about their alignment. |
||||
|
||||
#####Errors |
||||
|
||||
When an application or runtime error occurs during an RPC a **Status** and **Status-Message** are delivered in **Trailers**. |
||||
|
||||
In some cases it is possible that the framing of the message stream has become corrupt and the RPC runtime will choose to use an **RST_STREAM** frame to indicate this state to its peer. RPC runtime implementations should interpret RST_STREAM as immediate full-closure of the stream and should propagate an error up to the calling application layer. |
||||
|
||||
The following mapping from RST_STREAM error codes to GRPC error codes is applied. |
||||
|
||||
HTTP2 Code|GRPC Code |
||||
----------|----------- |
||||
NO_ERROR(0)|INTERNAL - An explicit GRPC status of OK should have been sent but this might be used to aggressively lameduck in some scenarios. |
||||
PROTOCOL_ERROR(1)|INTERNAL |
||||
INTERNAL_ERROR(2)|INTERNAL |
||||
FLOW_CONTROL_ERROR(3)|INTERNAL |
||||
SETTINGS_TIMEOUT(4)|INTERNAL |
||||
STREAM_CLOSED|No mapping as there is no open stream to propagate to. Implementations should log. |
||||
FRAME_SIZE_ERROR|INTERNAL |
||||
REFUSED_STREAM|UNAVAILABLE - Indicates that no processing occurred and the request can be retried, possibly elsewhere. |
||||
CANCEL(8)|Mapped to call cancellation when sent by a client.Mapped to CANCELLED when sent by a server. Note that servers should only use this mechanism when they need to cancel a call but the payload byte sequence is incomplete. |
||||
COMPRESSION_ERROR|INTERNAL |
||||
CONNECT_ERROR|INTERNAL |
||||
ENHANCE_YOUR_CALM|RESOURCE_EXHAUSTED ...with additional error detail provided by runtime to indicate that the exhausted resource is bandwidth. |
||||
INADEQUATE_SECURITY| PERMISSION_DENIED … with additional detail indicating that permission was denied as protocol is not secure enough for call. |
||||
|
||||
|
||||
#####Security |
||||
|
||||
The HTTP2 specification mandates the use of TLS 1.2 or higher when TLS is used with HTTP2. It also places some additional constraints on the allowed ciphers in deployments to avoid known-problems as well as requiring SNI support. It is also expected that HTTP2 will be used in conjunction with proprietary transport security mechanisms about which the specification can make no meaningful recommendations. |
||||
|
||||
#####Connection Management |
||||
######GOAWAY Frame |
||||
Sent by servers to clients to indicate that they will no longer accept any new streams on the associated connections. This frame includes the id of the last successfully accepted stream by the server. Clients should consider any stream initiated after the last successfully accepted stream as UNAVAILABLE and retry the call elsewhere. Clients are free to continue working with the already accepted streams until they complete or the connection is terminated. |
||||
|
||||
Servers should send GOAWAY before terminating a connection to reliably inform clients which work has been accepted by the server and is being executed. |
||||
|
||||
######PING Frame |
||||
Both clients and servers can send a PING frame that the peer must respond to by precisely echoing what they received. This is used to assert that the connection is still live as well as providing a means to estimate end-to-end latency. If a server initiated PING does not receive a response within the deadline expected by the runtime all outstanding calls on the server will be closed with a CANCELLED status. An expired client initiated PING will cause all calls to be closed with an UNAVAILABLE status. Note that the frequency of PINGs is highly dependent on the network environment, implementations are free to adjust PING frequency based on network and application requirements. |
||||
|
||||
######Connection failure |
||||
If a detectable connection failure occurs on the client all calls will be closed with an UNAVAILABLE status. For servers open calls will be closed with a CANCELLED status. |
||||
|
||||
|
||||
### Appendix A - GRPC for Protobuf |
||||
|
||||
The service interfaces declared by protobuf are easily mapped onto GRPC by code generation extensions to protoc. The following defines the mapping to be used |
||||
|
||||
|
||||
* **Path** → / Service-Name / {_method name_} |
||||
* **Service-Name** → ?( {_proto package name_} "." ) {_service name_} |
||||
* **Message-Type** → {_fully qualified proto message name_} |
||||
* **Content-Type** → "application/grpc+proto" |
||||
|
||||
|
@ -0,0 +1,289 @@ |
||||
#gRPC Authentication support |
||||
|
||||
gRPC is designed to plug-in a number of authentication mechanisms. This document |
||||
provides a quick overview of the various auth mechanisms supported, discusses |
||||
the API with some examples, and concludes with a discussion of extensibility. |
||||
More documentation and examples are coming soon! |
||||
|
||||
## Supported auth mechanisms |
||||
|
||||
###SSL/TLS |
||||
gRPC has SSL/TLS integration and promotes the use of SSL/TLS to authenticate the |
||||
server, and encrypt all the data exchanged between the client and the server. |
||||
Optional mechanisms are available for clients to provide certificates to |
||||
accomplish mutual authentication. |
||||
|
||||
###OAuth 2.0 |
||||
gRPC provides a generic mechanism (described below) to attach metadata to |
||||
requests and responses. This mechanism can be used to attach OAuth 2.0 Access |
||||
Tokens to RPCs being made at a client. Additional support for acquiring Access |
||||
Tokens while accessing Google APIs through gRPC is provided for certain auth |
||||
flows, demonstrated through code examples below. |
||||
|
||||
## API |
||||
To reduce complexity and minimize API clutter, gRPC works with a unified concept |
||||
of a Credentials object. Users construct gRPC credentials using corresponding |
||||
bootstrap credentials (e.g., SSL client certs or Service Account Keys), and use |
||||
the credentials while creating a gRPC channel to any server. Depending on the |
||||
type of credential supplied, the channel uses the credentials during the initial |
||||
SSL/TLS handshake with the server, or uses the credential to generate and |
||||
attach Access Tokens to each request being made on the channel. |
||||
|
||||
###SSL/TLS for server authentication and encryption |
||||
This is the simplest authentication scenario, where a client just wants to |
||||
authenticate the server and encrypt all data. |
||||
|
||||
```cpp |
||||
SslCredentialsOptions ssl_opts; // Options to override SSL params, empty by default |
||||
// Create the credentials object by providing service account key in constructor |
||||
std::unique_ptr<Credentials> creds = CredentialsFactory::SslCredentials(ssl_opts); |
||||
// Create a channel using the credentials created in the previous step |
||||
std::shared_ptr<ChannelInterface> channel = CreateChannel(server_name, creds, channel_args); |
||||
// Create a stub on the channel |
||||
std::unique_ptr<Greeter::Stub> stub(Greeter::NewStub(channel)); |
||||
// Make actual RPC calls on the stub. |
||||
grpc::Status s = stub->sayHello(&context, *request, response); |
||||
``` |
||||
|
||||
For advanced use cases such as modifying the root CA or using client certs, |
||||
the corresponding options can be set in the SslCredentialsOptions parameter |
||||
passed to the factory method. |
||||
|
||||
|
||||
###Authenticating with Google |
||||
|
||||
gRPC applications can use a simple API to create a credential that works in various deployment scenarios. |
||||
|
||||
```cpp |
||||
std::unique_ptr<Credentials> creds = CredentialsFactory::GoogleDefaultCredentials(); |
||||
// Create a channel, stub and make RPC calls (same as in the previous example) |
||||
std::shared_ptr<ChannelInterface> channel = CreateChannel(server_name, creds, channel_args); |
||||
std::unique_ptr<Greeter::Stub> stub(Greeter::NewStub(channel)); |
||||
grpc::Status s = stub->sayHello(&context, *request, response); |
||||
``` |
||||
|
||||
This credential works for applications using Service Accounts as well as for |
||||
applications running in [Google Compute Engine (GCE)](https://cloud.google.com/compute/). In the former case, the |
||||
service account’s private keys are loaded from the file named in the environment |
||||
variable `GOOGLE_APPLICATION_CREDENTIALS`. The |
||||
keys are used to generate bearer tokens that are attached to each outgoing RPC |
||||
on the corresponding channel. |
||||
|
||||
For applications running in GCE, a default service account and corresponding |
||||
OAuth scopes can be configured during VM setup. At run-time, this credential |
||||
handles communication with the authentication systems to obtain OAuth2 access |
||||
tokens and attaches them to each outgoing RPC on the corresponding channel. |
||||
Extending gRPC to support other authentication mechanisms |
||||
The gRPC protocol is designed with a general mechanism for sending metadata |
||||
associated with RPC. Clients can send metadata at the beginning of an RPC and |
||||
servers can send back metadata at the beginning and end of the RPC. This |
||||
provides a natural mechanism to support OAuth2 and other authentication |
||||
mechanisms that need attach bearer tokens to individual request. |
||||
|
||||
In the simplest case, there is a single line of code required on the client |
||||
to add a specific token as metadata to an RPC and a corresponding access on |
||||
the server to retrieve this piece of metadata. The generation of the token |
||||
on the client side and its verification at the server can be done separately. |
||||
|
||||
A deeper integration can be achieved by plugging in a gRPC credentials implementation for any custom authentication mechanism that needs to attach per-request tokens. gRPC internals also allow switching out SSL/TLS with other encryption mechanisms. |
||||
|
||||
## Examples |
||||
|
||||
These authentication mechanisms will be available in all gRPC's supported languages. |
||||
The following sections demonstrate how authentication and authorization features described above appear in each language: more languages are coming soon. |
||||
|
||||
###SSL/TLS for server authentication and encryption (Ruby) |
||||
```ruby |
||||
# Base case - No encryption |
||||
stub = Helloworld::Greeter::Stub.new('localhost:50051') |
||||
... |
||||
|
||||
# With server authentication SSL/TLS |
||||
creds = GRPC::Core::Credentials.new(load_certs) # load_certs typically loads a CA roots file |
||||
stub = Helloworld::Greeter::Stub.new('localhost:50051', creds: creds) |
||||
``` |
||||
|
||||
###SSL/TLS for server authentication and encryption (C#) |
||||
```csharp |
||||
// Base case - No encryption |
||||
var channel = new Channel("localhost:50051"); |
||||
var client = new Greeter.GreeterClient(channel); |
||||
... |
||||
|
||||
// With server authentication SSL/TLS |
||||
var credentials = new SslCredentials(File.ReadAllText("ca.pem")); // Load a CA file |
||||
var channel = new Channel("localhost:50051", credentials); |
||||
var client = new Greeter.GreeterClient(channel); |
||||
``` |
||||
|
||||
###SSL/TLS for server authentication and encryption (Objective-C) |
||||
|
||||
The default for Objective-C is to use SSL/TLS, as that's the most common use case when accessing |
||||
remote APIs. |
||||
|
||||
```objective-c |
||||
// Base case - With server authentication SSL/TLS |
||||
HLWGreeter *client = [[HLWGreeter alloc] initWithHost:@"localhost:50051"]; |
||||
// Same as using @"https://localhost:50051". |
||||
... |
||||
|
||||
// No encryption |
||||
HLWGreeter *client = [[HLWGreeter alloc] initWithHost:@"http://localhost:50051"]; |
||||
// Specifying the HTTP scheme explicitly forces no encryption. |
||||
``` |
||||
|
||||
###SSL/TLS for server authentication and encryption (Python) |
||||
```python |
||||
# Base case - No encryption |
||||
stub = early_adopter_create_GreeterService_stub('localhost', 50051) |
||||
... |
||||
|
||||
# With server authentication SSL/TLS |
||||
stub = early_adopter_create_GreeterService_stub( |
||||
'localhost', 50051, secure=True, root_certificates=open('ca.pem').read()) |
||||
... |
||||
``` |
||||
n.b.: the beta API will look different |
||||
|
||||
###Authenticating with Google (Ruby) |
||||
```ruby |
||||
# Base case - No encryption/authorization |
||||
stub = Helloworld::Greeter::Stub.new('localhost:50051') |
||||
... |
||||
|
||||
# Authenticating with Google |
||||
require 'googleauth' # from http://www.rubydoc.info/gems/googleauth/0.1.0 |
||||
... |
||||
creds = GRPC::Core::Credentials.new(load_certs) # load_certs typically loads a CA roots file |
||||
scope = 'https://www.googleapis.com/auth/grpc-testing' |
||||
authorization = Google::Auth.get_application_default(scope) |
||||
stub = Helloworld::Greeter::Stub.new('localhost:50051', |
||||
creds: creds, |
||||
update_metadata: authorization.updater_proc) |
||||
``` |
||||
|
||||
###Authenticating with Google (Node.js) |
||||
|
||||
```node |
||||
// Base case - No encryption/authorization |
||||
var stub = new helloworld.Greeter('localhost:50051'); |
||||
... |
||||
// Authenticating with Google |
||||
var GoogleAuth = require('google-auth-library'); // from https://www.npmjs.com/package/google-auth-library |
||||
... |
||||
var creds = grpc.Credentials.createSsl(load_certs); // load_certs typically loads a CA roots file |
||||
var scope = 'https://www.googleapis.com/auth/grpc-testing'; |
||||
(new GoogleAuth()).getApplicationDefault(function(err, auth) { |
||||
if (auth.createScopeRequired()) { |
||||
auth = auth.createScoped(scope); |
||||
} |
||||
var stub = new helloworld.Greeter('localhost:50051', |
||||
{credentials: creds}, |
||||
grpc.getGoogleAuthDelegate(auth)); |
||||
}); |
||||
``` |
||||
|
||||
###Authenticating with Google (C#) |
||||
```csharp |
||||
// Base case - No encryption/authorization |
||||
var channel = new Channel("localhost:50051"); |
||||
var client = new Greeter.GreeterClient(channel); |
||||
... |
||||
|
||||
// Authenticating with Google |
||||
using Grpc.Auth; // from Grpc.Auth NuGet package |
||||
... |
||||
var credentials = new SslCredentials(File.ReadAllText("ca.pem")); // Load a CA file |
||||
var channel = new Channel("localhost:50051", credentials); |
||||
|
||||
string scope = "https://www.googleapis.com/auth/grpc-testing"; |
||||
var authorization = GoogleCredential.GetApplicationDefault(); |
||||
if (authorization.IsCreateScopedRequired) |
||||
{ |
||||
authorization = credential.CreateScoped(new[] { scope }); |
||||
} |
||||
var client = new Greeter.GreeterClient(channel, |
||||
new StubConfiguration(OAuth2InterceptorFactory.Create(credential))); |
||||
``` |
||||
|
||||
###Authenticating with Google (PHP) |
||||
```php |
||||
// Base case - No encryption/authorization |
||||
$client = new helloworld\GreeterClient( |
||||
new Grpc\BaseStub('localhost:50051', [])); |
||||
... |
||||
|
||||
// Authenticating with Google |
||||
// the environment variable "GOOGLE_APPLICATION_CREDENTIALS" needs to be set |
||||
$scope = "https://www.googleapis.com/auth/grpc-testing"; |
||||
$auth = Google\Auth\ApplicationDefaultCredentials::getCredentials($scope); |
||||
$opts = [ |
||||
'credentials' => Grpc\Credentials::createSsl(file_get_contents('ca.pem')); |
||||
'update_metadata' => $auth->getUpdateMetadataFunc(), |
||||
]; |
||||
|
||||
$client = new helloworld\GreeterClient( |
||||
new Grpc\BaseStub('localhost:50051', $opts)); |
||||
|
||||
``` |
||||
|
||||
###Authenticating with Google (Objective-C) |
||||
|
||||
This example uses the [Google iOS Sign-In library](https://developers.google.com/identity/sign-in/ios/), |
||||
but it's easily extrapolated to any other OAuth2 library. |
||||
|
||||
```objective-c |
||||
// Base case - No authentication |
||||
[client sayHelloWithRequest:request handler:^(HLWHelloReply *response, NSError *error) { |
||||
... |
||||
}]; |
||||
|
||||
... |
||||
|
||||
// Authenticating with Google |
||||
|
||||
// When signing the user in, ask her for the relevant scopes. |
||||
GIDSignIn.sharedInstance.scopes = @[@"https://www.googleapis.com/auth/grpc-testing"]; |
||||
|
||||
... |
||||
|
||||
#import <ProtoRPC/ProtoRPC.h> |
||||
|
||||
// Create a not-yet-started RPC. We want to set the request headers on this object before starting |
||||
// it. |
||||
ProtoRPC *call = |
||||
[client RPCToSayHelloWithRequest:request handler:^(HLWHelloReply *response, NSError *error) { |
||||
... |
||||
}]; |
||||
|
||||
// Set the access token to be used. |
||||
NSString *accessToken = GIDSignIn.sharedInstance.currentUser.authentication.accessToken; |
||||
call.requestMetadata[@"Authorization"] = [@"Bearer " stringByAppendingString:accessToken]}]; |
||||
|
||||
// Start the RPC. |
||||
[call start]; |
||||
``` |
||||
|
||||
You can see a working example app, with a more detailed explanation, [here](examples/objective-c/auth_sample). |
||||
|
||||
### Authenticating with Google (Python) |
||||
```python |
||||
# Base case - No encryption |
||||
stub = early_adopter_create_GreeterService_stub('localhost', 50051) |
||||
... |
||||
|
||||
# With server authentication SSL/TLS |
||||
import oauth2client.client |
||||
credentials = oauth2client.GoogleCredentials.get_application_default() |
||||
scope = 'https://www.googleapis.com/auth/grpc-testing' |
||||
scoped_credentials = credentials.create_scoped([scope]) |
||||
access_token = scoped_credentials.get_access_token().access_token |
||||
metadata_transformer = ( |
||||
lambda x: [('Authorization', 'Bearer {}'.format(access_token))]) |
||||
|
||||
stub = early_adopter_create_GreeterService_stub( |
||||
'localhost', 50051, secure=True, root_certificates=open('ca.pem').read(), |
||||
metadata_transformer=metadata_transformer) |
||||
... |
||||
``` |
||||
n.b.: the beta API will look different |
@ -0,0 +1,598 @@ |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||
<head> |
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/> |
||||
<meta name="generator" content="Doxygen 1.8.6"/> |
||||
<title>GRPC C++: include/grpc++/support/async_stream.h Source File</title> |
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/> |
||||
<script type="text/javascript" src="jquery.js"></script> |
||||
<script type="text/javascript" src="dynsections.js"></script> |
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/> |
||||
<script type="text/javascript" src="search/search.js"></script> |
||||
<script type="text/javascript"> |
||||
$(document).ready(function() { searchBox.OnSelectItem(0); }); |
||||
</script> |
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" /> |
||||
</head> |
||||
<body> |
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! --> |
||||
<div id="titlearea"> |
||||
<table cellspacing="0" cellpadding="0"> |
||||
<tbody> |
||||
<tr style="height: 56px;"> |
||||
<td style="padding-left: 0.5em;"> |
||||
<div id="projectname">GRPC C++ |
||||
 <span id="projectnumber">0.11.0.0</span> |
||||
</div> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
<!-- end header part --> |
||||
<!-- Generated by Doxygen 1.8.6 --> |
||||
<script type="text/javascript"> |
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search'); |
||||
</script> |
||||
<div id="navrow1" class="tabs"> |
||||
<ul class="tablist"> |
||||
<li><a href="index.html"><span>Main Page</span></a></li> |
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li> |
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li> |
||||
<li class="current"><a href="files.html"><span>Files</span></a></li> |
||||
<li> |
||||
<div id="MSearchBox" class="MSearchBoxInactive"> |
||||
<span class="left"> |
||||
<img id="MSearchSelect" src="search/mag_sel.png" |
||||
onmouseover="return searchBox.OnSearchSelectShow()" |
||||
onmouseout="return searchBox.OnSearchSelectHide()" |
||||
alt=""/> |
||||
<input type="text" id="MSearchField" value="Search" accesskey="S" |
||||
onfocus="searchBox.OnSearchFieldFocus(true)" |
||||
onblur="searchBox.OnSearchFieldFocus(false)" |
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/> |
||||
</span><span class="right"> |
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> |
||||
</span> |
||||
</div> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
<div id="navrow2" class="tabs2"> |
||||
<ul class="tablist"> |
||||
<li><a href="files.html"><span>File List</span></a></li> |
||||
<li><a href="globals.html"><span>Globals</span></a></li> |
||||
</ul> |
||||
</div> |
||||
<!-- window showing the filter options --> |
||||
<div id="MSearchSelectWindow" |
||||
onmouseover="return searchBox.OnSearchSelectShow()" |
||||
onmouseout="return searchBox.OnSearchSelectHide()" |
||||
onkeydown="return searchBox.OnSearchSelectKey(event)"> |
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Macros</a></div> |
||||
|
||||
<!-- iframe showing the search results (closed by default) --> |
||||
<div id="MSearchResultsWindow"> |
||||
<iframe src="javascript:void(0)" frameborder="0" |
||||
name="MSearchResults" id="MSearchResults"> |
||||
</iframe> |
||||
</div> |
||||
|
||||
<div id="nav-path" class="navpath"> |
||||
<ul> |
||||
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1b2ab2a88927c1e950e43c1cf4b634b.html">grpc++</a></li><li class="navelem"><a class="el" href="dir_b3f05bce718e375cbe64ccd78910fb7d.html">support</a></li> </ul> |
||||
</div> |
||||
</div><!-- top --> |
||||
<div class="header"> |
||||
<div class="headertitle"> |
||||
<div class="title">async_stream.h</div> </div> |
||||
</div><!--header--> |
||||
<div class="contents"> |
||||
<a href="async__stream_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div> |
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> *</span></div> |
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright 2015, Google Inc.</span></div> |
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * All rights reserved.</span></div> |
||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div> |
||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div> |
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are</span></div> |
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * met:</span></div> |
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div> |
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * * Redistributions of source code must retain the above copyright</span></div> |
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div> |
||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * * Redistributions in binary form must reproduce the above</span></div> |
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * copyright notice, this list of conditions and the following disclaimer</span></div> |
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * in the documentation and/or other materials provided with the</span></div> |
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * distribution.</span></div> |
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * * Neither the name of Google Inc. nor the names of its</span></div> |
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * contributors may be used to endorse or promote products derived from</span></div> |
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * this software without specific prior written permission.</span></div> |
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> *</span></div> |
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div> |
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div> |
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div> |
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div> |
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div> |
||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div> |
||||
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div> |
||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div> |
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div> |
||||
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div> |
||||
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div> |
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> *</span></div> |
||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> */</span></div> |
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div> |
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifndef GRPCXX_SUPPORT_ASYNC_STREAM_H</span></div> |
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#define GRPCXX_SUPPORT_ASYNC_STREAM_H</span></div> |
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div> |
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <grpc/support/log.h></span></div> |
||||
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <<a class="code" href="channel_8h.html">grpc++/channel.h</a>></span></div> |
||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <<a class="code" href="client__context_8h.html">grpc++/client_context.h</a>></span></div> |
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <<a class="code" href="completion__queue_8h.html">grpc++/completion_queue.h</a>></span></div> |
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <<a class="code" href="call_8h.html">grpc++/impl/call.h</a>></span></div> |
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include <<a class="code" href="service__type_8h.html">grpc++/impl/service_type.h</a>></span></div> |
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include <<a class="code" href="server__context_8h.html">grpc++/server_context.h</a>></span></div> |
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include <<a class="code" href="status_8h.html">grpc++/support/status.h</a>></span></div> |
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div> |
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">namespace </span>grpc {</div> |
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div> |
||||
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_streaming_interface.html"> 49</a></span> <span class="keyword">class </span><a class="code" href="classgrpc_1_1_client_async_streaming_interface.html">ClientAsyncStreamingInterface</a> {</div> |
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_streaming_interface.html#a103c33e82dbf1715749886c4249f3f28"> 51</a></span>  <span class="keyword">virtual</span> <a class="code" href="classgrpc_1_1_client_async_streaming_interface.html#a103c33e82dbf1715749886c4249f3f28">~ClientAsyncStreamingInterface</a>() {}</div> |
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div> |
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_streaming_interface.html#ad83bfe2febf4a6296b7d2646799b8174">ReadInitialMetadata</a>(<span class="keywordtype">void</span>* tag) = 0;</div> |
||||
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div> |
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_streaming_interface.html#afc1cfbd1514fea47088bc837bb578a24">Finish</a>(<a class="code" href="classgrpc_1_1_status.html">Status</a>* status, <span class="keywordtype">void</span>* tag) = 0;</div> |
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> };</div> |
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div> |
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span> <<span class="keyword">class</span> R></div> |
||||
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classgrpc_1_1_async_reader_interface.html"> 68</a></span> <span class="keyword">class </span><a class="code" href="classgrpc_1_1_async_reader_interface.html">AsyncReaderInterface</a> {</div> |
||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classgrpc_1_1_async_reader_interface.html#ac7845d2df90fb380008aadb7f5f2f379"> 70</a></span>  <span class="keyword">virtual</span> <a class="code" href="classgrpc_1_1_async_reader_interface.html#ac7845d2df90fb380008aadb7f5f2f379">~AsyncReaderInterface</a>() {}</div> |
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div> |
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_async_reader_interface.html#aa644cf63c12ae8c9d5fda16a361f8a11">Read</a>(R* msg, <span class="keywordtype">void</span>* tag) = 0;</div> |
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> };</div> |
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div> |
||||
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">template</span> <<span class="keyword">class</span> W></div> |
||||
<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classgrpc_1_1_async_writer_interface.html"> 82</a></span> <span class="keyword">class </span><a class="code" href="classgrpc_1_1_async_writer_interface.html">AsyncWriterInterface</a> {</div> |
||||
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classgrpc_1_1_async_writer_interface.html#a94cc9e4ed13c8fe4a1d883d465477ddd"> 84</a></span>  <span class="keyword">virtual</span> <a class="code" href="classgrpc_1_1_async_writer_interface.html#a94cc9e4ed13c8fe4a1d883d465477ddd">~AsyncWriterInterface</a>() {}</div> |
||||
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div> |
||||
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_async_writer_interface.html#a40c1091ac5cb5243c874da725ae291b4">Write</a>(<span class="keyword">const</span> W& msg, <span class="keywordtype">void</span>* tag) = 0;</div> |
||||
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> };</div> |
||||
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div> |
||||
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">template</span> <<span class="keyword">class</span> R></div> |
||||
<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader_interface.html"> 94</a></span> <span class="keyword">class </span><a class="code" href="classgrpc_1_1_client_async_reader_interface.html">ClientAsyncReaderInterface</a> : <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_client_async_streaming_interface.html">ClientAsyncStreamingInterface</a>,</div> |
||||
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_async_reader_interface.html">AsyncReaderInterface</a><R> {};</div> |
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div> |
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="keyword">template</span> <<span class="keyword">class</span> R></div> |
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">class </span><a class="code" href="classgrpc_1_1_client_async_reader.html">ClientAsyncReader</a> <a class="code" href="config_8h.html#ab2216aa6e0ffe505e1ec362a9621a7f9">GRPC_FINAL</a> : <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_client_async_reader_interface.html">ClientAsyncReaderInterface</a><R> {</div> |
||||
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">template</span> <<span class="keyword">class</span> W></div> |
||||
<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader.html#acb7e350f4b6dcc7acdfdbb9d97c012bd"> 102</a></span>  <a class="code" href="classgrpc_1_1_client_async_reader.html#acb7e350f4b6dcc7acdfdbb9d97c012bd">ClientAsyncReader</a>(<a class="code" href="classgrpc_1_1_channel.html">Channel</a>* channel, <a class="code" href="classgrpc_1_1_completion_queue.html">CompletionQueue</a>* cq,</div> |
||||
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">const</span> <a class="code" href="classgrpc_1_1_rpc_method.html">RpcMethod</a>& method, <a class="code" href="classgrpc_1_1_client_context.html">ClientContext</a>* context,</div> |
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">const</span> W& request, <span class="keywordtype">void</span>* tag)</div> |
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  : context_(context), call_(channel->CreateCall(method, context, cq)) {</div> |
||||
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  init_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  init_ops_.SendInitialMetadata(context->send_initial_metadata_);</div> |
||||
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">// TODO(ctiller): don't assert</span></div> |
||||
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  GPR_ASSERT(init_ops_.SendMessage(request).ok());</div> |
||||
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  init_ops_.ClientSendClose();</div> |
||||
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&init_ops_);</div> |
||||
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div> |
||||
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div> |
||||
<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader.html#a0e5b71e2620dc95fe41305eef7ee7863"> 114</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_reader.html#a0e5b71e2620dc95fe41305eef7ee7863">ReadInitialMetadata</a>(<span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GPR_ASSERT(!context_->initial_metadata_received_);</div> |
||||
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div> |
||||
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  meta_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  meta_ops_.RecvInitialMetadata(context_);</div> |
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&meta_ops_);</div> |
||||
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div> |
||||
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div> |
||||
<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader.html#aaf9f76ba76be0a0144bbdf44d740731d"> 122</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_reader.html#aaf9f76ba76be0a0144bbdf44d740731d">Read</a>(R* msg, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  read_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> (!context_->initial_metadata_received_) {</div> |
||||
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  read_ops_.RecvInitialMetadata(context_);</div> |
||||
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div> |
||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  read_ops_.RecvMessage(msg);</div> |
||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&read_ops_);</div> |
||||
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div> |
||||
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div> |
||||
<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader.html#a91bfabf65e2dc955b6983bc0ece5a73f"> 131</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_reader.html#a91bfabf65e2dc955b6983bc0ece5a73f">Finish</a>(<a class="code" href="classgrpc_1_1_status.html">Status</a>* status, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  finish_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (!context_->initial_metadata_received_) {</div> |
||||
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  finish_ops_.RecvInitialMetadata(context_);</div> |
||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div> |
||||
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  finish_ops_.ClientRecvStatus(context_, status);</div> |
||||
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&finish_ops_);</div> |
||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  }</div> |
||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div> |
||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">private</span>:</div> |
||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="classgrpc_1_1_client_context.html">ClientContext</a>* context_;</div> |
||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="classgrpc_1_1_call.html">Call</a> call_;</div> |
||||
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage, CallOpClientSendClose></a></div> |
||||
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  init_ops_;</div> |
||||
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpRecvInitialMetadata></a> meta_ops_;</div> |
||||
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R></a>> read_ops_;</div> |
||||
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpRecvInitialMetadata, CallOpClientRecvStatus></a> finish_ops_;</div> |
||||
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> };</div> |
||||
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div> |
||||
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">template</span> <<span class="keyword">class</span> W></div> |
||||
<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_writer_interface.html"> 152</a></span> <span class="keyword">class </span><a class="code" href="classgrpc_1_1_client_async_writer_interface.html">ClientAsyncWriterInterface</a> : <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_client_async_streaming_interface.html">ClientAsyncStreamingInterface</a>,</div> |
||||
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_async_writer_interface.html">AsyncWriterInterface</a><W> {</div> |
||||
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_writer_interface.html#a488d42d85f8e34902401e013572ff822">WritesDone</a>(<span class="keywordtype">void</span>* tag) = 0;</div> |
||||
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> };</div> |
||||
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div> |
||||
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="keyword">template</span> <<span class="keyword">class</span> W></div> |
||||
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">class </span><a class="code" href="classgrpc_1_1_client_async_writer.html">ClientAsyncWriter</a> <a class="code" href="config_8h.html#ab2216aa6e0ffe505e1ec362a9621a7f9">GRPC_FINAL</a> : <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_client_async_writer_interface.html">ClientAsyncWriterInterface</a><W> {</div> |
||||
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keyword">template</span> <<span class="keyword">class</span> R></div> |
||||
<div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_writer.html#a2ef3121a212b994228a8c8b192789e3d"> 165</a></span>  <a class="code" href="classgrpc_1_1_client_async_writer.html#a2ef3121a212b994228a8c8b192789e3d">ClientAsyncWriter</a>(<a class="code" href="classgrpc_1_1_channel.html">Channel</a>* channel, <a class="code" href="classgrpc_1_1_completion_queue.html">CompletionQueue</a>* cq,</div> |
||||
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">const</span> <a class="code" href="classgrpc_1_1_rpc_method.html">RpcMethod</a>& method, <a class="code" href="classgrpc_1_1_client_context.html">ClientContext</a>* context,</div> |
||||
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  R* response, <span class="keywordtype">void</span>* tag)</div> |
||||
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  : context_(context), call_(channel->CreateCall(method, context, cq)) {</div> |
||||
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  finish_ops_.RecvMessage(response);</div> |
||||
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div> |
||||
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  init_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  init_ops_.SendInitialMetadata(context->send_initial_metadata_);</div> |
||||
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&init_ops_);</div> |
||||
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div> |
||||
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div> |
||||
<div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_writer.html#a1db45c4f5817db4f770c08dab64916c7"> 176</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_writer.html#a1db45c4f5817db4f770c08dab64916c7">ReadInitialMetadata</a>(<span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  GPR_ASSERT(!context_->initial_metadata_received_);</div> |
||||
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div> |
||||
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  meta_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  meta_ops_.RecvInitialMetadata(context_);</div> |
||||
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&meta_ops_);</div> |
||||
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div> |
||||
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div> |
||||
<div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_writer.html#a544f9e4c310b251bf3c7b84fd035d20a"> 184</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_writer.html#a544f9e4c310b251bf3c7b84fd035d20a">Write</a>(<span class="keyword">const</span> W& msg, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  write_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="comment">// TODO(ctiller): don't assert</span></div> |
||||
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  GPR_ASSERT(write_ops_.SendMessage(msg).ok());</div> |
||||
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&write_ops_);</div> |
||||
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div> |
||||
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div> |
||||
<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_writer.html#af9fbf77049c3e5402913c0edeccf3d47"> 191</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_writer.html#af9fbf77049c3e5402913c0edeccf3d47">WritesDone</a>(<span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  writes_done_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  writes_done_ops_.ClientSendClose();</div> |
||||
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&writes_done_ops_);</div> |
||||
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div> |
||||
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div> |
||||
<div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_writer.html#ad37af0a7fc27fc90e168fdb90eb52d8b"> 197</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_writer.html#ad37af0a7fc27fc90e168fdb90eb52d8b">Finish</a>(<a class="code" href="classgrpc_1_1_status.html">Status</a>* status, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  finish_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">if</span> (!context_->initial_metadata_received_) {</div> |
||||
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  finish_ops_.RecvInitialMetadata(context_);</div> |
||||
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div> |
||||
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  finish_ops_.ClientRecvStatus(context_, status);</div> |
||||
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&finish_ops_);</div> |
||||
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div> |
||||
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div> |
||||
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keyword">private</span>:</div> |
||||
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <a class="code" href="classgrpc_1_1_client_context.html">ClientContext</a>* context_;</div> |
||||
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <a class="code" href="classgrpc_1_1_call.html">Call</a> call_;</div> |
||||
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpSendInitialMetadata></a> init_ops_;</div> |
||||
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpRecvInitialMetadata></a> meta_ops_;</div> |
||||
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpSendMessage></a> write_ops_;</div> |
||||
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpClientSendClose></a> writes_done_ops_;</div> |
||||
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet</a><<a class="code" href="classgrpc_1_1_call_op_recv_initial_metadata.html">CallOpRecvInitialMetadata</a>, <a class="code" href="classgrpc_1_1_call_op_generic_recv_message.html">CallOpGenericRecvMessage</a>,</div> |
||||
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="classgrpc_1_1_call_op_client_recv_status.html">CallOpClientRecvStatus</a>> finish_ops_;</div> |
||||
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> };</div> |
||||
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div> |
||||
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keyword">template</span> <<span class="keyword">class</span> W, <span class="keyword">class</span> R></div> |
||||
<div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader_writer_interface.html"> 219</a></span> <span class="keyword">class </span><a class="code" href="classgrpc_1_1_client_async_reader_writer_interface.html">ClientAsyncReaderWriterInterface</a> : <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_client_async_streaming_interface.html">ClientAsyncStreamingInterface</a>,</div> |
||||
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_async_writer_interface.html">AsyncWriterInterface</a><W>,</div> |
||||
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_async_reader_interface.html">AsyncReaderInterface</a><R> {</div> |
||||
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_reader_writer_interface.html#a878193880df68ab969b697f1fcd7dbc3">WritesDone</a>(<span class="keywordtype">void</span>* tag) = 0;</div> |
||||
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> };</div> |
||||
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div> |
||||
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">template</span> <<span class="keyword">class</span> W, <span class="keyword">class</span> R></div> |
||||
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keyword">class </span><a class="code" href="classgrpc_1_1_client_async_reader_writer.html">ClientAsyncReaderWriter</a> <a class="code" href="config_8h.html#ab2216aa6e0ffe505e1ec362a9621a7f9">GRPC_FINAL</a></div> |
||||
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  : <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_client_async_reader_writer_interface.html">ClientAsyncReaderWriterInterface</a><W, R> {</div> |
||||
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader_writer.html#af7a334d85a878b6b7a962e9b659d3e3b"> 233</a></span>  <a class="code" href="classgrpc_1_1_client_async_reader_writer.html#af7a334d85a878b6b7a962e9b659d3e3b">ClientAsyncReaderWriter</a>(<a class="code" href="classgrpc_1_1_channel.html">Channel</a>* channel, <a class="code" href="classgrpc_1_1_completion_queue.html">CompletionQueue</a>* cq,</div> |
||||
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keyword">const</span> <a class="code" href="classgrpc_1_1_rpc_method.html">RpcMethod</a>& method, <a class="code" href="classgrpc_1_1_client_context.html">ClientContext</a>* context,</div> |
||||
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordtype">void</span>* tag)</div> |
||||
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  : context_(context), call_(channel->CreateCall(method, context, cq)) {</div> |
||||
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  init_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  init_ops_.SendInitialMetadata(context->send_initial_metadata_);</div> |
||||
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&init_ops_);</div> |
||||
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div> |
||||
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div> |
||||
<div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader_writer.html#a69f0115acf443d7820adefc7b2a6f162"> 242</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_reader_writer.html#a69f0115acf443d7820adefc7b2a6f162">ReadInitialMetadata</a>(<span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  GPR_ASSERT(!context_->initial_metadata_received_);</div> |
||||
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div> |
||||
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  meta_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  meta_ops_.RecvInitialMetadata(context_);</div> |
||||
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&meta_ops_);</div> |
||||
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div> |
||||
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div> |
||||
<div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader_writer.html#a8b6a32ede877fc2d5d4cfc5b95ac163f"> 250</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_reader_writer.html#a8b6a32ede877fc2d5d4cfc5b95ac163f">Read</a>(R* msg, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  read_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">if</span> (!context_->initial_metadata_received_) {</div> |
||||
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  read_ops_.RecvInitialMetadata(context_);</div> |
||||
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  }</div> |
||||
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  read_ops_.RecvMessage(msg);</div> |
||||
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&read_ops_);</div> |
||||
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div> |
||||
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div> |
||||
<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader_writer.html#ac3cb288c3bd9d1b826fd726bd2655be3"> 259</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_reader_writer.html#ac3cb288c3bd9d1b826fd726bd2655be3">Write</a>(<span class="keyword">const</span> W& msg, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  write_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="comment">// TODO(ctiller): don't assert</span></div> |
||||
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  GPR_ASSERT(write_ops_.SendMessage(msg).ok());</div> |
||||
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&write_ops_);</div> |
||||
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  }</div> |
||||
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div> |
||||
<div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader_writer.html#ae431aa00a64f2685b60ec853334e6637"> 266</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_reader_writer.html#ae431aa00a64f2685b60ec853334e6637">WritesDone</a>(<span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  writes_done_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  writes_done_ops_.ClientSendClose();</div> |
||||
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&writes_done_ops_);</div> |
||||
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  }</div> |
||||
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div> |
||||
<div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classgrpc_1_1_client_async_reader_writer.html#a4316a3e8d1b4d148a695c8afa240ea23"> 272</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_client_async_reader_writer.html#a4316a3e8d1b4d148a695c8afa240ea23">Finish</a>(<a class="code" href="classgrpc_1_1_status.html">Status</a>* status, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  finish_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span> (!context_->initial_metadata_received_) {</div> |
||||
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  finish_ops_.RecvInitialMetadata(context_);</div> |
||||
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  }</div> |
||||
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  finish_ops_.ClientRecvStatus(context_, status);</div> |
||||
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&finish_ops_);</div> |
||||
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div> |
||||
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div> |
||||
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keyword">private</span>:</div> |
||||
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="classgrpc_1_1_client_context.html">ClientContext</a>* context_;</div> |
||||
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <a class="code" href="classgrpc_1_1_call.html">Call</a> call_;</div> |
||||
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpSendInitialMetadata></a> init_ops_;</div> |
||||
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpRecvInitialMetadata></a> meta_ops_;</div> |
||||
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R></a>> read_ops_;</div> |
||||
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpSendMessage></a> write_ops_;</div> |
||||
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpClientSendClose></a> writes_done_ops_;</div> |
||||
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpRecvInitialMetadata, CallOpClientRecvStatus></a> finish_ops_;</div> |
||||
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> };</div> |
||||
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div> |
||||
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keyword">template</span> <<span class="keyword">class</span> W, <span class="keyword">class</span> R></div> |
||||
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword">class </span>ServerAsyncReader <a class="code" href="config_8h.html#ab2216aa6e0ffe505e1ec362a9621a7f9">GRPC_FINAL</a> : <span class="keyword">public</span> ServerAsyncStreamingInterface,</div> |
||||
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keyword">public</span> AsyncReaderInterface<R> {</div> |
||||
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader.html#a7f351e1d526b250336402ee03b8cc75e"> 296</a></span>  <span class="keyword">explicit</span> <a class="code" href="classgrpc_1_1_server_async_reader.html#a7f351e1d526b250336402ee03b8cc75e">ServerAsyncReader</a>(<a class="code" href="classgrpc_1_1_server_context.html">ServerContext</a>* ctx)</div> |
||||
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}</div> |
||||
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div> |
||||
<div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader.html#a5d05028563e789203225c0ba548710b6"> 299</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_reader.html#a5d05028563e789203225c0ba548710b6">SendInitialMetadata</a>(<span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  GPR_ASSERT(!ctx_->sent_initial_metadata_);</div> |
||||
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div> |
||||
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  meta_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);</div> |
||||
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  ctx_->sent_initial_metadata_ = <span class="keyword">true</span>;</div> |
||||
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&meta_ops_);</div> |
||||
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  }</div> |
||||
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div> |
||||
<div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader.html#ac60c1f8d5373644f952377096f1a5b2f"> 308</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_reader.html#ac60c1f8d5373644f952377096f1a5b2f">Read</a>(R* msg, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  read_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  read_ops_.RecvMessage(msg);</div> |
||||
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&read_ops_);</div> |
||||
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div> |
||||
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div> |
||||
<div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader.html#aaa77b67709c07ab60bc190bce5ee9a59"> 314</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_reader.html#aaa77b67709c07ab60bc190bce5ee9a59">Finish</a>(<span class="keyword">const</span> W& msg, <span class="keyword">const</span> <a class="code" href="classgrpc_1_1_status.html">Status</a>& status, <span class="keywordtype">void</span>* tag) {</div> |
||||
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  finish_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordflow">if</span> (!ctx_->sent_initial_metadata_) {</div> |
||||
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);</div> |
||||
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  ctx_->sent_initial_metadata_ = <span class="keyword">true</span>;</div> |
||||
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div> |
||||
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="comment">// The response is dropped if the status is not OK.</span></div> |
||||
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">if</span> (status.<a class="code" href="classgrpc_1_1_status.html#a1f5b65c54d4e6dd502897e36040714dc">ok</a>()) {</div> |
||||
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  finish_ops_.ServerSendStatus(ctx_->trailing_metadata_,</div> |
||||
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  finish_ops_.SendMessage(msg));</div> |
||||
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  } <span class="keywordflow">else</span> {</div> |
||||
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);</div> |
||||
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  }</div> |
||||
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&finish_ops_);</div> |
||||
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div> |
||||
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div> |
||||
<div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader.html#a4407f30ef2dbce2b650824536a6f76fb"> 330</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_reader.html#a4407f30ef2dbce2b650824536a6f76fb">FinishWithError</a>(<span class="keyword">const</span> <a class="code" href="classgrpc_1_1_status.html">Status</a>& status, <span class="keywordtype">void</span>* tag) {</div> |
||||
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  GPR_ASSERT(!status.<a class="code" href="classgrpc_1_1_status.html#a1f5b65c54d4e6dd502897e36040714dc">ok</a>());</div> |
||||
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  finish_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">if</span> (!ctx_->sent_initial_metadata_) {</div> |
||||
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);</div> |
||||
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  ctx_->sent_initial_metadata_ = <span class="keyword">true</span>;</div> |
||||
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  }</div> |
||||
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);</div> |
||||
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&finish_ops_);</div> |
||||
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  }</div> |
||||
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div> |
||||
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">private</span>:</div> |
||||
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordtype">void</span> BindCall(<a class="code" href="classgrpc_1_1_call.html">Call</a>* call) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> { call_ = *call; }</div> |
||||
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div> |
||||
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  Call call_;</div> |
||||
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  ServerContext* ctx_;</div> |
||||
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  CallOpSet<CallOpSendInitialMetadata> meta_ops_;</div> |
||||
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  CallOpSet<CallOpRecvMessage<R>> read_ops_;</div> |
||||
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,</div> |
||||
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  CallOpServerSendStatus> finish_ops_;</div> |
||||
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> };</div> |
||||
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div> |
||||
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keyword">template</span> <<span class="keyword">class</span> W></div> |
||||
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="keyword">class </span>ServerAsyncWriter <a class="code" href="config_8h.html#ab2216aa6e0ffe505e1ec362a9621a7f9">GRPC_FINAL</a> : <span class="keyword">public</span> ServerAsyncStreamingInterface,</div> |
||||
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keyword">public</span> AsyncWriterInterface<W> {</div> |
||||
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_writer.html#aa841b99fddf9ce347b9c617058f179f2"> 356</a></span>  <span class="keyword">explicit</span> <a class="code" href="classgrpc_1_1_server_async_writer.html#aa841b99fddf9ce347b9c617058f179f2">ServerAsyncWriter</a>(<a class="code" href="classgrpc_1_1_server_context.html">ServerContext</a>* ctx)</div> |
||||
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}</div> |
||||
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div> |
||||
<div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_writer.html#ad3a6ab6a46639131770efd0149d04455"> 359</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_writer.html#ad3a6ab6a46639131770efd0149d04455">SendInitialMetadata</a>(<span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  GPR_ASSERT(!ctx_->sent_initial_metadata_);</div> |
||||
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div> |
||||
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  meta_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);</div> |
||||
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  ctx_->sent_initial_metadata_ = <span class="keyword">true</span>;</div> |
||||
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&meta_ops_);</div> |
||||
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  }</div> |
||||
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div> |
||||
<div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_writer.html#a7027a65f3d84ff275b130cf9a0f170f5"> 368</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_writer.html#a7027a65f3d84ff275b130cf9a0f170f5">Write</a>(<span class="keyword">const</span> W& msg, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  write_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">if</span> (!ctx_->sent_initial_metadata_) {</div> |
||||
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  write_ops_.SendInitialMetadata(ctx_->initial_metadata_);</div> |
||||
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  ctx_->sent_initial_metadata_ = <span class="keyword">true</span>;</div> |
||||
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  }</div> |
||||
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="comment">// TODO(ctiller): don't assert</span></div> |
||||
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  GPR_ASSERT(write_ops_.SendMessage(msg).ok());</div> |
||||
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&write_ops_);</div> |
||||
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div> |
||||
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div> |
||||
<div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_writer.html#afbb050c198cbbc7f91f9f7fb8bf8c004"> 379</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_writer.html#afbb050c198cbbc7f91f9f7fb8bf8c004">Finish</a>(<span class="keyword">const</span> <a class="code" href="classgrpc_1_1_status.html">Status</a>& status, <span class="keywordtype">void</span>* tag) {</div> |
||||
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  finish_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">if</span> (!ctx_->sent_initial_metadata_) {</div> |
||||
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);</div> |
||||
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  ctx_->sent_initial_metadata_ = <span class="keyword">true</span>;</div> |
||||
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  }</div> |
||||
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);</div> |
||||
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&finish_ops_);</div> |
||||
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div> |
||||
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div> |
||||
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keyword">private</span>:</div> |
||||
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keywordtype">void</span> BindCall(<a class="code" href="classgrpc_1_1_call.html">Call</a>* call) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> { call_ = *call; }</div> |
||||
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div> |
||||
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  Call call_;</div> |
||||
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  ServerContext* ctx_;</div> |
||||
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  CallOpSet<CallOpSendInitialMetadata> meta_ops_;</div> |
||||
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> write_ops_;</div> |
||||
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> finish_ops_;</div> |
||||
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> };</div> |
||||
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div> |
||||
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keyword">template</span> <<span class="keyword">class</span> W, <span class="keyword">class</span> R></div> |
||||
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keyword">class </span>ServerAsyncReaderWriter <a class="code" href="config_8h.html#ab2216aa6e0ffe505e1ec362a9621a7f9">GRPC_FINAL</a> : <span class="keyword">public</span> ServerAsyncStreamingInterface,</div> |
||||
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keyword">public</span> AsyncWriterInterface<W>,</div> |
||||
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keyword">public</span> AsyncReaderInterface<R> {</div> |
||||
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader_writer.html#af2b106bee556273e61541950502237ef"> 405</a></span>  <span class="keyword">explicit</span> <a class="code" href="classgrpc_1_1_server_async_reader_writer.html#af2b106bee556273e61541950502237ef">ServerAsyncReaderWriter</a>(<a class="code" href="classgrpc_1_1_server_context.html">ServerContext</a>* ctx)</div> |
||||
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  : call_(nullptr, nullptr, nullptr), ctx_(ctx) {}</div> |
||||
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div> |
||||
<div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader_writer.html#ab40293c8bda8123b5c0e7a0455860533"> 408</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_reader_writer.html#ab40293c8bda8123b5c0e7a0455860533">SendInitialMetadata</a>(<span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  GPR_ASSERT(!ctx_->sent_initial_metadata_);</div> |
||||
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div> |
||||
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  meta_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  meta_ops_.SendInitialMetadata(ctx_->initial_metadata_);</div> |
||||
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  ctx_->sent_initial_metadata_ = <span class="keyword">true</span>;</div> |
||||
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&meta_ops_);</div> |
||||
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  }</div> |
||||
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div> |
||||
<div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader_writer.html#a7d8d9d36449700c19cd08ecc608cb96a"> 417</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_reader_writer.html#a7d8d9d36449700c19cd08ecc608cb96a">Read</a>(R* msg, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  read_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  read_ops_.RecvMessage(msg);</div> |
||||
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&read_ops_);</div> |
||||
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div> |
||||
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div> |
||||
<div class="line"><a name="l00423"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader_writer.html#ad0d2750db5e195d053e3361e1ff0df35"> 423</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_reader_writer.html#ad0d2750db5e195d053e3361e1ff0df35">Write</a>(<span class="keyword">const</span> W& msg, <span class="keywordtype">void</span>* tag) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> {</div> |
||||
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  write_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">if</span> (!ctx_->sent_initial_metadata_) {</div> |
||||
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  write_ops_.SendInitialMetadata(ctx_->initial_metadata_);</div> |
||||
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  ctx_->sent_initial_metadata_ = <span class="keyword">true</span>;</div> |
||||
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div> |
||||
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="comment">// TODO(ctiller): don't assert</span></div> |
||||
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  GPR_ASSERT(write_ops_.SendMessage(msg).ok());</div> |
||||
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&write_ops_);</div> |
||||
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  }</div> |
||||
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> </div> |
||||
<div class="line"><a name="l00434"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader_writer.html#ae4daaf42b4077d171638e574a67418b5"> 434</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgrpc_1_1_server_async_reader_writer.html#ae4daaf42b4077d171638e574a67418b5">Finish</a>(<span class="keyword">const</span> <a class="code" href="classgrpc_1_1_status.html">Status</a>& status, <span class="keywordtype">void</span>* tag) {</div> |
||||
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  finish_ops_.set_output_tag(tag);</div> |
||||
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">if</span> (!ctx_->sent_initial_metadata_) {</div> |
||||
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  finish_ops_.SendInitialMetadata(ctx_->initial_metadata_);</div> |
||||
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  ctx_->sent_initial_metadata_ = <span class="keyword">true</span>;</div> |
||||
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  }</div> |
||||
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  finish_ops_.ServerSendStatus(ctx_->trailing_metadata_, status);</div> |
||||
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  call_.<a class="code" href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">PerformOps</a>(&finish_ops_);</div> |
||||
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  }</div> |
||||
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div> |
||||
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keyword">private</span>:</div> |
||||
<div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="classgrpc_1_1_server_async_reader_writer.html#a8c3fa4c066981aae114e41c3f9340144"> 445</a></span>  <span class="keyword">friend</span> class ::grpc::Server;</div> |
||||
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div> |
||||
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordtype">void</span> BindCall(<a class="code" href="classgrpc_1_1_call.html">Call</a>* call) <a class="code" href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a> { call_ = *call; }</div> |
||||
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div> |
||||
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="classgrpc_1_1_call.html">Call</a> call_;</div> |
||||
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <a class="code" href="classgrpc_1_1_server_context.html">ServerContext</a>* ctx_;</div> |
||||
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpSendInitialMetadata></a> meta_ops_;</div> |
||||
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpRecvMessage<R></a>> read_ops_;</div> |
||||
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage></a> write_ops_;</div> |
||||
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <a class="code" href="classgrpc_1_1_call_op_set.html">CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus></a> finish_ops_;</div> |
||||
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> };</div> |
||||
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div> |
||||
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> } <span class="comment">// namespace grpc</span></div> |
||||
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div> |
||||
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor">#endif // GRPCXX_SUPPORT_ASYNC_STREAM_H</span></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_streaming_interface_html"><div class="ttname"><a href="classgrpc_1_1_client_async_streaming_interface.html">grpc::ClientAsyncStreamingInterface</a></div><div class="ttdoc">Common interface for all client side asynchronous streaming. </div><div class="ttdef"><b>Definition:</b> async_stream.h:49</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_writer_html"><div class="ttname"><a href="classgrpc_1_1_client_async_reader_writer.html">grpc::ClientAsyncReaderWriter</a></div><div class="ttdef"><b>Definition:</b> channel.h:64</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_writer_html_af7a334d85a878b6b7a962e9b659d3e3b"><div class="ttname"><a href="classgrpc_1_1_client_async_reader_writer.html#af7a334d85a878b6b7a962e9b659d3e3b">grpc::ClientAsyncReaderWriter::ClientAsyncReaderWriter</a></div><div class="ttdeci">ClientAsyncReaderWriter(Channel *channel, CompletionQueue *cq, const RpcMethod &method, ClientContext *context, void *tag)</div><div class="ttdef"><b>Definition:</b> async_stream.h:233</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_writer_html_a544f9e4c310b251bf3c7b84fd035d20a"><div class="ttname"><a href="classgrpc_1_1_client_async_writer.html#a544f9e4c310b251bf3c7b84fd035d20a">grpc::ClientAsyncWriter::Write</a></div><div class="ttdeci">void Write(const W &msg, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Request the writing of msg with identifying tag tag. </div><div class="ttdef"><b>Definition:</b> async_stream.h:184</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_reader_writer_html_a7d8d9d36449700c19cd08ecc608cb96a"><div class="ttname"><a href="classgrpc_1_1_server_async_reader_writer.html#a7d8d9d36449700c19cd08ecc608cb96a">grpc::ServerAsyncReaderWriter::Read</a></div><div class="ttdeci">void Read(R *msg, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Read a message of type R into msg. </div><div class="ttdef"><b>Definition:</b> async_stream.h:417</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_writer_html_af9fbf77049c3e5402913c0edeccf3d47"><div class="ttname"><a href="classgrpc_1_1_client_async_writer.html#af9fbf77049c3e5402913c0edeccf3d47">grpc::ClientAsyncWriter::WritesDone</a></div><div class="ttdeci">void WritesDone(void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Signal the client is done with the writes. </div><div class="ttdef"><b>Definition:</b> async_stream.h:191</div></div> |
||||
<div class="ttc" id="completion__queue_8h_html"><div class="ttname"><a href="completion__queue_8h.html">completion_queue.h</a></div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_writer_html_ad3a6ab6a46639131770efd0149d04455"><div class="ttname"><a href="classgrpc_1_1_server_async_writer.html#ad3a6ab6a46639131770efd0149d04455">grpc::ServerAsyncWriter::SendInitialMetadata</a></div><div class="ttdeci">void SendInitialMetadata(void *tag) GRPC_OVERRIDE</div><div class="ttdef"><b>Definition:</b> async_stream.h:359</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_writer_interface_html_a878193880df68ab969b697f1fcd7dbc3"><div class="ttname"><a href="classgrpc_1_1_client_async_reader_writer_interface.html#a878193880df68ab969b697f1fcd7dbc3">grpc::ClientAsyncReaderWriterInterface::WritesDone</a></div><div class="ttdeci">virtual void WritesDone(void *tag)=0</div><div class="ttdoc">Signal the client is done with the writes. </div></div> |
||||
<div class="ttc" id="classgrpc_1_1_call_op_client_recv_status_html"><div class="ttname"><a href="classgrpc_1_1_call_op_client_recv_status.html">grpc::CallOpClientRecvStatus</a></div><div class="ttdef"><b>Definition:</b> call.h:426</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_async_writer_interface_html_a40c1091ac5cb5243c874da725ae291b4"><div class="ttname"><a href="classgrpc_1_1_async_writer_interface.html#a40c1091ac5cb5243c874da725ae291b4">grpc::AsyncWriterInterface::Write</a></div><div class="ttdeci">virtual void Write(const W &msg, void *tag)=0</div><div class="ttdoc">Request the writing of msg with identifying tag tag. </div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_writer_html_a7027a65f3d84ff275b130cf9a0f170f5"><div class="ttname"><a href="classgrpc_1_1_server_async_writer.html#a7027a65f3d84ff275b130cf9a0f170f5">grpc::ServerAsyncWriter::Write</a></div><div class="ttdeci">void Write(const W &msg, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Request the writing of msg with identifying tag tag. </div><div class="ttdef"><b>Definition:</b> async_stream.h:368</div></div> |
||||
<div class="ttc" id="config_8h_html_ab2216aa6e0ffe505e1ec362a9621a7f9"><div class="ttname"><a href="config_8h.html#ab2216aa6e0ffe505e1ec362a9621a7f9">GRPC_FINAL</a></div><div class="ttdeci">#define GRPC_FINAL</div><div class="ttdef"><b>Definition:</b> config.h:71</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_writer_html_ac3cb288c3bd9d1b826fd726bd2655be3"><div class="ttname"><a href="classgrpc_1_1_client_async_reader_writer.html#ac3cb288c3bd9d1b826fd726bd2655be3">grpc::ClientAsyncReaderWriter::Write</a></div><div class="ttdeci">void Write(const W &msg, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Request the writing of msg with identifying tag tag. </div><div class="ttdef"><b>Definition:</b> async_stream.h:259</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_reader_html_ac60c1f8d5373644f952377096f1a5b2f"><div class="ttname"><a href="classgrpc_1_1_server_async_reader.html#ac60c1f8d5373644f952377096f1a5b2f">grpc::ServerAsyncReader::Read</a></div><div class="ttdeci">void Read(R *msg, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Read a message of type R into msg. </div><div class="ttdef"><b>Definition:</b> async_stream.h:308</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_reader_writer_html_ab40293c8bda8123b5c0e7a0455860533"><div class="ttname"><a href="classgrpc_1_1_server_async_reader_writer.html#ab40293c8bda8123b5c0e7a0455860533">grpc::ServerAsyncReaderWriter::SendInitialMetadata</a></div><div class="ttdeci">void SendInitialMetadata(void *tag) GRPC_OVERRIDE</div><div class="ttdef"><b>Definition:</b> async_stream.h:408</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_writer_interface_html_a488d42d85f8e34902401e013572ff822"><div class="ttname"><a href="classgrpc_1_1_client_async_writer_interface.html#a488d42d85f8e34902401e013572ff822">grpc::ClientAsyncWriterInterface::WritesDone</a></div><div class="ttdeci">virtual void WritesDone(void *tag)=0</div><div class="ttdoc">Signal the client is done with the writes. </div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_context_html"><div class="ttname"><a href="classgrpc_1_1_client_context.html">grpc::ClientContext</a></div><div class="ttdef"><b>Definition:</b> client_context.h:149</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_reader_html_a4407f30ef2dbce2b650824536a6f76fb"><div class="ttname"><a href="classgrpc_1_1_server_async_reader.html#a4407f30ef2dbce2b650824536a6f76fb">grpc::ServerAsyncReader::FinishWithError</a></div><div class="ttdeci">void FinishWithError(const Status &status, void *tag)</div><div class="ttdef"><b>Definition:</b> async_stream.h:330</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_reader_writer_html_ad0d2750db5e195d053e3361e1ff0df35"><div class="ttname"><a href="classgrpc_1_1_server_async_reader_writer.html#ad0d2750db5e195d053e3361e1ff0df35">grpc::ServerAsyncReaderWriter::Write</a></div><div class="ttdeci">void Write(const W &msg, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Request the writing of msg with identifying tag tag. </div><div class="ttdef"><b>Definition:</b> async_stream.h:423</div></div> |
||||
<div class="ttc" id="channel_8h_html"><div class="ttname"><a href="channel_8h.html">channel.h</a></div></div> |
||||
<div class="ttc" id="classgrpc_1_1_async_reader_interface_html_ac7845d2df90fb380008aadb7f5f2f379"><div class="ttname"><a href="classgrpc_1_1_async_reader_interface.html#ac7845d2df90fb380008aadb7f5f2f379">grpc::AsyncReaderInterface::~AsyncReaderInterface</a></div><div class="ttdeci">virtual ~AsyncReaderInterface()</div><div class="ttdef"><b>Definition:</b> async_stream.h:70</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_interface_html"><div class="ttname"><a href="classgrpc_1_1_client_async_reader_interface.html">grpc::ClientAsyncReaderInterface</a></div><div class="ttdef"><b>Definition:</b> async_stream.h:94</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_writer_html_ae431aa00a64f2685b60ec853334e6637"><div class="ttname"><a href="classgrpc_1_1_client_async_reader_writer.html#ae431aa00a64f2685b60ec853334e6637">grpc::ClientAsyncReaderWriter::WritesDone</a></div><div class="ttdeci">void WritesDone(void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Signal the client is done with the writes. </div><div class="ttdef"><b>Definition:</b> async_stream.h:266</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_call_html"><div class="ttname"><a href="classgrpc_1_1_call.html">grpc::Call</a></div><div class="ttdef"><b>Definition:</b> call.h:560</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_writer_interface_html"><div class="ttname"><a href="classgrpc_1_1_client_async_reader_writer_interface.html">grpc::ClientAsyncReaderWriterInterface</a></div><div class="ttdoc">Client-side interface for asynchronous bi-directional streaming. </div><div class="ttdef"><b>Definition:</b> async_stream.h:219</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_writer_html_aa841b99fddf9ce347b9c617058f179f2"><div class="ttname"><a href="classgrpc_1_1_server_async_writer.html#aa841b99fddf9ce347b9c617058f179f2">grpc::ServerAsyncWriter::ServerAsyncWriter</a></div><div class="ttdeci">ServerAsyncWriter(ServerContext *ctx)</div><div class="ttdef"><b>Definition:</b> async_stream.h:356</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_writer_html_a4316a3e8d1b4d148a695c8afa240ea23"><div class="ttname"><a href="classgrpc_1_1_client_async_reader_writer.html#a4316a3e8d1b4d148a695c8afa240ea23">grpc::ClientAsyncReaderWriter::Finish</a></div><div class="ttdeci">void Finish(Status *status, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Request notification completion. </div><div class="ttdef"><b>Definition:</b> async_stream.h:272</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_writer_html_a1db45c4f5817db4f770c08dab64916c7"><div class="ttname"><a href="classgrpc_1_1_client_async_writer.html#a1db45c4f5817db4f770c08dab64916c7">grpc::ClientAsyncWriter::ReadInitialMetadata</a></div><div class="ttdeci">void ReadInitialMetadata(void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Request notification of the reading of the initial metadata. </div><div class="ttdef"><b>Definition:</b> async_stream.h:176</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_async_writer_interface_html"><div class="ttname"><a href="classgrpc_1_1_async_writer_interface.html">grpc::AsyncWriterInterface</a></div><div class="ttdoc">An interface that can be fed a sequence of messages of type W. </div><div class="ttdef"><b>Definition:</b> async_stream.h:82</div></div> |
||||
<div class="ttc" id="call_8h_html"><div class="ttname"><a href="call_8h.html">call.h</a></div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_writer_html"><div class="ttname"><a href="classgrpc_1_1_client_async_writer.html">grpc::ClientAsyncWriter</a></div><div class="ttdef"><b>Definition:</b> channel.h:62</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_call_op_set_html"><div class="ttname"><a href="classgrpc_1_1_call_op_set.html">grpc::CallOpSet</a></div><div class="ttdoc">Primary implementaiton of CallOpSetInterface. </div><div class="ttdef"><b>Definition:</b> call.h:502</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_context_html"><div class="ttname"><a href="classgrpc_1_1_server_context.html">grpc::ServerContext</a></div><div class="ttdef"><b>Definition:</b> server_context.h:89</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_reader_html_aaa77b67709c07ab60bc190bce5ee9a59"><div class="ttname"><a href="classgrpc_1_1_server_async_reader.html#aaa77b67709c07ab60bc190bce5ee9a59">grpc::ServerAsyncReader::Finish</a></div><div class="ttdeci">void Finish(const W &msg, const Status &status, void *tag)</div><div class="ttdef"><b>Definition:</b> async_stream.h:314</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_completion_queue_html"><div class="ttname"><a href="classgrpc_1_1_completion_queue.html">grpc::CompletionQueue</a></div><div class="ttdoc">A thin wrapper around grpc_completion_queue (see / src/core/surface/completion_queue.h). </div><div class="ttdef"><b>Definition:</b> completion_queue.h:81</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_streaming_interface_html_a103c33e82dbf1715749886c4249f3f28"><div class="ttname"><a href="classgrpc_1_1_client_async_streaming_interface.html#a103c33e82dbf1715749886c4249f3f28">grpc::ClientAsyncStreamingInterface::~ClientAsyncStreamingInterface</a></div><div class="ttdeci">virtual ~ClientAsyncStreamingInterface()</div><div class="ttdef"><b>Definition:</b> async_stream.h:51</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_writer_html_ad37af0a7fc27fc90e168fdb90eb52d8b"><div class="ttname"><a href="classgrpc_1_1_client_async_writer.html#ad37af0a7fc27fc90e168fdb90eb52d8b">grpc::ClientAsyncWriter::Finish</a></div><div class="ttdeci">void Finish(Status *status, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Request notification completion. </div><div class="ttdef"><b>Definition:</b> async_stream.h:197</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_writer_html_afbb050c198cbbc7f91f9f7fb8bf8c004"><div class="ttname"><a href="classgrpc_1_1_server_async_writer.html#afbb050c198cbbc7f91f9f7fb8bf8c004">grpc::ServerAsyncWriter::Finish</a></div><div class="ttdeci">void Finish(const Status &status, void *tag)</div><div class="ttdef"><b>Definition:</b> async_stream.h:379</div></div> |
||||
<div class="ttc" id="status_8h_html"><div class="ttname"><a href="status_8h.html">status.h</a></div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_streaming_interface_html_ad83bfe2febf4a6296b7d2646799b8174"><div class="ttname"><a href="classgrpc_1_1_client_async_streaming_interface.html#ad83bfe2febf4a6296b7d2646799b8174">grpc::ClientAsyncStreamingInterface::ReadInitialMetadata</a></div><div class="ttdeci">virtual void ReadInitialMetadata(void *tag)=0</div><div class="ttdoc">Request notification of the reading of the initial metadata. </div></div> |
||||
<div class="ttc" id="classgrpc_1_1_rpc_method_html"><div class="ttname"><a href="classgrpc_1_1_rpc_method.html">grpc::RpcMethod</a></div><div class="ttdef"><b>Definition:</b> rpc_method.h:43</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_html_acb7e350f4b6dcc7acdfdbb9d97c012bd"><div class="ttname"><a href="classgrpc_1_1_client_async_reader.html#acb7e350f4b6dcc7acdfdbb9d97c012bd">grpc::ClientAsyncReader::ClientAsyncReader</a></div><div class="ttdeci">ClientAsyncReader(Channel *channel, CompletionQueue *cq, const RpcMethod &method, ClientContext *context, const W &request, void *tag)</div><div class="ttdoc">Create a stream and write the first request out. </div><div class="ttdef"><b>Definition:</b> async_stream.h:102</div></div> |
||||
<div class="ttc" id="client__context_8h_html"><div class="ttname"><a href="client__context_8h.html">client_context.h</a></div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_html_a91bfabf65e2dc955b6983bc0ece5a73f"><div class="ttname"><a href="classgrpc_1_1_client_async_reader.html#a91bfabf65e2dc955b6983bc0ece5a73f">grpc::ClientAsyncReader::Finish</a></div><div class="ttdeci">void Finish(Status *status, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Request notification completion. </div><div class="ttdef"><b>Definition:</b> async_stream.h:131</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_call_html_a78ca141a1008fbbb122ee4de076edcc4"><div class="ttname"><a href="classgrpc_1_1_call.html#a78ca141a1008fbbb122ee4de076edcc4">grpc::Call::PerformOps</a></div><div class="ttdeci">void PerformOps(CallOpSetInterface *ops)</div><div class="ttdef"><b>Definition:</b> call.cc:85</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_status_html_a1f5b65c54d4e6dd502897e36040714dc"><div class="ttname"><a href="classgrpc_1_1_status.html#a1f5b65c54d4e6dd502897e36040714dc">grpc::Status::ok</a></div><div class="ttdeci">bool ok() const </div><div class="ttdoc">Is the status OK? </div><div class="ttdef"><b>Definition:</b> status.h:67</div></div> |
||||
<div class="ttc" id="service__type_8h_html"><div class="ttname"><a href="service__type_8h.html">service_type.h</a></div></div> |
||||
<div class="ttc" id="classgrpc_1_1_status_html"><div class="ttname"><a href="classgrpc_1_1_status.html">grpc::Status</a></div><div class="ttdoc">Did it work? If it didn't, why? </div><div class="ttdef"><b>Definition:</b> status.h:45</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_streaming_interface_html_afc1cfbd1514fea47088bc837bb578a24"><div class="ttname"><a href="classgrpc_1_1_client_async_streaming_interface.html#afc1cfbd1514fea47088bc837bb578a24">grpc::ClientAsyncStreamingInterface::Finish</a></div><div class="ttdeci">virtual void Finish(Status *status, void *tag)=0</div><div class="ttdoc">Request notification completion. </div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_reader_html_a5d05028563e789203225c0ba548710b6"><div class="ttname"><a href="classgrpc_1_1_server_async_reader.html#a5d05028563e789203225c0ba548710b6">grpc::ServerAsyncReader::SendInitialMetadata</a></div><div class="ttdeci">void SendInitialMetadata(void *tag) GRPC_OVERRIDE</div><div class="ttdef"><b>Definition:</b> async_stream.h:299</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_html_aaf9f76ba76be0a0144bbdf44d740731d"><div class="ttname"><a href="classgrpc_1_1_client_async_reader.html#aaf9f76ba76be0a0144bbdf44d740731d">grpc::ClientAsyncReader::Read</a></div><div class="ttdeci">void Read(R *msg, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Read a message of type R into msg. </div><div class="ttdef"><b>Definition:</b> async_stream.h:122</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_writer_html_a8b6a32ede877fc2d5d4cfc5b95ac163f"><div class="ttname"><a href="classgrpc_1_1_client_async_reader_writer.html#a8b6a32ede877fc2d5d4cfc5b95ac163f">grpc::ClientAsyncReaderWriter::Read</a></div><div class="ttdeci">void Read(R *msg, void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Read a message of type R into msg. </div><div class="ttdef"><b>Definition:</b> async_stream.h:250</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_reader_writer_html_af2b106bee556273e61541950502237ef"><div class="ttname"><a href="classgrpc_1_1_server_async_reader_writer.html#af2b106bee556273e61541950502237ef">grpc::ServerAsyncReaderWriter::ServerAsyncReaderWriter</a></div><div class="ttdeci">ServerAsyncReaderWriter(ServerContext *ctx)</div><div class="ttdef"><b>Definition:</b> async_stream.h:405</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_html"><div class="ttname"><a href="classgrpc_1_1_client_async_reader.html">grpc::ClientAsyncReader</a></div><div class="ttdef"><b>Definition:</b> channel.h:60</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_async_writer_interface_html_a94cc9e4ed13c8fe4a1d883d465477ddd"><div class="ttname"><a href="classgrpc_1_1_async_writer_interface.html#a94cc9e4ed13c8fe4a1d883d465477ddd">grpc::AsyncWriterInterface::~AsyncWriterInterface</a></div><div class="ttdeci">virtual ~AsyncWriterInterface()</div><div class="ttdef"><b>Definition:</b> async_stream.h:84</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_reader_writer_html_ae4daaf42b4077d171638e574a67418b5"><div class="ttname"><a href="classgrpc_1_1_server_async_reader_writer.html#ae4daaf42b4077d171638e574a67418b5">grpc::ServerAsyncReaderWriter::Finish</a></div><div class="ttdeci">void Finish(const Status &status, void *tag)</div><div class="ttdef"><b>Definition:</b> async_stream.h:434</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_writer_html_a2ef3121a212b994228a8c8b192789e3d"><div class="ttname"><a href="classgrpc_1_1_client_async_writer.html#a2ef3121a212b994228a8c8b192789e3d">grpc::ClientAsyncWriter::ClientAsyncWriter</a></div><div class="ttdeci">ClientAsyncWriter(Channel *channel, CompletionQueue *cq, const RpcMethod &method, ClientContext *context, R *response, void *tag)</div><div class="ttdef"><b>Definition:</b> async_stream.h:165</div></div> |
||||
<div class="ttc" id="config_8h_html_a9a884d706be26697c9c892365a3402a9"><div class="ttname"><a href="config_8h.html#a9a884d706be26697c9c892365a3402a9">GRPC_OVERRIDE</a></div><div class="ttdeci">#define GRPC_OVERRIDE</div><div class="ttdef"><b>Definition:</b> config.h:77</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_writer_html_a69f0115acf443d7820adefc7b2a6f162"><div class="ttname"><a href="classgrpc_1_1_client_async_reader_writer.html#a69f0115acf443d7820adefc7b2a6f162">grpc::ClientAsyncReaderWriter::ReadInitialMetadata</a></div><div class="ttdeci">void ReadInitialMetadata(void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Request notification of the reading of the initial metadata. </div><div class="ttdef"><b>Definition:</b> async_stream.h:242</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_call_op_recv_initial_metadata_html"><div class="ttname"><a href="classgrpc_1_1_call_op_recv_initial_metadata.html">grpc::CallOpRecvInitialMetadata</a></div><div class="ttdef"><b>Definition:</b> call.h:396</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_async_reader_interface_html_aa644cf63c12ae8c9d5fda16a361f8a11"><div class="ttname"><a href="classgrpc_1_1_async_reader_interface.html#aa644cf63c12ae8c9d5fda16a361f8a11">grpc::AsyncReaderInterface::Read</a></div><div class="ttdeci">virtual void Read(R *msg, void *tag)=0</div><div class="ttdoc">Read a message of type R into msg. </div></div> |
||||
<div class="ttc" id="classgrpc_1_1_call_op_generic_recv_message_html"><div class="ttname"><a href="classgrpc_1_1_call_op_generic_recv_message.html">grpc::CallOpGenericRecvMessage</a></div><div class="ttdef"><b>Definition:</b> call.h:289</div></div> |
||||
<div class="ttc" id="server__context_8h_html"><div class="ttname"><a href="server__context_8h.html">server_context.h</a></div></div> |
||||
<div class="ttc" id="classgrpc_1_1_server_async_reader_html_a7f351e1d526b250336402ee03b8cc75e"><div class="ttname"><a href="classgrpc_1_1_server_async_reader.html#a7f351e1d526b250336402ee03b8cc75e">grpc::ServerAsyncReader::ServerAsyncReader</a></div><div class="ttdeci">ServerAsyncReader(ServerContext *ctx)</div><div class="ttdef"><b>Definition:</b> async_stream.h:296</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_async_reader_interface_html"><div class="ttname"><a href="classgrpc_1_1_async_reader_interface.html">grpc::AsyncReaderInterface</a></div><div class="ttdoc">An interface that yields a sequence of messages of type R. </div><div class="ttdef"><b>Definition:</b> async_stream.h:68</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_channel_html"><div class="ttname"><a href="classgrpc_1_1_channel.html">grpc::Channel</a></div><div class="ttdoc">Channels represent a connection to an endpoint. Created by CreateChannel. </div><div class="ttdef"><b>Definition:</b> channel.h:69</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_reader_html_a0e5b71e2620dc95fe41305eef7ee7863"><div class="ttname"><a href="classgrpc_1_1_client_async_reader.html#a0e5b71e2620dc95fe41305eef7ee7863">grpc::ClientAsyncReader::ReadInitialMetadata</a></div><div class="ttdeci">void ReadInitialMetadata(void *tag) GRPC_OVERRIDE</div><div class="ttdoc">Request notification of the reading of the initial metadata. </div><div class="ttdef"><b>Definition:</b> async_stream.h:114</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_async_writer_interface_html"><div class="ttname"><a href="classgrpc_1_1_client_async_writer_interface.html">grpc::ClientAsyncWriterInterface</a></div><div class="ttdoc">Common interface for client side asynchronous writing. </div><div class="ttdef"><b>Definition:</b> async_stream.h:152</div></div> |
||||
</div><!-- fragment --></div><!-- contents --> |
||||
<!-- start footer part --> |
||||
<hr class="footer"/><address class="footer"><small> |
||||
Generated on Thu Sep 3 2015 09:44:14 for GRPC C++ by  <a href="http://www.doxygen.org/index.html"> |
||||
<img class="footer" src="doxygen.png" alt="doxygen"/> |
||||
</a> 1.8.6 |
||||
</small></address> |
||||
</body> |
||||
</html> |
File diff suppressed because it is too large
Load Diff
@ -1,175 +0,0 @@ |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||
<head> |
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/> |
||||
<meta name="generator" content="Doxygen 1.8.6"/> |
||||
<title>GRPC C++: include/grpc++/channel_interface.h Source File</title> |
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/> |
||||
<script type="text/javascript" src="jquery.js"></script> |
||||
<script type="text/javascript" src="dynsections.js"></script> |
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/> |
||||
<script type="text/javascript" src="search/search.js"></script> |
||||
<script type="text/javascript"> |
||||
$(document).ready(function() { searchBox.OnSelectItem(0); }); |
||||
</script> |
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" /> |
||||
</head> |
||||
<body> |
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! --> |
||||
<div id="titlearea"> |
||||
<table cellspacing="0" cellpadding="0"> |
||||
<tbody> |
||||
<tr style="height: 56px;"> |
||||
<td style="padding-left: 0.5em;"> |
||||
<div id="projectname">GRPC C++ |
||||
 <span id="projectnumber">0.10.0.0</span> |
||||
</div> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
<!-- end header part --> |
||||
<!-- Generated by Doxygen 1.8.6 --> |
||||
<script type="text/javascript"> |
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search'); |
||||
</script> |
||||
<div id="navrow1" class="tabs"> |
||||
<ul class="tablist"> |
||||
<li><a href="index.html"><span>Main Page</span></a></li> |
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li> |
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li> |
||||
<li class="current"><a href="files.html"><span>Files</span></a></li> |
||||
<li> |
||||
<div id="MSearchBox" class="MSearchBoxInactive"> |
||||
<span class="left"> |
||||
<img id="MSearchSelect" src="search/mag_sel.png" |
||||
onmouseover="return searchBox.OnSearchSelectShow()" |
||||
onmouseout="return searchBox.OnSearchSelectHide()" |
||||
alt=""/> |
||||
<input type="text" id="MSearchField" value="Search" accesskey="S" |
||||
onfocus="searchBox.OnSearchFieldFocus(true)" |
||||
onblur="searchBox.OnSearchFieldFocus(false)" |
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/> |
||||
</span><span class="right"> |
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> |
||||
</span> |
||||
</div> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
<div id="navrow2" class="tabs2"> |
||||
<ul class="tablist"> |
||||
<li><a href="files.html"><span>File List</span></a></li> |
||||
<li><a href="globals.html"><span>Globals</span></a></li> |
||||
</ul> |
||||
</div> |
||||
<!-- window showing the filter options --> |
||||
<div id="MSearchSelectWindow" |
||||
onmouseover="return searchBox.OnSearchSelectShow()" |
||||
onmouseout="return searchBox.OnSearchSelectHide()" |
||||
onkeydown="return searchBox.OnSearchSelectKey(event)"> |
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Macros</a></div> |
||||
|
||||
<!-- iframe showing the search results (closed by default) --> |
||||
<div id="MSearchResultsWindow"> |
||||
<iframe src="javascript:void(0)" frameborder="0" |
||||
name="MSearchResults" id="MSearchResults"> |
||||
</iframe> |
||||
</div> |
||||
|
||||
<div id="nav-path" class="navpath"> |
||||
<ul> |
||||
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_f1b2ab2a88927c1e950e43c1cf4b634b.html">grpc++</a></li> </ul> |
||||
</div> |
||||
</div><!-- top --> |
||||
<div class="header"> |
||||
<div class="headertitle"> |
||||
<div class="title">channel_interface.h</div> </div> |
||||
</div><!--header--> |
||||
<div class="contents"> |
||||
<a href="channel__interface_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div> |
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> *</span></div> |
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright 2015, Google Inc.</span></div> |
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * All rights reserved.</span></div> |
||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div> |
||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div> |
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are</span></div> |
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * met:</span></div> |
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div> |
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * * Redistributions of source code must retain the above copyright</span></div> |
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div> |
||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * * Redistributions in binary form must reproduce the above</span></div> |
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * copyright notice, this list of conditions and the following disclaimer</span></div> |
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * in the documentation and/or other materials provided with the</span></div> |
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * distribution.</span></div> |
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * * Neither the name of Google Inc. nor the names of its</span></div> |
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * contributors may be used to endorse or promote products derived from</span></div> |
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * this software without specific prior written permission.</span></div> |
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> *</span></div> |
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS</span></div> |
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT</span></div> |
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR</span></div> |
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT</span></div> |
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,</span></div> |
||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT</span></div> |
||||
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,</span></div> |
||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY</span></div> |
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span></div> |
||||
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE</span></div> |
||||
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span></div> |
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> *</span></div> |
||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> */</span></div> |
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div> |
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifndef GRPCXX_CHANNEL_INTERFACE_H</span></div> |
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor"></span><span class="preprocessor">#define GRPCXX_CHANNEL_INTERFACE_H</span></div> |
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"></span></div> |
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <memory></span></div> |
||||
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div> |
||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <<a class="code" href="status_8h.html">grpc++/status.h</a>></span></div> |
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <<a class="code" href="call_8h.html">grpc++/impl/call.h</a>></span></div> |
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div> |
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">struct </span>grpc_call;</div> |
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div> |
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">namespace </span>grpc {</div> |
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">class </span>Call;</div> |
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">class </span>CallOpBuffer;</div> |
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">class </span>ClientContext;</div> |
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">class </span>CompletionQueue;</div> |
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">class </span>RpcMethod;</div> |
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">class </span>CallInterface;</div> |
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div> |
||||
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classgrpc_1_1_channel_interface.html"> 52</a></span> <span class="keyword">class </span><a class="code" href="classgrpc_1_1_channel_interface.html">ChannelInterface</a> : <span class="keyword">public</span> <a class="code" href="classgrpc_1_1_call_hook.html">CallHook</a>,</div> |
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">public</span> std::enable_shared_from_this<ChannelInterface> {</div> |
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">public</span>:</div> |
||||
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classgrpc_1_1_channel_interface.html#a3f5145d4778aa952540dc9983cefe13f"> 55</a></span>  <span class="keyword">virtual</span> <a class="code" href="classgrpc_1_1_channel_interface.html#a3f5145d4778aa952540dc9983cefe13f">~ChannelInterface</a>() {}</div> |
||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div> |
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span>* <a class="code" href="classgrpc_1_1_channel_interface.html#a267926300784051328390b2f7648c99f">RegisterMethod</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* method_name) = 0;</div> |
||||
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">virtual</span> <a class="code" href="classgrpc_1_1_call.html">Call</a> <a class="code" href="classgrpc_1_1_channel_interface.html#a9fd365d30961e8e40805a3c8faf276d0">CreateCall</a>(<span class="keyword">const</span> <a class="code" href="classgrpc_1_1_rpc_method.html">RpcMethod</a>& method, <a class="code" href="classgrpc_1_1_client_context.html">ClientContext</a>* context,</div> |
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="classgrpc_1_1_completion_queue.html">CompletionQueue</a>* cq) = 0;</div> |
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> };</div> |
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div> |
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> } <span class="comment">// namespace grpc</span></div> |
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div> |
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor">#endif // GRPCXX_CHANNEL_INTERFACE_H</span></div> |
||||
<div class="ttc" id="classgrpc_1_1_client_context_html"><div class="ttname"><a href="classgrpc_1_1_client_context.html">grpc::ClientContext</a></div><div class="ttdef"><b>Definition:</b> client_context.h:74</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_channel_interface_html_a9fd365d30961e8e40805a3c8faf276d0"><div class="ttname"><a href="classgrpc_1_1_channel_interface.html#a9fd365d30961e8e40805a3c8faf276d0">grpc::ChannelInterface::CreateCall</a></div><div class="ttdeci">virtual Call CreateCall(const RpcMethod &method, ClientContext *context, CompletionQueue *cq)=0</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_call_html"><div class="ttname"><a href="classgrpc_1_1_call.html">grpc::Call</a></div><div class="ttdef"><b>Definition:</b> call.h:565</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_channel_interface_html"><div class="ttname"><a href="classgrpc_1_1_channel_interface.html">grpc::ChannelInterface</a></div><div class="ttdef"><b>Definition:</b> channel_interface.h:52</div></div> |
||||
<div class="ttc" id="call_8h_html"><div class="ttname"><a href="call_8h.html">call.h</a></div></div> |
||||
<div class="ttc" id="classgrpc_1_1_completion_queue_html"><div class="ttname"><a href="classgrpc_1_1_completion_queue.html">grpc::CompletionQueue</a></div><div class="ttdef"><b>Definition:</b> completion_queue.h:87</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_channel_interface_html_a267926300784051328390b2f7648c99f"><div class="ttname"><a href="classgrpc_1_1_channel_interface.html#a267926300784051328390b2f7648c99f">grpc::ChannelInterface::RegisterMethod</a></div><div class="ttdeci">virtual void * RegisterMethod(const char *method_name)=0</div></div> |
||||
<div class="ttc" id="status_8h_html"><div class="ttname"><a href="status_8h.html">status.h</a></div></div> |
||||
<div class="ttc" id="classgrpc_1_1_rpc_method_html"><div class="ttname"><a href="classgrpc_1_1_rpc_method.html">grpc::RpcMethod</a></div><div class="ttdef"><b>Definition:</b> rpc_method.h:39</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_channel_interface_html_a3f5145d4778aa952540dc9983cefe13f"><div class="ttname"><a href="classgrpc_1_1_channel_interface.html#a3f5145d4778aa952540dc9983cefe13f">grpc::ChannelInterface::~ChannelInterface</a></div><div class="ttdeci">virtual ~ChannelInterface()</div><div class="ttdef"><b>Definition:</b> channel_interface.h:55</div></div> |
||||
<div class="ttc" id="classgrpc_1_1_call_hook_html"><div class="ttname"><a href="classgrpc_1_1_call_hook.html">grpc::CallHook</a></div><div class="ttdef"><b>Definition:</b> call.h:558</div></div> |
||||
</div><!-- fragment --></div><!-- contents --> |
||||
<!-- start footer part --> |
||||
<hr class="footer"/><address class="footer"><small> |
||||
Generated on Wed Aug 5 2015 08:17:08 for GRPC C++ by  <a href="http://www.doxygen.org/index.html"> |
||||
<img class="footer" src="doxygen.png" alt="doxygen"/> |
||||
</a> 1.8.6 |
||||
</small></address> |
||||
</body> |
||||
</html> |
@ -0,0 +1,371 @@ |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml"> |
||||
<head> |
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/> |
||||
<meta name="generator" content="Doxygen 1.8.6"/> |
||||
<title>GRPC C++: grpc::PropagationOptions Class Reference</title> |
||||
<link href="tabs.css" rel="stylesheet" type="text/css"/> |
||||
<script type="text/javascript" src="jquery.js"></script> |
||||
<script type="text/javascript" src="dynsections.js"></script> |
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/> |
||||
<script type="text/javascript" src="search/search.js"></script> |
||||
<script type="text/javascript"> |
||||
$(document).ready(function() { searchBox.OnSelectItem(0); }); |
||||
</script> |
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" /> |
||||
</head> |
||||
<body> |
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! --> |
||||
<div id="titlearea"> |
||||
<table cellspacing="0" cellpadding="0"> |
||||
<tbody> |
||||
<tr style="height: 56px;"> |
||||
<td style="padding-left: 0.5em;"> |
||||
<div id="projectname">GRPC C++ |
||||
 <span id="projectnumber">0.11.0.0</span> |
||||
</div> |
||||
</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
<!-- end header part --> |
||||
<!-- Generated by Doxygen 1.8.6 --> |
||||
<script type="text/javascript"> |
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search'); |
||||
</script> |
||||
<div id="navrow1" class="tabs"> |
||||
<ul class="tablist"> |
||||
<li><a href="index.html"><span>Main Page</span></a></li> |
||||
<li><a href="namespaces.html"><span>Namespaces</span></a></li> |
||||
<li class="current"><a href="annotated.html"><span>Data Structures</span></a></li> |
||||
<li><a href="files.html"><span>Files</span></a></li> |
||||
<li> |
||||
<div id="MSearchBox" class="MSearchBoxInactive"> |
||||
<span class="left"> |
||||
<img id="MSearchSelect" src="search/mag_sel.png" |
||||
onmouseover="return searchBox.OnSearchSelectShow()" |
||||
onmouseout="return searchBox.OnSearchSelectHide()" |
||||
alt=""/> |
||||
<input type="text" id="MSearchField" value="Search" accesskey="S" |
||||
onfocus="searchBox.OnSearchFieldFocus(true)" |
||||
onblur="searchBox.OnSearchFieldFocus(false)" |
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/> |
||||
</span><span class="right"> |
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> |
||||
</span> |
||||
</div> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
<div id="navrow2" class="tabs2"> |
||||
<ul class="tablist"> |
||||
<li><a href="annotated.html"><span>Data Structures</span></a></li> |
||||
<li><a href="classes.html"><span>Data Structure Index</span></a></li> |
||||
<li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> |
||||
<li><a href="functions.html"><span>Data Fields</span></a></li> |
||||
</ul> |
||||
</div> |
||||
<!-- window showing the filter options --> |
||||
<div id="MSearchSelectWindow" |
||||
onmouseover="return searchBox.OnSearchSelectShow()" |
||||
onmouseout="return searchBox.OnSearchSelectHide()" |
||||
onkeydown="return searchBox.OnSearchSelectKey(event)"> |
||||
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Macros</a></div> |
||||
|
||||
<!-- iframe showing the search results (closed by default) --> |
||||
<div id="MSearchResultsWindow"> |
||||
<iframe src="javascript:void(0)" frameborder="0" |
||||
name="MSearchResults" id="MSearchResults"> |
||||
</iframe> |
||||
</div> |
||||
|
||||
<div id="nav-path" class="navpath"> |
||||
<ul> |
||||
<li class="navelem"><a class="el" href="namespacegrpc.html">grpc</a></li><li class="navelem"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a></li> </ul> |
||||
</div> |
||||
</div><!-- top --> |
||||
<div class="header"> |
||||
<div class="summary"> |
||||
<a href="#pub-methods">Public Member Functions</a> </div> |
||||
<div class="headertitle"> |
||||
<div class="title">grpc::PropagationOptions Class Reference</div> </div> |
||||
</div><!--header--> |
||||
<div class="contents"> |
||||
|
||||
<p>Options for <em><a class="el" href="classgrpc_1_1_client_context.html#a6e07af41b550bf697ee8063e5baae967" title="Create a new ClientContext as a child of an incoming server call, according to options (...">ClientContext::FromServerContext</a></em> specifying which traits from the <em><a class="el" href="classgrpc_1_1_server_context.html">ServerContext</a></em> to propagate (copy) from it into a new <em><a class="el" href="classgrpc_1_1_client_context.html">ClientContext</a></em>. |
||||
<a href="classgrpc_1_1_propagation_options.html#details">More...</a></p> |
||||
|
||||
<p><code>#include <<a class="el" href="client__context_8h_source.html">client_context.h</a>></code></p> |
||||
<table class="memberdecls"> |
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> |
||||
Public Member Functions</h2></td></tr> |
||||
<tr class="memitem:a450cdedbc72cbda17cb8d93f31c0f878"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classgrpc_1_1_propagation_options.html#a450cdedbc72cbda17cb8d93f31c0f878">PropagationOptions</a> ()</td></tr> |
||||
<tr class="separator:a450cdedbc72cbda17cb8d93f31c0f878"><td class="memSeparator" colspan="2"> </td></tr> |
||||
<tr class="memitem:a4c797b7a99ab4f5c71d9b865ffcaf2f8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classgrpc_1_1_propagation_options.html#a4c797b7a99ab4f5c71d9b865ffcaf2f8">enable_deadline_propagation</a> ()</td></tr> |
||||
<tr class="separator:a4c797b7a99ab4f5c71d9b865ffcaf2f8"><td class="memSeparator" colspan="2"> </td></tr> |
||||
<tr class="memitem:af163720df9f2f2772e397fa31ac74bd7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classgrpc_1_1_propagation_options.html#af163720df9f2f2772e397fa31ac74bd7">disable_deadline_propagation</a> ()</td></tr> |
||||
<tr class="separator:af163720df9f2f2772e397fa31ac74bd7"><td class="memSeparator" colspan="2"> </td></tr> |
||||
<tr class="memitem:aebc252e3ccf7ad9bb74ba9951c3b2fd9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classgrpc_1_1_propagation_options.html#aebc252e3ccf7ad9bb74ba9951c3b2fd9">enable_census_stats_propagation</a> ()</td></tr> |
||||
<tr class="separator:aebc252e3ccf7ad9bb74ba9951c3b2fd9"><td class="memSeparator" colspan="2"> </td></tr> |
||||
<tr class="memitem:a08d8e9412abb5de736257f6ec8e434cb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classgrpc_1_1_propagation_options.html#a08d8e9412abb5de736257f6ec8e434cb">disable_census_stats_propagation</a> ()</td></tr> |
||||
<tr class="separator:a08d8e9412abb5de736257f6ec8e434cb"><td class="memSeparator" colspan="2"> </td></tr> |
||||
<tr class="memitem:a1b0d3b79b82d48d123f07ee39332ec7a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classgrpc_1_1_propagation_options.html#a1b0d3b79b82d48d123f07ee39332ec7a">enable_census_tracing_propagation</a> ()</td></tr> |
||||
<tr class="separator:a1b0d3b79b82d48d123f07ee39332ec7a"><td class="memSeparator" colspan="2"> </td></tr> |
||||
<tr class="memitem:a8109ff28428f279c2b410e758f27409d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classgrpc_1_1_propagation_options.html#a8109ff28428f279c2b410e758f27409d">disable_census_tracing_propagation</a> ()</td></tr> |
||||
<tr class="separator:a8109ff28428f279c2b410e758f27409d"><td class="memSeparator" colspan="2"> </td></tr> |
||||
<tr class="memitem:a6ead0d0f5eba28ffbfb47de32b64bfc9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classgrpc_1_1_propagation_options.html#a6ead0d0f5eba28ffbfb47de32b64bfc9">enable_cancellation_propagation</a> ()</td></tr> |
||||
<tr class="separator:a6ead0d0f5eba28ffbfb47de32b64bfc9"><td class="memSeparator" colspan="2"> </td></tr> |
||||
<tr class="memitem:a1ed5f38fd16b830a300f09dd3cd0b9d1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classgrpc_1_1_propagation_options.html#a1ed5f38fd16b830a300f09dd3cd0b9d1">disable_cancellation_propagation</a> ()</td></tr> |
||||
<tr class="separator:a1ed5f38fd16b830a300f09dd3cd0b9d1"><td class="memSeparator" colspan="2"> </td></tr> |
||||
<tr class="memitem:a3507b18b73820e1ffaa6bdcafeb3b4f2"><td class="memItemLeft" align="right" valign="top">gpr_uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="classgrpc_1_1_propagation_options.html#a3507b18b73820e1ffaa6bdcafeb3b4f2">c_bitmask</a> () const </td></tr> |
||||
<tr class="separator:a3507b18b73820e1ffaa6bdcafeb3b4f2"><td class="memSeparator" colspan="2"> </td></tr> |
||||
</table> |
||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> |
||||
<div class="textblock"><p>Options for <em><a class="el" href="classgrpc_1_1_client_context.html#a6e07af41b550bf697ee8063e5baae967" title="Create a new ClientContext as a child of an incoming server call, according to options (...">ClientContext::FromServerContext</a></em> specifying which traits from the <em><a class="el" href="classgrpc_1_1_server_context.html">ServerContext</a></em> to propagate (copy) from it into a new <em><a class="el" href="classgrpc_1_1_client_context.html">ClientContext</a></em>. </p> |
||||
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classgrpc_1_1_client_context.html#a6e07af41b550bf697ee8063e5baae967" title="Create a new ClientContext as a child of an incoming server call, according to options (...">ClientContext::FromServerContext</a> </dd></dl> |
||||
</div><h2 class="groupheader">Constructor & Destructor Documentation</h2> |
||||
<a class="anchor" id="a450cdedbc72cbda17cb8d93f31c0f878"></a> |
||||
<div class="memitem"> |
||||
<div class="memproto"> |
||||
<table class="mlabels"> |
||||
<tr> |
||||
<td class="mlabels-left"> |
||||
<table class="memname"> |
||||
<tr> |
||||
<td class="memname">grpc::PropagationOptions::PropagationOptions </td> |
||||
<td>(</td> |
||||
<td class="paramname"></td><td>)</td> |
||||
<td></td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td class="mlabels-right"> |
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td> |
||||
</tr> |
||||
</table> |
||||
</div><div class="memdoc"> |
||||
|
||||
</div> |
||||
</div> |
||||
<h2 class="groupheader">Member Function Documentation</h2> |
||||
<a class="anchor" id="a3507b18b73820e1ffaa6bdcafeb3b4f2"></a> |
||||
<div class="memitem"> |
||||
<div class="memproto"> |
||||
<table class="mlabels"> |
||||
<tr> |
||||
<td class="mlabels-left"> |
||||
<table class="memname"> |
||||
<tr> |
||||
<td class="memname">gpr_uint32 grpc::PropagationOptions::c_bitmask </td> |
||||
<td>(</td> |
||||
<td class="paramname"></td><td>)</td> |
||||
<td> const</td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td class="mlabels-right"> |
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td> |
||||
</tr> |
||||
</table> |
||||
</div><div class="memdoc"> |
||||
|
||||
</div> |
||||
</div> |
||||
<a class="anchor" id="a1ed5f38fd16b830a300f09dd3cd0b9d1"></a> |
||||
<div class="memitem"> |
||||
<div class="memproto"> |
||||
<table class="mlabels"> |
||||
<tr> |
||||
<td class="mlabels-left"> |
||||
<table class="memname"> |
||||
<tr> |
||||
<td class="memname"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a>& grpc::PropagationOptions::disable_cancellation_propagation </td> |
||||
<td>(</td> |
||||
<td class="paramname"></td><td>)</td> |
||||
<td></td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td class="mlabels-right"> |
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td> |
||||
</tr> |
||||
</table> |
||||
</div><div class="memdoc"> |
||||
|
||||
</div> |
||||
</div> |
||||
<a class="anchor" id="a08d8e9412abb5de736257f6ec8e434cb"></a> |
||||
<div class="memitem"> |
||||
<div class="memproto"> |
||||
<table class="mlabels"> |
||||
<tr> |
||||
<td class="mlabels-left"> |
||||
<table class="memname"> |
||||
<tr> |
||||
<td class="memname"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a>& grpc::PropagationOptions::disable_census_stats_propagation </td> |
||||
<td>(</td> |
||||
<td class="paramname"></td><td>)</td> |
||||
<td></td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td class="mlabels-right"> |
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td> |
||||
</tr> |
||||
</table> |
||||
</div><div class="memdoc"> |
||||
|
||||
</div> |
||||
</div> |
||||
<a class="anchor" id="a8109ff28428f279c2b410e758f27409d"></a> |
||||
<div class="memitem"> |
||||
<div class="memproto"> |
||||
<table class="mlabels"> |
||||
<tr> |
||||
<td class="mlabels-left"> |
||||
<table class="memname"> |
||||
<tr> |
||||
<td class="memname"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a>& grpc::PropagationOptions::disable_census_tracing_propagation </td> |
||||
<td>(</td> |
||||
<td class="paramname"></td><td>)</td> |
||||
<td></td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td class="mlabels-right"> |
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td> |
||||
</tr> |
||||
</table> |
||||
</div><div class="memdoc"> |
||||
|
||||
</div> |
||||
</div> |
||||
<a class="anchor" id="af163720df9f2f2772e397fa31ac74bd7"></a> |
||||
<div class="memitem"> |
||||
<div class="memproto"> |
||||
<table class="mlabels"> |
||||
<tr> |
||||
<td class="mlabels-left"> |
||||
<table class="memname"> |
||||
<tr> |
||||
<td class="memname"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a>& grpc::PropagationOptions::disable_deadline_propagation </td> |
||||
<td>(</td> |
||||
<td class="paramname"></td><td>)</td> |
||||
<td></td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td class="mlabels-right"> |
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td> |
||||
</tr> |
||||
</table> |
||||
</div><div class="memdoc"> |
||||
|
||||
</div> |
||||
</div> |
||||
<a class="anchor" id="a6ead0d0f5eba28ffbfb47de32b64bfc9"></a> |
||||
<div class="memitem"> |
||||
<div class="memproto"> |
||||
<table class="mlabels"> |
||||
<tr> |
||||
<td class="mlabels-left"> |
||||
<table class="memname"> |
||||
<tr> |
||||
<td class="memname"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a>& grpc::PropagationOptions::enable_cancellation_propagation </td> |
||||
<td>(</td> |
||||
<td class="paramname"></td><td>)</td> |
||||
<td></td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td class="mlabels-right"> |
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td> |
||||
</tr> |
||||
</table> |
||||
</div><div class="memdoc"> |
||||
|
||||
</div> |
||||
</div> |
||||
<a class="anchor" id="aebc252e3ccf7ad9bb74ba9951c3b2fd9"></a> |
||||
<div class="memitem"> |
||||
<div class="memproto"> |
||||
<table class="mlabels"> |
||||
<tr> |
||||
<td class="mlabels-left"> |
||||
<table class="memname"> |
||||
<tr> |
||||
<td class="memname"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a>& grpc::PropagationOptions::enable_census_stats_propagation </td> |
||||
<td>(</td> |
||||
<td class="paramname"></td><td>)</td> |
||||
<td></td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td class="mlabels-right"> |
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td> |
||||
</tr> |
||||
</table> |
||||
</div><div class="memdoc"> |
||||
|
||||
</div> |
||||
</div> |
||||
<a class="anchor" id="a1b0d3b79b82d48d123f07ee39332ec7a"></a> |
||||
<div class="memitem"> |
||||
<div class="memproto"> |
||||
<table class="mlabels"> |
||||
<tr> |
||||
<td class="mlabels-left"> |
||||
<table class="memname"> |
||||
<tr> |
||||
<td class="memname"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a>& grpc::PropagationOptions::enable_census_tracing_propagation </td> |
||||
<td>(</td> |
||||
<td class="paramname"></td><td>)</td> |
||||
<td></td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td class="mlabels-right"> |
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td> |
||||
</tr> |
||||
</table> |
||||
</div><div class="memdoc"> |
||||
|
||||
</div> |
||||
</div> |
||||
<a class="anchor" id="a4c797b7a99ab4f5c71d9b865ffcaf2f8"></a> |
||||
<div class="memitem"> |
||||
<div class="memproto"> |
||||
<table class="mlabels"> |
||||
<tr> |
||||
<td class="mlabels-left"> |
||||
<table class="memname"> |
||||
<tr> |
||||
<td class="memname"><a class="el" href="classgrpc_1_1_propagation_options.html">PropagationOptions</a>& grpc::PropagationOptions::enable_deadline_propagation </td> |
||||
<td>(</td> |
||||
<td class="paramname"></td><td>)</td> |
||||
<td></td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
<td class="mlabels-right"> |
||||
<span class="mlabels"><span class="mlabel">inline</span></span> </td> |
||||
</tr> |
||||
</table> |
||||
</div><div class="memdoc"> |
||||
|
||||
</div> |
||||
</div> |
||||
<hr/>The documentation for this class was generated from the following file:<ul> |
||||
<li>include/grpc++/<a class="el" href="client__context_8h_source.html">client_context.h</a></li> |
||||
</ul> |
||||
</div><!-- contents --> |
||||
<!-- start footer part --> |
||||
<hr class="footer"/><address class="footer"><small> |
||||
Generated on Thu Sep 3 2015 09:44:14 for GRPC C++ by  <a href="http://www.doxygen.org/index.html"> |
||||
<img class="footer" src="doxygen.png" alt="doxygen"/> |
||||
</a> 1.8.6 |
||||
</small></address> |
||||
</body> |
||||
</html> |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue