mirror of https://github.com/grpc/grpc.git
commit
aef1ebe8f9
62 changed files with 1577 additions and 494 deletions
@ -0,0 +1,59 @@ |
||||
# Binary Logging |
||||
|
||||
## Format |
||||
|
||||
The log format is described in [this proto file](src/proto/grpc/binary_log/v1alpha/log.proto). It is intended that multiple parts of the call will be logged in separate files, and then correlated by analysis tools using the rpc\_id. |
||||
|
||||
## API |
||||
|
||||
The binary logger will be a separate library from gRPC, in each language that we support. The user will need to explicitly call into the library to generate logs. The library will provide the ability to log sending or receiving, as relevant, the following on both the client and the server: |
||||
|
||||
- Initial metadata |
||||
- Messages |
||||
- Status with trailing metadata from the server |
||||
- Additional key/value pairs that are associated with a call but not sent over the wire |
||||
|
||||
The following is an example of what such an API could look like in C++: |
||||
|
||||
```c++ |
||||
// The context provides the method_name, deadline, peer, and metadata contents. |
||||
// direction = CLIENT_SEND |
||||
LogRequestHeaders(ClientContext context); |
||||
// direction = SERVER_RECV |
||||
LogRequestHeaders(ServerContext context); |
||||
|
||||
// The context provides the metadata contents |
||||
// direction = CLIENT_RECV |
||||
LogResponseHeaders(ClientContext context); |
||||
// direction = SERVER_SEND |
||||
LogResponseHeaders(ServerContext context); |
||||
|
||||
// The context provides the metadata contents |
||||
// direction = CLIENT_RECV |
||||
LogStatus(ClientContext context, grpc_status_code code, string details); |
||||
// direction = SERVER_SEND |
||||
LogStatus(ServerContext context, grpc_status_code code, string details); |
||||
|
||||
// The context provides the user data contents |
||||
// direction = CLIENT_SEND |
||||
LogUserData(ClientContext context); |
||||
// direction = SERVER_SEND |
||||
LogUserData(ServerContext context); |
||||
|
||||
// direction = CLIENT_SEND |
||||
LogRequestMessage(ClientContext context, uint32_t length, T message); |
||||
// direction = SERVER_RECV |
||||
LogRequestMessage(ServerContext context, uint32_t length, T message); |
||||
// direction = CLIENT_RECV |
||||
LogResponseMessage(ClientContext context, uint32_t length, T message); |
||||
// direction = SERVER_SEND |
||||
LogResponseMessage(ServerContext context, uint32_t length, T message); |
||||
``` |
||||
|
||||
In all of those cases, the `rpc_id` is provided by the context, and each combination of method and context argument type implies a single direction, as noted in the comments. |
||||
|
||||
For the message log functions, the `length` argument indicates the length of the complete message, and the `message` argument may be only part of the complete message, stripped of sensitive material and/or shortened for efficiency. |
||||
|
||||
## Language differences |
||||
|
||||
In other languages, more or less data will need to be passed explicitly as separate arguments. In some languages, for example, the metadata will be separate from the context-like object and will need to be passed as a separate argument. |
@ -1,113 +0,0 @@ |
||||
#region Copyright notice and license |
||||
|
||||
// Copyright 2015, Google Inc. |
||||
// All rights reserved. |
||||
// |
||||
// Redistribution and use in source and binary forms, with or without |
||||
// modification, are permitted provided that the following conditions are |
||||
// met: |
||||
// |
||||
// * Redistributions of source code must retain the above copyright |
||||
// notice, this list of conditions and the following disclaimer. |
||||
// * Redistributions in binary form must reproduce the above |
||||
// copyright notice, this list of conditions and the following disclaimer |
||||
// in the documentation and/or other materials provided with the |
||||
// distribution. |
||||
// * Neither the name of Google Inc. nor the names of its |
||||
// contributors may be used to endorse or promote products derived from |
||||
// this software without specific prior written permission. |
||||
// |
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
#endregion |
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Linq; |
||||
using System.Threading; |
||||
using System.Threading.Tasks; |
||||
using Grpc.Core; |
||||
using Grpc.Core.Utils; |
||||
using Grpc.Testing; |
||||
using NUnit.Framework; |
||||
|
||||
namespace Grpc.IntegrationTesting |
||||
{ |
||||
public class HeaderInterceptorTest |
||||
{ |
||||
const string Host = "localhost"; |
||||
Server server; |
||||
Channel channel; |
||||
TestService.TestServiceClient client; |
||||
|
||||
[TestFixtureSetUp] |
||||
public void Init() |
||||
{ |
||||
server = new Server |
||||
{ |
||||
Services = { TestService.BindService(new TestServiceImpl()) }, |
||||
Ports = { { Host, ServerPort.PickUnused, ServerCredentials.Insecure } } |
||||
}; |
||||
server.Start(); |
||||
|
||||
channel = new Channel(Host, server.Ports.Single().BoundPort, ChannelCredentials.Insecure); |
||||
client = TestService.NewClient(channel); |
||||
} |
||||
|
||||
[TestFixtureTearDown] |
||||
public void Cleanup() |
||||
{ |
||||
channel.ShutdownAsync().Wait(); |
||||
server.ShutdownAsync().Wait(); |
||||
} |
||||
|
||||
[Test] |
||||
public async Task HeaderInterceptor_CreateMetadata() |
||||
{ |
||||
var key = "x-grpc-test-echo-initial"; |
||||
client.HeaderInterceptor = new HeaderInterceptor((method, metadata) => |
||||
{ |
||||
metadata.Add(key, "ABC"); |
||||
}); |
||||
|
||||
var call = client.UnaryCallAsync(new SimpleRequest()); |
||||
await call; |
||||
|
||||
var responseHeaders = await call.ResponseHeadersAsync; |
||||
Assert.AreEqual("ABC", responseHeaders.First((entry) => entry.Key == key).Value); |
||||
} |
||||
|
||||
[Test] |
||||
public async Task HeaderInterceptor_AppendMetadata() |
||||
{ |
||||
var initialKey = "x-grpc-test-echo-initial"; |
||||
var trailingKey = "x-grpc-test-echo-trailing-bin"; |
||||
|
||||
client.HeaderInterceptor = new HeaderInterceptor((method, metadata) => |
||||
{ |
||||
metadata.Add(initialKey, "ABC"); |
||||
}); |
||||
|
||||
var headers = new Metadata |
||||
{ |
||||
{ trailingKey, new byte[] {0xaa} } |
||||
}; |
||||
var call = client.UnaryCallAsync(new SimpleRequest(), headers: headers); |
||||
await call; |
||||
|
||||
var responseHeaders = await call.ResponseHeadersAsync; |
||||
Assert.AreEqual("ABC", responseHeaders.First((entry) => entry.Key == initialKey).Value); |
||||
CollectionAssert.AreEqual(new byte[] {0xaa}, call.GetTrailers().First((entry) => entry.Key == trailingKey).ValueBytes); |
||||
} |
||||
} |
||||
} |
@ -1,204 +0,0 @@ |
||||
#region Copyright notice and license |
||||
|
||||
// Copyright 2015, Google Inc. |
||||
// All rights reserved. |
||||
// |
||||
// Redistribution and use in source and binary forms, with or without |
||||
// modification, are permitted provided that the following conditions are |
||||
// met: |
||||
// |
||||
// * Redistributions of source code must retain the above copyright |
||||
// notice, this list of conditions and the following disclaimer. |
||||
// * Redistributions in binary form must reproduce the above |
||||
// copyright notice, this list of conditions and the following disclaimer |
||||
// in the documentation and/or other materials provided with the |
||||
// distribution. |
||||
// * Neither the name of Google Inc. nor the names of its |
||||
// contributors may be used to endorse or promote products derived from |
||||
// this software without specific prior written permission. |
||||
// |
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
#endregion |
||||
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.Threading; |
||||
using System.Threading.Tasks; |
||||
using Grpc.Core; |
||||
|
||||
namespace grpc.testing |
||||
{ |
||||
/// <summary> |
||||
/// TestService (this is handwritten version of code that will normally be generated). |
||||
/// </summary> |
||||
public class TestServiceGrpc |
||||
{ |
||||
static readonly string ServiceName = "/grpc.testing.TestService"; |
||||
|
||||
static readonly Marshaller<Empty> EmptyMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), Empty.ParseFrom); |
||||
static readonly Marshaller<SimpleRequest> SimpleRequestMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), SimpleRequest.ParseFrom); |
||||
static readonly Marshaller<SimpleResponse> SimpleResponseMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), SimpleResponse.ParseFrom); |
||||
static readonly Marshaller<StreamingOutputCallRequest> StreamingOutputCallRequestMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), StreamingOutputCallRequest.ParseFrom); |
||||
static readonly Marshaller<StreamingOutputCallResponse> StreamingOutputCallResponseMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), StreamingOutputCallResponse.ParseFrom); |
||||
static readonly Marshaller<StreamingInputCallRequest> StreamingInputCallRequestMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), StreamingInputCallRequest.ParseFrom); |
||||
static readonly Marshaller<StreamingInputCallResponse> StreamingInputCallResponseMarshaller = Marshallers.Create((arg) => arg.ToByteArray(), StreamingInputCallResponse.ParseFrom); |
||||
|
||||
static readonly Method<Empty, Empty> EmptyCallMethod = new Method<Empty, Empty>( |
||||
MethodType.Unary, |
||||
"EmptyCall", |
||||
EmptyMarshaller, |
||||
EmptyMarshaller); |
||||
|
||||
static readonly Method<SimpleRequest, SimpleResponse> UnaryCallMethod = new Method<SimpleRequest, SimpleResponse>( |
||||
MethodType.Unary, |
||||
"UnaryCall", |
||||
SimpleRequestMarshaller, |
||||
SimpleResponseMarshaller); |
||||
|
||||
static readonly Method<StreamingOutputCallRequest, StreamingOutputCallResponse> StreamingOutputCallMethod = new Method<StreamingOutputCallRequest, StreamingOutputCallResponse>( |
||||
MethodType.ServerStreaming, |
||||
"StreamingOutputCall", |
||||
StreamingOutputCallRequestMarshaller, |
||||
StreamingOutputCallResponseMarshaller); |
||||
|
||||
static readonly Method<StreamingInputCallRequest, StreamingInputCallResponse> StreamingInputCallMethod = new Method<StreamingInputCallRequest, StreamingInputCallResponse>( |
||||
MethodType.ClientStreaming, |
||||
"StreamingInputCall", |
||||
StreamingInputCallRequestMarshaller, |
||||
StreamingInputCallResponseMarshaller); |
||||
|
||||
static readonly Method<StreamingOutputCallRequest, StreamingOutputCallResponse> FullDuplexCallMethod = new Method<StreamingOutputCallRequest, StreamingOutputCallResponse>( |
||||
MethodType.DuplexStreaming, |
||||
"FullDuplexCall", |
||||
StreamingOutputCallRequestMarshaller, |
||||
StreamingOutputCallResponseMarshaller); |
||||
|
||||
static readonly Method<StreamingOutputCallRequest, StreamingOutputCallResponse> HalfDuplexCallMethod = new Method<StreamingOutputCallRequest, StreamingOutputCallResponse>( |
||||
MethodType.DuplexStreaming, |
||||
"HalfDuplexCall", |
||||
StreamingOutputCallRequestMarshaller, |
||||
StreamingOutputCallResponseMarshaller); |
||||
|
||||
public interface ITestServiceClient |
||||
{ |
||||
Empty EmptyCall(Empty request, CancellationToken token = default(CancellationToken)); |
||||
|
||||
Task<Empty> EmptyCallAsync(Empty request, CancellationToken token = default(CancellationToken)); |
||||
|
||||
SimpleResponse UnaryCall(SimpleRequest request, CancellationToken token = default(CancellationToken)); |
||||
|
||||
Task<SimpleResponse> UnaryCallAsync(SimpleRequest request, CancellationToken token = default(CancellationToken)); |
||||
|
||||
AsyncServerStreamingCall<StreamingOutputCallResponse> StreamingOutputCall(StreamingOutputCallRequest request, CancellationToken token = default(CancellationToken)); |
||||
|
||||
AsyncClientStreamingCall<StreamingInputCallRequest, StreamingInputCallResponse> StreamingInputCall(CancellationToken token = default(CancellationToken)); |
||||
|
||||
AsyncDuplexStreamingCall<StreamingOutputCallRequest, StreamingOutputCallResponse> FullDuplexCall(CancellationToken token = default(CancellationToken)); |
||||
|
||||
AsyncDuplexStreamingCall<StreamingOutputCallRequest, StreamingOutputCallResponse> HalfDuplexCall(CancellationToken token = default(CancellationToken)); |
||||
} |
||||
|
||||
public class TestServiceClientStub : AbstractStub<TestServiceClientStub, StubConfiguration>, ITestServiceClient |
||||
{ |
||||
public TestServiceClientStub(Channel channel) : base(channel, StubConfiguration.Default) |
||||
{ |
||||
} |
||||
|
||||
public TestServiceClientStub(Channel channel, StubConfiguration config) : base(channel, config) |
||||
{ |
||||
} |
||||
|
||||
public Empty EmptyCall(Empty request, CancellationToken token = default(CancellationToken)) |
||||
{ |
||||
var call = CreateCall(ServiceName, EmptyCallMethod); |
||||
return Calls.BlockingUnaryCall(call, request, token); |
||||
} |
||||
|
||||
public Task<Empty> EmptyCallAsync(Empty request, CancellationToken token = default(CancellationToken)) |
||||
{ |
||||
var call = CreateCall(ServiceName, EmptyCallMethod); |
||||
return Calls.AsyncUnaryCall(call, request, token); |
||||
} |
||||
|
||||
public SimpleResponse UnaryCall(SimpleRequest request, CancellationToken token = default(CancellationToken)) |
||||
{ |
||||
var call = CreateCall(ServiceName, UnaryCallMethod); |
||||
return Calls.BlockingUnaryCall(call, request, token); |
||||
} |
||||
|
||||
public Task<SimpleResponse> UnaryCallAsync(SimpleRequest request, CancellationToken token = default(CancellationToken)) |
||||
{ |
||||
var call = CreateCall(ServiceName, UnaryCallMethod); |
||||
return Calls.AsyncUnaryCall(call, request, token); |
||||
} |
||||
|
||||
public AsyncServerStreamingCall<StreamingOutputCallResponse> StreamingOutputCall(StreamingOutputCallRequest request, CancellationToken token = default(CancellationToken)) |
||||
{ |
||||
var call = CreateCall(ServiceName, StreamingOutputCallMethod); |
||||
return Calls.AsyncServerStreamingCall(call, request, token); |
||||
} |
||||
|
||||
public AsyncClientStreamingCall<StreamingInputCallRequest, StreamingInputCallResponse> StreamingInputCall(CancellationToken token = default(CancellationToken)) |
||||
{ |
||||
var call = CreateCall(ServiceName, StreamingInputCallMethod); |
||||
return Calls.AsyncClientStreamingCall(call, token); |
||||
} |
||||
|
||||
public AsyncDuplexStreamingCall<StreamingOutputCallRequest, StreamingOutputCallResponse> FullDuplexCall(CancellationToken token = default(CancellationToken)) |
||||
{ |
||||
var call = CreateCall(ServiceName, FullDuplexCallMethod); |
||||
return Calls.AsyncDuplexStreamingCall(call, token); |
||||
} |
||||
|
||||
public AsyncDuplexStreamingCall<StreamingOutputCallRequest, StreamingOutputCallResponse> HalfDuplexCall(CancellationToken token = default(CancellationToken)) |
||||
{ |
||||
var call = CreateCall(ServiceName, HalfDuplexCallMethod); |
||||
return Calls.AsyncDuplexStreamingCall(call, token); |
||||
} |
||||
} |
||||
|
||||
// server-side interface |
||||
public interface ITestService |
||||
{ |
||||
Task<Empty> EmptyCall(ServerCallContext context, Empty request); |
||||
|
||||
Task<SimpleResponse> UnaryCall(ServerCallContext context, SimpleRequest request); |
||||
|
||||
Task StreamingOutputCall(ServerCallContext context, StreamingOutputCallRequest request, IServerStreamWriter<StreamingOutputCallResponse> responseStream); |
||||
|
||||
Task<StreamingInputCallResponse> StreamingInputCall(ServerCallContext context, IAsyncStreamReader<StreamingInputCallRequest> requestStream); |
||||
|
||||
Task FullDuplexCall(ServerCallContext context, IAsyncStreamReader<StreamingOutputCallRequest> requestStream, IServerStreamWriter<StreamingOutputCallResponse> responseStream); |
||||
|
||||
Task HalfDuplexCall(ServerCallContext context, IAsyncStreamReader<StreamingOutputCallRequest> requestStream, IServerStreamWriter<StreamingOutputCallResponse> responseStream); |
||||
} |
||||
|
||||
public static ServerServiceDefinition BindService(ITestService serviceImpl) |
||||
{ |
||||
return ServerServiceDefinition.CreateBuilder(ServiceName) |
||||
.AddMethod(EmptyCallMethod, serviceImpl.EmptyCall) |
||||
.AddMethod(UnaryCallMethod, serviceImpl.UnaryCall) |
||||
.AddMethod(StreamingOutputCallMethod, serviceImpl.StreamingOutputCall) |
||||
.AddMethod(StreamingInputCallMethod, serviceImpl.StreamingInputCall) |
||||
.AddMethod(FullDuplexCallMethod, serviceImpl.FullDuplexCall) |
||||
.AddMethod(HalfDuplexCallMethod, serviceImpl.HalfDuplexCall) |
||||
.Build(); |
||||
} |
||||
|
||||
public static ITestServiceClient NewStub(Channel channel) |
||||
{ |
||||
return new TestServiceClientStub(channel); |
||||
} |
||||
} |
||||
} |
@ -1,22 +0,0 @@ |
||||
gRPC Native Nuget package |
||||
========================= |
||||
|
||||
Prerequisites |
||||
------------- |
||||
|
||||
NuGet binary |
||||
|
||||
Building the package |
||||
-------------------- |
||||
|
||||
To build the native package, you need precompiled versions |
||||
of grpc_csharp_ext library artifacts for Windows, Linux and Mac. |
||||
In the normal gRPC release process, these are built by a Jenkins |
||||
job and they are copied to the expected location before building |
||||
the native nuget package is attempted. |
||||
|
||||
See tools/run_tests/build_artifacts.py for more details how |
||||
precompiled artifacts are built. |
||||
|
||||
When building the native NuGet package, ignore the "Assembly outside lib folder" |
||||
warnings (the DLLs are not assemblies, they are native libraries). |
@ -0,0 +1,54 @@ |
||||
#!/usr/bin/env node
|
||||
/* |
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
/** |
||||
* This file is required because package.json cannot reference a file that |
||||
* is not distributed with the package, and we use node-pre-gyp to distribute |
||||
* the protoc binary |
||||
*/ |
||||
|
||||
'use strict'; |
||||
|
||||
var path = require('path'); |
||||
var execFile = require('child_process').execFile; |
||||
|
||||
var protoc = path.resolve(__dirname, 'protoc'); |
||||
|
||||
execFile(protoc, process.argv.slice(2), function(error, stdout, stderr) { |
||||
if (error) { |
||||
throw error; |
||||
} |
||||
console.log(stdout); |
||||
console.log(stderr); |
||||
}); |
@ -0,0 +1,41 @@ |
||||
/* |
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
'use strict'; |
||||
|
||||
/** |
||||
* package.json requires this file to be present. In the future, this can |
||||
* export useful information about the included tools. |
||||
*/ |
||||
|
||||
module.exports = {}; |
@ -0,0 +1,38 @@ |
||||
{ |
||||
"name": "grpc-tools", |
||||
"version": "0.14.0-dev", |
||||
"author": "Google Inc.", |
||||
"description": "Tools for developing with gRPC on Node.js", |
||||
"homepage": "http://www.grpc.io/", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "https://github.com/grpc/grpc.git" |
||||
}, |
||||
"bugs": "https://github.com/grpc/grpc/issues", |
||||
"contributors": [ |
||||
{ |
||||
"name": "Michael Lumish", |
||||
"email": "mlumish@google.com" |
||||
} |
||||
], |
||||
"bin": { |
||||
"grpc-tools-protoc": "./bin/protoc.js" |
||||
}, |
||||
"scripts": { |
||||
"install": "./node_modules/.bin/node-pre-gyp install" |
||||
}, |
||||
"bundledDependencies": ["node-pre-gyp"], |
||||
"binary": { |
||||
"module_name": "grpc_tools", |
||||
"host": "https://storage.googleapis.com/", |
||||
"remote_path": "grpc-precompiled-binaries/node/{name}/v{version}", |
||||
"package_name": "{platform}-{arch}.tar.gz", |
||||
"module_path": "bin" |
||||
}, |
||||
"files": [ |
||||
"index.js", |
||||
"bin/protoc.js", |
||||
"LICENSE" |
||||
], |
||||
"main": "index.js" |
||||
} |
@ -0,0 +1,108 @@ |
||||
// Copyright 2016, Google Inc. |
||||
// All rights reserved. |
||||
// |
||||
// Redistribution and use in source and binary forms, with or without |
||||
// modification, are permitted provided that the following conditions are |
||||
// met: |
||||
// |
||||
// * Redistributions of source code must retain the above copyright |
||||
// notice, this list of conditions and the following disclaimer. |
||||
// * Redistributions in binary form must reproduce the above |
||||
// copyright notice, this list of conditions and the following disclaimer |
||||
// in the documentation and/or other materials provided with the |
||||
// distribution. |
||||
// * Neither the name of Google Inc. nor the names of its |
||||
// contributors may be used to endorse or promote products derived from |
||||
// this software without specific prior written permission. |
||||
// |
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
syntax = "proto3"; |
||||
|
||||
import "google/protobuf/timestamp.proto" |
||||
|
||||
package grpc.binary_log.v1alpha; |
||||
|
||||
enum Direction { |
||||
SERVER_SEND; |
||||
SERVER_RECV; |
||||
CLIENT_SEND; |
||||
CLIENT_RECV; |
||||
} |
||||
|
||||
message KeyValuePair { |
||||
string key; |
||||
string value; |
||||
} |
||||
|
||||
// Any sort of metadata that may be sent in either direction during a call |
||||
message Metadata { |
||||
// Cryptographically unique identifier, generated on the client and sent |
||||
// to the server. |
||||
uint64 rpc_id = 1; |
||||
// Timestamp of logging the metadata |
||||
google.protobuf.Timestamp timestamp = 2; |
||||
Direction direction = 3; |
||||
// The actual metadata that is being sent |
||||
repeated KeyValuePair metadata = 4; |
||||
|
||||
// Initial metadata sent by the client to initiate a request |
||||
message ClientInitialMetadata { |
||||
// The full method name that is being called |
||||
string method_name = 1; |
||||
// The call's deadline |
||||
google.protobuf.Timestamp deadline = 2; |
||||
// The address of the connected peer |
||||
string peer = 3; |
||||
} |
||||
|
||||
// Arbitrary key/value pairs specified by the user that are not sent over |
||||
// the network but are nonetheless useful to log |
||||
message UserData { |
||||
} |
||||
|
||||
// Initial metadata response sent by the server after accepting the request |
||||
message ServerInitialMetadata { |
||||
} |
||||
|
||||
// Status sent by the server when closing the call on the server side |
||||
message ServerStatus { |
||||
// The status code |
||||
uint32 code = 1; |
||||
// The status details |
||||
string details = 2; |
||||
} |
||||
|
||||
oneof kind { |
||||
ClientInitialMetadata client_initial_metadata = 5; |
||||
UserData user_data = 6; |
||||
ServerInitialMetadata server_initial_metadata = 7; |
||||
ServerStatus server_status = 8; |
||||
} |
||||
} |
||||
|
||||
// A message that is sent during a call |
||||
message Message { |
||||
// Cryptographically unique identifier, generated on the client and sent |
||||
// to the server. |
||||
uint64 rpc_id = 1; |
||||
// The sequence number of the message. Messages sent by the client and by the |
||||
// server should have independently incrementing sequence numbers. |
||||
uint32 sequence_number = 2; |
||||
Direction direction = 3; |
||||
// The length of the complete message. |
||||
uint32 length = 4; |
||||
// The contents of the message. May be a prefix instead of the complete |
||||
// message. |
||||
bytes data = 5; |
||||
} |
@ -0,0 +1,28 @@ |
||||
# Generated by the protocol buffer compiler. DO NOT EDIT! |
||||
# Source: src/proto/grpc/testing/duplicate/echo_duplicate.proto for package 'grpc.testing.duplicate' |
||||
|
||||
require 'grpc' |
||||
require 'src/proto/grpc/testing/duplicate/echo_duplicate' |
||||
|
||||
module Grpc |
||||
module Testing |
||||
module Duplicate |
||||
module EchoTestService |
||||
|
||||
# TODO: add proto service documentation here |
||||
class Service |
||||
|
||||
include GRPC::GenericService |
||||
|
||||
self.marshal_class_method = :encode |
||||
self.unmarshal_class_method = :decode |
||||
self.service_name = 'grpc.testing.duplicate.EchoTestService' |
||||
|
||||
rpc :Echo, Grpc::Testing::EchoRequest, Grpc::Testing::EchoResponse |
||||
end |
||||
|
||||
Stub = Service.rpc_stub_class |
||||
end |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,71 @@ |
||||
# Copyright 2016, Google Inc. |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are |
||||
# met: |
||||
# |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above |
||||
# copyright notice, this list of conditions and the following disclaimer |
||||
# in the documentation and/or other materials provided with the |
||||
# distribution. |
||||
# * Neither the name of Google Inc. nor the names of its |
||||
# contributors may be used to endorse or promote products derived from |
||||
# this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
require 'open3' |
||||
require 'tmpdir' |
||||
|
||||
def can_run_codegen_check |
||||
system('which grpc_ruby_plugin') && system('which protoc') |
||||
end |
||||
|
||||
describe 'Ping protobuf code generation' do |
||||
if !can_run_codegen_check |
||||
skip 'protoc || grpc_ruby_plugin missing, cannot verify ping code-gen' |
||||
else |
||||
it 'should have the same content as created by code generation' do |
||||
root_dir = File.join(File.dirname(__FILE__), '..', '..', '..', '..', '..') |
||||
|
||||
# Get the current content |
||||
service_path = File.join(root_dir, 'src', 'ruby', 'pb', 'grpc', |
||||
'testing', 'duplicate', |
||||
'echo_duplicate_services.rb') |
||||
want = nil |
||||
File.open(service_path) { |f| want = f.read } |
||||
|
||||
# Regenerate it |
||||
plugin, = Open3.capture2('which', 'grpc_ruby_plugin') |
||||
plugin = plugin.strip |
||||
got = nil |
||||
Dir.mktmpdir do |tmp_dir| |
||||
gen_out = File.join(tmp_dir, 'src', 'proto', 'grpc', 'testing', |
||||
'duplicate', 'echo_duplicate_services.rb') |
||||
pid = spawn( |
||||
'protoc', |
||||
'-I.', |
||||
'src/proto/grpc/testing/duplicate/echo_duplicate.proto', |
||||
"--grpc_out=#{tmp_dir}", |
||||
"--plugin=protoc-gen-grpc=#{plugin}", |
||||
chdir: root_dir) |
||||
Process.wait(pid) |
||||
File.open(gen_out) { |f| got = f.read } |
||||
end |
||||
expect(got).to eq(want) |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,40 @@ |
||||
%YAML 1.2 |
||||
--- | |
||||
{ |
||||
"name": "grpc-tools", |
||||
"version": "${settings.node_version}", |
||||
"author": "Google Inc.", |
||||
"description": "Tools for developing with gRPC on Node.js", |
||||
"homepage": "http://www.grpc.io/", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "https://github.com/grpc/grpc.git" |
||||
}, |
||||
"bugs": "https://github.com/grpc/grpc/issues", |
||||
"contributors": [ |
||||
{ |
||||
"name": "Michael Lumish", |
||||
"email": "mlumish@google.com" |
||||
} |
||||
], |
||||
"bin": { |
||||
"grpc-tools-protoc": "./bin/protoc.js" |
||||
}, |
||||
"scripts": { |
||||
"install": "./node_modules/.bin/node-pre-gyp install" |
||||
}, |
||||
"bundledDependencies": ["node-pre-gyp"], |
||||
"binary": { |
||||
"module_name": "grpc_tools", |
||||
"host": "https://storage.googleapis.com/", |
||||
"remote_path": "grpc-precompiled-binaries/node/{name}/v{version}", |
||||
"package_name": "{platform}-{arch}.tar.gz", |
||||
"module_path": "bin" |
||||
}, |
||||
"files": [ |
||||
"index.js", |
||||
"bin/protoc.js", |
||||
"LICENSE" |
||||
], |
||||
"main": "index.js" |
||||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,56 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2016, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include <grpc++/completion_queue.h> |
||||
#include <gtest/gtest.h> |
||||
|
||||
namespace grpc { |
||||
namespace { |
||||
|
||||
class CodegenTestFull : public ::testing::Test {}; |
||||
|
||||
TEST_F(CodegenTestFull, Init) { |
||||
grpc::CompletionQueue cq; |
||||
void* tag; |
||||
bool ok; |
||||
cq.AsyncNext(&tag, &ok, gpr_time_0(GPR_CLOCK_REALTIME)); |
||||
ASSERT_FALSE(ok); |
||||
} |
||||
|
||||
} // namespace
|
||||
} // namespace grpc
|
||||
|
||||
int main(int argc, char** argv) { |
||||
::testing::InitGoogleTest(&argc, argv); |
||||
return RUN_ALL_TESTS(); |
||||
} |
@ -0,0 +1,84 @@ |
||||
#!/usr/bin/env python2.7 |
||||
|
||||
# Copyright 2016, Google Inc. |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are |
||||
# met: |
||||
# |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above |
||||
# copyright notice, this list of conditions and the following disclaimer |
||||
# in the documentation and/or other materials provided with the |
||||
# distribution. |
||||
# * Neither the name of Google Inc. nor the names of its |
||||
# contributors may be used to endorse or promote products derived from |
||||
# this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
import os |
||||
import re |
||||
import sys |
||||
|
||||
from lxml import etree |
||||
|
||||
|
||||
def main(): |
||||
root_dir = os.path.abspath( |
||||
os.path.join(os.path.dirname(sys.argv[0]), '../..')) |
||||
os.chdir(root_dir) |
||||
|
||||
project_re = re.compile('Project\(.*\) = ".+", "(.+)", "(.+)"') |
||||
|
||||
known_projects = {} |
||||
with open(os.path.join('vsprojects', 'grpc.sln')) as f: |
||||
for line in f.readlines(): |
||||
m = project_re.match(line) |
||||
if not m: |
||||
continue |
||||
|
||||
vcxproj_path, project_guid = m.groups() |
||||
if os.name != 'nt': |
||||
vcxproj_path = vcxproj_path.replace('\\', '/') |
||||
|
||||
known_projects[project_guid] = vcxproj_path |
||||
|
||||
ok = True |
||||
for vcxproj_path in known_projects.values(): |
||||
with open(os.path.join(root_dir, 'vsprojects', vcxproj_path)) as f: |
||||
tree = etree.parse(f) |
||||
|
||||
namespaces = {'ns': 'http://schemas.microsoft.com/developer/msbuild/2003'} |
||||
referenced_projects = tree.getroot().xpath('/ns:Project/ns:ItemGroup' |
||||
'/ns:ProjectReference' |
||||
'/ns:Project', |
||||
namespaces=namespaces) |
||||
for referenced_project in referenced_projects: |
||||
# Project tag under ProjectReference is a GUID reference. |
||||
if referenced_project.text not in known_projects: |
||||
target_vcxproj = referenced_project.getparent().attrib['Include'] |
||||
guid = referenced_project.text |
||||
print ('In project "%s", dependency "%s" (with GUID "%s") is not in ' |
||||
'grpc.sln' % (vcxproj_path, target_vcxproj, guid)) |
||||
ok = False |
||||
|
||||
if not ok: |
||||
exit(1) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
main() |
||||
|
@ -0,0 +1,301 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" /> |
||||
<ItemGroup Label="ProjectConfigurations"> |
||||
<ProjectConfiguration Include="Debug|Win32"> |
||||
<Configuration>Debug</Configuration> |
||||
<Platform>Win32</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Debug|x64"> |
||||
<Configuration>Debug</Configuration> |
||||
<Platform>x64</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Release|Win32"> |
||||
<Configuration>Release</Configuration> |
||||
<Platform>Win32</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Release|x64"> |
||||
<Configuration>Release</Configuration> |
||||
<Platform>x64</Platform> |
||||
</ProjectConfiguration> |
||||
</ItemGroup> |
||||
<PropertyGroup Label="Globals"> |
||||
<ProjectGuid>{C06E8406-E0B2-E532-526C-171569E0F2B6}</ProjectGuid> |
||||
<IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> |
||||
<IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> |
||||
</PropertyGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||
<PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration"> |
||||
<PlatformToolset>v100</PlatformToolset> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration"> |
||||
<PlatformToolset>v110</PlatformToolset> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration"> |
||||
<PlatformToolset>v120</PlatformToolset> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration"> |
||||
<PlatformToolset>v140</PlatformToolset> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> |
||||
<ConfigurationType>Application</ConfigurationType> |
||||
<UseDebugLibraries>true</UseDebugLibraries> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> |
||||
<ConfigurationType>Application</ConfigurationType> |
||||
<UseDebugLibraries>false</UseDebugLibraries> |
||||
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||
<ImportGroup Label="ExtensionSettings"> |
||||
</ImportGroup> |
||||
<ImportGroup Label="PropertySheets"> |
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\cpptest.props" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\global.props" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\openssl.props" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\protobuf.props" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\winsock.props" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\zlib.props" /> |
||||
</ImportGroup> |
||||
<PropertyGroup Label="UserMacros" /> |
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'"> |
||||
<TargetName>codegen_test_full</TargetName> |
||||
<Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> |
||||
<Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib> |
||||
<Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> |
||||
<Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'"> |
||||
<TargetName>codegen_test_full</TargetName> |
||||
<Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> |
||||
<Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib> |
||||
<Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> |
||||
<Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl> |
||||
</PropertyGroup> |
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||
<ClCompile> |
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<Optimization>Disabled</Optimization> |
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||
<TreatWarningAsError>true</TreatWarningAsError> |
||||
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||
<ClCompile> |
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<Optimization>Disabled</Optimization> |
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||
<TreatWarningAsError>true</TreatWarningAsError> |
||||
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||
<ClCompile> |
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<Optimization>MaxSpeed</Optimization> |
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||
<TreatWarningAsError>true</TreatWarningAsError> |
||||
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||
<OptimizeReferences>true</OptimizeReferences> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||
<ClCompile> |
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<Optimization>MaxSpeed</Optimization> |
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||
<TreatWarningAsError>true</TreatWarningAsError> |
||||
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Console</SubSystem> |
||||
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||
<OptimizeReferences>true</OptimizeReferences> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
|
||||
<ItemGroup> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_stream.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_unary_call.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call_hook.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\channel_interface.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_context.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_unary_call.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue_tag.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\core_codegen_interface.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\grpc_library.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\method_handler_impl.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\proto_utils.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_method.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_service_method.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\security\auth_context.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\serialization_traits.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\server_context.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\server_interface.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\service_type.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\status.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\status_code_enum.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\string_ref.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\stub_options.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_cxx11.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_no_cxx11.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\connectivity_state.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\grpc_types.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\propagation_bits.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\status.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\alloc.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\atm.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\atm_gcc_atomic.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\atm_gcc_sync.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\atm_win32.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\log.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\port_platform.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\slice.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\slice_buffer.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync_generic.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync_posix.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync_win32.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\time.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\config.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\config_protobuf.h" /> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\control.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\control.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\control.grpc.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\control.grpc.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\messages.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\messages.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\messages.grpc.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\messages.grpc.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\payloads.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\payloads.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\payloads.grpc.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\payloads.grpc.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\perf_db.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\perf_db.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\perf_db.grpc.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\perf_db.grpc.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\services.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\services.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\services.grpc.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\services.grpc.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\stats.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\stats.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\stats.grpc.pb.cc"> |
||||
</ClCompile> |
||||
<ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\stats.grpc.pb.h"> |
||||
</ClInclude> |
||||
<ClCompile Include="$(SolutionDir)\..\test\cpp\codegen\codegen_test_full.cc"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\src\cpp\codegen\codegen_init.cc"> |
||||
</ClCompile> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj"> |
||||
<Project>{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}</Project> |
||||
</ProjectReference> |
||||
<ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj"> |
||||
<Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project> |
||||
</ProjectReference> |
||||
<ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj"> |
||||
<Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project> |
||||
</ProjectReference> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<None Include="packages.config" /> |
||||
</ItemGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||
<ImportGroup Label="ExtensionTargets"> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" /> |
||||
</ImportGroup> |
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> |
||||
<PropertyGroup> |
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> |
||||
</PropertyGroup> |
||||
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" /> |
||||
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" /> |
||||
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" /> |
||||
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" /> |
||||
<Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" /> |
||||
</Target> |
||||
</Project> |
||||
|
@ -0,0 +1,239 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
<ItemGroup> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\control.proto"> |
||||
<Filter>src\proto\grpc\testing</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\messages.proto"> |
||||
<Filter>src\proto\grpc\testing</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\payloads.proto"> |
||||
<Filter>src\proto\grpc\testing</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\perf_db.proto"> |
||||
<Filter>src\proto\grpc\testing</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\services.proto"> |
||||
<Filter>src\proto\grpc\testing</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\stats.proto"> |
||||
<Filter>src\proto\grpc\testing</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\test\cpp\codegen\codegen_test_minimal.cc"> |
||||
<Filter>test\cpp\codegen</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\src\cpp\codegen\codegen_init.cc"> |
||||
<Filter>src\cpp\codegen</Filter> |
||||
</ClCompile> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_stream.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_unary_call.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\call_hook.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\channel_interface.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_context.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\client_unary_call.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\completion_queue_tag.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\core_codegen_interface.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\grpc_library.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\method_handler_impl.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\proto_utils.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_method.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\rpc_service_method.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\security\auth_context.h"> |
||||
<Filter>include\grpc++\impl\codegen\security</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\serialization_traits.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\server_context.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\server_interface.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\service_type.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\status.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\status_code_enum.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\string_ref.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\stub_options.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_cxx11.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_no_cxx11.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\sync_stream.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\time.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\byte_buffer.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\compression_types.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\connectivity_state.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\grpc_types.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\propagation_bits.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\status.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\alloc.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\atm.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\atm_gcc_atomic.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\atm_gcc_sync.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\atm_win32.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\log.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\port_platform.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\slice.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\slice_buffer.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync_generic.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync_posix.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\sync_win32.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\time.h"> |
||||
<Filter>include\grpc\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\config.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\config_protobuf.h"> |
||||
<Filter>include\grpc++\impl\codegen</Filter> |
||||
</ClInclude> |
||||
</ItemGroup> |
||||
|
||||
<ItemGroup> |
||||
<Filter Include="include"> |
||||
<UniqueIdentifier>{d7e3a4ab-12fd-702a-0f38-f390a3a498ee}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="include\grpc"> |
||||
<UniqueIdentifier>{af7d5949-f89a-c3d7-b61c-4f6eb53add9d}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="include\grpc++"> |
||||
<UniqueIdentifier>{871b80f5-04bd-85d1-7c3c-dad152f2d17b}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="include\grpc++\impl"> |
||||
<UniqueIdentifier>{cb2776d8-357e-4807-8804-b07a35caf468}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="include\grpc++\impl\codegen"> |
||||
<UniqueIdentifier>{034ecb5b-5ea9-82eb-c7de-3318074530d2}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="include\grpc++\impl\codegen\security"> |
||||
<UniqueIdentifier>{1eefd7f9-c93b-eb01-9ec6-e654a34a562e}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="include\grpc\impl"> |
||||
<UniqueIdentifier>{2ba3ef0f-e274-7ddd-20df-902d8d75f690}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="include\grpc\impl\codegen"> |
||||
<UniqueIdentifier>{e161f3e2-2652-ca2f-adfd-0c58107a026f}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="src"> |
||||
<UniqueIdentifier>{0d44e24d-bdd6-798d-096d-2201e0a9fd53}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="src\cpp"> |
||||
<UniqueIdentifier>{13a5f072-c1d8-5794-d743-7f8cc295c8ef}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="src\cpp\codegen"> |
||||
<UniqueIdentifier>{afa9b626-4df3-6192-b0b0-82986d31e915}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="src\proto"> |
||||
<UniqueIdentifier>{85c80929-0814-efc5-9457-f80a00b4bcae}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="src\proto\grpc"> |
||||
<UniqueIdentifier>{c7a2927d-c3a6-bf01-327d-d4d3e49682ba}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="src\proto\grpc\testing"> |
||||
<UniqueIdentifier>{9c363e7c-a9fc-0915-250a-5ba46bd8caf7}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="test"> |
||||
<UniqueIdentifier>{ea047246-affd-99d8-e39b-268b3ebba747}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="test\cpp"> |
||||
<UniqueIdentifier>{e09ae1ab-897c-30d8-bdd8-86cdbb7e3b57}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="test\cpp\codegen"> |
||||
<UniqueIdentifier>{9ee5c585-b102-0eb7-69e4-9f084beeac31}</UniqueIdentifier> |
||||
</Filter> |
||||
</ItemGroup> |
||||
</Project> |
||||
|
Loading…
Reference in new issue