aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Makefile45
-rw-r--r--README.md2
-rw-r--r--build.json17
-rw-r--r--include/grpc++/credentials.h20
-rw-r--r--include/grpc/grpc_security.h17
-rw-r--r--include/grpc/support/atm.h4
-rw-r--r--include/grpc/support/sync.h2
-rw-r--r--include/grpc/support/sync_posix.h1
-rw-r--r--include/grpc/support/sync_win32.h1
-rw-r--r--include/grpc/support/time.h2
-rw-r--r--src/compiler/cpp_generator.cc169
-rw-r--r--src/core/httpcli/httpcli.c1
-rw-r--r--src/core/json/json.c4
-rw-r--r--src/core/json/json_reader.c2
-rw-r--r--src/core/json/json_writer.c9
-rw-r--r--src/core/security/auth.c6
-rw-r--r--src/core/security/credentials.c4
-rw-r--r--src/core/security/credentials.h7
-rw-r--r--src/core/security/credentials_posix.c60
-rw-r--r--src/core/security/credentials_win32.c60
-rw-r--r--src/core/security/google_default_credentials.c185
-rw-r--r--src/core/security/security_context.c6
-rw-r--r--src/core/support/log_win32.c2
-rw-r--r--src/core/support/string_posix.c2
-rw-r--r--src/core/support/sync.c4
-rw-r--r--src/core/support/time.c14
-rw-r--r--src/cpp/client/credentials.cc18
-rw-r--r--src/cpp/server/thread_pool.cc6
-rw-r--r--src/node/examples/pubsub/empty.proto44
-rw-r--r--src/node/examples/pubsub/label.proto79
-rw-r--r--src/node/examples/pubsub/pubsub.proto734
-rw-r--r--src/node/examples/pubsub/pubsub_demo.js277
-rw-r--r--src/node/package.json3
-rw-r--r--src/objective-c/GRPCClient/GRPCClient.podspec14
-rw-r--r--src/objective-c/examples/Sample/Podfile1
-rw-r--r--src/objective-c/examples/Sample/Podfile.lock6
l---------src/objective-c/examples/Sample/Pods/Headers/Public/GRPCClient/GRPCCall.h1
l---------src/objective-c/examples/Sample/Pods/Headers/Public/GRPCClient/GRPCMethodName.h1
-rw-r--r--src/objective-c/examples/Sample/Pods/Local Podspecs/GRPCClient.podspec14
-rw-r--r--src/objective-c/examples/Sample/Pods/Manifest.lock6
-rw-r--r--src/objective-c/examples/Sample/Pods/Pods.xcodeproj/project.pbxproj4248
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-Private.xcconfig5
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-dummy.m5
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-prefix.pch5
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient.xcconfig0
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-RxLibrary/Pods-RxLibrary-Private.xcconfig2
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-Private.xcconfig5
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-dummy.m5
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-prefix.pch5
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient.xcconfig0
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-Private.xcconfig2
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-environment.h6
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.debug.xcconfig6
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.release.xcconfig6
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-Private.xcconfig5
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-dummy.m5
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-prefix.pch5
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient.xcconfig0
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-Private.xcconfig2
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests-environment.h6
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests.debug.xcconfig6
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests.release.xcconfig6
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods-environment.h6
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods.debug.xcconfig6
-rw-r--r--src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods.release.xcconfig6
-rw-r--r--src/objective-c/examples/Sample/Sample/ViewController.m18
-rw-r--r--src/python/src/grpc/framework/assembly/implementations.py8
-rw-r--r--src/python/src/grpc/framework/assembly/interfaces.py23
-rwxr-xr-xsrc/ruby/bin/interop/interop_client.rb2
-rw-r--r--templates/Makefile.template2
-rw-r--r--templates/vsprojects/vs2013/Grpc.mak.template30
-rw-r--r--test/core/json/json_test.c2
-rw-r--r--test/core/security/print_google_default_creds_token.c107
-rw-r--r--test/core/support/time_test.c8
-rw-r--r--test/cpp/end2end/async_end2end_test.cc2
-rw-r--r--test/cpp/end2end/end2end_test.cc25
-rw-r--r--test/cpp/util/create_test_channel.cc2
-rwxr-xr-xtools/distrib/check_copyright.py14
-rw-r--r--tools/dockerfile/grpc_base/Dockerfile29
-rw-r--r--tools/dockerfile/grpc_clang/Dockerfile29
-rw-r--r--tools/dockerfile/grpc_cxx/Dockerfile29
-rw-r--r--tools/dockerfile/grpc_go/Dockerfile32
-rw-r--r--tools/dockerfile/grpc_java/Dockerfile29
-rw-r--r--tools/dockerfile/grpc_java_base/Dockerfile29
-rw-r--r--tools/dockerfile/grpc_node/Dockerfile31
-rw-r--r--tools/dockerfile/grpc_node_base/Dockerfile29
-rw-r--r--tools/dockerfile/grpc_php/Dockerfile29
-rw-r--r--tools/dockerfile/grpc_php_base/Dockerfile29
-rw-r--r--tools/dockerfile/grpc_python/Dockerfile29
-rw-r--r--tools/dockerfile/grpc_python_base/Dockerfile31
-rw-r--r--tools/dockerfile/grpc_ruby/Dockerfile29
-rw-r--r--tools/dockerfile/grpc_ruby_base/Dockerfile29
-rwxr-xr-xtools/gce_setup/grpc_docker.sh30
-rwxr-xr-xtools/gce_setup/shared_startup_funcs.sh7
-rw-r--r--vsprojects/vs2013/Grpc.mak36
-rw-r--r--vsprojects/vs2013/grpc.vcxproj6
-rw-r--r--vsprojects/vs2013/grpc.vcxproj.filters9
-rw-r--r--vsprojects/vs2013/grpc_shared.vcxproj6
-rw-r--r--vsprojects/vs2013/grpc_shared.vcxproj.filters9
99 files changed, 5496 insertions, 1466 deletions
diff --git a/Makefile b/Makefile
index b018febea1..278824a59a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# GRPC global makefile
# This currently builds C and C++ code.
-# Copyright 2014, Google Inc.
+# Copyright 2015, Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -481,6 +481,7 @@ grpc_create_jwt: $(BINDIR)/$(CONFIG)/grpc_create_jwt
grpc_credentials_test: $(BINDIR)/$(CONFIG)/grpc_credentials_test
grpc_fetch_oauth2: $(BINDIR)/$(CONFIG)/grpc_fetch_oauth2
grpc_json_token_test: $(BINDIR)/$(CONFIG)/grpc_json_token_test
+grpc_print_google_default_creds_token: $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token
grpc_stream_op_test: $(BINDIR)/$(CONFIG)/grpc_stream_op_test
hpack_parser_test: $(BINDIR)/$(CONFIG)/hpack_parser_test
hpack_table_test: $(BINDIR)/$(CONFIG)/hpack_table_test
@@ -1763,7 +1764,7 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/thread_pool_test || ( echo test thread_pool_test failed ; exit 1 )
-tools: privatelibs $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/grpc_create_jwt $(BINDIR)/$(CONFIG)/grpc_fetch_oauth2
+tools: privatelibs $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/grpc_create_jwt $(BINDIR)/$(CONFIG)/grpc_fetch_oauth2 $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token
buildbenchmarks: privatelibs $(BINDIR)/$(CONFIG)/grpc_completion_queue_benchmark $(BINDIR)/$(CONFIG)/low_level_ping_pong_benchmark
@@ -2288,7 +2289,10 @@ LIBGRPC_SRC = \
src/core/security/auth.c \
src/core/security/base64.c \
src/core/security/credentials.c \
+ src/core/security/credentials_posix.c \
+ src/core/security/credentials_win32.c \
src/core/security/factories.c \
+ src/core/security/google_default_credentials.c \
src/core/security/json_token.c \
src/core/security/secure_endpoint.c \
src/core/security/secure_transport_setup.c \
@@ -2429,7 +2433,10 @@ src/core/httpcli/parser.c: $(OPENSSL_DEP)
src/core/security/auth.c: $(OPENSSL_DEP)
src/core/security/base64.c: $(OPENSSL_DEP)
src/core/security/credentials.c: $(OPENSSL_DEP)
+src/core/security/credentials_posix.c: $(OPENSSL_DEP)
+src/core/security/credentials_win32.c: $(OPENSSL_DEP)
src/core/security/factories.c: $(OPENSSL_DEP)
+src/core/security/google_default_credentials.c: $(OPENSSL_DEP)
src/core/security/json_token.c: $(OPENSSL_DEP)
src/core/security/secure_endpoint.c: $(OPENSSL_DEP)
src/core/security/secure_transport_setup.c: $(OPENSSL_DEP)
@@ -2587,7 +2594,10 @@ $(OBJDIR)/$(CONFIG)/src/core/httpcli/parser.o:
$(OBJDIR)/$(CONFIG)/src/core/security/auth.o:
$(OBJDIR)/$(CONFIG)/src/core/security/base64.o:
$(OBJDIR)/$(CONFIG)/src/core/security/credentials.o:
+$(OBJDIR)/$(CONFIG)/src/core/security/credentials_posix.o:
+$(OBJDIR)/$(CONFIG)/src/core/security/credentials_win32.o:
$(OBJDIR)/$(CONFIG)/src/core/security/factories.o:
+$(OBJDIR)/$(CONFIG)/src/core/security/google_default_credentials.o:
$(OBJDIR)/$(CONFIG)/src/core/security/json_token.o:
$(OBJDIR)/$(CONFIG)/src/core/security/secure_endpoint.o:
$(OBJDIR)/$(CONFIG)/src/core/security/secure_transport_setup.o:
@@ -6551,6 +6561,37 @@ endif
endif
+GRPC_PRINT_GOOGLE_DEFAULT_CREDS_TOKEN_SRC = \
+ test/core/security/print_google_default_creds_token.c \
+
+GRPC_PRINT_GOOGLE_DEFAULT_CREDS_TOKEN_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_PRINT_GOOGLE_DEFAULT_CREDS_TOKEN_SRC))))
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL with ALPN.
+
+$(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token: openssl_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token: $(GRPC_PRINT_GOOGLE_DEFAULT_CREDS_TOKEN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(GRPC_PRINT_GOOGLE_DEFAULT_CREDS_TOKEN_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/security/print_google_default_creds_token.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_grpc_print_google_default_creds_token: $(GRPC_PRINT_GOOGLE_DEFAULT_CREDS_TOKEN_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(GRPC_PRINT_GOOGLE_DEFAULT_CREDS_TOKEN_OBJS:.o=.dep)
+endif
+endif
+
+
GRPC_STREAM_OP_TEST_SRC = \
test/core/transport/stream_op_test.c \
diff --git a/README.md b/README.md
index 1985176753..fc35934f2d 100644
--- a/README.md
+++ b/README.md
@@ -92,7 +92,7 @@ messages are delivered in the order they were sent.
#Protocol
-The gRPC protocol specifies the abstract requirements for communication between
+The [gRPC protocol](https://github.com/grpc/grpc-common/blob/master/PROTOCOL-HTTP2.md) specifies the abstract requirements for communication between
clients and servers. A concrete embedding over HTTP/2 completes the picture by
fleshing out the details of each of the required operations.
diff --git a/build.json b/build.json
index f6ef33b25f..3e9d2a7584 100644
--- a/build.json
+++ b/build.json
@@ -320,7 +320,10 @@
"src/core/security/auth.c",
"src/core/security/base64.c",
"src/core/security/credentials.c",
+ "src/core/security/credentials_posix.c",
+ "src/core/security/credentials_win32.c",
"src/core/security/factories.c",
+ "src/core/security/google_default_credentials.c",
"src/core/security/json_token.c",
"src/core/security/secure_endpoint.c",
"src/core/security/secure_transport_setup.c",
@@ -1187,6 +1190,20 @@
]
},
{
+ "name": "grpc_print_google_default_creds_token",
+ "build": "tool",
+ "language": "c",
+ "src": [
+ "test/core/security/print_google_default_creds_token.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
"name": "grpc_stream_op_test",
"build": "test",
"language": "c",
diff --git a/include/grpc++/credentials.h b/include/grpc++/credentials.h
index ac6f394847..5cbcca3aa5 100644
--- a/include/grpc++/credentials.h
+++ b/include/grpc++/credentials.h
@@ -86,17 +86,23 @@ struct SslCredentialsOptions {
// fail on it.
class CredentialsFactory {
public:
- // Builds credentials with reasonable defaults.
- static std::unique_ptr<Credentials> DefaultCredentials();
+ // Builds google credentials with reasonable defaults.
+ // WARNING: Do NOT use this credentials to connect to a non-google service as
+ // this could result in an oauth2 token leak.
+ static std::unique_ptr<Credentials> GoogleDefaultCredentials();
// Builds SSL Credentials given SSL specific options
static std::unique_ptr<Credentials> SslCredentials(
const SslCredentialsOptions& options);
// Builds credentials for use when running in GCE
+ // WARNING: Do NOT use this credentials to connect to a non-google service as
+ // this could result in an oauth2 token leak.
static std::unique_ptr<Credentials> ComputeEngineCredentials();
// Builds service account credentials.
+ // WARNING: Do NOT use this credentials to connect to a non-google service as
+ // this could result in an oauth2 token leak.
// json_key is the JSON key string containing the client's private key.
// scope is a space-delimited list of the requested permissions.
// token_lifetime is the lifetime of each token acquired through this service
@@ -106,13 +112,21 @@ class CredentialsFactory {
const grpc::string& json_key, const grpc::string& scope,
std::chrono::seconds token_lifetime);
+ // Builds JWT credentials.
+ // json_key is the JSON key string containing the client's private key.
+ // token_lifetime is the lifetime of each Json Web Token (JWT) created with
+ // this credentials. It should not exceed grpc_max_auth_token_lifetime or
+ // will be cropped to this value.
+ static std::unique_ptr<Credentials> JWTCredentials(
+ const grpc::string& json_key, std::chrono::seconds token_lifetime);
+
// Builds IAM credentials.
static std::unique_ptr<Credentials> IAMCredentials(
const grpc::string& authorization_token,
const grpc::string& authority_selector);
// Combines two credentials objects into a composite credentials
- static std::unique_ptr<Credentials> ComposeCredentials(
+ static std::unique_ptr<Credentials> CompositeCredentials(
const std::unique_ptr<Credentials>& creds1,
const std::unique_ptr<Credentials>& creds2);
};
diff --git a/include/grpc/grpc_security.h b/include/grpc/grpc_security.h
index 0eae444a9b..4ba4ffc118 100644
--- a/include/grpc/grpc_security.h
+++ b/include/grpc/grpc_security.h
@@ -51,8 +51,10 @@ typedef struct grpc_credentials grpc_credentials;
The creator of the credentials object is responsible for its release. */
void grpc_credentials_release(grpc_credentials *creds);
-/* Creates default credentials. */
-grpc_credentials *grpc_default_credentials_create(void);
+/* Creates default credentials to connect to a google gRPC service.
+ WARNING: Do NOT use this credentials to connect to a non-google service as
+ this could result in an oauth2 token leak. */
+grpc_credentials *grpc_google_default_credentials_create(void);
/* Environment variable that points to the default SSL roots file. This file
must be a PEM encoded file with all the roots such as the one that can be
@@ -88,13 +90,17 @@ grpc_credentials *grpc_ssl_credentials_create(
grpc_credentials *grpc_composite_credentials_create(grpc_credentials *creds1,
grpc_credentials *creds2);
-/* Creates a compute engine credentials object. */
+/* Creates a compute engine credentials object.
+ WARNING: Do NOT use this credentials to connect to a non-google service as
+ this could result in an oauth2 token leak. */
grpc_credentials *grpc_compute_engine_credentials_create(void);
extern const gpr_timespec grpc_max_auth_token_lifetime;
/* Creates a service account credentials object. May return NULL if the input is
invalid.
+ WARNING: Do NOT use this credentials to connect to a non-google service as
+ this could result in an oauth2 token leak.
- json_key is the JSON key string containing the client's private key.
- scope is a space-delimited list of the requested permissions.
- token_lifetime is the lifetime of each token acquired through this service
@@ -129,11 +135,6 @@ grpc_credentials *grpc_iam_credentials_create(const char *authorization_token,
channel, it will just be ignored. */
#define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG "grpc.ssl_target_name_override"
-/* Creates a default secure channel using the default credentials object using
- the environment. */
-grpc_channel *grpc_default_secure_channel_create(const char *target,
- const grpc_channel_args *args);
-
/* Creates a secure channel using the passed-in credentials. */
grpc_channel *grpc_secure_channel_create(grpc_credentials *creds,
const char *target,
diff --git a/include/grpc/support/atm.h b/include/grpc/support/atm.h
index 0cac9bf586..f1e30d31e8 100644
--- a/include/grpc/support/atm.h
+++ b/include/grpc/support/atm.h
@@ -51,12 +51,12 @@
The routines may be implemented as macros.
- // Atomic operations acton an intergral_type gpr_atm that is guaranteed to
+ // Atomic operations act on an intergral_type gpr_atm that is guaranteed to
// be the same size as a pointer.
typedef gpr_intptr gpr_atm;
// A memory barrier, providing both acquire and release semantics, but not
- // otherwise acting no memory.
+ // otherwise acting on memory.
void gpr_atm_full_barrier(void);
// Atomically return *p, with acquire semantics.
diff --git a/include/grpc/support/sync.h b/include/grpc/support/sync.h
index 4437375db7..bc99317f3c 100644
--- a/include/grpc/support/sync.h
+++ b/include/grpc/support/sync.h
@@ -206,7 +206,7 @@ void *gpr_event_cancellable_wait(gpr_event *ev, gpr_timespec abs_deadline,
/* --- Reference counting ---
- These calls act on the type gpr_refcount. It requires no desctruction. */
+ These calls act on the type gpr_refcount. It requires no destruction. */
/* Initialize *r to value n. */
void gpr_ref_init(gpr_refcount *r, int n);
diff --git a/include/grpc/support/sync_posix.h b/include/grpc/support/sync_posix.h
index 413226a9e8..8ba2c5b892 100644
--- a/include/grpc/support/sync_posix.h
+++ b/include/grpc/support/sync_posix.h
@@ -36,7 +36,6 @@
#include <grpc/support/sync_generic.h>
-/* Posix variant of gpr_sync_platform.h */
#include <pthread.h>
typedef pthread_mutex_t gpr_mu;
diff --git a/include/grpc/support/sync_win32.h b/include/grpc/support/sync_win32.h
index 5a48b52a2d..13823b8ee3 100644
--- a/include/grpc/support/sync_win32.h
+++ b/include/grpc/support/sync_win32.h
@@ -36,7 +36,6 @@
#include <grpc/support/sync_generic.h>
-/* Win32 variant of gpr_sync_platform.h */
#include <windows.h>
typedef struct {
diff --git a/include/grpc/support/time.h b/include/grpc/support/time.h
index ebc18c91e9..150b7ac8c5 100644
--- a/include/grpc/support/time.h
+++ b/include/grpc/support/time.h
@@ -76,7 +76,7 @@ gpr_timespec gpr_time_min(gpr_timespec a, gpr_timespec b);
gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b);
gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b);
-/* Return a timespec representing a given number of microseconds. LONG_MIN is
+/* Return a timespec representing a given number of time units. LONG_MIN is
interpreted as gpr_inf_past, and LONG_MAX as gpr_inf_future. */
gpr_timespec gpr_time_from_micros(long x);
gpr_timespec gpr_time_from_nanos(long x);
diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc
index f10824e6b0..891032343b 100644
--- a/src/compiler/cpp_generator.cc
+++ b/src/compiler/cpp_generator.cc
@@ -183,34 +183,40 @@ void PrintHeaderClientMethod(google::protobuf::io::Printer *printer,
printer->Print(*vars,
"::grpc::Status $Method$(::grpc::ClientContext* context, "
"const $Request$& request, $Response$* response);\n");
- printer->Print(*vars,
- "::grpc::ClientAsyncResponseReader< $Response$>* "
- "$Method$(::grpc::ClientContext* context, "
- "const $Request$& request, "
- "::grpc::CompletionQueue* cq, void* tag);\n");
+ printer->Print(
+ *vars,
+ "std::unique_ptr< ::grpc::ClientAsyncResponseReader< $Response$>> "
+ "$Method$(::grpc::ClientContext* context, "
+ "const $Request$& request, "
+ "::grpc::CompletionQueue* cq, void* tag);\n");
} else if (ClientOnlyStreaming(method)) {
- printer->Print(*vars,
- "::grpc::ClientWriter< $Request$>* $Method$("
- "::grpc::ClientContext* context, $Response$* response);\n");
- printer->Print(*vars,
- "::grpc::ClientAsyncWriter< $Request$>* $Method$("
- "::grpc::ClientContext* context, $Response$* response, "
- "::grpc::CompletionQueue* cq, void* tag);\n");
+ printer->Print(
+ *vars,
+ "std::unique_ptr< ::grpc::ClientWriter< $Request$>> $Method$("
+ "::grpc::ClientContext* context, $Response$* response);\n");
+ printer->Print(
+ *vars,
+ "std::unique_ptr< ::grpc::ClientAsyncWriter< $Request$>> $Method$("
+ "::grpc::ClientContext* context, $Response$* response, "
+ "::grpc::CompletionQueue* cq, void* tag);\n");
} else if (ServerOnlyStreaming(method)) {
printer->Print(
*vars,
- "::grpc::ClientReader< $Response$>* $Method$("
+ "std::unique_ptr< ::grpc::ClientReader< $Response$>> $Method$("
"::grpc::ClientContext* context, const $Request$& request);\n");
- printer->Print(*vars,
- "::grpc::ClientAsyncReader< $Response$>* $Method$("
- "::grpc::ClientContext* context, const $Request$& request, "
- "::grpc::CompletionQueue* cq, void* tag);\n");
+ printer->Print(
+ *vars,
+ "std::unique_ptr< ::grpc::ClientAsyncReader< $Response$>> $Method$("
+ "::grpc::ClientContext* context, const $Request$& request, "
+ "::grpc::CompletionQueue* cq, void* tag);\n");
} else if (BidiStreaming(method)) {
+ printer->Print(
+ *vars,
+ "std::unique_ptr< ::grpc::ClientReaderWriter< $Request$, $Response$>> "
+ "$Method$(::grpc::ClientContext* context);\n");
printer->Print(*vars,
- "::grpc::ClientReaderWriter< $Request$, $Response$>* "
- "$Method$(::grpc::ClientContext* context);\n");
- printer->Print(*vars,
- "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>* "
+ "std::unique_ptr< ::grpc::ClientAsyncReaderWriter< "
+ "$Request$, $Response$>> "
"$Method$(::grpc::ClientContext* context, "
"::grpc::CompletionQueue* cq, void* tag);\n");
}
@@ -309,7 +315,8 @@ void PrintHeaderService(google::protobuf::io::Printer *printer,
printer->Outdent();
printer->Print("};\n");
printer->Print(
- "static Stub* NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& "
+ "static std::unique_ptr<Stub> NewStub(const std::shared_ptr< "
+ "::grpc::ChannelInterface>& "
"channel);\n");
printer->Print("\n");
@@ -380,91 +387,101 @@ void PrintSourceClientMethod(google::protobuf::io::Printer *printer,
"::grpc::RpcMethod($Service$_method_names[$Idx$]), "
"context, request, response);\n"
"}\n\n");
+ printer->Print(
+ *vars,
+ "std::unique_ptr< ::grpc::ClientAsyncResponseReader< $Response$>> "
+ "$Service$::Stub::$Method$(::grpc::ClientContext* context, "
+ "const $Request$& request, "
+ "::grpc::CompletionQueue* cq, void* tag) {\n");
printer->Print(*vars,
- "::grpc::ClientAsyncResponseReader< $Response$>* "
- "$Service$::Stub::$Method$(::grpc::ClientContext* context, "
- "const $Request$& request, "
- "::grpc::CompletionQueue* cq, void* tag) {\n");
- printer->Print(*vars,
- " return new ::grpc::ClientAsyncResponseReader< $Response$>("
+ " return std::unique_ptr< "
+ "::grpc::ClientAsyncResponseReader< $Response$>>(new "
+ "::grpc::ClientAsyncResponseReader< $Response$>("
"channel(), cq, "
"::grpc::RpcMethod($Service$_method_names[$Idx$]), "
- "context, request, tag);\n"
+ "context, request, tag));\n"
"}\n\n");
} else if (ClientOnlyStreaming(method)) {
- printer->Print(
- *vars,
- "::grpc::ClientWriter< $Request$>* $Service$::Stub::$Method$("
- "::grpc::ClientContext* context, $Response$* response) {\n");
printer->Print(*vars,
- " return new ::grpc::ClientWriter< $Request$>("
+ "std::unique_ptr< ::grpc::ClientWriter< $Request$>> "
+ "$Service$::Stub::$Method$("
+ "::grpc::ClientContext* context, $Response$* response) {\n");
+ printer->Print(*vars,
+ " return std::unique_ptr< ::grpc::ClientWriter< "
+ "$Request$>>(new ::grpc::ClientWriter< $Request$>("
"channel(),"
"::grpc::RpcMethod($Service$_method_names[$Idx$], "
"::grpc::RpcMethod::RpcType::CLIENT_STREAMING), "
- "context, response);\n"
+ "context, response));\n"
"}\n\n");
- printer->Print(
- *vars,
- "::grpc::ClientAsyncWriter< $Request$>* $Service$::Stub::$Method$("
- "::grpc::ClientContext* context, $Response$* response, "
- "::grpc::CompletionQueue* cq, void* tag) {\n");
printer->Print(*vars,
- " return new ::grpc::ClientAsyncWriter< $Request$>("
+ "std::unique_ptr< ::grpc::ClientAsyncWriter< $Request$>> "
+ "$Service$::Stub::$Method$("
+ "::grpc::ClientContext* context, $Response$* response, "
+ "::grpc::CompletionQueue* cq, void* tag) {\n");
+ printer->Print(*vars,
+ " return std::unique_ptr< ::grpc::ClientAsyncWriter< "
+ "$Request$>>(new ::grpc::ClientAsyncWriter< $Request$>("
"channel(), cq, "
"::grpc::RpcMethod($Service$_method_names[$Idx$], "
"::grpc::RpcMethod::RpcType::CLIENT_STREAMING), "
- "context, response, tag);\n"
+ "context, response, tag));\n"
"}\n\n");
} else if (ServerOnlyStreaming(method)) {
printer->Print(
*vars,
- "::grpc::ClientReader< $Response$>* $Service$::Stub::$Method$("
+ "std::unique_ptr< ::grpc::ClientReader< $Response$>> "
+ "$Service$::Stub::$Method$("
"::grpc::ClientContext* context, const $Request$& request) {\n");
printer->Print(*vars,
- " return new ::grpc::ClientReader< $Response$>("
+ " return std::unique_ptr< ::grpc::ClientReader< "
+ "$Response$>>(new ::grpc::ClientReader< $Response$>("
"channel(),"
"::grpc::RpcMethod($Service$_method_names[$Idx$], "
"::grpc::RpcMethod::RpcType::SERVER_STREAMING), "
- "context, request);\n"
+ "context, request));\n"
"}\n\n");
- printer->Print(
- *vars,
- "::grpc::ClientAsyncReader< $Response$>* $Service$::Stub::$Method$("
- "::grpc::ClientContext* context, const $Request$& request, "
- "::grpc::CompletionQueue* cq, void* tag) {\n");
printer->Print(*vars,
- " return new ::grpc::ClientAsyncReader< $Response$>("
+ "std::unique_ptr< ::grpc::ClientAsyncReader< $Response$>> "
+ "$Service$::Stub::$Method$("
+ "::grpc::ClientContext* context, const $Request$& request, "
+ "::grpc::CompletionQueue* cq, void* tag) {\n");
+ printer->Print(*vars,
+ " return std::unique_ptr< ::grpc::ClientAsyncReader< "
+ "$Response$>>(new ::grpc::ClientAsyncReader< $Response$>("
"channel(), cq, "
"::grpc::RpcMethod($Service$_method_names[$Idx$], "
"::grpc::RpcMethod::RpcType::SERVER_STREAMING), "
- "context, request, tag);\n"
+ "context, request, tag));\n"
"}\n\n");
} else if (BidiStreaming(method)) {
printer->Print(
*vars,
- "::grpc::ClientReaderWriter< $Request$, $Response$>* "
+ "std::unique_ptr< ::grpc::ClientReaderWriter< $Request$, $Response$>> "
"$Service$::Stub::$Method$(::grpc::ClientContext* context) {\n");
- printer->Print(
- *vars,
- " return new ::grpc::ClientReaderWriter< $Request$, $Response$>("
- "channel(),"
- "::grpc::RpcMethod($Service$_method_names[$Idx$], "
- "::grpc::RpcMethod::RpcType::BIDI_STREAMING), "
- "context);\n"
- "}\n\n");
- printer->Print(
- *vars,
- "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>* "
- "$Service$::Stub::$Method$(::grpc::ClientContext* context, "
- "::grpc::CompletionQueue* cq, void* tag) {\n");
- printer->Print(
- *vars,
- " return new ::grpc::ClientAsyncReaderWriter< $Request$, $Response$>("
- "channel(), cq, "
- "::grpc::RpcMethod($Service$_method_names[$Idx$], "
- "::grpc::RpcMethod::RpcType::BIDI_STREAMING), "
- "context, tag);\n"
- "}\n\n");
+ printer->Print(*vars,
+ " return std::unique_ptr< ::grpc::ClientReaderWriter< "
+ "$Request$, $Response$>>(new ::grpc::ClientReaderWriter< "
+ "$Request$, $Response$>("
+ "channel(),"
+ "::grpc::RpcMethod($Service$_method_names[$Idx$], "
+ "::grpc::RpcMethod::RpcType::BIDI_STREAMING), "
+ "context));\n"
+ "}\n\n");
+ printer->Print(*vars,
+ "std::unique_ptr< ::grpc::ClientAsyncReaderWriter< "
+ "$Request$, $Response$>> "
+ "$Service$::Stub::$Method$(::grpc::ClientContext* context, "
+ "::grpc::CompletionQueue* cq, void* tag) {\n");
+ printer->Print(*vars,
+ " return std::unique_ptr< ::grpc::ClientAsyncReaderWriter< "
+ "$Request$, $Response$>>(new "
+ "::grpc::ClientAsyncReaderWriter< $Request$, $Response$>("
+ "channel(), cq, "
+ "::grpc::RpcMethod($Service$_method_names[$Idx$], "
+ "::grpc::RpcMethod::RpcType::BIDI_STREAMING), "
+ "context, tag));\n"
+ "}\n\n");
}
}
@@ -587,9 +604,9 @@ void PrintSourceService(google::protobuf::io::Printer *printer,
printer->Print(
*vars,
- "$Service$::Stub* $Service$::NewStub("
+ "std::unique_ptr< $Service$::Stub> $Service$::NewStub("
"const std::shared_ptr< ::grpc::ChannelInterface>& channel) {\n"
- " $Service$::Stub* stub = new $Service$::Stub();\n"
+ " std::unique_ptr< $Service$::Stub> stub(new $Service$::Stub());\n"
" stub->set_channel(channel);\n"
" return stub;\n"
"};\n\n");
diff --git a/src/core/httpcli/httpcli.c b/src/core/httpcli/httpcli.c
index d372e694e9..d2cf09a8df 100644
--- a/src/core/httpcli/httpcli.c
+++ b/src/core/httpcli/httpcli.c
@@ -216,6 +216,7 @@ static void on_resolved(void *arg, grpc_resolved_addresses *addresses) {
gpr_log(GPR_DEBUG, "%s", __FUNCTION__);
if (!addresses) {
finish(req, 0);
+ return;
}
req->addresses = addresses;
req->next_address = 0;
diff --git a/src/core/json/json.c b/src/core/json/json.c
index df7108a94d..96e11eebb1 100644
--- a/src/core/json/json.c
+++ b/src/core/json/json.c
@@ -38,8 +38,8 @@
#include "src/core/json/json.h"
grpc_json *grpc_json_create(grpc_json_type type) {
- grpc_json *json = gpr_malloc(sizeof(grpc_json));
- memset(json, 0, sizeof(grpc_json));
+ grpc_json *json = gpr_malloc(sizeof(*json));
+ memset(json, 0, sizeof(*json));
json->type = type;
return json;
diff --git a/src/core/json/json_reader.c b/src/core/json/json_reader.c
index 774faa5f23..5ea4e9569c 100644
--- a/src/core/json/json_reader.c
+++ b/src/core/json/json_reader.c
@@ -93,7 +93,7 @@ static void json_reader_set_null(grpc_json_reader* reader) {
/* Call this function to initialize the reader structure. */
void grpc_json_reader_init(grpc_json_reader* reader,
grpc_json_reader_vtable* vtable, void* userdata) {
- memset(reader, 0, sizeof(grpc_json_reader));
+ memset(reader, 0, sizeof(*reader));
reader->vtable = vtable;
reader->userdata = userdata;
json_reader_string_clear(reader);
diff --git a/src/core/json/json_writer.c b/src/core/json/json_writer.c
index 4c0bf30780..a40bf1733e 100644
--- a/src/core/json/json_writer.c
+++ b/src/core/json/json_writer.c
@@ -51,7 +51,7 @@ static void json_writer_output_string_with_len(grpc_json_writer* writer, const c
void grpc_json_writer_init(grpc_json_writer* writer, int indent,
grpc_json_writer_vtable* vtable, void* userdata) {
- memset(writer, 0, sizeof(grpc_json_writer));
+ memset(writer, 0, sizeof(*writer));
writer->container_empty = 1;
writer->indent = indent;
writer->vtable = vtable;
@@ -77,7 +77,7 @@ static void json_writer_output_indent(
while (spaces >= (sizeof(spacesstr) - 1)) {
json_writer_output_string_with_len(writer, spacesstr,
- sizeof(spacesstr) - 1);
+ sizeof(spacesstr) - 1);
spaces -= (sizeof(spacesstr) - 1);
}
@@ -117,10 +117,10 @@ static void json_writer_escape_string(grpc_json_writer* writer,
gpr_uint8 c = (gpr_uint8)*string++;
if (c == 0) {
break;
- } else if ((c >= 32) && (c <= 127)) {
+ } else if ((c >= 32) && (c <= 126)) {
if ((c == '\\') || (c == '"')) json_writer_output_char(writer, '\\');
json_writer_output_char(writer, c);
- } else if (c < 32) {
+ } else if ((c < 32) || (c == 127)) {
switch (c) {
case '\b':
json_writer_output_string_with_len(writer, "\\b", 2);
@@ -161,6 +161,7 @@ static void json_writer_escape_string(grpc_json_writer* writer,
for (i = 0; i < extra; i++) {
utf32 <<= 6;
c = *string++;
+ /* Breaks out and bail on any invalid UTF-8 sequence, including \0. */
if ((c & 0xc0) != 0x80) {
valid = 0;
break;
diff --git a/src/core/security/auth.c b/src/core/security/auth.c
index 92878e3b7e..9b67d59cb8 100644
--- a/src/core/security/auth.c
+++ b/src/core/security/auth.c
@@ -234,6 +234,9 @@ static void destroy_call_elem(grpc_call_element *elem) {
if (calld->host != NULL) {
grpc_mdstr_unref(calld->host);
}
+ if (calld->method != NULL) {
+ grpc_mdstr_unref(calld->method);
+ }
}
/* Constructor for channel_data */
@@ -276,6 +279,9 @@ static void destroy_channel_elem(grpc_channel_element *elem) {
if (channeld->error_msg_key != NULL) {
grpc_mdstr_unref(channeld->error_msg_key);
}
+ if (channeld->path_string != NULL) {
+ grpc_mdstr_unref(channeld->path_string);
+ }
}
const grpc_channel_filter grpc_client_auth_filter = {
diff --git a/src/core/security/credentials.c b/src/core/security/credentials.c
index 42d1a900fc..7e72b238c8 100644
--- a/src/core/security/credentials.c
+++ b/src/core/security/credentials.c
@@ -1076,7 +1076,3 @@ grpc_credentials *grpc_iam_credentials_create(const char *token,
c->md_ctx, GRPC_IAM_AUTHORITY_SELECTOR_METADATA_KEY, authority_selector);
return &c->base;
}
-
-/* -- Default credentials TODO(jboeuf). -- */
-
-grpc_credentials *grpc_default_credentials_create(void) { return NULL; }
diff --git a/src/core/security/credentials.h b/src/core/security/credentials.h
index 7b8929492b..0a0074c1d5 100644
--- a/src/core/security/credentials.h
+++ b/src/core/security/credentials.h
@@ -60,8 +60,15 @@ typedef enum {
"x-goog-iam-authorization-token"
#define GRPC_IAM_AUTHORITY_SELECTOR_METADATA_KEY "x-goog-iam-authority-selector"
+#define GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY "gcloud"
+#define GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE \
+ "application_default_credentials.json"
+
/* --- grpc_credentials. --- */
+/* It is the caller's responsibility to gpr_free the result if not NULL. */
+char *grpc_get_well_known_google_credentials_file_path(void);
+
typedef void (*grpc_credentials_metadata_cb)(void *user_data,
grpc_mdelem **md_elems,
size_t num_md,
diff --git a/src/core/security/credentials_posix.c b/src/core/security/credentials_posix.c
new file mode 100644
index 0000000000..79622cb024
--- /dev/null
+++ b/src/core/security/credentials_posix.c
@@ -0,0 +1,60 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <grpc/support/port_platform.h>
+
+#ifdef GPR_POSIX_FILE
+
+#include "src/core/security/credentials.h"
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+
+#include "src/core/support/env.h"
+#include "src/core/support/string.h"
+
+char *grpc_get_well_known_google_credentials_file_path(void) {
+ char *result = NULL;
+ char *home = gpr_getenv("HOME");
+ if (home == NULL) {
+ gpr_log(GPR_ERROR, "Could not get HOME environment variable.");
+ return NULL;
+ }
+ gpr_asprintf(&result, "%s/.config/%s/%s", home,
+ GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY,
+ GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE);
+ gpr_free(home);
+ return result;
+}
+
+#endif /* GPR_POSIX_FILE */
diff --git a/src/core/security/credentials_win32.c b/src/core/security/credentials_win32.c
new file mode 100644
index 0000000000..ddb310468b
--- /dev/null
+++ b/src/core/security/credentials_win32.c
@@ -0,0 +1,60 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <grpc/support/port_platform.h>
+
+#ifdef GPR_WIN32
+
+#include "src/core/security/credentials.h"
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+
+#include "src/core/support/env.h"
+#include "src/core/support/string.h"
+
+char *grpc_get_well_known_google_credentials_file_path(void) {
+ char *result = NULL;
+ char *appdata_path = gpr_getenv("APPDATA");
+ if (appdata_path == NULL) {
+ gpr_log(GPR_ERROR, "Could not get APPDATA environment variable.");
+ return NULL;
+ }
+ gpr_asprintf(&result, "%s/%s/%s", appdata_path,
+ GRPC_GOOGLE_CLOUD_SDK_CONFIG_DIRECTORY,
+ GRPC_GOOGLE_WELL_KNOWN_CREDENTIALS_FILE);
+ gpr_free(appdata_path);
+ return result;
+}
+
+#endif /* GPR_WIN32 */
diff --git a/src/core/security/google_default_credentials.c b/src/core/security/google_default_credentials.c
new file mode 100644
index 0000000000..dc0e453b87
--- /dev/null
+++ b/src/core/security/google_default_credentials.c
@@ -0,0 +1,185 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "src/core/security/credentials.h"
+
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/sync.h>
+
+#include "src/core/httpcli/httpcli.h"
+#include "src/core/support/env.h"
+#include "src/core/support/file.h"
+
+/* -- Constants. -- */
+
+#define GRPC_COMPUTE_ENGINE_DETECTION_HOST "metadata.google.internal"
+#define GRPC_GOOGLE_CREDENTIALS_ENV_VAR "GOOGLE_APPLICATION_CREDENTIALS"
+
+/* -- Default credentials. -- */
+
+static grpc_credentials *default_credentials = NULL;
+static int compute_engine_detection_done = 0;
+static gpr_mu g_mu;
+static gpr_once g_once = GPR_ONCE_INIT;
+
+static void init_default_credentials(void) {
+ gpr_mu_init(&g_mu);
+}
+
+typedef struct {
+ gpr_cv cv;
+ gpr_mu mu;
+ int is_done;
+ int success;
+} compute_engine_detector;
+
+static void on_compute_engine_detection_http_response(
+ void *user_data, const grpc_httpcli_response *response) {
+ compute_engine_detector *detector = (compute_engine_detector *)user_data;
+ if (response != NULL && response->status == 200 && response->hdr_count > 0) {
+ /* Internet providers can return a generic response to all requests, so
+ it is necessary to check that metadata header is present also. */
+ size_t i;
+ for (i = 0; i < response->hdr_count; i++) {
+ grpc_httpcli_header *header = &response->hdrs[i];
+ if (!strcmp(header->key, "Metadata-Flavor") &&
+ !strcmp(header->value, "Google")) {
+ detector->success = 1;
+ break;
+ }
+ }
+ }
+ gpr_mu_lock(&detector->mu);
+ detector->is_done = 1;
+ gpr_mu_unlock(&detector->mu);
+ gpr_cv_signal(&detector->cv);
+}
+
+static int is_stack_running_on_compute_engine(void) {
+ compute_engine_detector detector;
+ grpc_httpcli_request request;
+
+ /* The http call is local. If it takes more than one sec, it is for sure not
+ on compute engine. */
+ gpr_timespec max_detection_delay = {1, 0};
+
+ gpr_mu_init(&detector.mu);
+ gpr_cv_init(&detector.cv);
+ detector.is_done = 0;
+ detector.success = 0;
+
+ memset(&request, 0, sizeof(grpc_httpcli_request));
+ request.host = GRPC_COMPUTE_ENGINE_DETECTION_HOST;
+ request.path = "/";
+
+ grpc_httpcli_get(&request, gpr_time_add(gpr_now(), max_detection_delay),
+ on_compute_engine_detection_http_response, &detector);
+
+ /* Block until we get the response. This is not ideal but this should only be
+ called once for the lifetime of the process by the default credentials. */
+ gpr_mu_lock(&detector.mu);
+ while (!detector.is_done) {
+ gpr_cv_wait(&detector.cv, &detector.mu, gpr_inf_future);
+ }
+ gpr_mu_unlock(&detector.mu);
+
+ gpr_mu_destroy(&detector.mu);
+ gpr_cv_destroy(&detector.cv);
+ return detector.success;
+}
+
+/* Takes ownership of creds_path if not NULL. */
+static grpc_credentials *create_jwt_creds_from_path(char *creds_path) {
+ grpc_credentials *result = NULL;
+ gpr_slice creds_data;
+ int file_ok = 0;
+ if (creds_path == NULL) return NULL;
+ creds_data = gpr_load_file(creds_path, &file_ok);
+ gpr_free(creds_path);
+ if (file_ok) {
+ result = grpc_jwt_credentials_create(
+ (const char *)GPR_SLICE_START_PTR(creds_data),
+ grpc_max_auth_token_lifetime);
+ gpr_slice_unref(creds_data);
+ }
+ return result;
+}
+
+grpc_credentials *grpc_google_default_credentials_create(void) {
+ grpc_credentials *result = NULL;
+ int serving_cached_credentials = 0;
+ gpr_once_init(&g_once, init_default_credentials);
+
+ gpr_mu_lock(&g_mu);
+
+ if (default_credentials != NULL) {
+ result = default_credentials;
+ serving_cached_credentials = 1;
+ goto end;
+ }
+
+ /* First, try the environment variable. */
+ result =
+ create_jwt_creds_from_path(gpr_getenv(GRPC_GOOGLE_CREDENTIALS_ENV_VAR));
+ if (result != NULL) goto end;
+
+ /* Then the well-known file. */
+ result = create_jwt_creds_from_path(
+ grpc_get_well_known_google_credentials_file_path());
+ if (result != NULL) goto end;
+
+ /* At last try to see if we're on compute engine (do the detection only once
+ since it requires a network test). */
+ if (!compute_engine_detection_done) {
+ int need_compute_engine_creds = is_stack_running_on_compute_engine();
+ compute_engine_detection_done = 1;
+ if (need_compute_engine_creds) {
+ result = grpc_compute_engine_credentials_create();
+ }
+ }
+
+end:
+ if (!serving_cached_credentials && result != NULL) {
+ /* Blend with default ssl credentials and add a global reference so that it
+ can be cached and re-served. */
+ result = grpc_composite_credentials_create(
+ grpc_ssl_credentials_create(NULL, NULL), result);
+ GPR_ASSERT(result != NULL);
+ default_credentials = grpc_credentials_ref(result);
+ }
+ gpr_mu_unlock(&g_mu);
+ return result;
+}
diff --git a/src/core/security/security_context.c b/src/core/security/security_context.c
index fd8baff539..9dce5af740 100644
--- a/src/core/security/security_context.c
+++ b/src/core/security/security_context.c
@@ -641,9 +641,3 @@ grpc_channel *grpc_secure_channel_create_with_factories(
creds->type);
return grpc_lame_client_channel_create();
}
-
-grpc_channel *grpc_default_secure_channel_create(
- const char *target, const grpc_channel_args *args) {
- return grpc_secure_channel_create(grpc_default_credentials_create(), target,
- args);
-}
diff --git a/src/core/support/log_win32.c b/src/core/support/log_win32.c
index cff130ae18..720dc141f5 100644
--- a/src/core/support/log_win32.c
+++ b/src/core/support/log_win32.c
@@ -90,7 +90,7 @@ void gpr_default_log(gpr_log_func_args *args) {
strcpy(time_buffer, "error:strftime");
}
- fprintf(stderr, "%s%s.%09u %5u %s:%d: %s\n",
+ fprintf(stderr, "%s%s.%09u %5u %s:%d] %s\n",
gpr_log_severity_string(args->severity), time_buffer,
(int)(now.tv_nsec), GetCurrentThreadId(),
args->file, args->line, args->message);
diff --git a/src/core/support/string_posix.c b/src/core/support/string_posix.c
index 8a678b3103..25c333db4e 100644
--- a/src/core/support/string_posix.c
+++ b/src/core/support/string_posix.c
@@ -51,7 +51,7 @@ int gpr_asprintf(char **strp, const char *format, ...) {
va_start(args, format);
ret = vsnprintf(buf, sizeof(buf), format, args);
va_end(args);
- if (!(0 <= ret)) {
+ if (ret < 0) {
*strp = NULL;
return -1;
}
diff --git a/src/core/support/sync.c b/src/core/support/sync.c
index 1a5cf57c4f..ccfe1e25f4 100644
--- a/src/core/support/sync.c
+++ b/src/core/support/sync.c
@@ -41,7 +41,7 @@
Should be a prime. */
enum { event_sync_partitions = 31 };
-/* Event are partitioned by address to avoid lock contention. */
+/* Events are partitioned by address to avoid lock contention. */
static struct sync_array_s {
gpr_mu mu;
gpr_cv cv;
@@ -71,10 +71,10 @@ void gpr_event_set(gpr_event *ev, void *value) {
struct sync_array_s *s = hash(ev);
gpr_mu_lock(&s->mu);
GPR_ASSERT(gpr_atm_acq_load(&ev->state) == 0);
- GPR_ASSERT(value != NULL);
gpr_atm_rel_store(&ev->state, (gpr_atm)value);
gpr_cv_broadcast(&s->cv);
gpr_mu_unlock(&s->mu);
+ GPR_ASSERT(value != NULL);
}
void *gpr_event_get(gpr_event *ev) {
diff --git a/src/core/support/time.c b/src/core/support/time.c
index 67f7665650..7dbf95059f 100644
--- a/src/core/support/time.c
+++ b/src/core/support/time.c
@@ -85,12 +85,12 @@ gpr_timespec gpr_time_from_nanos(long ns) {
} else if (ns == LONG_MIN) {
result = gpr_inf_past;
} else if (ns >= 0) {
- result.tv_sec = ns / 1000000000;
- result.tv_nsec = ns - result.tv_sec * 1000000000;
+ result.tv_sec = ns / GPR_NS_PER_SEC;
+ result.tv_nsec = ns - result.tv_sec * GPR_NS_PER_SEC;
} else {
/* Calculation carefully formulated to avoid any possible under/overflow. */
- result.tv_sec = (-(999999999 - (ns + 1000000000)) / 1000000000) - 1;
- result.tv_nsec = ns - result.tv_sec * 1000000000;
+ result.tv_sec = (-(999999999 - (ns + GPR_NS_PER_SEC)) / GPR_NS_PER_SEC) - 1;
+ result.tv_nsec = ns - result.tv_sec * GPR_NS_PER_SEC;
}
return result;
}
@@ -172,8 +172,8 @@ gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b) {
gpr_timespec sum;
int inc = 0;
sum.tv_nsec = a.tv_nsec + b.tv_nsec;
- if (sum.tv_nsec >= 1000000000) {
- sum.tv_nsec -= 1000000000;
+ if (sum.tv_nsec >= GPR_NS_PER_SEC) {
+ sum.tv_nsec -= GPR_NS_PER_SEC;
inc++;
}
if (a.tv_sec == TYPE_MAX(time_t) || a.tv_sec == TYPE_MIN(time_t)) {
@@ -200,7 +200,7 @@ gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b) {
int dec = 0;
diff.tv_nsec = a.tv_nsec - b.tv_nsec;
if (diff.tv_nsec < 0) {
- diff.tv_nsec += 1000000000;
+ diff.tv_nsec += GPR_NS_PER_SEC;
dec++;
}
if (a.tv_sec == TYPE_MAX(time_t) || a.tv_sec == TYPE_MIN(time_t)) {
diff --git a/src/cpp/client/credentials.cc b/src/cpp/client/credentials.cc
index 66571cad73..a140f551e0 100644
--- a/src/cpp/client/credentials.cc
+++ b/src/cpp/client/credentials.cc
@@ -45,8 +45,8 @@ Credentials::Credentials(grpc_credentials *c_creds) : creds_(c_creds) {}
Credentials::~Credentials() { grpc_credentials_release(creds_); }
grpc_credentials *Credentials::GetRawCreds() { return creds_; }
-std::unique_ptr<Credentials> CredentialsFactory::DefaultCredentials() {
- grpc_credentials *c_creds = grpc_default_credentials_create();
+std::unique_ptr<Credentials> CredentialsFactory::GoogleDefaultCredentials() {
+ grpc_credentials *c_creds = grpc_google_default_credentials_create();
std::unique_ptr<Credentials> cpp_creds(new Credentials(c_creds));
return cpp_creds;
}
@@ -86,6 +86,18 @@ std::unique_ptr<Credentials> CredentialsFactory::ServiceAccountCredentials(
return cpp_creds;
}
+// Builds JWT credentials.
+std::unique_ptr<Credentials> CredentialsFactory::JWTCredentials(
+ const grpc::string &json_key, std::chrono::seconds token_lifetime) {
+ gpr_timespec lifetime = gpr_time_from_seconds(
+ token_lifetime.count() > 0 ? token_lifetime.count() : 0);
+ grpc_credentials *c_creds =
+ grpc_jwt_credentials_create(json_key.c_str(), lifetime);
+ std::unique_ptr<Credentials> cpp_creds(
+ c_creds == nullptr ? nullptr : new Credentials(c_creds));
+ return cpp_creds;
+}
+
// Builds IAM credentials.
std::unique_ptr<Credentials> CredentialsFactory::IAMCredentials(
const grpc::string &authorization_token,
@@ -98,7 +110,7 @@ std::unique_ptr<Credentials> CredentialsFactory::IAMCredentials(
}
// Combines two credentials objects into a composite credentials.
-std::unique_ptr<Credentials> CredentialsFactory::ComposeCredentials(
+std::unique_ptr<Credentials> CredentialsFactory::CompositeCredentials(
const std::unique_ptr<Credentials> &creds1,
const std::unique_ptr<Credentials> &creds2) {
// Note that we are not saving unique_ptrs to the two credentials
diff --git a/src/cpp/server/thread_pool.cc b/src/cpp/server/thread_pool.cc
index 1ca98129d3..fa11ddd04c 100644
--- a/src/cpp/server/thread_pool.cc
+++ b/src/cpp/server/thread_pool.cc
@@ -37,11 +37,11 @@ namespace grpc {
ThreadPool::ThreadPool(int num_threads) {
for (int i = 0; i < num_threads; i++) {
- threads_.push_back(std::thread([=]() {
+ threads_.push_back(std::thread([this]() {
for (;;) {
- std::unique_lock<std::mutex> lock(mu_);
// Wait until work is available or we are shutting down.
- auto have_work = [=]() { return shutdown_ || !callbacks_.empty(); };
+ auto have_work = [this]() { return shutdown_ || !callbacks_.empty(); };
+ std::unique_lock<std::mutex> lock(mu_);
if (!have_work()) {
cv_.wait(lock, have_work);
}
diff --git a/src/node/examples/pubsub/empty.proto b/src/node/examples/pubsub/empty.proto
new file mode 100644
index 0000000000..5d6eb10841
--- /dev/null
+++ b/src/node/examples/pubsub/empty.proto
@@ -0,0 +1,44 @@
+// This file will be moved to a new location.
+
+// 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.
+
+syntax = "proto2";
+
+package proto2;
+
+// An empty message that you can re-use to avoid defining duplicated empty
+// messages in your project. A typical example is to use it as argument or the
+// return value of a service API. For instance:
+//
+// service Foo {
+// rpc Bar (proto2.Empty) returns (proto2.Empty) { };
+// };
+//
+message Empty {}
diff --git a/src/node/examples/pubsub/label.proto b/src/node/examples/pubsub/label.proto
new file mode 100644
index 0000000000..0af15a25a6
--- /dev/null
+++ b/src/node/examples/pubsub/label.proto
@@ -0,0 +1,79 @@
+// This file will be moved to a new location.
+
+// 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.
+
+// Labels provide a way to associate user-defined metadata with various
+// objects. Labels may be used to organize objects into non-hierarchical
+// groups; think metadata tags attached to mp3s.
+
+syntax = "proto2";
+
+package tech.label;
+
+// A key-value pair applied to a given object.
+message Label {
+ // The key of a label is a syntactically valid URL (as per RFC 1738) with
+ // the "scheme" and initial slashes omitted and with the additional
+ // restrictions noted below. Each key should be globally unique. The
+ // "host" portion is called the "namespace" and is not necessarily
+ // resolvable to a network endpoint. Instead, the namespace indicates what
+ // system or entity defines the semantics of the label. Namespaces do not
+ // restrict the set of objects to which a label may be associated.
+ //
+ // Keys are defined by the following grammar:
+ //
+ // key = hostname "/" kpath
+ // kpath = ksegment *[ "/" ksegment ]
+ // ksegment = alphadigit | *[ alphadigit | "-" | "_" | "." ]
+ //
+ // where "hostname" and "alphadigit" are defined as in RFC 1738.
+ //
+ // Example key:
+ // spanner.google.com/universe
+ required string key = 1;
+
+ // The value of the label.
+ oneof value {
+ // A string value.
+ string str_value = 2;
+ // An integer value.
+ int64 num_value = 3;
+ }
+}
+
+// A collection of labels, such as the set of all labels attached to an
+// object. Each label in the set must have a different key.
+//
+// Users should prefer to embed "repeated Label" directly when possible.
+// This message should only be used in cases where that isn't possible (e.g.
+// with oneof).
+message Labels {
+ repeated Label label = 1;
+}
diff --git a/src/node/examples/pubsub/pubsub.proto b/src/node/examples/pubsub/pubsub.proto
new file mode 100644
index 0000000000..41a354773f
--- /dev/null
+++ b/src/node/examples/pubsub/pubsub.proto
@@ -0,0 +1,734 @@
+// This file will be moved to a new location.
+
+// 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.
+
+
+// Specification of the Pubsub API.
+
+syntax = "proto2";
+
+import "empty.proto";
+import "label.proto";
+
+package tech.pubsub;
+
+// -----------------------------------------------------------------------------
+// Overview of the Pubsub API
+// -----------------------------------------------------------------------------
+
+// This file describes an API for a Pubsub system. This system provides a
+// reliable many-to-many communication mechanism between independently written
+// publishers and subscribers where the publisher publishes messages to "topics"
+// and each subscriber creates a "subscription" and consumes messages from it.
+//
+// (a) The pubsub system maintains bindings between topics and subscriptions.
+// (b) A publisher publishes messages into a topic.
+// (c) The pubsub system delivers messages from topics into relevant
+// subscriptions.
+// (d) A subscriber receives pending messages from its subscription and
+// acknowledges or nacks each one to the pubsub system.
+// (e) The pubsub system removes acknowledged messages from that subscription.
+
+// -----------------------------------------------------------------------------
+// Data Model
+// -----------------------------------------------------------------------------
+
+// The data model consists of the following:
+//
+// * Topic: A topic is a resource to which messages are published by publishers.
+// Topics are named, and the name of the topic is unique within the pubsub
+// system.
+//
+// * Subscription: A subscription records the subscriber's interest in a topic.
+// It can optionally include a query to select a subset of interesting
+// messages. The pubsub system maintains a logical cursor tracking the
+// matching messages which still need to be delivered and acked so that
+// they can retried as needed. The set of messages that have not been
+// acknowledged is called the subscription backlog.
+//
+// * Message: A message is a unit of data that flows in the system. It contains
+// opaque data from the publisher along with its labels.
+//
+// * Message Labels (optional): A set of opaque key, value pairs assigned
+// by the publisher which the subscriber can use for filtering out messages
+// in the topic. For example, a label with key "foo.com/device_type" and
+// value "mobile" may be added for messages that are only relevant for a
+// mobile subscriber; a subscriber on a phone may decide to create a
+// subscription only for messages that have this label.
+
+// -----------------------------------------------------------------------------
+// Publisher Flow
+// -----------------------------------------------------------------------------
+
+// A publisher publishes messages to the topic using the Publish request:
+//
+// PubsubMessage message;
+// message.set_data("....");
+// Label label;
+// label.set_key("foo.com/key1");
+// label.set_str_value("value1");
+// message.add_label(label);
+// PublishRequest request;
+// request.set_topic("topicName");
+// request.set_message(message);
+// PublisherService.Publish(request);
+
+// -----------------------------------------------------------------------------
+// Subscriber Flow
+// -----------------------------------------------------------------------------
+
+// The subscriber part of the API is richer than the publisher part and has a
+// number of concepts w.r.t. subscription creation and monitoring:
+//
+// (1) A subscriber creates a subscription using the CreateSubscription call.
+// It may specify an optional "query" to indicate that it wants to receive
+// only messages with a certain set of labels using the label query syntax.
+// It may also specify an optional truncation policy to indicate when old
+// messages from the subcription can be removed.
+//
+// (2) A subscriber receives messages in one of two ways: via push or pull.
+//
+// (a) To receive messages via push, the PushConfig field must be specified in
+// the Subscription parameter when creating a subscription. The PushConfig
+// specifies an endpoint at which the subscriber must expose the
+// PushEndpointService. Messages are received via the HandlePubsubEvent
+// method. The push subscriber responds to the HandlePubsubEvent method
+// with a result code that indicates one of three things: Ack (the message
+// has been successfully processed and the Pubsub system may delete it),
+// Nack (the message has been rejected, the Pubsub system should resend it
+// at a later time), or Push-Back (this is a Nack with the additional
+// semantics that the subscriber is overloaded and the pubsub system should
+// back off on the rate at which it is invoking HandlePubsubEvent). The
+// endpoint may be a load balancer for better scalability.
+//
+// (b) To receive messages via pull a subscriber calls the Pull method on the
+// SubscriberService to get messages from the subscription. For each
+// individual message, the subscriber may use the ack_id received in the
+// PullResponse to Ack the message, Nack the message, or modify the ack
+// deadline with ModifyAckDeadline. See the
+// Subscription.ack_deadline_seconds field documentation for details on the
+// ack deadline behavior.
+//
+// Note: Messages may be consumed in parallel by multiple subscribers making
+// Pull calls to the same subscription; this will result in the set of
+// messages from the subscription being shared and each subscriber
+// receiving a subset of the messages.
+//
+// (4) The subscriber can explicitly truncate the current subscription.
+//
+// (5) "Truncated" events are delivered when a subscription is
+// truncated, whether due to the subscription's truncation policy
+// or an explicit request from the subscriber.
+//
+// Subscription creation:
+//
+// Subscription subscription;
+// subscription.set_topic("topicName");
+// subscription.set_name("subscriptionName");
+// subscription.push_config().set_push_endpoint("machinename:8888");
+// SubscriberService.CreateSubscription(subscription);
+//
+// Consuming messages via push:
+//
+// TODO(eschapira): Add HTTP push example.
+//
+// The port 'machinename:8888' must be bound to a stubby server that implements
+// the PushEndpointService with the following method:
+//
+// int HandlePubsubEvent(PubsubEvent event) {
+// if (event.subscription().equals("subscriptionName")) {
+// if (event.has_message()) {
+// Process(event.message().data());
+// } else if (event.truncated()) {
+// ProcessTruncatedEvent();
+// }
+// }
+// return OK; // This return code implies an acknowledgment
+// }
+//
+// Consuming messages via pull:
+//
+// The subscription must be created without setting the push_config field.
+//
+// PullRequest pull_request;
+// pull_request.set_subscription("subscriptionName");
+// pull_request.set_return_immediately(false);
+// while (true) {
+// PullResponse pull_response;
+// if (SubscriberService.Pull(pull_request, pull_response) == OK) {
+// PubsubEvent event = pull_response.pubsub_event();
+// if (event.has_message()) {
+// Process(event.message().data());
+// } else if (event.truncated()) {
+// ProcessTruncatedEvent();
+// }
+// AcknowledgeRequest ack_request;
+// ackRequest.set_subscription("subscriptionName");
+// ackRequest.set_ack_id(pull_response.ack_id());
+// SubscriberService.Acknowledge(ack_request);
+// }
+// }
+
+// -----------------------------------------------------------------------------
+// Reliability Semantics
+// -----------------------------------------------------------------------------
+
+// When a subscriber successfully creates a subscription using
+// Subscriber.CreateSubscription, it establishes a "subscription point" with
+// respect to that subscription - the subscriber is guaranteed to receive any
+// message published after this subscription point that matches the
+// subscription's query. Note that messages published before the Subscription
+// point may or may not be delivered.
+//
+// If the system truncates the subscription according to the specified
+// truncation policy, the system delivers a subscription status event with the
+// "truncated" field set to true. We refer to such events as "truncation
+// events". A truncation event:
+//
+// * Informs the subscriber that part of the subscription messages have been
+// discarded. The subscriber may want to recover from the message loss, e.g.,
+// by resyncing its state with its backend.
+// * Establishes a new subscription point, i.e., the subscriber is guaranteed to
+// receive all changes published after the trunction event is received (or
+// until another truncation event is received).
+//
+// Note that messages are not delivered in any particular order by the pubsub
+// system. Furthermore, the system guarantees at-least-once delivery
+// of each message or truncation events until acked.
+
+// -----------------------------------------------------------------------------
+// Deletion
+// -----------------------------------------------------------------------------
+
+// Both topics and subscriptions may be deleted. Deletion of a topic implies
+// deletion of all attached subscriptions.
+//
+// When a subscription is deleted directly by calling DeleteSubscription, all
+// messages are immediately dropped. If it is a pull subscriber, future pull
+// requests will return NOT_FOUND.
+//
+// When a topic is deleted all corresponding subscriptions are immediately
+// deleted, and subscribers experience the same behavior as directly deleting
+// the subscription.
+
+// -----------------------------------------------------------------------------
+// The Publisher service and its protos.
+// -----------------------------------------------------------------------------
+
+// The service that an application uses to manipulate topics, and to send
+// messages to a topic.
+service PublisherService {
+
+ // Creates the given topic with the given name.
+ rpc CreateTopic(Topic) returns (Topic) {
+ }
+
+ // Adds a message to the topic. Returns NOT_FOUND if the topic does not
+ // exist.
+ // (-- For different error code values returned via Stubby, see
+ // util/task/codes.proto. --)
+ rpc Publish(PublishRequest) returns (proto2.Empty) {
+ }
+
+ // Adds one or more messages to the topic. Returns NOT_FOUND if the topic does
+ // not exist.
+ rpc PublishBatch(PublishBatchRequest) returns (PublishBatchResponse) {
+ }
+
+ // Gets the configuration of a topic. Since the topic only has the name
+ // attribute, this method is only useful to check the existence of a topic.
+ // If other attributes are added in the future, they will be returned here.
+ rpc GetTopic(GetTopicRequest) returns (Topic) {
+ }
+
+ // Lists matching topics.
+ rpc ListTopics(ListTopicsRequest) returns (ListTopicsResponse) {
+ }
+
+ // Deletes the topic with the given name. All subscriptions to this topic
+ // are also deleted. Returns NOT_FOUND if the topic does not exist.
+ // After a topic is deleted, a new topic may be created with the same name.
+ rpc DeleteTopic(DeleteTopicRequest) returns (proto2.Empty) {
+ }
+}
+
+// A topic resource.
+message Topic {
+ // Name of the topic.
+ optional string name = 1;
+}
+
+// A message data and its labels.
+message PubsubMessage {
+ // The message payload.
+ optional bytes data = 1;
+
+ // Optional list of labels for this message. Keys in this collection must
+ // be unique.
+ //(-- TODO(eschapira): Define how key namespace may be scoped to the topic.--)
+ repeated tech.label.Label label = 2;
+
+ // ID of this message assigned by the server at publication time. Guaranteed
+ // to be unique within the topic. This value may be read by a subscriber
+ // that receives a PubsubMessage via a Pull call or a push delivery. It must
+ // not be populated by a publisher in a Publish call.
+ optional string message_id = 3;
+}
+
+// Request for the GetTopic method.
+message GetTopicRequest {
+ // The name of the topic to get.
+ optional string topic = 1;
+}
+
+// Request for the Publish method.
+message PublishRequest {
+ // The message in the request will be published on this topic.
+ optional string topic = 1;
+
+ // The message to publish.
+ optional PubsubMessage message = 2;
+}
+
+// Request for the PublishBatch method.
+message PublishBatchRequest {
+ // The messages in the request will be published on this topic.
+ optional string topic = 1;
+
+ // The messages to publish.
+ repeated PubsubMessage messages = 2;
+}
+
+// Response for the PublishBatch method.
+message PublishBatchResponse {
+ // The server-assigned ID of each published message, in the same order as
+ // the messages in the request. IDs are guaranteed to be unique within
+ // the topic.
+ repeated string message_ids = 1;
+}
+
+// Request for the ListTopics method.
+message ListTopicsRequest {
+ // A valid label query expression.
+ //
+ optional string query = 1;
+
+ // Maximum number of topics to return.
+ // (-- If not specified or <= 0, the implementation will select a reasonable
+ // value. --)
+ optional int32 max_results = 2;
+
+ // The value obtained in the last <code>ListTopicsResponse</code>
+ // for continuation.
+ optional string page_token = 3;
+
+}
+
+// Response for the ListTopics method.
+message ListTopicsResponse {
+ // The resulting topics.
+ repeated Topic topic = 1;
+
+ // If not empty, indicates that there are more topics that match the request,
+ // and this value should be passed to the next <code>ListTopicsRequest</code>
+ // to continue.
+ optional string next_page_token = 2;
+}
+
+// Request for the Delete method.
+message DeleteTopicRequest {
+ // Name of the topic to delete.
+ optional string topic = 1;
+}
+
+// -----------------------------------------------------------------------------
+// The Subscriber service and its protos.
+// -----------------------------------------------------------------------------
+
+// The service that an application uses to manipulate subscriptions and to
+// consume messages from a subscription via the pull method.
+service SubscriberService {
+
+ // Creates a subscription on a given topic for a given subscriber.
+ // If the subscription already exists, returns ALREADY_EXISTS.
+ // If the corresponding topic doesn't exist, returns NOT_FOUND.
+ //
+ // If the name is not provided in the request, the server will assign a random
+ // name for this subscription on the same project as the topic.
+ rpc CreateSubscription(Subscription) returns (Subscription) {
+ }
+
+ // Gets the configuration details of a subscription.
+ rpc GetSubscription(GetSubscriptionRequest) returns (Subscription) {
+ }
+
+ // Lists matching subscriptions.
+ rpc ListSubscriptions(ListSubscriptionsRequest)
+ returns (ListSubscriptionsResponse) {
+ }
+
+ // Deletes an existing subscription. All pending messages in the subscription
+ // are immediately dropped. Calls to Pull after deletion will return
+ // NOT_FOUND.
+ rpc DeleteSubscription(DeleteSubscriptionRequest) returns (proto2.Empty) {
+ }
+
+ // Removes all the pending messages in the subscription and releases the
+ // storage associated with them. Results in a truncation event to be sent to
+ // the subscriber. Messages added after this call returns are stored in the
+ // subscription as before.
+ rpc TruncateSubscription(TruncateSubscriptionRequest) returns (proto2.Empty) {
+ }
+
+ //
+ // Push subscriber calls.
+ //
+
+ // Modifies the <code>PushConfig</code> for a specified subscription.
+ // This method can be used to suspend the flow of messages to an endpoint
+ // by clearing the <code>PushConfig</code> field in the request. Messages
+ // will be accumulated for delivery even if no push configuration is
+ // defined or while the configuration is modified.
+ rpc ModifyPushConfig(ModifyPushConfigRequest) returns (proto2.Empty) {
+ }
+
+ //
+ // Pull Subscriber calls
+ //
+
+ // Pulls a single message from the server.
+ // If return_immediately is true, and no messages are available in the
+ // subscription, this method returns FAILED_PRECONDITION. The system is free
+ // to return an UNAVAILABLE error if no messages are available in a
+ // reasonable amount of time (to reduce system load).
+ rpc Pull(PullRequest) returns (PullResponse) {
+ }
+
+ // Pulls messages from the server. Returns an empty list if there are no
+ // messages available in the backlog. The system is free to return UNAVAILABLE
+ // if there are too many pull requests outstanding for the given subscription.
+ rpc PullBatch(PullBatchRequest) returns (PullBatchResponse) {
+ }
+
+ // Modifies the Ack deadline for a message received from a pull request.
+ rpc ModifyAckDeadline(ModifyAckDeadlineRequest) returns (proto2.Empty) {
+ }
+
+ // Acknowledges a particular received message: the Pub/Sub system can remove
+ // the given message from the subscription. Acknowledging a message whose
+ // Ack deadline has expired may succeed, but the message could have been
+ // already redelivered. Acknowledging a message more than once will not
+ // result in an error. This is only used for messages received via pull.
+ rpc Acknowledge(AcknowledgeRequest) returns (proto2.Empty) {
+ }
+
+ // Refuses processing a particular received message. The system will
+ // redeliver this message to some consumer of the subscription at some
+ // future time. This is only used for messages received via pull.
+ rpc Nack(NackRequest) returns (proto2.Empty) {
+ }
+}
+
+// A subscription resource.
+message Subscription {
+ // Name of the subscription.
+ optional string name = 1;
+
+ // The name of the topic from which this subscription is receiving messages.
+ optional string topic = 2;
+
+ // If <code>query</code> is non-empty, only messages on the subscriber's
+ // topic whose labels match the query will be returned. Otherwise all
+ // messages on the topic will be returned.
+ //
+ optional string query = 3;
+
+ // The subscriber may specify requirements for truncating unacknowledged
+ // subscription entries. The system will honor the
+ // <code>CreateSubscription</code> request only if it can meet these
+ // requirements. If this field is not specified, messages are never truncated
+ // by the system.
+ optional TruncationPolicy truncation_policy = 4;
+
+ // Specifies which messages can be truncated by the system.
+ message TruncationPolicy {
+ oneof policy {
+ // If <code>max_bytes</code> is specified, the system is allowed to drop
+ // old messages to keep the combined size of stored messages under
+ // <code>max_bytes</code>. This is a hint; the system may keep more than
+ // this many bytes, but will make a best effort to keep the size from
+ // growing much beyond this parameter.
+ int64 max_bytes = 1;
+
+ // If <code>max_age_seconds</code> is specified, the system is allowed to
+ // drop messages that have been stored for at least this many seconds.
+ // This is a hint; the system may keep these messages, but will make a
+ // best effort to remove them when their maximum age is reached.
+ int64 max_age_seconds = 2;
+ }
+ }
+
+ // If push delivery is used with this subscription, this field is
+ // used to configure it.
+ optional PushConfig push_config = 5;
+
+ // For either push or pull delivery, the value is the maximum time after a
+ // subscriber receives a message before the subscriber should acknowledge or
+ // Nack the message. If the Ack deadline for a message passes without an
+ // Ack or a Nack, the Pub/Sub system will eventually redeliver the message.
+ // If a subscriber acknowledges after the deadline, the Pub/Sub system may
+ // accept the Ack, but it is possible that the message has been already
+ // delivered again. Multiple Acks to the message are allowed and will
+ // succeed.
+ //
+ // For push delivery, this value is used to set the request timeout for
+ // the call to the push endpoint.
+ //
+ // For pull delivery, this value is used as the initial value for the Ack
+ // deadline. It may be overridden for a specific pull request (message) with
+ // <code>ModifyAckDeadline</code>.
+ // While a message is outstanding (i.e. it has been delivered to a pull
+ // subscriber and the subscriber has not yet Acked or Nacked), the Pub/Sub
+ // system will not deliver that message to another pull subscriber
+ // (on a best-effort basis).
+ optional int32 ack_deadline_seconds = 6;
+
+ // If this parameter is set to n, the system is allowed to (but not required
+ // to) delete the subscription when at least n seconds have elapsed since the
+ // client presence was detected. (Presence is detected through any
+ // interaction using the subscription ID, including Pull(), Get(), or
+ // acknowledging a message.)
+ //
+ // If this parameter is not set, the subscription will stay live until
+ // explicitly deleted.
+ //
+ // Clients can detect such garbage collection when a Get call or a Pull call
+ // (for pull subscribers only) returns NOT_FOUND.
+ optional int64 garbage_collect_seconds = 7;
+}
+
+// Configuration for a push delivery endpoint.
+message PushConfig {
+ // A URL locating the endpoint to which messages should be pushed.
+ // For example, a Webhook endpoint might use "https://example.com/push".
+ // (-- An Android application might use "gcm:<REGID>", where <REGID> is a
+ // GCM registration id allocated for pushing messages to the application. --)
+ optional string push_endpoint = 1;
+}
+
+// An event indicating a received message or truncation event.
+message PubsubEvent {
+ // The subscription that received the event.
+ optional string subscription = 1;
+
+ oneof type {
+ // A received message.
+ PubsubMessage message = 2;
+
+ // Indicates that this subscription has been truncated.
+ bool truncated = 3;
+
+ // Indicates that this subscription has been deleted. (Note that pull
+ // subscribers will always receive NOT_FOUND in response in their pull
+ // request on the subscription, rather than seeing this boolean.)
+ bool deleted = 4;
+ }
+}
+
+// Request for the GetSubscription method.
+message GetSubscriptionRequest {
+ // The name of the subscription to get.
+ optional string subscription = 1;
+}
+
+// Request for the ListSubscriptions method.
+message ListSubscriptionsRequest {
+ // A valid label query expression.
+ // (-- Which labels are required or supported is implementation-specific.
+ // TODO(eschapira): This method must support to query by topic. We must
+ // define the key URI for the "topic" label. --)
+ optional string query = 1;
+
+ // Maximum number of subscriptions to return.
+ // (-- If not specified or <= 0, the implementation will select a reasonable
+ // value. --)
+ optional int32 max_results = 3;
+
+ // The value obtained in the last <code>ListSubscriptionsResponse</code>
+ // for continuation.
+ optional string page_token = 4;
+}
+
+// Response for the ListSubscriptions method.
+message ListSubscriptionsResponse {
+ // The subscriptions that match the request.
+ repeated Subscription subscription = 1;
+
+ // If not empty, indicates that there are more subscriptions that match the
+ // request and this value should be passed to the next
+ // <code>ListSubscriptionsRequest</code> to continue.
+ optional string next_page_token = 2;
+}
+
+// Request for the TruncateSubscription method.
+message TruncateSubscriptionRequest {
+ // The subscription that is being truncated.
+ optional string subscription = 1;
+}
+
+// Request for the DeleteSubscription method.
+message DeleteSubscriptionRequest {
+ // The subscription to delete.
+ optional string subscription = 1;
+}
+
+// Request for the ModifyPushConfig method.
+message ModifyPushConfigRequest {
+ // The name of the subscription.
+ optional string subscription = 1;
+
+ // An empty <code>push_config</code> indicates that the Pub/Sub system should
+ // pause pushing messages from the given subscription.
+ optional PushConfig push_config = 2;
+}
+
+// -----------------------------------------------------------------------------
+// The protos used by a pull subscriber.
+// -----------------------------------------------------------------------------
+
+// Request for the Pull method.
+message PullRequest {
+ // The subscription from which a message should be pulled.
+ optional string subscription = 1;
+
+ // If this is specified as true the system will respond immediately even if
+ // it is not able to return a message in the Pull response. Otherwise the
+ // system is allowed to wait until at least one message is available rather
+ // than returning FAILED_PRECONDITION. The client may cancel the request if
+ // it does not wish to wait any longer for the response.
+ optional bool return_immediately = 2;
+}
+
+// Either a <code>PubsubMessage</code> or a truncation event. One of these two
+// must be populated.
+message PullResponse {
+ // This ID must be used to acknowledge the received event or message.
+ optional string ack_id = 1;
+
+ // A pubsub message or truncation event.
+ optional PubsubEvent pubsub_event = 2;
+}
+
+// Request for the PullBatch method.
+message PullBatchRequest {
+ // The subscription from which messages should be pulled.
+ optional string subscription = 1;
+
+ // If this is specified as true the system will respond immediately even if
+ // it is not able to return a message in the Pull response. Otherwise the
+ // system is allowed to wait until at least one message is available rather
+ // than returning no messages. The client may cancel the request if it does
+ // not wish to wait any longer for the response.
+ optional bool return_immediately = 2;
+
+ // The maximum number of PubsubEvents returned for this request. The Pub/Sub
+ // system may return fewer than the number of events specified.
+ optional int32 max_events = 3;
+}
+
+// Response for the PullBatch method.
+message PullBatchResponse {
+
+ // Received Pub/Sub messages or status events. The Pub/Sub system will return
+ // zero messages if there are no more messages available in the backlog. The
+ // Pub/Sub system may return fewer than the max_events requested even if
+ // there are more messages available in the backlog.
+ repeated PullResponse pull_responses = 2;
+}
+
+// Request for the ModifyAckDeadline method.
+message ModifyAckDeadlineRequest {
+ // The name of the subscription from which messages are being pulled.
+ optional string subscription = 1;
+
+ // The acknowledgment ID.
+ optional string ack_id = 2;
+
+ // The new Ack deadline. Must be >= 0.
+ optional int32 ack_deadline_seconds = 3;
+}
+
+// Request for the Acknowledge method.
+message AcknowledgeRequest {
+ // The subscription whose message is being acknowledged.
+ optional string subscription = 1;
+
+ // The acknowledgment ID for the message being acknowledged. This was
+ // returned by the Pub/Sub system in the Pull response.
+ repeated string ack_id = 2;
+}
+
+// Request for the Nack method.
+message NackRequest {
+ // The subscription whose message is being Nacked.
+ optional string subscription = 1;
+
+ // The acknowledgment ID for the message being refused. This was returned by
+ // the Pub/Sub system in the Pull response.
+ repeated string ack_id = 2;
+}
+
+// -----------------------------------------------------------------------------
+// The service and protos used by a push subscriber.
+// -----------------------------------------------------------------------------
+
+// The service that a subscriber uses to handle messages sent via push
+// delivery.
+// This service is not currently exported for HTTP clients.
+// TODO(eschapira): Explain HTTP subscribers.
+service PushEndpointService {
+ // Sends a <code>PubsubMessage</code> or a subscription status event to a
+ // push endpoint.
+ // The push endpoint responds with an empty message and a code from
+ // util/task/codes.proto. The following codes have a particular meaning to the
+ // Pub/Sub system:
+ // OK - This is interpreted by Pub/Sub as Ack.
+ // ABORTED - This is intepreted by Pub/Sub as a Nack, without implying
+ // pushback for congestion control. The Pub/Sub system will
+ // retry this message at a later time.
+ // UNAVAILABLE - This is intepreted by Pub/Sub as a Nack, with the additional
+ // semantics of push-back. The Pub/Sub system will use an AIMD
+ // congestion control algorithm to backoff the rate of sending
+ // messages from this subscription.
+ // Any other code, or a failure to respond, will be interpreted in the same
+ // way as ABORTED; i.e. the system will retry the message at a later time to
+ // ensure reliable delivery.
+ rpc HandlePubsubEvent(PubsubEvent) returns (proto2.Empty);
+}
diff --git a/src/node/examples/pubsub/pubsub_demo.js b/src/node/examples/pubsub/pubsub_demo.js
new file mode 100644
index 0000000000..a9b6acbd7e
--- /dev/null
+++ b/src/node/examples/pubsub/pubsub_demo.js
@@ -0,0 +1,277 @@
+// 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.
+
+var async = require('async');
+var fs = require('fs');
+var GoogleAuth = require('googleauth');
+var parseArgs = require('minimist');
+var strftime = require('strftime');
+var _ = require('underscore');
+var grpc = require('../..');
+var PROTO_PATH = __dirname + '/pubsub.proto';
+var pubsub = grpc.load(PROTO_PATH).tech.pubsub;
+
+function PubsubRunner(pub, sub, args) {
+ this.pub = pub;
+ this.sub = sub;
+ this.args = args;
+}
+
+PubsubRunner.prototype.getTestTopicName = function() {
+ var base_name = '/topics/' + this.args.project_id + '/';
+ if (this.args.topic_name) {
+ return base_name + this.args.topic_name;
+ }
+ var now_text = strftime('%Y%m%d%H%M%S%L');
+ return base_name + process.env.USER + '-' + now_text;
+};
+
+PubsubRunner.prototype.getTestSubName = function() {
+ var base_name = '/subscriptions/' + this.args.project_id + '/';
+ if (this.args.sub_name) {
+ return base_name + this.args.sub_name;
+ }
+ var now_text = strftime('%Y%m%d%H%M%S%L');
+ return base_name + process.env.USER + '-' + now_text;
+};
+
+PubsubRunner.prototype.listProjectTopics = function(callback) {
+ var q = ('cloud.googleapis.com/project in (/projects/' +
+ this.args.project_id + ')');
+ this.pub.listTopics({query: q}, callback);
+};
+
+PubsubRunner.prototype.topicExists = function(name, callback) {
+ this.listProjectTopics(function(err, response) {
+ if (err) {
+ callback(err);
+ } else {
+ callback(null, _.some(response.topic, function(t) {
+ return t.name === name;
+ }));
+ }
+ });
+};
+
+PubsubRunner.prototype.createTopicIfNeeded = function(name, callback) {
+ var self = this;
+ this.topicExists(name, function(err, exists) {
+ if (err) {
+ callback(err);
+ } else{
+ if (exists) {
+ callback(null);
+ } else {
+ self.pub.createTopic({name: name}, callback);
+ }
+ }
+ });
+};
+
+PubsubRunner.prototype.removeTopic = function(callback) {
+ var name = this.getTestTopicName();
+ console.log('... removing Topic', name);
+ this.pub.deleteTopic({topic: name}, function(err, value) {
+ if (err) {
+ console.log('Could not delete a topic: rpc failed with', err);
+ callback(err);
+ } else {
+ console.log('removed Topic', name, 'OK');
+ callback(null);
+ }
+ });
+};
+
+PubsubRunner.prototype.createTopic = function(callback) {
+ var name = this.getTestTopicName();
+ console.log('... creating Topic', name);
+ this.pub.createTopic({name: name}, function(err, value) {
+ if (err) {
+ console.log('Could not create a topic: rpc failed with', err);
+ callback(err);
+ } else {
+ console.log('created Topic', name, 'OK');
+ callback(null);
+ }
+ });
+};
+
+PubsubRunner.prototype.listSomeTopics = function(callback) {
+ console.log('Listing topics');
+ console.log('-------------_');
+ this.listProjectTopics(function(err, response) {
+ if (err) {
+ console.log('Could not list topic: rpc failed with', err);
+ callback(err);
+ } else {
+ _.each(response.topic, function(t) {
+ console.log(t.name);
+ });
+ callback(null);
+ }
+ });
+};
+
+PubsubRunner.prototype.checkExists = function(callback) {
+ var name = this.getTestTopicName();
+ console.log('... checking for topic', name);
+ this.topicExists(name, function(err, exists) {
+ if (err) {
+ console.log('Could not check for a topics: rpc failed with', err);
+ callback(err);
+ } else {
+ if (exists) {
+ console.log(name, 'is a topic');
+ } else {
+ console.log(name, 'is not a topic');
+ }
+ callback(null);
+ }
+ });
+};
+
+PubsubRunner.prototype.randomPubSub = function(callback) {
+ var self = this;
+ var topic_name = this.getTestTopicName();
+ var sub_name = this.getTestSubName();
+ var subscription = {name: sub_name, topic: topic_name};
+ async.waterfall([
+ _.bind(this.createTopicIfNeeded, this, topic_name),
+ _.bind(this.sub.createSubscription, this.sub, subscription),
+ function(resp, cb) {
+ var msg_count = _.random(10, 30);
+ // Set up msg_count messages to publish
+ var message_senders = _.times(msg_count, function(n) {
+ return _.bind(self.pub.publish, self.pub, {
+ topic: topic_name,
+ message: {data: new Buffer('message ' + n)}
+ });
+ });
+ async.parallel(message_senders, function(err, result) {
+ cb(err, result, msg_count);
+ });
+ },
+ function(result, msg_count, cb) {
+ console.log('Sent', msg_count, 'messages to', topic_name + ',',
+ 'checking for them now.');
+ var batch_request = {
+ subscription: sub_name,
+ max_events: msg_count
+ };
+ self.sub.pullBatch(batch_request, cb);
+ },
+ function(batch, cb) {
+ var ack_id = _.pluck(batch.pull_responses, 'ack_id');
+ console.log('Got', ack_id.length, 'messages, acknowledging them...');
+ var ack_request = {
+ subscription: sub_name,
+ ack_id: ack_id
+ };
+ self.sub.acknowledge(ack_request, cb);
+ },
+ function(result, cb) {
+ console.log(
+ 'Test messages were acknowledged OK, deleting the subscription');
+ self.sub.deleteSubscription({subscription: sub_name}, cb);
+ }
+ ], function (err, result) {
+ if (err) {
+ console.log('Could not do random pub sub: rpc failed with', err);
+ }
+ callback(err, result);
+ });
+};
+
+function main(callback) {
+ var argv = parseArgs(process.argv, {
+ string: [
+ 'host',
+ 'oauth_scope',
+ 'port',
+ 'action',
+ 'project_id',
+ 'topic_name',
+ 'sub_name'
+ ],
+ default: {
+ host: 'pubsub-staging.googleapis.com',
+ oauth_scope: 'https://www.googleapis.com/auth/pubsub',
+ port: 443,
+ action: 'listSomeTopics',
+ project_id: 'stoked-keyword-656'
+ }
+ });
+ var valid_actions = [
+ 'createTopic',
+ 'removeTopic',
+ 'listSomeTopics',
+ 'checkExists',
+ 'randomPubSub'
+ ];
+ if (_.some(valid_actions, function(action) {
+ return action === argv.action;
+ })) {
+ callback(new Error('Action was not valid'));
+ }
+ var address = argv.host + ':' + argv.port;
+ (new GoogleAuth()).getApplicationDefault(function(err, credential) {
+ if (err) {
+ callback(err);
+ return;
+ }
+ if (credential.createScopedRequired()) {
+ credential = credential.createScoped(argv.oauth_scope);
+ }
+ var updateMetadata = grpc.getGoogleAuthDelegate(credential);
+ var ca_path = process.env.SSL_CERT_FILE;
+ fs.readFile(ca_path, function(err, ca_data) {
+ if (err) {
+ callback(err);
+ return;
+ }
+ var ssl_creds = grpc.Credentials.createSsl(ca_data);
+ var options = {
+ credentials: ssl_creds,
+ 'grpc.ssl_target_name_override': argv.host
+ };
+ var pub = new pubsub.PublisherService(address, options, updateMetadata);
+ var sub = new pubsub.SubscriberService(address, options, updateMetadata);
+ var runner = new PubsubRunner(pub, sub, argv);
+ runner[argv.action](callback);
+ });
+ });
+}
+
+if (require.main === module) {
+ main(function(err) {
+ if (err) throw err;
+ });
+}
+
+module.exports = PubsubRunner;
diff --git a/src/node/package.json b/src/node/package.json
index 70327941ee..e6ac550554 100644
--- a/src/node/package.json
+++ b/src/node/package.json
@@ -18,7 +18,8 @@
"async": "^0.9.0",
"googleauth": "google/google-auth-library-nodejs",
"minimist": "^1.1.0",
- "mocha": "~1.21.0"
+ "mocha": "~1.21.0",
+ "strftime": "^0.8.2"
},
"files": [
"README.md",
diff --git a/src/objective-c/GRPCClient/GRPCClient.podspec b/src/objective-c/GRPCClient/GRPCClient.podspec
new file mode 100644
index 0000000000..a34c50b54e
--- /dev/null
+++ b/src/objective-c/GRPCClient/GRPCClient.podspec
@@ -0,0 +1,14 @@
+Pod::Spec.new do |s|
+ s.name = 'GRPCClient'
+ s.version = '0.0.1'
+ s.summary = 'Generic gRPC client library for iOS'
+ s.author = {
+ 'Jorge Canizales' => 'jcanizales@google.com'
+ }
+ s.source_files = '*.{h,m}', 'private/*.{h,m}'
+ s.private_header_files = 'private/*.h'
+ s.platform = :ios
+ s.ios.deployment_target = '6.0'
+ s.requires_arc = true
+ s.dependency 'RxLibrary', '~> 0.0'
+end
diff --git a/src/objective-c/examples/Sample/Podfile b/src/objective-c/examples/Sample/Podfile
index fa98987910..2b142a67d0 100644
--- a/src/objective-c/examples/Sample/Podfile
+++ b/src/objective-c/examples/Sample/Podfile
@@ -2,6 +2,7 @@ source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
pod 'RxLibrary', :path => "../../RxLibrary"
+pod 'GRPCClient', :path => "../../GRPCClient"
target 'Sample' do
diff --git a/src/objective-c/examples/Sample/Podfile.lock b/src/objective-c/examples/Sample/Podfile.lock
index fee4b43bec..7fa4f5d547 100644
--- a/src/objective-c/examples/Sample/Podfile.lock
+++ b/src/objective-c/examples/Sample/Podfile.lock
@@ -1,14 +1,20 @@
PODS:
+ - GRPCClient (0.0.1):
+ - RxLibrary (~> 0.0)
- RxLibrary (0.0.1)
DEPENDENCIES:
+ - GRPCClient (from `../../GRPCClient`)
- RxLibrary (from `../../RxLibrary`)
EXTERNAL SOURCES:
+ GRPCClient:
+ :path: ../../GRPCClient
RxLibrary:
:path: ../../RxLibrary
SPEC CHECKSUMS:
+ GRPCClient: 05c58faab99661384178bb7c5f93b60c2bfc89f8
RxLibrary: 70cfcf1573ec16a375b4fe61d976a3188aab9303
COCOAPODS: 0.35.0
diff --git a/src/objective-c/examples/Sample/Pods/Headers/Public/GRPCClient/GRPCCall.h b/src/objective-c/examples/Sample/Pods/Headers/Public/GRPCClient/GRPCCall.h
new file mode 120000
index 0000000000..cacb26174f
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Headers/Public/GRPCClient/GRPCCall.h
@@ -0,0 +1 @@
+../../../../../../GRPCClient/GRPCCall.h \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Headers/Public/GRPCClient/GRPCMethodName.h b/src/objective-c/examples/Sample/Pods/Headers/Public/GRPCClient/GRPCMethodName.h
new file mode 120000
index 0000000000..4dddbd8955
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Headers/Public/GRPCClient/GRPCMethodName.h
@@ -0,0 +1 @@
+../../../../../../GRPCClient/GRPCMethodName.h \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Local Podspecs/GRPCClient.podspec b/src/objective-c/examples/Sample/Pods/Local Podspecs/GRPCClient.podspec
new file mode 100644
index 0000000000..a34c50b54e
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Local Podspecs/GRPCClient.podspec
@@ -0,0 +1,14 @@
+Pod::Spec.new do |s|
+ s.name = 'GRPCClient'
+ s.version = '0.0.1'
+ s.summary = 'Generic gRPC client library for iOS'
+ s.author = {
+ 'Jorge Canizales' => 'jcanizales@google.com'
+ }
+ s.source_files = '*.{h,m}', 'private/*.{h,m}'
+ s.private_header_files = 'private/*.h'
+ s.platform = :ios
+ s.ios.deployment_target = '6.0'
+ s.requires_arc = true
+ s.dependency 'RxLibrary', '~> 0.0'
+end
diff --git a/src/objective-c/examples/Sample/Pods/Manifest.lock b/src/objective-c/examples/Sample/Pods/Manifest.lock
index fee4b43bec..7fa4f5d547 100644
--- a/src/objective-c/examples/Sample/Pods/Manifest.lock
+++ b/src/objective-c/examples/Sample/Pods/Manifest.lock
@@ -1,14 +1,20 @@
PODS:
+ - GRPCClient (0.0.1):
+ - RxLibrary (~> 0.0)
- RxLibrary (0.0.1)
DEPENDENCIES:
+ - GRPCClient (from `../../GRPCClient`)
- RxLibrary (from `../../RxLibrary`)
EXTERNAL SOURCES:
+ GRPCClient:
+ :path: ../../GRPCClient
RxLibrary:
:path: ../../RxLibrary
SPEC CHECKSUMS:
+ GRPCClient: 05c58faab99661384178bb7c5f93b60c2bfc89f8
RxLibrary: 70cfcf1573ec16a375b4fe61d976a3188aab9303
COCOAPODS: 0.35.0
diff --git a/src/objective-c/examples/Sample/Pods/Pods.xcodeproj/project.pbxproj b/src/objective-c/examples/Sample/Pods/Pods.xcodeproj/project.pbxproj
index 68290dd5e8..b6f4c37b93 100644
--- a/src/objective-c/examples/Sample/Pods/Pods.xcodeproj/project.pbxproj
+++ b/src/objective-c/examples/Sample/Pods/Pods.xcodeproj/project.pbxproj
@@ -10,54 +10,186 @@
<string>46</string>
<key>objects</key>
<dict>
- <key>00949E44051CD97851DEFF3B</key>
+ <key>00303CC3049D1C9E8709A044</key>
+ <dict>
+ <key>explicitFileType</key>
+ <string>archive.ar</string>
+ <key>includeInIndex</key>
+ <string>0</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>path</key>
+ <string>libPods-RxLibrary.a</string>
+ <key>sourceTree</key>
+ <string>BUILT_PRODUCTS_DIR</string>
+ </dict>
+ <key>003D718984A073D9C6C71422</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>GRPCDelegateWrapper.h</string>
+ <key>path</key>
+ <string>private/GRPCDelegateWrapper.h</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>0041F7F38D0B99E977EC7A9B</key>
+ <dict>
+ <key>baseConfigurationReference</key>
+ <string>02396B6B22E0450EA29193E9</string>
+ <key>buildSettings</key>
+ <dict>
+ <key>ALWAYS_SEARCH_USER_PATHS</key>
+ <string>NO</string>
+ <key>COPY_PHASE_STRIP</key>
+ <string>YES</string>
+ <key>DSTROOT</key>
+ <string>/tmp/xcodeproj.dst</string>
+ <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+ <string>YES</string>
+ <key>GCC_PREFIX_HEADER</key>
+ <string>Target Support Files/Pods-RxLibrary/Pods-RxLibrary-prefix.pch</string>
+ <key>INSTALL_PATH</key>
+ <string>$(BUILT_PRODUCTS_DIR)</string>
+ <key>IPHONEOS_DEPLOYMENT_TARGET</key>
+ <string>8.0</string>
+ <key>OTHER_CFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_CPLUSPLUSFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_LDFLAGS</key>
+ <string></string>
+ <key>OTHER_LIBTOOLFLAGS</key>
+ <string></string>
+ <key>PRODUCT_NAME</key>
+ <string>$(TARGET_NAME)</string>
+ <key>PUBLIC_HEADERS_FOLDER_PATH</key>
+ <string>$(TARGET_NAME)</string>
+ <key>SDKROOT</key>
+ <string>iphoneos</string>
+ <key>SKIP_INSTALL</key>
+ <string>YES</string>
+ <key>VALIDATE_PRODUCT</key>
+ <string>YES</string>
+ </dict>
+ <key>isa</key>
+ <string>XCBuildConfiguration</string>
+ <key>name</key>
+ <string>Release</string>
+ </dict>
+ <key>00669D4383CB42C429D06591</key>
<dict>
<key>fileRef</key>
- <string>9CFAC09E370EA1C96C8D2880</string>
+ <string>D0641C22EEADF13905743122</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>01F5B724A99ADB3547023C72</key>
+ <key>0104C23B56A2F6D406AD513A</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>Pods-Sample-GRPCClient-prefix.pch</string>
+ <key>path</key>
+ <string>../Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-prefix.pch</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>01E37BE5C7114E128C4664FB</key>
<dict>
<key>fileRef</key>
- <string>1868370C0050315A6B835D42</string>
+ <string>9470FB5E010191C87542871D</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>0239F1B46D24E21A8042F47F</key>
+ <key>02396B6B22E0450EA29193E9</key>
<dict>
- <key>buildConfigurationList</key>
- <string>8919AE774852DD128A7CB510</string>
- <key>buildPhases</key>
- <array>
- <string>A71CC1B520D2DFF451839FE2</string>
- <string>896F697BD1BEAF8A081337EB</string>
- </array>
- <key>buildRules</key>
- <array/>
- <key>dependencies</key>
- <array>
- <string>6EB14BC96525C955FBD5CC75</string>
- </array>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXNativeTarget</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
+ <key>path</key>
+ <string>Pods-RxLibrary-Private.xcconfig</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>03289193476D7E6EE456FAA8</key>
+ <dict>
+ <key>fileRef</key>
+ <string>16D5B426090D302B58B8FF40</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>041582131ADE9EA5C2A319BB</key>
+ <dict>
+ <key>isa</key>
+ <string>PBXTargetDependency</string>
<key>name</key>
- <string>Pods-Sample</string>
- <key>productName</key>
- <string>Pods-Sample</string>
- <key>productReference</key>
- <string>DF94410F5DC0A0AB69336DF4</string>
- <key>productType</key>
- <string>com.apple.product-type.library.static</string>
+ <string>Pods-SampleTests-RxLibrary</string>
+ <key>target</key>
+ <string>474A50F85C06F74769FAD474</string>
+ <key>targetProxy</key>
+ <string>FBC9D2D66DA1B0B501961B55</string>
+ </dict>
+ <key>048EFCCABBC3F25828644716</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
+ <key>path</key>
+ <string>Pods-SampleTests.debug.xcconfig</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>024F840533A6674922DB7899</key>
+ <key>077EB8C42818FBCCF960B6A2</key>
<dict>
<key>fileRef</key>
- <string>46513F4AD14CBD2377C1E7A1</string>
+ <string>0B083D6614A831642ECCDB95</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>0260773D27B4AE159FB0B22D</key>
+ <key>078103DC988BEF03083FEB98</key>
+ <dict>
+ <key>fileRef</key>
+ <string>D0641C22EEADF13905743122</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>07DA0CCF4F2346740326BD7D</key>
+ <dict>
+ <key>fileRef</key>
+ <string>9470FB5E010191C87542871D</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>0843899658450810B81AC1DD</key>
+ <dict>
+ <key>fileRef</key>
+ <string>66A375345A9F319AE182BDBD</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>09759845E529CE5CD00BECA5</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -65,32 +197,117 @@
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>Pods-SampleTests-RxLibrary-prefix.pch</string>
<key>path</key>
- <string>GRXWriter+Immediate.h</string>
+ <string>../Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-prefix.pch</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>098BE814C7B5F9F21878CDE6</key>
+ <dict>
+ <key>baseConfigurationReference</key>
+ <string>3369A2EF668725CAF3F75D1F</string>
+ <key>buildSettings</key>
+ <dict>
+ <key>ALWAYS_SEARCH_USER_PATHS</key>
+ <string>NO</string>
+ <key>COPY_PHASE_STRIP</key>
+ <string>NO</string>
+ <key>DSTROOT</key>
+ <string>/tmp/xcodeproj.dst</string>
+ <key>GCC_DYNAMIC_NO_PIC</key>
+ <string>NO</string>
+ <key>GCC_OPTIMIZATION_LEVEL</key>
+ <string>0</string>
+ <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+ <string>YES</string>
+ <key>GCC_PREFIX_HEADER</key>
+ <string>Target Support Files/Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-prefix.pch</string>
+ <key>GCC_PREPROCESSOR_DEFINITIONS</key>
+ <array>
+ <string>DEBUG=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
+ <string>NO</string>
+ <key>INSTALL_PATH</key>
+ <string>$(BUILT_PRODUCTS_DIR)</string>
+ <key>IPHONEOS_DEPLOYMENT_TARGET</key>
+ <string>8.0</string>
+ <key>OTHER_LDFLAGS</key>
+ <string></string>
+ <key>OTHER_LIBTOOLFLAGS</key>
+ <string></string>
+ <key>PRODUCT_NAME</key>
+ <string>$(TARGET_NAME)</string>
+ <key>PUBLIC_HEADERS_FOLDER_PATH</key>
+ <string>$(TARGET_NAME)</string>
+ <key>SDKROOT</key>
+ <string>iphoneos</string>
+ <key>SKIP_INSTALL</key>
+ <string>YES</string>
+ </dict>
+ <key>isa</key>
+ <string>XCBuildConfiguration</string>
+ <key>name</key>
+ <string>Debug</string>
+ </dict>
+ <key>0A5311098107B761AEF843FF</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>3DE1AA4AD4B460F4312B1359</string>
+ </array>
+ <key>isa</key>
+ <string>PBXFrameworksBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
+ </dict>
+ <key>0B083D6614A831642ECCDB95</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>GRXNSBlockEnumerator.h</string>
+ <key>path</key>
+ <string>private/GRXNSBlockEnumerator.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>026236C3432E9DBC10A40748</key>
+ <key>0C52B5B243390BA62033C734</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
+ <string>sourcecode.c.h</string>
<key>path</key>
- <string>Pods-SampleTests-dummy.m</string>
+ <string>GRXWriteable.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>0385BCBCA0601E80FAD2A901</key>
+ <key>0CA3C7D4D3EF8429533AB7D5</key>
<dict>
- <key>fileRef</key>
- <string>46513F4AD14CBD2377C1E7A1</string>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>D1C458EAFDCA48A4C90131E9</string>
+ </array>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFrameworksBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
</dict>
- <key>0879DBE6FFA1852D106330B4</key>
+ <key>0CB824BF5CED7188A205D06F</key>
<dict>
<key>buildSettings</key>
<dict>
@@ -119,20 +336,15 @@
<key>CLANG_WARN_OBJC_ROOT_CLASS</key>
<string>YES</string>
<key>COPY_PHASE_STRIP</key>
- <string>YES</string>
+ <string>NO</string>
+ <key>ENABLE_NS_ASSERTIONS</key>
+ <string>NO</string>
<key>GCC_C_LANGUAGE_STANDARD</key>
<string>gnu99</string>
- <key>GCC_DYNAMIC_NO_PIC</key>
- <string>NO</string>
- <key>GCC_OPTIMIZATION_LEVEL</key>
- <string>0</string>
<key>GCC_PREPROCESSOR_DEFINITIONS</key>
<array>
- <string>DEBUG=1</string>
- <string>$(inherited)</string>
+ <string>RELEASE=1</string>
</array>
- <key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
- <string>NO</string>
<key>GCC_WARN_64_TO_32_BIT_CONVERSION</key>
<string>YES</string>
<key>GCC_WARN_ABOUT_RETURN_TYPE</key>
@@ -147,81 +359,20 @@
<string>YES</string>
<key>IPHONEOS_DEPLOYMENT_TARGET</key>
<string>8.0</string>
- <key>ONLY_ACTIVE_ARCH</key>
- <string>YES</string>
<key>STRIP_INSTALLED_PRODUCT</key>
<string>NO</string>
+ <key>VALIDATE_PRODUCT</key>
+ <string>YES</string>
</dict>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
- <string>Debug</string>
- </dict>
- <key>092D0456252ED3F90F66084D</key>
- <dict>
- <key>includeInIndex</key>
- <string>1</string>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
- <key>path</key>
- <string>Pods-Sample-environment.h</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>0BC8818D3A097831FDE0750B</key>
- <dict>
- <key>fileRef</key>
- <string>BC50D76123DA4B85E6AD77B4</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>0C57EED724EBF58759F9F6DF</key>
- <dict>
- <key>fileRef</key>
- <string>4BB75B0FC7359E8EA8672954</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>0D09CEB9308FA5BACEB5F84C</key>
- <dict>
- <key>children</key>
- <array>
- <string>30063D2979A72CA1050BD4A6</string>
- <string>DB3528F609E6177E1C5A691C</string>
- <string>026236C3432E9DBC10A40748</string>
- <string>EF8B807C5A2059D6C709450D</string>
- <string>8B503889F903CED9A12E5C87</string>
- <string>591702CE7D8AF91674F1640F</string>
- <string>DB677464758307786D68CCE9</string>
- </array>
- <key>isa</key>
- <string>PBXGroup</string>
- <key>name</key>
- <string>Pods-SampleTests</string>
- <key>path</key>
- <string>Target Support Files/Pods-SampleTests</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>0D53085043D992DC00E29F0A</key>
- <dict>
- <key>includeInIndex</key>
- <string>1</string>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
- <key>path</key>
- <string>GRXWriteable.h</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>Release</string>
</dict>
- <key>0F20828B67FDCB990B1818E9</key>
+ <key>0E66C9AA7C5988807A667377</key>
<dict>
<key>baseConfigurationReference</key>
- <string>DB677464758307786D68CCE9</string>
+ <string>A0416D4A1F0C863C1856405A</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
@@ -266,161 +417,140 @@
<key>name</key>
<string>Release</string>
</dict>
- <key>11072993378724E9AF9CAF85</key>
+ <key>0F24DA6964D128ACB940F0A6</key>
<dict>
- <key>explicitFileType</key>
- <string>archive.ar</string>
- <key>includeInIndex</key>
- <string>0</string>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>path</key>
- <string>libPods-SampleTests-RxLibrary.a</string>
- <key>sourceTree</key>
- <string>BUILT_PRODUCTS_DIR</string>
- </dict>
- <key>1146D04C598DEBA045C96C2F</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array>
- <string>1F3162E71EE5AA2B65DEC06D</string>
- </array>
+ <key>fileRef</key>
+ <string>B5E4A18F0B2376BE20D1C8A5</string>
<key>isa</key>
- <string>PBXFrameworksBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
+ <string>PBXBuildFile</string>
</dict>
- <key>114F64D42E2AF2F3EBDE9BCB</key>
+ <key>0F5AF35D0B405F8C010B9E02</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
- <string>1D31B6F63B148D2EA5637823</string>
+ <string>A0B86020532CA90CD846B0C8</string>
</array>
<key>isa</key>
<string>PBXSourcesBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
- <key>124B93EFC16A2026269840B2</key>
+ <key>1284152D2F99A63F97EE1E41</key>
<dict>
+ <key>fileRef</key>
+ <string>439AF2B977736E012C79B2FE</string>
<key>isa</key>
- <string>PBXTargetDependency</string>
- <key>name</key>
- <string>Pods-RxLibrary</string>
- <key>target</key>
- <string>6BFD156F312F6CAA1E5B00CA</string>
- <key>targetProxy</key>
- <string>DB007D27F74F8F72C72A1079</string>
+ <string>PBXBuildFile</string>
</dict>
- <key>14D92BB2ED12213381BD2EB9</key>
+ <key>14C9839270FF7F89876551CF</key>
<dict>
- <key>buildConfigurationList</key>
- <string>C4342DDEEF3C3290956C21DF</string>
- <key>buildPhases</key>
- <array>
- <string>432AE81157886BE484236751</string>
- <string>87700F015FA41F53D88CA4BC</string>
- </array>
- <key>buildRules</key>
- <array/>
- <key>dependencies</key>
- <array>
- <string>F8B4778EF3030EEC2E9927CE</string>
- </array>
+ <key>fileRef</key>
+ <string>6394EA7A57663B87FD034792</string>
<key>isa</key>
- <string>PBXNativeTarget</string>
- <key>name</key>
- <string>Pods-SampleTests</string>
- <key>productName</key>
- <string>Pods-SampleTests</string>
- <key>productReference</key>
- <string>42A375125393D0613249D046</string>
- <key>productType</key>
- <string>com.apple.product-type.library.static</string>
+ <string>PBXBuildFile</string>
</dict>
- <key>15DC9A153BC412DB41B7F154</key>
+ <key>152BFB6270DCF24A85D66444</key>
<dict>
<key>fileRef</key>
- <string>5AEFA85A5F1AD206D68B0576</string>
+ <string>D0641C22EEADF13905743122</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>15F64D3D7D10DB47599A72EB</key>
+ <key>16054FFCB52E34B7784B3D2C</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
- <key>name</key>
- <string>GRXMappingWriter.m</string>
+ <string>text.xcconfig</string>
<key>path</key>
- <string>transformations/GRXMappingWriter.m</string>
+ <string>Pods-RxLibrary.xcconfig</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>16E6BBD46D9745611EF313FB</key>
+ <key>164DD73ED2C34BC6B3156AE5</key>
<dict>
<key>fileRef</key>
- <string>BECFE3DCB323841851972996</string>
+ <string>A7CE4BCE7B6959BCDC54B854</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>17F4C2F25813E7A4588FF233</key>
- <dict>
- <key>buildConfigurations</key>
- <array>
- <string>B153046F0CBA526564A9673C</string>
- <string>B960FF1BE77D3F4459EEB1E0</string>
- </array>
- <key>defaultConfigurationIsVisible</key>
- <string>0</string>
- <key>defaultConfigurationName</key>
- <string>Release</string>
- <key>isa</key>
- <string>XCConfigurationList</string>
- </dict>
- <key>1868370C0050315A6B835D42</key>
+ <key>16D5B426090D302B58B8FF40</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
- <key>name</key>
- <string>GRXNSScalarEnumerator.h</string>
+ <string>sourcecode.c.objc</string>
<key>path</key>
- <string>private/GRXNSScalarEnumerator.h</string>
+ <string>Pods-Sample-dummy.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>19001096C873023095C4F032</key>
+ <key>1769B37B91BE6D2B4C498D2C</key>
+ <dict>
+ <key>isa</key>
+ <string>PBXTargetDependency</string>
+ <key>name</key>
+ <string>Pods-Sample-RxLibrary</string>
+ <key>target</key>
+ <string>4E2021A981DA9A189922E0C6</string>
+ <key>targetProxy</key>
+ <string>17CC3137FB05C14750ECA482</string>
+ </dict>
+ <key>17CC3137FB05C14750ECA482</key>
+ <dict>
+ <key>containerPortal</key>
+ <string>E61F9CBEB0CA9A172C4AA56B</string>
+ <key>isa</key>
+ <string>PBXContainerItemProxy</string>
+ <key>proxyType</key>
+ <string>1</string>
+ <key>remoteGlobalIDString</key>
+ <string>4E2021A981DA9A189922E0C6</string>
+ <key>remoteInfo</key>
+ <string>Pods-Sample-RxLibrary</string>
+ </dict>
+ <key>18738628EC8A28187A30D51F</key>
+ <dict>
+ <key>containerPortal</key>
+ <string>E61F9CBEB0CA9A172C4AA56B</string>
+ <key>isa</key>
+ <string>PBXContainerItemProxy</string>
+ <key>proxyType</key>
+ <string>1</string>
+ <key>remoteGlobalIDString</key>
+ <string>A10CFA4D4ED9B20894905742</string>
+ <key>remoteInfo</key>
+ <string>Pods-SampleTests-GRPCClient</string>
+ </dict>
+ <key>1939E5289BFF2A898AB652F4</key>
<dict>
<key>fileRef</key>
- <string>EB29FAB1F81F0D17BDAD72D0</string>
+ <string>0B083D6614A831642ECCDB95</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>1B8264EEFEF4AD585182D256</key>
+ <key>19A733EC94B0F847F901D308</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.xcconfig</string>
+ <string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>GRXNSFastEnumerator.m</string>
<key>path</key>
- <string>Pods-Sample.debug.xcconfig</string>
+ <string>private/GRXNSFastEnumerator.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>1C8DFDF9C457D910DC1FD227</key>
+ <key>1A2D9424BA1BE0E3B2598D06</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -428,129 +558,159 @@
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>GRXNSFastEnumerator.h</string>
<key>path</key>
- <string>Pods-environment.h</string>
+ <string>private/GRXNSFastEnumerator.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>1D31B6F63B148D2EA5637823</key>
+ <key>1C191978ED182A611393A626</key>
<dict>
<key>fileRef</key>
- <string>22DB20D833E7D26AEA6513D6</string>
+ <string>0B083D6614A831642ECCDB95</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>1E5420835E4862DBA55002A9</key>
+ <key>1D1E67A62BDD0A04136468E9</key>
<dict>
- <key>fileRef</key>
- <string>BECFE3DCB323841851972996</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>1F3162E71EE5AA2B65DEC06D</key>
- <dict>
- <key>fileRef</key>
- <string>56CE61A20C6F88CC0CE888C8</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>22531AF83592134D3879C3E1</key>
- <dict>
- <key>fileRef</key>
- <string>15F64D3D7D10DB47599A72EB</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>22DB20D833E7D26AEA6513D6</key>
- <dict>
- <key>includeInIndex</key>
- <string>1</string>
+ <key>baseConfigurationReference</key>
+ <string>CDA9A715DCFCE07755974888</string>
+ <key>buildSettings</key>
+ <dict>
+ <key>ALWAYS_SEARCH_USER_PATHS</key>
+ <string>NO</string>
+ <key>COPY_PHASE_STRIP</key>
+ <string>YES</string>
+ <key>DSTROOT</key>
+ <string>/tmp/xcodeproj.dst</string>
+ <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+ <string>YES</string>
+ <key>GCC_PREFIX_HEADER</key>
+ <string>Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-prefix.pch</string>
+ <key>INSTALL_PATH</key>
+ <string>$(BUILT_PRODUCTS_DIR)</string>
+ <key>IPHONEOS_DEPLOYMENT_TARGET</key>
+ <string>8.0</string>
+ <key>OTHER_CFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_CPLUSPLUSFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_LDFLAGS</key>
+ <string></string>
+ <key>OTHER_LIBTOOLFLAGS</key>
+ <string></string>
+ <key>PRODUCT_NAME</key>
+ <string>$(TARGET_NAME)</string>
+ <key>PUBLIC_HEADERS_FOLDER_PATH</key>
+ <string>$(TARGET_NAME)</string>
+ <key>SDKROOT</key>
+ <string>iphoneos</string>
+ <key>SKIP_INSTALL</key>
+ <string>YES</string>
+ <key>VALIDATE_PRODUCT</key>
+ <string>YES</string>
+ </dict>
<key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
- <key>path</key>
- <string>Pods-dummy.m</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>XCBuildConfiguration</string>
+ <key>name</key>
+ <string>Release</string>
</dict>
- <key>245F9E9690E6E08D291FC94C</key>
+ <key>1D35328CE231F0F9CD0AD192</key>
<dict>
<key>fileRef</key>
- <string>BC52B0661F25B25CE382296C</string>
+ <string>BC51F603F893AA6A748EB8EC</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>266008D38F1E72755C711699</key>
+ <key>1D7BCFDFE2B63B8DF9A95779</key>
<dict>
- <key>fileRef</key>
- <string>026236C3432E9DBC10A40748</string>
+ <key>buildConfigurations</key>
+ <array>
+ <string>667F52E3CC55312354C2DA1C</string>
+ <string>741B3AB48094A74BA06E4B41</string>
+ </array>
+ <key>defaultConfigurationIsVisible</key>
+ <string>0</string>
+ <key>defaultConfigurationName</key>
+ <string>Release</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>XCConfigurationList</string>
</dict>
- <key>2663F4401A9075DAC0B24171</key>
+ <key>1EFB19037775E7D8E9F6FC6B</key>
<dict>
- <key>includeInIndex</key>
- <string>1</string>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>CAB17FE3D2357BFAF9B8598F</string>
+ <string>F156B1B8573809A342E0AE1F</string>
+ <string>DFF269EBCC2A9D30DC7E264F</string>
+ <string>6C5ACDD3AAB1F431A03610FF</string>
+ <string>276C69BC7FCAF06166AC8561</string>
+ <string>688A44CE404A30F009CEAD70</string>
+ <string>39148152D8AC33FCD691ABF9</string>
+ <string>1284152D2F99A63F97EE1E41</string>
+ <string>CD18BC77ECA79D031662CC51</string>
+ <string>B367BCF63161EE64CC1B1DE0</string>
+ <string>2E60F7CE1E262CF0A0579F77</string>
+ </array>
<key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
- <key>path</key>
- <string>Pods-RxLibrary-dummy.m</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>PBXSourcesBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
</dict>
- <key>26E6ACBF137DBC325B4E7DA7</key>
+ <key>1F1DE3733C2AC2A97CA8885A</key>
<dict>
<key>buildConfigurationList</key>
- <string>B05A2B15C8A03AABA163D7D7</string>
+ <string>AC12B8262555F9F61255BBC0</string>
<key>buildPhases</key>
<array>
- <string>114F64D42E2AF2F3EBDE9BCB</string>
- <string>DCAB71BD665AF17533987B69</string>
+ <string>F058968A71750BBCF4F4FB1C</string>
+ <string>E066A01F3A992087F10B31CF</string>
</array>
<key>buildRules</key>
<array/>
<key>dependencies</key>
<array>
- <string>124B93EFC16A2026269840B2</string>
+ <string>69D3EA284F3612F9F534DEBB</string>
+ <string>1769B37B91BE6D2B4C498D2C</string>
</array>
<key>isa</key>
<string>PBXNativeTarget</string>
<key>name</key>
- <string>Pods</string>
+ <string>Pods-Sample</string>
<key>productName</key>
- <string>Pods</string>
+ <string>Pods-Sample</string>
<key>productReference</key>
- <string>5C30ABB95D604B483422D72A</string>
+ <string>E4F23FE4AEB216E7D1E2B7EE</string>
<key>productType</key>
<string>com.apple.product-type.library.static</string>
</dict>
- <key>27E123435067CC11FE103999</key>
+ <key>1F8BB7EDC9650BA44338F8C8</key>
<dict>
- <key>includeInIndex</key>
- <string>1</string>
+ <key>fileRef</key>
+ <string>A7CE4BCE7B6959BCDC54B854</string>
<key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>text.xcconfig</string>
- <key>path</key>
- <string>Pods-Sample.release.xcconfig</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>PBXBuildFile</string>
</dict>
- <key>288A25371032891C824CF4AA</key>
+ <key>21E0A8B187DFAE6BD32D1302</key>
<dict>
<key>fileRef</key>
- <string>838341407CEBBFB19D25C45A</string>
+ <string>35A079DEB6141A6FDFF69D63</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>29B274FDF882AB8B39814FE6</key>
+ <key>23C7B3ADDC7C78F4EEEB5FCE</key>
<dict>
<key>baseConfigurationReference</key>
- <string>687D79F4C2484F58E9796051</string>
+ <string>363608E39D7F7AA17945644A</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
@@ -565,8 +725,6 @@
<string>0</string>
<key>GCC_PRECOMPILE_PREFIX_HEADER</key>
<string>YES</string>
- <key>GCC_PREFIX_HEADER</key>
- <string>Target Support Files/Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-prefix.pch</string>
<key>GCC_PREPROCESSOR_DEFINITIONS</key>
<array>
<string>DEBUG=1</string>
@@ -596,71 +754,143 @@
<key>name</key>
<string>Debug</string>
</dict>
- <key>2AADA4C52A284ED5D41C7CF5</key>
+ <key>24F79AE5DB5FB86FCB2E2C39</key>
<dict>
<key>fileRef</key>
- <string>0D53085043D992DC00E29F0A</string>
+ <string>423B94F0660BA470EAD9DA5E</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>2B05A4C21D00E8CF0DE88447</key>
+ <key>2504847B854AC340A0712235</key>
+ <dict>
+ <key>isa</key>
+ <string>PBXTargetDependency</string>
+ <key>name</key>
+ <string>Pods-SampleTests-GRPCClient</string>
+ <key>target</key>
+ <string>A10CFA4D4ED9B20894905742</string>
+ <key>targetProxy</key>
+ <string>18738628EC8A28187A30D51F</string>
+ </dict>
+ <key>255EE0013C9A672760CB1F29</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
- <key>name</key>
- <string>Pods-SampleTests-RxLibrary-prefix.pch</string>
+ <string>text.script.sh</string>
<key>path</key>
- <string>../Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-prefix.pch</string>
+ <string>Pods-SampleTests-resources.sh</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>2B341576464148A01DCFB28B</key>
+ <key>2598A10FC8B9442686B70419</key>
<dict>
- <key>fileRef</key>
- <string>3AD75C69A61408EF8BE0F247</string>
+ <key>baseConfigurationReference</key>
+ <string>A2F53747970EB33A4D75EAB4</string>
+ <key>buildSettings</key>
+ <dict>
+ <key>ALWAYS_SEARCH_USER_PATHS</key>
+ <string>NO</string>
+ <key>COPY_PHASE_STRIP</key>
+ <string>YES</string>
+ <key>DSTROOT</key>
+ <string>/tmp/xcodeproj.dst</string>
+ <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+ <string>YES</string>
+ <key>GCC_PREFIX_HEADER</key>
+ <string>Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-prefix.pch</string>
+ <key>INSTALL_PATH</key>
+ <string>$(BUILT_PRODUCTS_DIR)</string>
+ <key>IPHONEOS_DEPLOYMENT_TARGET</key>
+ <string>8.0</string>
+ <key>OTHER_CFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_CPLUSPLUSFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_LDFLAGS</key>
+ <string></string>
+ <key>OTHER_LIBTOOLFLAGS</key>
+ <string></string>
+ <key>PRODUCT_NAME</key>
+ <string>$(TARGET_NAME)</string>
+ <key>PUBLIC_HEADERS_FOLDER_PATH</key>
+ <string>$(TARGET_NAME)</string>
+ <key>SDKROOT</key>
+ <string>iphoneos</string>
+ <key>SKIP_INSTALL</key>
+ <string>YES</string>
+ <key>VALIDATE_PRODUCT</key>
+ <string>YES</string>
+ </dict>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>XCBuildConfiguration</string>
+ <key>name</key>
+ <string>Release</string>
</dict>
- <key>2B49DCA723ECBC0F2777B960</key>
+ <key>25992CA77847232BA741CA19</key>
<dict>
<key>fileRef</key>
- <string>BC52B0661F25B25CE382296C</string>
+ <string>D444D13D4D0829CF4142949A</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>2D6833D4D544AC13450405B1</key>
+ <key>26A838790310501CB08753A6</key>
<dict>
<key>fileRef</key>
- <string>2663F4401A9075DAC0B24171</string>
+ <string>FB880554D85130C733402058</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>2D7732FBE1A5A7FC42D4DC4B</key>
+ <key>2705BF8D166EFF8A2D44B2BA</key>
<dict>
- <key>fileRef</key>
- <string>56CE61A20C6F88CC0CE888C8</string>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
+ <key>path</key>
+ <string>NSEnumerator+GRXUtil.h</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>2DA405F6E578008991B3F9EA</key>
+ <key>2747C9BA8D7E0E6EFDFE5D3E</key>
<dict>
- <key>fileRef</key>
- <string>BECFE3DCB323841851972996</string>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>D153B061942AF56AA4E13412</string>
+ <string>14C9839270FF7F89876551CF</string>
+ <string>D250768ADF5442C9C8880A18</string>
+ <string>40E563CF0E6B25CBB6DB08E8</string>
+ <string>40F62119098548A9D94FC1CD</string>
+ <string>69179090F5D6919F11110907</string>
+ <string>8D8D6FB22E4E5302E899F3C7</string>
+ <string>8944DC99856C99235675D65C</string>
+ <string>B7FD4EDD742EE7C18D733B84</string>
+ </array>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXHeadersBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
</dict>
- <key>2F91A2AD622F87D98C9B0E1E</key>
+ <key>276C69BC7FCAF06166AC8561</key>
<dict>
<key>fileRef</key>
- <string>0D53085043D992DC00E29F0A</string>
+ <string>2DA7CCAA52B82F817FA61F5A</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>2FE1D288B8389F925AA3CE0C</key>
+ <key>28C6D48989DA211E0BACAFC2</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -669,82 +899,87 @@
<key>lastKnownFileType</key>
<string>text.xcconfig</string>
<key>path</key>
- <string>Pods-RxLibrary-Private.xcconfig</string>
+ <string>Pods-Sample.debug.xcconfig</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>30063D2979A72CA1050BD4A6</key>
+ <key>2C4B95CD783F7C0739F77B66</key>
<dict>
- <key>includeInIndex</key>
- <string>1</string>
+ <key>fileRef</key>
+ <string>0C52B5B243390BA62033C734</string>
<key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>text</string>
- <key>path</key>
- <string>Pods-SampleTests-acknowledgements.markdown</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>PBXBuildFile</string>
</dict>
- <key>3133D1CCCF4F1FE3E893509C</key>
+ <key>2C949CFC10D3564D45005639</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.xcconfig</string>
+ <string>sourcecode.c.h</string>
<key>path</key>
- <string>Pods-RxLibrary.xcconfig</string>
+ <string>Pods-Sample-environment.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>352B4C7135E3BBBFEBAB7F55</key>
+ <key>2CF8BB8D6A668D6213E18915</key>
<dict>
<key>fileRef</key>
- <string>BA9F62DDE37FF0D601A4D5EA</string>
+ <string>3E850442224A3D7C7540C6C5</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>355670384FC160AB6C32765E</key>
+ <key>2D505FE685E88A2746CB2C30</key>
<dict>
- <key>children</key>
- <array>
- <string>56CE61A20C6F88CC0CE888C8</string>
- </array>
+ <key>fileRef</key>
+ <string>D45F5D73E3D255043B7E349A</string>
<key>isa</key>
- <string>PBXGroup</string>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>2D97FDE1D611758F0CC8EAC3</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
<key>name</key>
- <string>iOS</string>
+ <string>Pods-Sample-RxLibrary-dummy.m</string>
+ <key>path</key>
+ <string>../Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-dummy.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>36C139FD3DEDB8CA2A1D3295</key>
+ <key>2DA7CCAA52B82F817FA61F5A</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text</string>
+ <string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>GRXNSScalarEnumerator.m</string>
<key>path</key>
- <string>Pods-acknowledgements.markdown</string>
+ <string>private/GRXNSScalarEnumerator.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>36FF37EAC7E918C4CD867776</key>
+ <key>2E60F7CE1E262CF0A0579F77</key>
<dict>
<key>fileRef</key>
- <string>EB29FAB1F81F0D17BDAD72D0</string>
+ <string>93CEF17866E8E476701B3AEB</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>3749A34D3DFA6E2F3539E546</key>
+ <key>2EBE2A8DBCF9EED6B632AE6F</key>
<dict>
<key>buildConfigurations</key>
<array>
- <string>0879DBE6FFA1852D106330B4</string>
- <string>6B88B9AB87714A903970EAED</string>
+ <string>23C7B3ADDC7C78F4EEEB5FCE</string>
+ <string>B32DC879307F72182ED4B8EF</string>
</array>
<key>defaultConfigurationIsVisible</key>
<string>0</string>
@@ -753,54 +988,77 @@
<key>isa</key>
<string>XCConfigurationList</string>
</dict>
- <key>3800855A656C8D0813062074</key>
+ <key>306408CC38FAB0410E0D90E7</key>
<dict>
- <key>buildConfigurationList</key>
- <string>9508723D4C0D4321A5188108</string>
- <key>buildPhases</key>
- <array>
- <string>F779618174957BE31FCCDE56</string>
- <string>45FC41033EB61B16BC8151B9</string>
- <string>8AB7020D9B71B1B4F34249BE</string>
- </array>
- <key>buildRules</key>
- <array/>
- <key>dependencies</key>
- <array/>
+ <key>fileRef</key>
+ <string>003D718984A073D9C6C71422</string>
<key>isa</key>
- <string>PBXNativeTarget</string>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>31B56E69FEFEC33075859CFE</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
<key>name</key>
- <string>Pods-SampleTests-RxLibrary</string>
- <key>productName</key>
- <string>Pods-SampleTests-RxLibrary</string>
- <key>productReference</key>
- <string>11072993378724E9AF9CAF85</string>
- <key>productType</key>
- <string>com.apple.product-type.library.static</string>
+ <string>Pods-Sample-RxLibrary-prefix.pch</string>
+ <key>path</key>
+ <string>../Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-prefix.pch</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>397A12919FB4BDD608FE207C</key>
+ <key>327414DEAB5056533318E26E</key>
<dict>
<key>children</key>
<array>
- <string>B4FB10339A6A2E1AAF255802</string>
- <string>5840BDD08ED67C12ADB1DF08</string>
- <string>817F8B2E38A51910E8F8EC7D</string>
- <string>8B05D39455D5B23720961FA4</string>
- <string>F2BB78774BCEFD5DDDF38239</string>
+ <string>AD88FBBAFBF1F13467342BD1</string>
+ <string>EB86FC57EE5F50944BA86EE3</string>
+ <string>7E3BE2E23E465D87ECF0E962</string>
+ <string>EE156F6201B39BDD5F905822</string>
+ <string>AAD40140819824C5EF180664</string>
+ <string>A2F53747970EB33A4D75EAB4</string>
+ <string>732C03DC74F2738AE9E86ECA</string>
+ <string>0104C23B56A2F6D406AD513A</string>
+ <string>45F8559BE23F19F91747A28B</string>
+ <string>CDA9A715DCFCE07755974888</string>
+ <string>D0E4885FFC11D4A532FAB517</string>
+ <string>4B2A75095DECE2C0424CBCFC</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
+ <key>name</key>
+ <string>Support Files</string>
+ <key>path</key>
+ <string>../examples/Sample/Pods/Target Support Files/Pods-GRPCClient</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>3369A2EF668725CAF3F75D1F</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
+ <key>name</key>
+ <string>Pods-SampleTests-RxLibrary-Private.xcconfig</string>
+ <key>path</key>
+ <string>../Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-Private.xcconfig</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>3A4DE73D0D0274E782C1A564</key>
+ <key>339F0D64DF0A7BD0AA48186E</key>
<dict>
<key>fileRef</key>
- <string>56CE61A20C6F88CC0CE888C8</string>
+ <string>0C52B5B243390BA62033C734</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>3AD75C69A61408EF8BE0F247</key>
+ <key>34373F1941450D17C3F85B57</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -808,46 +1066,64 @@
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>GRXNSBlockEnumerator.m</string>
<key>path</key>
- <string>GRXWriteable.m</string>
+ <string>private/GRXNSBlockEnumerator.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>3C3F1A188E25219C230FFD4F</key>
+ <key>34D39E370FE6AF621D048E13</key>
<dict>
<key>fileRef</key>
- <string>9DADE0CF857B717294F7F74F</string>
+ <string>A7CE4BCE7B6959BCDC54B854</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>404D4F98249F3383235463A4</key>
+ <key>357862381E5517983B1A7AA9</key>
<dict>
- <key>fileRef</key>
- <string>56CE61A20C6F88CC0CE888C8</string>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>Pods-SampleTests-RxLibrary-dummy.m</string>
+ <key>path</key>
+ <string>../Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-dummy.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>407E794549893DD91A2ED84E</key>
+ <key>35A079DEB6141A6FDFF69D63</key>
<dict>
- <key>fileRef</key>
- <string>DB0257E62EC33F3F316EF017</string>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>GRXMappingWriter.h</string>
+ <key>path</key>
+ <string>transformations/GRXMappingWriter.h</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>42A375125393D0613249D046</key>
+ <key>363608E39D7F7AA17945644A</key>
<dict>
- <key>explicitFileType</key>
- <string>archive.ar</string>
<key>includeInIndex</key>
- <string>0</string>
+ <string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
<key>path</key>
- <string>libPods-SampleTests.a</string>
+ <string>Pods.debug.xcconfig</string>
<key>sourceTree</key>
- <string>BUILT_PRODUCTS_DIR</string>
+ <string>&lt;group&gt;</string>
</dict>
- <key>42B461F095E85911637DFD60</key>
+ <key>36CC8128F585662CE7EF2114</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -856,60 +1132,74 @@
<key>lastKnownFileType</key>
<string>sourcecode.c.objc</string>
<key>name</key>
- <string>Pods-SampleTests-RxLibrary-dummy.m</string>
+ <string>NSData+GRPC.m</string>
<key>path</key>
- <string>../Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-dummy.m</string>
+ <string>private/NSData+GRPC.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>432AE81157886BE484236751</key>
+ <key>39148152D8AC33FCD691ABF9</key>
<dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
+ <key>fileRef</key>
+ <string>EA915E5B33F07CD0B9F8ACE9</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>39B5F5991112189C12D87D40</key>
+ <dict>
+ <key>children</key>
<array>
- <string>266008D38F1E72755C711699</string>
+ <string>EC4BA4B1D02C3BA6DBB450E7</string>
+ <string>A0064CCC8EC60B3CD0E4F72F</string>
+ <string>7484EC496D674B8D63C9B14A</string>
+ <string>4D580403A4A30D76B96E9775</string>
+ <string>E2EA100B27BDAB6CA32F3814</string>
</array>
<key>isa</key>
- <string>PBXSourcesBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
+ <string>PBXGroup</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>43CC797FB2A733DF5B7A9F05</key>
+ <key>3B52D357FFBB1F7AA20D702F</key>
<dict>
<key>fileRef</key>
- <string>15F64D3D7D10DB47599A72EB</string>
+ <string>78C38086F90849CD909A9847</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>458FF1EEF4EB9646C699F3DD</key>
+ <key>3C7D98B6D2E351C032BE20A6</key>
<dict>
<key>fileRef</key>
- <string>57AC9BF19B9635D7476CA5FA</string>
+ <string>6394EA7A57663B87FD034792</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>45A1913C8F48686C1FC82520</key>
+ <key>3CBFCE5C8506BD28C4AA47EC</key>
+ <dict>
+ <key>isa</key>
+ <string>PBXTargetDependency</string>
+ <key>name</key>
+ <string>Pods-Sample-RxLibrary</string>
+ <key>target</key>
+ <string>4E2021A981DA9A189922E0C6</string>
+ <key>targetProxy</key>
+ <string>9F21B0DA9C171E66AC1CB1E2</string>
+ </dict>
+ <key>3D7B59A31C0CF6B937B6B56F</key>
<dict>
<key>fileRef</key>
- <string>9DADE0CF857B717294F7F74F</string>
+ <string>439AF2B977736E012C79B2FE</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>45FC41033EB61B16BC8151B9</key>
+ <key>3DE1AA4AD4B460F4312B1359</key>
<dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array>
- <string>2D7732FBE1A5A7FC42D4DC4B</string>
- </array>
+ <key>fileRef</key>
+ <string>A7CE4BCE7B6959BCDC54B854</string>
<key>isa</key>
- <string>PBXFrameworksBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
+ <string>PBXBuildFile</string>
</dict>
- <key>46513F4AD14CBD2377C1E7A1</key>
+ <key>3E850442224A3D7C7540C6C5</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -918,332 +1208,713 @@
<key>lastKnownFileType</key>
<string>sourcecode.c.h</string>
<key>name</key>
- <string>GRXNSFastEnumerator.h</string>
+ <string>NSError+GRPC.h</string>
<key>path</key>
- <string>private/GRXNSFastEnumerator.h</string>
+ <string>private/NSError+GRPC.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>46A8EFCC59CF17E048EC34ED</key>
+ <key>3FFB0F49732540C0F34BEA5D</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.plist.xml</string>
+ <key>path</key>
+ <string>Pods-Sample-acknowledgements.plist</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>40E563CF0E6B25CBB6DB08E8</key>
<dict>
<key>fileRef</key>
- <string>5AEFA85A5F1AD206D68B0576</string>
+ <string>003D718984A073D9C6C71422</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>46FAFA88CA3E774263422EB9</key>
+ <key>40F1A996749176D9DB148901</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>C59D49EFF10934AFF82CA873</string>
+ </array>
+ <key>isa</key>
+ <string>PBXSourcesBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
+ </dict>
+ <key>40F62119098548A9D94FC1CD</key>
+ <dict>
+ <key>fileRef</key>
+ <string>EE695A82B047142EA781152E</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>41FD4DEF364AC343F07212C1</key>
<dict>
<key>fileRef</key>
- <string>3AD75C69A61408EF8BE0F247</string>
+ <string>FB880554D85130C733402058</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>4946B2D315E9BF5CBACD7D52</key>
+ <key>423B94F0660BA470EAD9DA5E</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.plist.xml</string>
+ <string>sourcecode.c.h</string>
<key>path</key>
- <string>Pods-acknowledgements.plist</string>
+ <string>GRPCMethodName.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>4954E8CE730737CD2991E502</key>
+ <key>42669F81E3800361030A567A</key>
+ <dict>
+ <key>fileRef</key>
+ <string>517E28171A4524F9C518EAAC</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>430E7D130A089632FA407274</key>
<dict>
<key>children</key>
<array>
- <string>BECFE3DCB323841851972996</string>
- <string>BC52B0661F25B25CE382296C</string>
- <string>9CFAC09E370EA1C96C8D2880</string>
- <string>15F64D3D7D10DB47599A72EB</string>
- <string>5AEFA85A5F1AD206D68B0576</string>
- <string>4BB75B0FC7359E8EA8672954</string>
- <string>46513F4AD14CBD2377C1E7A1</string>
- <string>636AC1003F2C71FFD74542CD</string>
- <string>1868370C0050315A6B835D42</string>
- <string>57AC9BF19B9635D7476CA5FA</string>
- <string>0D53085043D992DC00E29F0A</string>
- <string>3AD75C69A61408EF8BE0F247</string>
- <string>DB0257E62EC33F3F316EF017</string>
- <string>BDA58E5E1AE450540A2B0227</string>
- <string>0260773D27B4AE159FB0B22D</string>
- <string>EB29FAB1F81F0D17BDAD72D0</string>
- <string>838341407CEBBFB19D25C45A</string>
- <string>F763F3DF1B47888E75D0ED9C</string>
- <string>9DADE0CF857B717294F7F74F</string>
- <string>BA9F62DDE37FF0D601A4D5EA</string>
- <string>D49849E96C0C5FFB93C810CD</string>
+ <string>BC51F603F893AA6A748EB8EC</string>
+ <string>53A5EA857F02C1DEEC269122</string>
+ <string>6394EA7A57663B87FD034792</string>
+ <string>FB880554D85130C733402058</string>
+ <string>6A4F426FF21092B2A4B44022</string>
+ <string>D0641C22EEADF13905743122</string>
+ <string>003D718984A073D9C6C71422</string>
+ <string>F541961867C9493F07D54B8E</string>
+ <string>423B94F0660BA470EAD9DA5E</string>
+ <string>E0CF2237012441B69E760029</string>
+ <string>EE695A82B047142EA781152E</string>
+ <string>78C38086F90849CD909A9847</string>
+ <string>D45F5D73E3D255043B7E349A</string>
+ <string>36CC8128F585662CE7EF2114</string>
+ <string>517E28171A4524F9C518EAAC</string>
+ <string>66A375345A9F319AE182BDBD</string>
+ <string>3E850442224A3D7C7540C6C5</string>
+ <string>6BBDA0AD2955451BBF881052</string>
+ <string>327414DEAB5056533318E26E</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
- <string>RxLibrary</string>
+ <string>GRPCClient</string>
<key>path</key>
- <string>../../../RxLibrary</string>
+ <string>../../../GRPCClient</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>4972C151CE9A8A15BC1AE2C8</key>
+ <key>433B6972ED95680C5FB6FAE3</key>
+ <dict>
+ <key>fileRef</key>
+ <string>1A2D9424BA1BE0E3B2598D06</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>439AF2B977736E012C79B2FE</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
- <key>name</key>
- <string>Pods-Sample-RxLibrary-prefix.pch</string>
+ <string>sourcecode.c.objc</string>
<key>path</key>
- <string>../Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-prefix.pch</string>
+ <string>GRXWriter+Transformations.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>4BB47C74830C63C90981278E</key>
+ <key>44C27BC8E89A85C90BC42638</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
- <string>245F9E9690E6E08D291FC94C</string>
- <string>A96854FB48432263FE68C313</string>
- <string>AA52EF1CD8A3683472BD86FE</string>
- <string>BB88043BB37FC0261BA90A30</string>
- <string>54A02FC8DA14CEC49EA8C8D5</string>
- <string>B7902691B66134F3764663D9</string>
- <string>19001096C873023095C4F032</string>
- <string>E86A17CE1D79ECDCEBF91109</string>
- <string>8BB6B6B3653FC309CB8EB3A0</string>
- <string>7BBF3F432525D33FCB074BD5</string>
- <string>2D6833D4D544AC13450405B1</string>
+ <string>1D35328CE231F0F9CD0AD192</string>
+ <string>9C6B481EF2F6601D5D6F4B6D</string>
+ <string>C31B151DCFB1F263B8E344BF</string>
+ <string>EC47C9C8660A81111C71C967</string>
+ <string>8C3E05D9178D147F7D7EA7D0</string>
+ <string>24F79AE5DB5FB86FCB2E2C39</string>
+ <string>2D505FE685E88A2746CB2C30</string>
+ <string>AB2C87B84886AB4CF107C5A1</string>
+ <string>F911880EC1D908050569F8AF</string>
</array>
<key>isa</key>
- <string>PBXSourcesBuildPhase</string>
+ <string>PBXHeadersBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
- <key>4BB75B0FC7359E8EA8672954</key>
+ <key>45F8559BE23F19F91747A28B</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
+ <string>text.xcconfig</string>
<key>name</key>
- <string>GRXNSBlockEnumerator.m</string>
+ <string>Pods-SampleTests-GRPCClient.xcconfig</string>
<key>path</key>
- <string>private/GRXNSBlockEnumerator.m</string>
+ <string>../Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient.xcconfig</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>50FF607D5DA961C6BEF4ABAC</key>
+ <key>474A50F85C06F74769FAD474</key>
+ <dict>
+ <key>buildConfigurationList</key>
+ <string>C75867D6DF922C6894ACCC88</string>
+ <key>buildPhases</key>
+ <array>
+ <string>7C51A49564BFF0A55C886597</string>
+ <string>D520F3474212A72655D2F0ED</string>
+ <string>5AE8B8582CBA2762187AB9CB</string>
+ </array>
+ <key>buildRules</key>
+ <array/>
+ <key>dependencies</key>
+ <array/>
+ <key>isa</key>
+ <string>PBXNativeTarget</string>
+ <key>name</key>
+ <string>Pods-SampleTests-RxLibrary</string>
+ <key>productName</key>
+ <string>Pods-SampleTests-RxLibrary</string>
+ <key>productReference</key>
+ <string>C438A6F7EF173F2ED50AF192</string>
+ <key>productType</key>
+ <string>com.apple.product-type.library.static</string>
+ </dict>
+ <key>48E3F41513DAE1D12CBF544D</key>
<dict>
<key>fileRef</key>
- <string>838341407CEBBFB19D25C45A</string>
+ <string>7F5DF8C37493F93C2636BAD6</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>5280A583CA6C6C66698AE67C</key>
+ <key>49D70C2F1EBB0B8BC452D632</key>
<dict>
<key>fileRef</key>
- <string>DB0257E62EC33F3F316EF017</string>
+ <string>35A079DEB6141A6FDFF69D63</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>54A02FC8DA14CEC49EA8C8D5</key>
+ <key>4B0816A85B8DA041883CEDBE</key>
<dict>
<key>fileRef</key>
- <string>57AC9BF19B9635D7476CA5FA</string>
+ <string>36CC8128F585662CE7EF2114</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>56CE61A20C6F88CC0CE888C8</key>
+ <key>4B2A75095DECE2C0424CBCFC</key>
<dict>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>wrapper.framework</string>
+ <string>sourcecode.c.h</string>
<key>name</key>
- <string>Foundation.framework</string>
+ <string>Pods-SampleTests-GRPCClient-prefix.pch</string>
<key>path</key>
- <string>Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework</string>
+ <string>../Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-prefix.pch</string>
<key>sourceTree</key>
- <string>DEVELOPER_DIR</string>
+ <string>&lt;group&gt;</string>
</dict>
- <key>57AC9BF19B9635D7476CA5FA</key>
+ <key>4B765AEAB08FDC86E8082F7A</key>
<dict>
- <key>includeInIndex</key>
- <string>1</string>
+ <key>children</key>
+ <array>
+ <string>AF8AB55F74FABAD365BDACF0</string>
+ <string>FFC668E9994CC6407B338F9D</string>
+ <string>7E5BC0233C371682047C39BD</string>
+ <string>CC354BAF9312E63AB7D4404A</string>
+ <string>8565F9710EFA641EF9EAE78E</string>
+ <string>363608E39D7F7AA17945644A</string>
+ <string>9B871E85E76E178A206CC642</string>
+ </array>
<key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
+ <string>PBXGroup</string>
<key>name</key>
- <string>GRXNSScalarEnumerator.m</string>
+ <string>Pods</string>
<key>path</key>
- <string>private/GRXNSScalarEnumerator.m</string>
+ <string>Target Support Files/Pods</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>5840BDD08ED67C12ADB1DF08</key>
+ <key>4D580403A4A30D76B96E9775</key>
<dict>
<key>children</key>
<array>
- <string>4954E8CE730737CD2991E502</string>
+ <string>AD11CEF56188F659CB36CB34</string>
+ <string>932CFA5D0C5C2C8DA3C328AF</string>
+ <string>00303CC3049D1C9E8709A044</string>
+ <string>E4F23FE4AEB216E7D1E2B7EE</string>
+ <string>CBB34B55930DEFBDE44A62E0</string>
+ <string>EA41D57C3938E8D766E0224F</string>
+ <string>675E56BADC0C4C93E3B6B263</string>
+ <string>8DD3112B6E527E20F688C5A0</string>
+ <string>C438A6F7EF173F2ED50AF192</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
- <string>Development Pods</string>
+ <string>Products</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>591702CE7D8AF91674F1640F</key>
+ <key>4E2021A981DA9A189922E0C6</key>
+ <dict>
+ <key>buildConfigurationList</key>
+ <string>1D7BCFDFE2B63B8DF9A95779</string>
+ <key>buildPhases</key>
+ <array>
+ <string>5011677F9A4B34B7CC28BC27</string>
+ <string>9CFF85471050427EE3796F6F</string>
+ <string>C818D7947CCCEA0324CD9E79</string>
+ </array>
+ <key>buildRules</key>
+ <array/>
+ <key>dependencies</key>
+ <array/>
+ <key>isa</key>
+ <string>PBXNativeTarget</string>
+ <key>name</key>
+ <string>Pods-Sample-RxLibrary</string>
+ <key>productName</key>
+ <string>Pods-Sample-RxLibrary</string>
+ <key>productReference</key>
+ <string>EA41D57C3938E8D766E0224F</string>
+ <key>productType</key>
+ <string>com.apple.product-type.library.static</string>
+ </dict>
+ <key>4F529EACF630FA5A638408A4</key>
+ <dict>
+ <key>fileRef</key>
+ <string>78C38086F90849CD909A9847</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>5011677F9A4B34B7CC28BC27</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>25992CA77847232BA741CA19</string>
+ <string>7EE012957E76C86620A8B82D</string>
+ <string>F636FFBF62AFF197BE3CB427</string>
+ <string>8F24508F2BC37AE7B2282E42</string>
+ <string>CA8337B362EA0132CA470DB0</string>
+ <string>7B72787324EC9346B7243E79</string>
+ <string>61D40C951CD9463DBAC928AE</string>
+ <string>3D7B59A31C0CF6B937B6B56F</string>
+ <string>B37BACFCD1765840986F8AC5</string>
+ <string>9CC98083B837EFAE1058E03E</string>
+ <string>A0C815D67EA636E8E6A5E655</string>
+ </array>
+ <key>isa</key>
+ <string>PBXSourcesBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
+ </dict>
+ <key>517E28171A4524F9C518EAAC</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.xcconfig</string>
+ <string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>NSDictionary+GRPC.h</string>
<key>path</key>
- <string>Pods-SampleTests.debug.xcconfig</string>
+ <string>private/NSDictionary+GRPC.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>594F98D43B96AB5C11E61C10</key>
+ <key>51DBA8F3C7D4E67BDD768066</key>
<dict>
- <key>fileRef</key>
- <string>F763F3DF1B47888E75D0ED9C</string>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
+ <key>path</key>
+ <string>Pods-SampleTests.release.xcconfig</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>5AEFA85A5F1AD206D68B0576</key>
+ <key>53A5EA857F02C1DEEC269122</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
- <key>name</key>
- <string>GRXNSBlockEnumerator.h</string>
+ <string>sourcecode.c.objc</string>
<key>path</key>
- <string>private/GRXNSBlockEnumerator.h</string>
+ <string>GRPCCall.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>5B8A3BFE016346EF080D52C6</key>
+ <key>53E7256294CEEC3844B70A31</key>
+ <dict>
+ <key>baseConfigurationReference</key>
+ <string>EB86FC57EE5F50944BA86EE3</string>
+ <key>buildSettings</key>
+ <dict>
+ <key>ALWAYS_SEARCH_USER_PATHS</key>
+ <string>NO</string>
+ <key>COPY_PHASE_STRIP</key>
+ <string>YES</string>
+ <key>DSTROOT</key>
+ <string>/tmp/xcodeproj.dst</string>
+ <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+ <string>YES</string>
+ <key>GCC_PREFIX_HEADER</key>
+ <string>Target Support Files/Pods-GRPCClient/Pods-GRPCClient-prefix.pch</string>
+ <key>INSTALL_PATH</key>
+ <string>$(BUILT_PRODUCTS_DIR)</string>
+ <key>IPHONEOS_DEPLOYMENT_TARGET</key>
+ <string>8.0</string>
+ <key>OTHER_CFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_CPLUSPLUSFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_LDFLAGS</key>
+ <string></string>
+ <key>OTHER_LIBTOOLFLAGS</key>
+ <string></string>
+ <key>PRODUCT_NAME</key>
+ <string>$(TARGET_NAME)</string>
+ <key>PUBLIC_HEADERS_FOLDER_PATH</key>
+ <string>$(TARGET_NAME)</string>
+ <key>SDKROOT</key>
+ <string>iphoneos</string>
+ <key>SKIP_INSTALL</key>
+ <string>YES</string>
+ <key>VALIDATE_PRODUCT</key>
+ <string>YES</string>
+ </dict>
+ <key>isa</key>
+ <string>XCBuildConfiguration</string>
+ <key>name</key>
+ <string>Release</string>
+ </dict>
+ <key>55A1C5AA37880BD7D2D575C1</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
- <string>3A4DE73D0D0274E782C1A564</string>
+ <string>1F8BB7EDC9650BA44338F8C8</string>
</array>
<key>isa</key>
<string>PBXFrameworksBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
- <key>5C30ABB95D604B483422D72A</key>
+ <key>5654D46158ECA8C27895A755</key>
<dict>
- <key>explicitFileType</key>
- <string>archive.ar</string>
- <key>includeInIndex</key>
+ <key>fileRef</key>
+ <string>53A5EA857F02C1DEEC269122</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>583EF09FCBF65B9A4E5C22A7</key>
+ <dict>
+ <key>buildConfigurations</key>
+ <array>
+ <string>7D6F600B59E9C29030A96526</string>
+ <string>2598A10FC8B9442686B70419</string>
+ </array>
+ <key>defaultConfigurationIsVisible</key>
+ <string>0</string>
+ <key>defaultConfigurationName</key>
+ <string>Release</string>
+ <key>isa</key>
+ <string>XCConfigurationList</string>
+ </dict>
+ <key>5AE8B8582CBA2762187AB9CB</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>07DA0CCF4F2346740326BD7D</string>
+ <string>8D0A2E1D25EEA3A096E08B1A</string>
+ <string>1939E5289BFF2A898AB652F4</string>
+ <string>433B6972ED95680C5FB6FAE3</string>
+ <string>C90E8B6A34A6456422C8086E</string>
+ <string>7769061BD3B0C3FA2591F01E</string>
+ <string>48E3F41513DAE1D12CBF544D</string>
+ <string>9F3C74AA5715E325880AE886</string>
+ <string>0F24DA6964D128ACB940F0A6</string>
+ <string>7C036237AA7E88A084C751E0</string>
+ </array>
+ <key>isa</key>
+ <string>PBXHeadersBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
+ </dict>
+ <key>5BDD559FB35594584D1BE09E</key>
+ <dict>
+ <key>fileRef</key>
+ <string>66A375345A9F319AE182BDBD</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>617AA57F150724B1881EC92E</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>GRXNSScalarEnumerator.h</string>
<key>path</key>
- <string>libPods.a</string>
+ <string>private/GRXNSScalarEnumerator.h</string>
<key>sourceTree</key>
- <string>BUILT_PRODUCTS_DIR</string>
+ <string>&lt;group&gt;</string>
</dict>
- <key>5DE93D7B39D2D1AD7336C4AC</key>
+ <key>61D40C951CD9463DBAC928AE</key>
<dict>
<key>fileRef</key>
- <string>838341407CEBBFB19D25C45A</string>
+ <string>EA915E5B33F07CD0B9F8ACE9</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>621587D6C7759FBE7096D185</key>
+ <key>6354A9E233C358103A8D02C2</key>
<dict>
<key>fileRef</key>
- <string>46513F4AD14CBD2377C1E7A1</string>
+ <string>D6D8919597D4E28EBF5D166B</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>636AC1003F2C71FFD74542CD</key>
+ <key>6394EA7A57663B87FD034792</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
+ <string>sourcecode.c.h</string>
<key>name</key>
- <string>GRXNSFastEnumerator.m</string>
+ <string>GRPCChannel.h</string>
<key>path</key>
- <string>private/GRXNSFastEnumerator.m</string>
+ <string>private/GRPCChannel.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>687D79F4C2484F58E9796051</key>
+ <key>644143496CECB668F61BCD16</key>
+ <dict>
+ <key>children</key>
+ <array>
+ <string>98695E4E6F8168938F9CC49E</string>
+ <string>3FFB0F49732540C0F34BEA5D</string>
+ <string>16D5B426090D302B58B8FF40</string>
+ <string>2C949CFC10D3564D45005639</string>
+ <string>BEEA6A0D27020465FC6CD0AA</string>
+ <string>28C6D48989DA211E0BACAFC2</string>
+ <string>A0416D4A1F0C863C1856405A</string>
+ </array>
+ <key>isa</key>
+ <string>PBXGroup</string>
+ <key>name</key>
+ <string>Pods-Sample</string>
+ <key>path</key>
+ <string>Target Support Files/Pods-Sample</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>66448F9949C234988DD11E4E</key>
+ <dict>
+ <key>fileRef</key>
+ <string>68A0ACB0AFAA7186EB2ABE09</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>667F52E3CC55312354C2DA1C</key>
+ <dict>
+ <key>baseConfigurationReference</key>
+ <string>6C1CC360881CEA3DD2D1FE14</string>
+ <key>buildSettings</key>
+ <dict>
+ <key>ALWAYS_SEARCH_USER_PATHS</key>
+ <string>NO</string>
+ <key>COPY_PHASE_STRIP</key>
+ <string>NO</string>
+ <key>DSTROOT</key>
+ <string>/tmp/xcodeproj.dst</string>
+ <key>GCC_DYNAMIC_NO_PIC</key>
+ <string>NO</string>
+ <key>GCC_OPTIMIZATION_LEVEL</key>
+ <string>0</string>
+ <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+ <string>YES</string>
+ <key>GCC_PREFIX_HEADER</key>
+ <string>Target Support Files/Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-prefix.pch</string>
+ <key>GCC_PREPROCESSOR_DEFINITIONS</key>
+ <array>
+ <string>DEBUG=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
+ <string>NO</string>
+ <key>INSTALL_PATH</key>
+ <string>$(BUILT_PRODUCTS_DIR)</string>
+ <key>IPHONEOS_DEPLOYMENT_TARGET</key>
+ <string>8.0</string>
+ <key>OTHER_LDFLAGS</key>
+ <string></string>
+ <key>OTHER_LIBTOOLFLAGS</key>
+ <string></string>
+ <key>PRODUCT_NAME</key>
+ <string>$(TARGET_NAME)</string>
+ <key>PUBLIC_HEADERS_FOLDER_PATH</key>
+ <string>$(TARGET_NAME)</string>
+ <key>SDKROOT</key>
+ <string>iphoneos</string>
+ <key>SKIP_INSTALL</key>
+ <string>YES</string>
+ </dict>
+ <key>isa</key>
+ <string>XCBuildConfiguration</string>
+ <key>name</key>
+ <string>Debug</string>
+ </dict>
+ <key>66A375345A9F319AE182BDBD</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.xcconfig</string>
+ <string>sourcecode.c.objc</string>
<key>name</key>
- <string>Pods-SampleTests-RxLibrary-Private.xcconfig</string>
+ <string>NSDictionary+GRPC.m</string>
<key>path</key>
- <string>../Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-Private.xcconfig</string>
+ <string>private/NSDictionary+GRPC.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>69E8FF71552D08D72B9068F1</key>
+ <key>66E177AC7F3B02B51D36A226</key>
<dict>
- <key>children</key>
+ <key>buildConfigurationList</key>
+ <string>583EF09FCBF65B9A4E5C22A7</string>
+ <key>buildPhases</key>
<array>
- <string>36C139FD3DEDB8CA2A1D3295</string>
- <string>4946B2D315E9BF5CBACD7D52</string>
- <string>22DB20D833E7D26AEA6513D6</string>
- <string>1C8DFDF9C457D910DC1FD227</string>
- <string>E14CB6F332A9E58BB5F76C07</string>
- <string>6AC13D00A5A61BDA0DE5FAAF</string>
- <string>A577CB571492B4F951064FCF</string>
+ <string>A5EDB7E25EA71C67EF1B3F82</string>
+ <string>55A1C5AA37880BD7D2D575C1</string>
+ <string>2747C9BA8D7E0E6EFDFE5D3E</string>
+ </array>
+ <key>buildRules</key>
+ <array/>
+ <key>dependencies</key>
+ <array>
+ <string>3CBFCE5C8506BD28C4AA47EC</string>
</array>
<key>isa</key>
- <string>PBXGroup</string>
+ <string>PBXNativeTarget</string>
<key>name</key>
- <string>Pods</string>
+ <string>Pods-Sample-GRPCClient</string>
+ <key>productName</key>
+ <string>Pods-Sample-GRPCClient</string>
+ <key>productReference</key>
+ <string>CBB34B55930DEFBDE44A62E0</string>
+ <key>productType</key>
+ <string>com.apple.product-type.library.static</string>
+ </dict>
+ <key>675E56BADC0C4C93E3B6B263</key>
+ <dict>
+ <key>explicitFileType</key>
+ <string>archive.ar</string>
+ <key>includeInIndex</key>
+ <string>0</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
<key>path</key>
- <string>Target Support Files/Pods</string>
+ <string>libPods-SampleTests.a</string>
+ <key>sourceTree</key>
+ <string>BUILT_PRODUCTS_DIR</string>
+ </dict>
+ <key>688A44CE404A30F009CEAD70</key>
+ <dict>
+ <key>fileRef</key>
+ <string>D6D8919597D4E28EBF5D166B</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>68A0ACB0AFAA7186EB2ABE09</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>path</key>
+ <string>NSEnumerator+GRXUtil.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>6AC13D00A5A61BDA0DE5FAAF</key>
+ <key>69179090F5D6919F11110907</key>
+ <dict>
+ <key>fileRef</key>
+ <string>423B94F0660BA470EAD9DA5E</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>69D3EA284F3612F9F534DEBB</key>
+ <dict>
+ <key>isa</key>
+ <string>PBXTargetDependency</string>
+ <key>name</key>
+ <string>Pods-Sample-GRPCClient</string>
+ <key>target</key>
+ <string>66E177AC7F3B02B51D36A226</string>
+ <key>targetProxy</key>
+ <string>72246839A1947E6558591655</string>
+ </dict>
+ <key>6A4F426FF21092B2A4B44022</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.xcconfig</string>
+ <string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>GRPCCompletionQueue.h</string>
<key>path</key>
- <string>Pods.debug.xcconfig</string>
+ <string>private/GRPCCompletionQueue.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>6B5B56ED61BE76782DF02817</key>
+ <key>6AA10AF7AE19131F66FB8586</key>
<dict>
<key>baseConfigurationReference</key>
- <string>687D79F4C2484F58E9796051</string>
+ <string>3369A2EF668725CAF3F75D1F</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
@@ -1290,60 +1961,164 @@
<key>name</key>
<string>Release</string>
</dict>
- <key>6B88B9AB87714A903970EAED</key>
+ <key>6B6C68F7F3769BB8EBEB7EE5</key>
+ <dict>
+ <key>fileRef</key>
+ <string>EA915E5B33F07CD0B9F8ACE9</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>6BBDA0AD2955451BBF881052</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>NSError+GRPC.m</string>
+ <key>path</key>
+ <string>private/NSError+GRPC.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>6BC5E8D01392B97FF237C655</key>
<dict>
+ <key>children</key>
+ <array>
+ <string>16054FFCB52E34B7784B3D2C</string>
+ <string>02396B6B22E0450EA29193E9</string>
+ <string>93CEF17866E8E476701B3AEB</string>
+ <string>E256AF33BE1D5C30780D4E96</string>
+ <string>F6B6558E339AD89F764A6D88</string>
+ <string>6C1CC360881CEA3DD2D1FE14</string>
+ <string>2D97FDE1D611758F0CC8EAC3</string>
+ <string>31B56E69FEFEC33075859CFE</string>
+ <string>DD9A2AC14E9E04D4337DB76E</string>
+ <string>3369A2EF668725CAF3F75D1F</string>
+ <string>357862381E5517983B1A7AA9</string>
+ <string>09759845E529CE5CD00BECA5</string>
+ </array>
+ <key>isa</key>
+ <string>PBXGroup</string>
+ <key>name</key>
+ <string>Support Files</string>
+ <key>path</key>
+ <string>../examples/Sample/Pods/Target Support Files/Pods-RxLibrary</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>6C1CC360881CEA3DD2D1FE14</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
+ <key>name</key>
+ <string>Pods-Sample-RxLibrary-Private.xcconfig</string>
+ <key>path</key>
+ <string>../Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-Private.xcconfig</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>6C5ACDD3AAB1F431A03610FF</key>
+ <dict>
+ <key>fileRef</key>
+ <string>19A733EC94B0F847F901D308</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>6EDAC415AC0B16B221E0397F</key>
+ <dict>
+ <key>isa</key>
+ <string>PBXTargetDependency</string>
+ <key>name</key>
+ <string>Pods-RxLibrary</string>
+ <key>target</key>
+ <string>AEECE9DFCC8F060F1E30A421</string>
+ <key>targetProxy</key>
+ <string>BCB580E2193B3624D1C471DB</string>
+ </dict>
+ <key>72246839A1947E6558591655</key>
+ <dict>
+ <key>containerPortal</key>
+ <string>E61F9CBEB0CA9A172C4AA56B</string>
+ <key>isa</key>
+ <string>PBXContainerItemProxy</string>
+ <key>proxyType</key>
+ <string>1</string>
+ <key>remoteGlobalIDString</key>
+ <string>66E177AC7F3B02B51D36A226</string>
+ <key>remoteInfo</key>
+ <string>Pods-Sample-GRPCClient</string>
+ </dict>
+ <key>73107A4E8F55EFE854586192</key>
+ <dict>
+ <key>fileRef</key>
+ <string>732C03DC74F2738AE9E86ECA</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>732C03DC74F2738AE9E86ECA</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>Pods-Sample-GRPCClient-dummy.m</string>
+ <key>path</key>
+ <string>../Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-dummy.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>741B3AB48094A74BA06E4B41</key>
+ <dict>
+ <key>baseConfigurationReference</key>
+ <string>6C1CC360881CEA3DD2D1FE14</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
<string>NO</string>
- <key>CLANG_CXX_LANGUAGE_STANDARD</key>
- <string>gnu++0x</string>
- <key>CLANG_CXX_LIBRARY</key>
- <string>libc++</string>
- <key>CLANG_ENABLE_MODULES</key>
- <string>YES</string>
- <key>CLANG_ENABLE_OBJC_ARC</key>
- <string>YES</string>
- <key>CLANG_WARN_BOOL_CONVERSION</key>
- <string>YES</string>
- <key>CLANG_WARN_CONSTANT_CONVERSION</key>
- <string>YES</string>
- <key>CLANG_WARN_DIRECT_OBJC_ISA_USAGE</key>
- <string>YES</string>
- <key>CLANG_WARN_EMPTY_BODY</key>
- <string>YES</string>
- <key>CLANG_WARN_ENUM_CONVERSION</key>
- <string>YES</string>
- <key>CLANG_WARN_INT_CONVERSION</key>
- <string>YES</string>
- <key>CLANG_WARN_OBJC_ROOT_CLASS</key>
- <string>YES</string>
<key>COPY_PHASE_STRIP</key>
- <string>NO</string>
- <key>ENABLE_NS_ASSERTIONS</key>
- <string>NO</string>
- <key>GCC_C_LANGUAGE_STANDARD</key>
- <string>gnu99</string>
- <key>GCC_PREPROCESSOR_DEFINITIONS</key>
- <array>
- <string>RELEASE=1</string>
- </array>
- <key>GCC_WARN_64_TO_32_BIT_CONVERSION</key>
- <string>YES</string>
- <key>GCC_WARN_ABOUT_RETURN_TYPE</key>
- <string>YES</string>
- <key>GCC_WARN_UNDECLARED_SELECTOR</key>
<string>YES</string>
- <key>GCC_WARN_UNINITIALIZED_AUTOS</key>
- <string>YES</string>
- <key>GCC_WARN_UNUSED_FUNCTION</key>
- <string>YES</string>
- <key>GCC_WARN_UNUSED_VARIABLE</key>
+ <key>DSTROOT</key>
+ <string>/tmp/xcodeproj.dst</string>
+ <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
<string>YES</string>
+ <key>GCC_PREFIX_HEADER</key>
+ <string>Target Support Files/Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-prefix.pch</string>
+ <key>INSTALL_PATH</key>
+ <string>$(BUILT_PRODUCTS_DIR)</string>
<key>IPHONEOS_DEPLOYMENT_TARGET</key>
<string>8.0</string>
- <key>STRIP_INSTALLED_PRODUCT</key>
- <string>NO</string>
+ <key>OTHER_CFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_CPLUSPLUSFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_LDFLAGS</key>
+ <string></string>
+ <key>OTHER_LIBTOOLFLAGS</key>
+ <string></string>
+ <key>PRODUCT_NAME</key>
+ <string>$(TARGET_NAME)</string>
+ <key>PUBLIC_HEADERS_FOLDER_PATH</key>
+ <string>$(TARGET_NAME)</string>
+ <key>SDKROOT</key>
+ <string>iphoneos</string>
+ <key>SKIP_INSTALL</key>
+ <string>YES</string>
<key>VALIDATE_PRODUCT</key>
<string>YES</string>
</dict>
@@ -1352,42 +2127,108 @@
<key>name</key>
<string>Release</string>
</dict>
- <key>6BFD156F312F6CAA1E5B00CA</key>
+ <key>7484EC496D674B8D63C9B14A</key>
+ <dict>
+ <key>children</key>
+ <array>
+ <string>808CD0E97EA8B9B2423DFBB4</string>
+ </array>
+ <key>isa</key>
+ <string>PBXGroup</string>
+ <key>name</key>
+ <string>Frameworks</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>7769061BD3B0C3FA2591F01E</key>
+ <dict>
+ <key>fileRef</key>
+ <string>0C52B5B243390BA62033C734</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>78C38086F90849CD909A9847</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>GRPCMethodName+HTTP2Encoding.m</string>
+ <key>path</key>
+ <string>private/GRPCMethodName+HTTP2Encoding.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>79254B326EAE190FCCF68500</key>
+ <dict>
+ <key>fileRef</key>
+ <string>D444D13D4D0829CF4142949A</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>7962371F2502CBAEBF859730</key>
<dict>
<key>buildConfigurationList</key>
- <string>962FF5FAC21292530C615D05</string>
+ <string>2EBE2A8DBCF9EED6B632AE6F</string>
<key>buildPhases</key>
<array>
- <string>4BB47C74830C63C90981278E</string>
- <string>5B8A3BFE016346EF080D52C6</string>
- <string>A4C1C82F355864E7D3E200DD</string>
+ <string>0F5AF35D0B405F8C010B9E02</string>
+ <string>0A5311098107B761AEF843FF</string>
</array>
<key>buildRules</key>
<array/>
<key>dependencies</key>
- <array/>
+ <array>
+ <string>9420C1F89C211902C0D87225</string>
+ <string>7EAAEBF540915967146B03A6</string>
+ </array>
<key>isa</key>
<string>PBXNativeTarget</string>
<key>name</key>
- <string>Pods-RxLibrary</string>
+ <string>Pods</string>
<key>productName</key>
- <string>Pods-RxLibrary</string>
+ <string>Pods</string>
<key>productReference</key>
- <string>A579EC5BE7E68C55CA5FECDE</string>
+ <string>AD11CEF56188F659CB36CB34</string>
<key>productType</key>
<string>com.apple.product-type.library.static</string>
</dict>
- <key>6D1D41BAE4E325572FAC7B17</key>
+ <key>7A1AC6EA0DE9920EE46DD7C6</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>D965694635120F86B2E5E101</string>
+ <string>49D70C2F1EBB0B8BC452D632</string>
+ <string>077EB8C42818FBCCF960B6A2</string>
+ <string>8563E3DF7CFBE5A416F679DD</string>
+ <string>B42B413709D355A8828EEC76</string>
+ <string>339F0D64DF0A7BD0AA48186E</string>
+ <string>832D68435FCFF5497A72F1D3</string>
+ <string>BD38F7B336495294670A28A4</string>
+ <string>D54769D14A73816406636B14</string>
+ <string>9D4AD7A95C9F70261CF7E09E</string>
+ </array>
+ <key>isa</key>
+ <string>PBXHeadersBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
+ </dict>
+ <key>7B72787324EC9346B7243E79</key>
<dict>
<key>fileRef</key>
- <string>9DADE0CF857B717294F7F74F</string>
+ <string>D6D8919597D4E28EBF5D166B</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>6E00FD6D197F0D1332D11199</key>
+ <key>7BA366CBC6DBCDC7984BCC50</key>
<dict>
<key>baseConfigurationReference</key>
- <string>1B8264EEFEF4AD585182D256</string>
+ <string>CDA9A715DCFCE07755974888</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
@@ -1402,6 +2243,8 @@
<string>0</string>
<key>GCC_PRECOMPILE_PREFIX_HEADER</key>
<string>YES</string>
+ <key>GCC_PREFIX_HEADER</key>
+ <string>Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-prefix.pch</string>
<key>GCC_PREPROCESSOR_DEFINITIONS</key>
<array>
<string>DEBUG=1</string>
@@ -1431,28 +2274,40 @@
<key>name</key>
<string>Debug</string>
</dict>
- <key>6E0669CB3E76E19FC854BA74</key>
+ <key>7C036237AA7E88A084C751E0</key>
<dict>
<key>fileRef</key>
- <string>4BB75B0FC7359E8EA8672954</string>
+ <string>2705BF8D166EFF8A2D44B2BA</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>6EB14BC96525C955FBD5CC75</key>
+ <key>7C51A49564BFF0A55C886597</key>
<dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>79254B326EAE190FCCF68500</string>
+ <string>E23D43F03E7C19D671C93F81</string>
+ <string>E328084D7C583851D3BE25CF</string>
+ <string>8304D6194CF27F78FD63D3E0</string>
+ <string>7E0A094939C76D9C1097CE47</string>
+ <string>6354A9E233C358103A8D02C2</string>
+ <string>6B6C68F7F3769BB8EBEB7EE5</string>
+ <string>9520D95CEA199664DEA83898</string>
+ <string>A8C31E8535FB26B38A1831C0</string>
+ <string>66448F9949C234988DD11E4E</string>
+ <string>95ABB7ADC6AA8ABDA7E32C0B</string>
+ </array>
<key>isa</key>
- <string>PBXTargetDependency</string>
- <key>name</key>
- <string>Pods-Sample-RxLibrary</string>
- <key>target</key>
- <string>F6C59E5B4CFE053E9F98000E</string>
- <key>targetProxy</key>
- <string>A0215878A7EC41E833B5F1D2</string>
+ <string>PBXSourcesBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
</dict>
- <key>74F28D2155D125C3068F96BE</key>
+ <key>7D6F600B59E9C29030A96526</key>
<dict>
<key>baseConfigurationReference</key>
- <string>6AC13D00A5A61BDA0DE5FAAF</string>
+ <string>A2F53747970EB33A4D75EAB4</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
@@ -1467,6 +2322,8 @@
<string>0</string>
<key>GCC_PRECOMPILE_PREFIX_HEADER</key>
<string>YES</string>
+ <key>GCC_PREFIX_HEADER</key>
+ <string>Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-prefix.pch</string>
<key>GCC_PREPROCESSOR_DEFINITIONS</key>
<array>
<string>DEBUG=1</string>
@@ -1496,140 +2353,331 @@
<key>name</key>
<string>Debug</string>
</dict>
- <key>7A8627E1649F66DEE014EB46</key>
+ <key>7E0A094939C76D9C1097CE47</key>
+ <dict>
+ <key>fileRef</key>
+ <string>2DA7CCAA52B82F817FA61F5A</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>7E3BE2E23E465D87ECF0E962</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>path</key>
+ <string>Pods-GRPCClient-dummy.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>7E5BC0233C371682047C39BD</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>path</key>
+ <string>Pods-dummy.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>7EAAEBF540915967146B03A6</key>
+ <dict>
+ <key>isa</key>
+ <string>PBXTargetDependency</string>
+ <key>name</key>
+ <string>Pods-RxLibrary</string>
+ <key>target</key>
+ <string>AEECE9DFCC8F060F1E30A421</string>
+ <key>targetProxy</key>
+ <string>DF829332517E7136AED2EC79</string>
+ </dict>
+ <key>7EE012957E76C86620A8B82D</key>
+ <dict>
+ <key>fileRef</key>
+ <string>CEA794A7056AFAB8256CC44D</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>7F5DF8C37493F93C2636BAD6</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
+ <key>path</key>
+ <string>GRXWriter+Immediate.h</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>808CD0E97EA8B9B2423DFBB4</key>
<dict>
<key>children</key>
<array>
- <string>D53A8F2B11E6C2C187AFFF1D</string>
- <string>B50ECED4CEC7554ED6077619</string>
- <string>BC50D76123DA4B85E6AD77B4</string>
- <string>092D0456252ED3F90F66084D</string>
- <string>AA99564782B655791B053E58</string>
- <string>1B8264EEFEF4AD585182D256</string>
- <string>27E123435067CC11FE103999</string>
+ <string>A7CE4BCE7B6959BCDC54B854</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
- <string>Pods-Sample</string>
- <key>path</key>
- <string>Target Support Files/Pods-Sample</string>
+ <string>iOS</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>7AC4B3F3D7BB132642153A38</key>
+ <key>80CC1C2E2C60B0F9CADA36AF</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>164DD73ED2C34BC6B3156AE5</string>
+ </array>
+ <key>isa</key>
+ <string>PBXFrameworksBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
+ </dict>
+ <key>822AA7CD03CFBA9265225E74</key>
<dict>
<key>fileRef</key>
- <string>0260773D27B4AE159FB0B22D</string>
+ <string>36CC8128F585662CE7EF2114</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>7BBF3F432525D33FCB074BD5</key>
+ <key>8304D6194CF27F78FD63D3E0</key>
<dict>
<key>fileRef</key>
- <string>BA9F62DDE37FF0D601A4D5EA</string>
+ <string>19A733EC94B0F847F901D308</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>7DA2A517A18D85B390FB122A</key>
+ <key>832D68435FCFF5497A72F1D3</key>
<dict>
- <key>containerPortal</key>
- <string>FBF79DDF04ADEAED54BA2286</string>
+ <key>fileRef</key>
+ <string>7F5DF8C37493F93C2636BAD6</string>
<key>isa</key>
- <string>PBXContainerItemProxy</string>
- <key>proxyType</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>8563E3DF7CFBE5A416F679DD</key>
+ <dict>
+ <key>fileRef</key>
+ <string>1A2D9424BA1BE0E3B2598D06</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>8565F9710EFA641EF9EAE78E</key>
+ <dict>
+ <key>includeInIndex</key>
<string>1</string>
- <key>remoteGlobalIDString</key>
- <string>3800855A656C8D0813062074</string>
- <key>remoteInfo</key>
- <string>Pods-SampleTests-RxLibrary</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.script.sh</string>
+ <key>path</key>
+ <string>Pods-resources.sh</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>7E9B63EFA2466C4456A0695A</key>
+ <key>87F549870DB778A5F152B608</key>
+ <dict>
+ <key>fileRef</key>
+ <string>A7CE4BCE7B6959BCDC54B854</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>8944DC99856C99235675D65C</key>
+ <dict>
+ <key>fileRef</key>
+ <string>517E28171A4524F9C518EAAC</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>8A203557337361CF44D2D664</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>path</key>
+ <string>GRXWriter.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>8ACE4DE290D8847EA219A1B8</key>
+ <dict>
+ <key>fileRef</key>
+ <string>2705BF8D166EFF8A2D44B2BA</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>8C3E05D9178D147F7D7EA7D0</key>
+ <dict>
+ <key>fileRef</key>
+ <string>EE695A82B047142EA781152E</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>8D0A2E1D25EEA3A096E08B1A</key>
+ <dict>
+ <key>fileRef</key>
+ <string>35A079DEB6141A6FDFF69D63</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>8D8D6FB22E4E5302E899F3C7</key>
+ <dict>
+ <key>fileRef</key>
+ <string>D45F5D73E3D255043B7E349A</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>8DD3112B6E527E20F688C5A0</key>
+ <dict>
+ <key>explicitFileType</key>
+ <string>archive.ar</string>
+ <key>includeInIndex</key>
+ <string>0</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>path</key>
+ <string>libPods-SampleTests-GRPCClient.a</string>
+ <key>sourceTree</key>
+ <string>BUILT_PRODUCTS_DIR</string>
+ </dict>
+ <key>8F24508F2BC37AE7B2282E42</key>
+ <dict>
+ <key>fileRef</key>
+ <string>19A733EC94B0F847F901D308</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>8FC9893C41EDC73475EA96B8</key>
<dict>
- <key>baseConfigurationReference</key>
- <string>2FE1D288B8389F925AA3CE0C</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
<string>NO</string>
- <key>COPY_PHASE_STRIP</key>
+ <key>CLANG_CXX_LANGUAGE_STANDARD</key>
+ <string>gnu++0x</string>
+ <key>CLANG_CXX_LIBRARY</key>
+ <string>libc++</string>
+ <key>CLANG_ENABLE_MODULES</key>
<string>YES</string>
- <key>DSTROOT</key>
- <string>/tmp/xcodeproj.dst</string>
- <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+ <key>CLANG_ENABLE_OBJC_ARC</key>
<string>YES</string>
- <key>GCC_PREFIX_HEADER</key>
- <string>Target Support Files/Pods-RxLibrary/Pods-RxLibrary-prefix.pch</string>
- <key>INSTALL_PATH</key>
- <string>$(BUILT_PRODUCTS_DIR)</string>
- <key>IPHONEOS_DEPLOYMENT_TARGET</key>
- <string>8.0</string>
- <key>OTHER_CFLAGS</key>
- <array>
- <string>-DNS_BLOCK_ASSERTIONS=1</string>
- <string>$(inherited)</string>
- </array>
- <key>OTHER_CPLUSPLUSFLAGS</key>
+ <key>CLANG_WARN_BOOL_CONVERSION</key>
+ <string>YES</string>
+ <key>CLANG_WARN_CONSTANT_CONVERSION</key>
+ <string>YES</string>
+ <key>CLANG_WARN_DIRECT_OBJC_ISA_USAGE</key>
+ <string>YES</string>
+ <key>CLANG_WARN_EMPTY_BODY</key>
+ <string>YES</string>
+ <key>CLANG_WARN_ENUM_CONVERSION</key>
+ <string>YES</string>
+ <key>CLANG_WARN_INT_CONVERSION</key>
+ <string>YES</string>
+ <key>CLANG_WARN_OBJC_ROOT_CLASS</key>
+ <string>YES</string>
+ <key>COPY_PHASE_STRIP</key>
+ <string>YES</string>
+ <key>GCC_C_LANGUAGE_STANDARD</key>
+ <string>gnu99</string>
+ <key>GCC_DYNAMIC_NO_PIC</key>
+ <string>NO</string>
+ <key>GCC_OPTIMIZATION_LEVEL</key>
+ <string>0</string>
+ <key>GCC_PREPROCESSOR_DEFINITIONS</key>
<array>
- <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>DEBUG=1</string>
<string>$(inherited)</string>
</array>
- <key>OTHER_LDFLAGS</key>
- <string></string>
- <key>OTHER_LIBTOOLFLAGS</key>
- <string></string>
- <key>PRODUCT_NAME</key>
- <string>$(TARGET_NAME)</string>
- <key>PUBLIC_HEADERS_FOLDER_PATH</key>
- <string>$(TARGET_NAME)</string>
- <key>SDKROOT</key>
- <string>iphoneos</string>
- <key>SKIP_INSTALL</key>
+ <key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
+ <string>NO</string>
+ <key>GCC_WARN_64_TO_32_BIT_CONVERSION</key>
<string>YES</string>
- <key>VALIDATE_PRODUCT</key>
+ <key>GCC_WARN_ABOUT_RETURN_TYPE</key>
+ <string>YES</string>
+ <key>GCC_WARN_UNDECLARED_SELECTOR</key>
+ <string>YES</string>
+ <key>GCC_WARN_UNINITIALIZED_AUTOS</key>
+ <string>YES</string>
+ <key>GCC_WARN_UNUSED_FUNCTION</key>
+ <string>YES</string>
+ <key>GCC_WARN_UNUSED_VARIABLE</key>
+ <string>YES</string>
+ <key>IPHONEOS_DEPLOYMENT_TARGET</key>
+ <string>8.0</string>
+ <key>ONLY_ACTIVE_ARCH</key>
<string>YES</string>
+ <key>STRIP_INSTALLED_PRODUCT</key>
+ <string>NO</string>
</dict>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
- <string>Release</string>
+ <string>Debug</string>
+ </dict>
+ <key>91B3D53E73C867A8F1B3B392</key>
+ <dict>
+ <key>fileRef</key>
+ <string>BC51F603F893AA6A748EB8EC</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
</dict>
- <key>7FACBF2C8AF0403DD1C11015</key>
+ <key>91D5786D0585930DEFAB636E</key>
<dict>
+ <key>fileRef</key>
+ <string>F541961867C9493F07D54B8E</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>932CFA5D0C5C2C8DA3C328AF</key>
+ <dict>
+ <key>explicitFileType</key>
+ <string>archive.ar</string>
<key>includeInIndex</key>
- <string>1</string>
+ <string>0</string>
<key>isa</key>
<string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>text.xcconfig</string>
- <key>name</key>
- <string>Pods-Sample-RxLibrary-Private.xcconfig</string>
<key>path</key>
- <string>../Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-Private.xcconfig</string>
+ <string>libPods-GRPCClient.a</string>
<key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>BUILT_PRODUCTS_DIR</string>
</dict>
- <key>801BBA7A538CFAE6746966A7</key>
+ <key>93CEF17866E8E476701B3AEB</key>
<dict>
- <key>fileRef</key>
- <string>42B461F095E85911637DFD60</string>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>path</key>
+ <string>Pods-RxLibrary-dummy.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>817F8B2E38A51910E8F8EC7D</key>
+ <key>9420C1F89C211902C0D87225</key>
<dict>
- <key>children</key>
- <array>
- <string>355670384FC160AB6C32765E</string>
- </array>
<key>isa</key>
- <string>PBXGroup</string>
+ <string>PBXTargetDependency</string>
<key>name</key>
- <string>Frameworks</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>Pods-GRPCClient</string>
+ <key>target</key>
+ <string>AB3F9F2CFA29030A599E9231</string>
+ <key>targetProxy</key>
+ <string>D6715088D2AB1CBAA49F8651</string>
</dict>
- <key>838341407CEBBFB19D25C45A</key>
+ <key>9470FB5E010191C87542871D</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -1638,57 +2686,57 @@
<key>lastKnownFileType</key>
<string>sourcecode.c.h</string>
<key>path</key>
- <string>GRXWriter+Transformations.h</string>
+ <string>GRXImmediateWriter.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>85D5565EC08D14A6A60F1DDA</key>
+ <key>94DDD64BC43C045541FB9BEC</key>
<dict>
<key>fileRef</key>
- <string>56CE61A20C6F88CC0CE888C8</string>
+ <string>EE695A82B047142EA781152E</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>86586E0B51D3DC6A97D0A7F3</key>
+ <key>9520D95CEA199664DEA83898</key>
<dict>
<key>fileRef</key>
- <string>56CE61A20C6F88CC0CE888C8</string>
+ <string>439AF2B977736E012C79B2FE</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>86D03B997B81819E2F39E48B</key>
+ <key>95ABB7ADC6AA8ABDA7E32C0B</key>
<dict>
<key>fileRef</key>
- <string>BC52B0661F25B25CE382296C</string>
+ <string>357862381E5517983B1A7AA9</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>87700F015FA41F53D88CA4BC</key>
+ <key>96CD01ACF90F6977972AA5C7</key>
<dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array>
- <string>404D4F98249F3383235463A4</string>
- </array>
+ <key>fileRef</key>
+ <string>53A5EA857F02C1DEEC269122</string>
<key>isa</key>
- <string>PBXFrameworksBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
+ <string>PBXBuildFile</string>
</dict>
- <key>8915073BE8158EF53FE11B95</key>
+ <key>98695E4E6F8168938F9CC49E</key>
<dict>
- <key>fileRef</key>
- <string>EB29FAB1F81F0D17BDAD72D0</string>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text</string>
+ <key>path</key>
+ <string>Pods-Sample-acknowledgements.markdown</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>8919AE774852DD128A7CB510</key>
+ <key>9A637A6516AB11F29615FC18</key>
<dict>
<key>buildConfigurations</key>
<array>
- <string>6E00FD6D197F0D1332D11199</string>
- <string>B602CFEF970BEA98E40A056C</string>
+ <string>7BA366CBC6DBCDC7984BCC50</string>
+ <string>1D1E67A62BDD0A04136468E9</string>
</array>
<key>defaultConfigurationIsVisible</key>
<string>0</string>
@@ -1697,20 +2745,88 @@
<key>isa</key>
<string>XCConfigurationList</string>
</dict>
- <key>896F697BD1BEAF8A081337EB</key>
+ <key>9B871E85E76E178A206CC642</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
+ <key>path</key>
+ <string>Pods.release.xcconfig</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>9C6B481EF2F6601D5D6F4B6D</key>
+ <dict>
+ <key>fileRef</key>
+ <string>6394EA7A57663B87FD034792</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>9CC98083B837EFAE1058E03E</key>
+ <dict>
+ <key>fileRef</key>
+ <string>68A0ACB0AFAA7186EB2ABE09</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>9CFF85471050427EE3796F6F</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
- <string>86586E0B51D3DC6A97D0A7F3</string>
+ <string>D548663391776A14DCAC50B8</string>
</array>
<key>isa</key>
<string>PBXFrameworksBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
- <key>8A7375A2F98889F35C15E2D7</key>
+ <key>9D4AD7A95C9F70261CF7E09E</key>
+ <dict>
+ <key>fileRef</key>
+ <string>2705BF8D166EFF8A2D44B2BA</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>9F21B0DA9C171E66AC1CB1E2</key>
+ <dict>
+ <key>containerPortal</key>
+ <string>E61F9CBEB0CA9A172C4AA56B</string>
+ <key>isa</key>
+ <string>PBXContainerItemProxy</string>
+ <key>proxyType</key>
+ <string>1</string>
+ <key>remoteGlobalIDString</key>
+ <string>4E2021A981DA9A189922E0C6</string>
+ <key>remoteInfo</key>
+ <string>Pods-Sample-RxLibrary</string>
+ </dict>
+ <key>9F3C74AA5715E325880AE886</key>
+ <dict>
+ <key>fileRef</key>
+ <string>F776B445ABD393C908B02302</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>A0064CCC8EC60B3CD0E4F72F</key>
+ <dict>
+ <key>children</key>
+ <array>
+ <string>430E7D130A089632FA407274</string>
+ <string>D7BA8B8D4FFF3674A537221D</string>
+ </array>
+ <key>isa</key>
+ <string>PBXGroup</string>
+ <key>name</key>
+ <string>Development Pods</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>A0416D4A1F0C863C1856405A</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -1718,113 +2834,239 @@
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>text.xcconfig</string>
- <key>name</key>
- <string>Pods-SampleTests-RxLibrary.xcconfig</string>
<key>path</key>
- <string>../Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary.xcconfig</string>
+ <string>Pods-Sample.release.xcconfig</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>8AB7020D9B71B1B4F34249BE</key>
+ <key>A0B86020532CA90CD846B0C8</key>
+ <dict>
+ <key>fileRef</key>
+ <string>7E5BC0233C371682047C39BD</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>A0C815D67EA636E8E6A5E655</key>
+ <dict>
+ <key>fileRef</key>
+ <string>2D97FDE1D611758F0CC8EAC3</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>A0C9AE64F2D6C0E3A4F26302</key>
+ <dict>
+ <key>fileRef</key>
+ <string>6BBDA0AD2955451BBF881052</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>A10CFA4D4ED9B20894905742</key>
+ <dict>
+ <key>buildConfigurationList</key>
+ <string>9A637A6516AB11F29615FC18</string>
+ <key>buildPhases</key>
+ <array>
+ <string>B31604CF386150298F4572B7</string>
+ <string>80CC1C2E2C60B0F9CADA36AF</string>
+ <string>A7DF070735AAA7A85C474BBD</string>
+ </array>
+ <key>buildRules</key>
+ <array/>
+ <key>dependencies</key>
+ <array>
+ <string>EF97D57CA44A79151103F06B</string>
+ </array>
+ <key>isa</key>
+ <string>PBXNativeTarget</string>
+ <key>name</key>
+ <string>Pods-SampleTests-GRPCClient</string>
+ <key>productName</key>
+ <string>Pods-SampleTests-GRPCClient</string>
+ <key>productReference</key>
+ <string>8DD3112B6E527E20F688C5A0</string>
+ <key>productType</key>
+ <string>com.apple.product-type.library.static</string>
+ </dict>
+ <key>A152A54E946159BB41FF6E04</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
- <string>1E5420835E4862DBA55002A9</string>
- <string>00949E44051CD97851DEFF3B</string>
- <string>15DC9A153BC412DB41B7F154</string>
- <string>0385BCBCA0601E80FAD2A901</string>
- <string>01F5B724A99ADB3547023C72</string>
- <string>F2C6AACFE46FFA8DC383DE43</string>
- <string>7AC4B3F3D7BB132642153A38</string>
- <string>5DE93D7B39D2D1AD7336C4AC</string>
- <string>407E794549893DD91A2ED84E</string>
- <string>3C3F1A188E25219C230FFD4F</string>
+ <string>F4586BA420EA562FECC43A3A</string>
</array>
<key>isa</key>
- <string>PBXHeadersBuildPhase</string>
+ <string>PBXFrameworksBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
- <key>8B05D39455D5B23720961FA4</key>
+ <key>A2F53747970EB33A4D75EAB4</key>
<dict>
- <key>children</key>
- <array>
- <string>5C30ABB95D604B483422D72A</string>
- <string>A579EC5BE7E68C55CA5FECDE</string>
- <string>DF94410F5DC0A0AB69336DF4</string>
- <string>EF2EE4BC906FF9909348DAB5</string>
- <string>42A375125393D0613249D046</string>
- <string>11072993378724E9AF9CAF85</string>
- </array>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXGroup</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
<key>name</key>
- <string>Products</string>
+ <string>Pods-Sample-GRPCClient-Private.xcconfig</string>
+ <key>path</key>
+ <string>../Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-Private.xcconfig</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>8B503889F903CED9A12E5C87</key>
+ <key>A32A838D0E36519FB68C73DF</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.script.sh</string>
+ <string>text.plist.xml</string>
<key>path</key>
- <string>Pods-SampleTests-resources.sh</string>
+ <string>Pods-SampleTests-acknowledgements.plist</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>8BB6B6B3653FC309CB8EB3A0</key>
+ <key>A5A038CAD7AF2C628752EF63</key>
+ <dict>
+ <key>fileRef</key>
+ <string>D0E4885FFC11D4A532FAB517</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>A5EDB7E25EA71C67EF1B3F82</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>96CD01ACF90F6977972AA5C7</string>
+ <string>41FD4DEF364AC343F07212C1</string>
+ <string>152BFB6270DCF24A85D66444</string>
+ <string>FD9953A9B079B03396B2FEA3</string>
+ <string>4F529EACF630FA5A638408A4</string>
+ <string>CDB4449E284965A752BD1786</string>
+ <string>A8CBA848BF8F6538176F3424</string>
+ <string>5BDD559FB35594584D1BE09E</string>
+ <string>A0C9AE64F2D6C0E3A4F26302</string>
+ <string>73107A4E8F55EFE854586192</string>
+ </array>
+ <key>isa</key>
+ <string>PBXSourcesBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
+ </dict>
+ <key>A7CE4BCE7B6959BCDC54B854</key>
+ <dict>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>wrapper.framework</string>
+ <key>name</key>
+ <string>Foundation.framework</string>
+ <key>path</key>
+ <string>Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework</string>
+ <key>sourceTree</key>
+ <string>DEVELOPER_DIR</string>
+ </dict>
+ <key>A7DF070735AAA7A85C474BBD</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>91B3D53E73C867A8F1B3B392</string>
+ <string>3C7D98B6D2E351C032BE20A6</string>
+ <string>AC6CF5430FB75930354FD7B3</string>
+ <string>306408CC38FAB0410E0D90E7</string>
+ <string>94DDD64BC43C045541FB9BEC</string>
+ <string>D0B7F6736070533C215E7DE3</string>
+ <string>E05C4D27465DD5F292E2A8EE</string>
+ <string>42669F81E3800361030A567A</string>
+ <string>2CF8BB8D6A668D6213E18915</string>
+ </array>
+ <key>isa</key>
+ <string>PBXHeadersBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
+ </dict>
+ <key>A8C31E8535FB26B38A1831C0</key>
<dict>
<key>fileRef</key>
- <string>BDA58E5E1AE450540A2B0227</string>
+ <string>8A203557337361CF44D2D664</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>8CD061F02F905957F4C1D188</key>
+ <key>A8CBA848BF8F6538176F3424</key>
<dict>
<key>fileRef</key>
- <string>636AC1003F2C71FFD74542CD</string>
+ <string>36CC8128F585662CE7EF2114</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>911BEE248BE640294A081862</key>
+ <key>AAAEE7AE6F373AA2C0D1969F</key>
+ <dict>
+ <key>fileRef</key>
+ <string>78C38086F90849CD909A9847</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>AAD40140819824C5EF180664</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
+ <string>text.xcconfig</string>
+ <key>name</key>
+ <string>Pods-Sample-GRPCClient.xcconfig</string>
<key>path</key>
- <string>Pods-RxLibrary-prefix.pch</string>
+ <string>../Pods-Sample-GRPCClient/Pods-Sample-GRPCClient.xcconfig</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>9508723D4C0D4321A5188108</key>
+ <key>AB2C87B84886AB4CF107C5A1</key>
<dict>
- <key>buildConfigurations</key>
+ <key>fileRef</key>
+ <string>517E28171A4524F9C518EAAC</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>AB3F9F2CFA29030A599E9231</key>
+ <dict>
+ <key>buildConfigurationList</key>
+ <string>ADEFC2A6E68AD0102A5683BB</string>
+ <key>buildPhases</key>
<array>
- <string>29B274FDF882AB8B39814FE6</string>
- <string>6B5B56ED61BE76782DF02817</string>
+ <string>D5B158492CFF90F975B03B8D</string>
+ <string>0CA3C7D4D3EF8429533AB7D5</string>
+ <string>44C27BC8E89A85C90BC42638</string>
+ </array>
+ <key>buildRules</key>
+ <array/>
+ <key>dependencies</key>
+ <array>
+ <string>6EDAC415AC0B16B221E0397F</string>
</array>
- <key>defaultConfigurationIsVisible</key>
- <string>0</string>
- <key>defaultConfigurationName</key>
- <string>Release</string>
<key>isa</key>
- <string>XCConfigurationList</string>
+ <string>PBXNativeTarget</string>
+ <key>name</key>
+ <string>Pods-GRPCClient</string>
+ <key>productName</key>
+ <string>Pods-GRPCClient</string>
+ <key>productReference</key>
+ <string>932CFA5D0C5C2C8DA3C328AF</string>
+ <key>productType</key>
+ <string>com.apple.product-type.library.static</string>
</dict>
- <key>962FF5FAC21292530C615D05</key>
+ <key>AC12B8262555F9F61255BBC0</key>
<dict>
<key>buildConfigurations</key>
<array>
- <string>A150782D73BBE95DE629B03C</string>
- <string>7E9B63EFA2466C4456A0695A</string>
+ <string>BE19113B79057D8A53A04303</string>
+ <string>0E66C9AA7C5988807A667377</string>
</array>
<key>defaultConfigurationIsVisible</key>
<string>0</string>
@@ -1833,121 +3075,155 @@
<key>isa</key>
<string>XCConfigurationList</string>
</dict>
- <key>9BD773E928AD698D23B20123</key>
+ <key>AC6CF5430FB75930354FD7B3</key>
<dict>
<key>fileRef</key>
- <string>1868370C0050315A6B835D42</string>
+ <string>6A4F426FF21092B2A4B44022</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>9CCBE9A628C305B3B089B8DD</key>
+ <key>AD11CEF56188F659CB36CB34</key>
<dict>
- <key>fileRef</key>
- <string>BA9F62DDE37FF0D601A4D5EA</string>
+ <key>explicitFileType</key>
+ <string>archive.ar</string>
+ <key>includeInIndex</key>
+ <string>0</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFileReference</string>
+ <key>path</key>
+ <string>libPods.a</string>
+ <key>sourceTree</key>
+ <string>BUILT_PRODUCTS_DIR</string>
</dict>
- <key>9CFAC09E370EA1C96C8D2880</key>
+ <key>AD88FBBAFBF1F13467342BD1</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
- <key>name</key>
- <string>GRXMappingWriter.h</string>
+ <string>text.xcconfig</string>
<key>path</key>
- <string>transformations/GRXMappingWriter.h</string>
+ <string>Pods-GRPCClient.xcconfig</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>9DADE0CF857B717294F7F74F</key>
+ <key>ADEFC2A6E68AD0102A5683BB</key>
+ <dict>
+ <key>buildConfigurations</key>
+ <array>
+ <string>CA294BA3C4F9A1948B2AE213</string>
+ <string>53E7256294CEEC3844B70A31</string>
+ </array>
+ <key>defaultConfigurationIsVisible</key>
+ <string>0</string>
+ <key>defaultConfigurationName</key>
+ <string>Release</string>
+ <key>isa</key>
+ <string>XCConfigurationList</string>
+ </dict>
+ <key>AEECE9DFCC8F060F1E30A421</key>
+ <dict>
+ <key>buildConfigurationList</key>
+ <string>FF34F6701990B0955422EC9C</string>
+ <key>buildPhases</key>
+ <array>
+ <string>1EFB19037775E7D8E9F6FC6B</string>
+ <string>D0C130BBB6DBFE22F6B649E8</string>
+ <string>7A1AC6EA0DE9920EE46DD7C6</string>
+ </array>
+ <key>buildRules</key>
+ <array/>
+ <key>dependencies</key>
+ <array/>
+ <key>isa</key>
+ <string>PBXNativeTarget</string>
+ <key>name</key>
+ <string>Pods-RxLibrary</string>
+ <key>productName</key>
+ <string>Pods-RxLibrary</string>
+ <key>productReference</key>
+ <string>00303CC3049D1C9E8709A044</string>
+ <key>productType</key>
+ <string>com.apple.product-type.library.static</string>
+ </dict>
+ <key>AF8AB55F74FABAD365BDACF0</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
+ <string>text</string>
<key>path</key>
- <string>NSEnumerator+GRXUtil.h</string>
+ <string>Pods-acknowledgements.markdown</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>9E8DC61269B141639DA7F859</key>
+ <key>B22A719DB3DFD2337E996D6A</key>
+ <dict>
+ <key>buildConfigurations</key>
+ <array>
+ <string>8FC9893C41EDC73475EA96B8</string>
+ <string>0CB824BF5CED7188A205D06F</string>
+ </array>
+ <key>defaultConfigurationIsVisible</key>
+ <string>0</string>
+ <key>defaultConfigurationName</key>
+ <string>Release</string>
+ <key>isa</key>
+ <string>XCConfigurationList</string>
+ </dict>
+ <key>B31604CF386150298F4572B7</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
- <string>16E6BBD46D9745611EF313FB</string>
- <string>CC0A03D531EF0FF199671820</string>
- <string>C382F416EFA39BE2CF216044</string>
- <string>621587D6C7759FBE7096D185</string>
- <string>C0AC333A6FE8F07600C96890</string>
- <string>2F91A2AD622F87D98C9B0E1E</string>
- <string>FDC6B84EAC9989F0827EA4F3</string>
- <string>50FF607D5DA961C6BEF4ABAC</string>
- <string>5280A583CA6C6C66698AE67C</string>
- <string>6D1D41BAE4E325572FAC7B17</string>
+ <string>5654D46158ECA8C27895A755</string>
+ <string>FA5E9BC13067F1E32D6311E6</string>
+ <string>078103DC988BEF03083FEB98</string>
+ <string>D80E545131A1D2922F88C5D7</string>
+ <string>3B52D357FFBB1F7AA20D702F</string>
+ <string>F2B5B896D8C7E13B5E8ADA28</string>
+ <string>4B0816A85B8DA041883CEDBE</string>
+ <string>B6D29DCA02F3DFEEB77A8567</string>
+ <string>C55E900FEB92A7F9134BA484</string>
+ <string>A5A038CAD7AF2C628752EF63</string>
</array>
<key>isa</key>
- <string>PBXHeadersBuildPhase</string>
+ <string>PBXSourcesBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
- <key>A00077019C113466960E9DAF</key>
- <dict>
- <key>fileRef</key>
- <string>9CFAC09E370EA1C96C8D2880</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>A0215878A7EC41E833B5F1D2</key>
- <dict>
- <key>containerPortal</key>
- <string>FBF79DDF04ADEAED54BA2286</string>
- <key>isa</key>
- <string>PBXContainerItemProxy</string>
- <key>proxyType</key>
- <string>1</string>
- <key>remoteGlobalIDString</key>
- <string>F6C59E5B4CFE053E9F98000E</string>
- <key>remoteInfo</key>
- <string>Pods-Sample-RxLibrary</string>
- </dict>
- <key>A150782D73BBE95DE629B03C</key>
+ <key>B32DC879307F72182ED4B8EF</key>
<dict>
<key>baseConfigurationReference</key>
- <string>2FE1D288B8389F925AA3CE0C</string>
+ <string>9B871E85E76E178A206CC642</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
<string>NO</string>
<key>COPY_PHASE_STRIP</key>
- <string>NO</string>
+ <string>YES</string>
<key>DSTROOT</key>
<string>/tmp/xcodeproj.dst</string>
- <key>GCC_DYNAMIC_NO_PIC</key>
- <string>NO</string>
- <key>GCC_OPTIMIZATION_LEVEL</key>
- <string>0</string>
<key>GCC_PRECOMPILE_PREFIX_HEADER</key>
<string>YES</string>
- <key>GCC_PREFIX_HEADER</key>
- <string>Target Support Files/Pods-RxLibrary/Pods-RxLibrary-prefix.pch</string>
- <key>GCC_PREPROCESSOR_DEFINITIONS</key>
- <array>
- <string>DEBUG=1</string>
- <string>$(inherited)</string>
- </array>
- <key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
- <string>NO</string>
<key>INSTALL_PATH</key>
<string>$(BUILT_PRODUCTS_DIR)</string>
<key>IPHONEOS_DEPLOYMENT_TARGET</key>
<string>8.0</string>
+ <key>OTHER_CFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_CPLUSPLUSFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
<key>OTHER_LDFLAGS</key>
<string></string>
<key>OTHER_LIBTOOLFLAGS</key>
@@ -1960,77 +3236,126 @@
<string>iphoneos</string>
<key>SKIP_INSTALL</key>
<string>YES</string>
+ <key>VALIDATE_PRODUCT</key>
+ <string>YES</string>
</dict>
<key>isa</key>
<string>XCBuildConfiguration</string>
<key>name</key>
- <string>Debug</string>
+ <string>Release</string>
</dict>
- <key>A4C1C82F355864E7D3E200DD</key>
+ <key>B367BCF63161EE64CC1B1DE0</key>
<dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
+ <key>fileRef</key>
+ <string>68A0ACB0AFAA7186EB2ABE09</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>B37278C2CEC4C1C433BEF120</key>
+ <dict>
+ <key>buildConfigurationList</key>
+ <string>F6A0AD6C190915DD52886BE2</string>
+ <key>buildPhases</key>
<array>
- <string>2DA405F6E578008991B3F9EA</string>
- <string>A00077019C113466960E9DAF</string>
- <string>46A8EFCC59CF17E048EC34ED</string>
- <string>024F840533A6674922DB7899</string>
- <string>9BD773E928AD698D23B20123</string>
- <string>2AADA4C52A284ED5D41C7CF5</string>
- <string>CC358E38AE146C095C401760</string>
- <string>288A25371032891C824CF4AA</string>
- <string>FDC939796E70DC7D141E29FC</string>
- <string>45A1913C8F48686C1FC82520</string>
+ <string>40F1A996749176D9DB148901</string>
+ <string>A152A54E946159BB41FF6E04</string>
+ </array>
+ <key>buildRules</key>
+ <array/>
+ <key>dependencies</key>
+ <array>
+ <string>2504847B854AC340A0712235</string>
+ <string>041582131ADE9EA5C2A319BB</string>
</array>
<key>isa</key>
- <string>PBXHeadersBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
+ <string>PBXNativeTarget</string>
+ <key>name</key>
+ <string>Pods-SampleTests</string>
+ <key>productName</key>
+ <string>Pods-SampleTests</string>
+ <key>productReference</key>
+ <string>675E56BADC0C4C93E3B6B263</string>
+ <key>productType</key>
+ <string>com.apple.product-type.library.static</string>
+ </dict>
+ <key>B37BACFCD1765840986F8AC5</key>
+ <dict>
+ <key>fileRef</key>
+ <string>8A203557337361CF44D2D664</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
</dict>
- <key>A577CB571492B4F951064FCF</key>
+ <key>B42B413709D355A8828EEC76</key>
+ <dict>
+ <key>fileRef</key>
+ <string>617AA57F150724B1881EC92E</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>B5E4A18F0B2376BE20D1C8A5</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.xcconfig</string>
+ <string>sourcecode.c.h</string>
<key>path</key>
- <string>Pods.release.xcconfig</string>
+ <string>GRXWriter.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>A579EC5BE7E68C55CA5FECDE</key>
+ <key>B6D29DCA02F3DFEEB77A8567</key>
+ <dict>
+ <key>fileRef</key>
+ <string>66A375345A9F319AE182BDBD</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>B7FD4EDD742EE7C18D733B84</key>
+ <dict>
+ <key>fileRef</key>
+ <string>3E850442224A3D7C7540C6C5</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>BC51F603F893AA6A748EB8EC</key>
<dict>
- <key>explicitFileType</key>
- <string>archive.ar</string>
<key>includeInIndex</key>
- <string>0</string>
+ <string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
<key>path</key>
- <string>libPods-RxLibrary.a</string>
+ <string>GRPCCall.h</string>
<key>sourceTree</key>
- <string>BUILT_PRODUCTS_DIR</string>
+ <string>&lt;group&gt;</string>
</dict>
- <key>A71CC1B520D2DFF451839FE2</key>
+ <key>BCB580E2193B3624D1C471DB</key>
<dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array>
- <string>0BC8818D3A097831FDE0750B</string>
- </array>
+ <key>containerPortal</key>
+ <string>E61F9CBEB0CA9A172C4AA56B</string>
<key>isa</key>
- <string>PBXSourcesBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
+ <string>PBXContainerItemProxy</string>
+ <key>proxyType</key>
+ <string>1</string>
+ <key>remoteGlobalIDString</key>
+ <string>AEECE9DFCC8F060F1E30A421</string>
+ <key>remoteInfo</key>
+ <string>Pods-RxLibrary</string>
+ </dict>
+ <key>BD38F7B336495294670A28A4</key>
+ <dict>
+ <key>fileRef</key>
+ <string>F776B445ABD393C908B02302</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
</dict>
- <key>A8AFEFDF4700447BBCDF9E10</key>
+ <key>BE19113B79057D8A53A04303</key>
<dict>
<key>baseConfigurationReference</key>
- <string>591702CE7D8AF91674F1640F</string>
+ <string>28C6D48989DA211E0BACAFC2</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
@@ -2074,102 +3399,79 @@
<key>name</key>
<string>Debug</string>
</dict>
- <key>A96854FB48432263FE68C313</key>
+ <key>BEEA6A0D27020465FC6CD0AA</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.script.sh</string>
+ <key>path</key>
+ <string>Pods-Sample-resources.sh</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>C31B151DCFB1F263B8E344BF</key>
<dict>
<key>fileRef</key>
- <string>15F64D3D7D10DB47599A72EB</string>
+ <string>6A4F426FF21092B2A4B44022</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>AA52EF1CD8A3683472BD86FE</key>
+ <key>C3E4DEFB7877BA48A9458947</key>
<dict>
<key>fileRef</key>
- <string>4BB75B0FC7359E8EA8672954</string>
+ <string>1A2D9424BA1BE0E3B2598D06</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>AA99564782B655791B053E58</key>
+ <key>C438A6F7EF173F2ED50AF192</key>
<dict>
+ <key>explicitFileType</key>
+ <string>archive.ar</string>
<key>includeInIndex</key>
- <string>1</string>
+ <string>0</string>
<key>isa</key>
<string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>text.script.sh</string>
<key>path</key>
- <string>Pods-Sample-resources.sh</string>
+ <string>libPods-SampleTests-RxLibrary.a</string>
<key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>BUILT_PRODUCTS_DIR</string>
</dict>
- <key>AF9F0D991C2913F55496D06E</key>
+ <key>C55E900FEB92A7F9134BA484</key>
<dict>
- <key>baseConfigurationReference</key>
- <string>A577CB571492B4F951064FCF</string>
- <key>buildSettings</key>
- <dict>
- <key>ALWAYS_SEARCH_USER_PATHS</key>
- <string>NO</string>
- <key>COPY_PHASE_STRIP</key>
- <string>YES</string>
- <key>DSTROOT</key>
- <string>/tmp/xcodeproj.dst</string>
- <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
- <string>YES</string>
- <key>INSTALL_PATH</key>
- <string>$(BUILT_PRODUCTS_DIR)</string>
- <key>IPHONEOS_DEPLOYMENT_TARGET</key>
- <string>8.0</string>
- <key>OTHER_CFLAGS</key>
- <array>
- <string>-DNS_BLOCK_ASSERTIONS=1</string>
- <string>$(inherited)</string>
- </array>
- <key>OTHER_CPLUSPLUSFLAGS</key>
- <array>
- <string>-DNS_BLOCK_ASSERTIONS=1</string>
- <string>$(inherited)</string>
- </array>
- <key>OTHER_LDFLAGS</key>
- <string></string>
- <key>OTHER_LIBTOOLFLAGS</key>
- <string></string>
- <key>PRODUCT_NAME</key>
- <string>$(TARGET_NAME)</string>
- <key>PUBLIC_HEADERS_FOLDER_PATH</key>
- <string>$(TARGET_NAME)</string>
- <key>SDKROOT</key>
- <string>iphoneos</string>
- <key>SKIP_INSTALL</key>
- <string>YES</string>
- <key>VALIDATE_PRODUCT</key>
- <string>YES</string>
- </dict>
+ <key>fileRef</key>
+ <string>6BBDA0AD2955451BBF881052</string>
<key>isa</key>
- <string>XCBuildConfiguration</string>
- <key>name</key>
- <string>Release</string>
+ <string>PBXBuildFile</string>
</dict>
- <key>B034EE43C1EF96D1CBD1328A</key>
+ <key>C59D49EFF10934AFF82CA873</key>
+ <dict>
+ <key>fileRef</key>
+ <string>C5A09DD572522E9567EC6CD1</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>C5A09DD572522E9567EC6CD1</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.xcconfig</string>
- <key>name</key>
- <string>Pods-Sample-RxLibrary.xcconfig</string>
+ <string>sourcecode.c.objc</string>
<key>path</key>
- <string>../Pods-Sample-RxLibrary/Pods-Sample-RxLibrary.xcconfig</string>
+ <string>Pods-SampleTests-dummy.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>B05A2B15C8A03AABA163D7D7</key>
+ <key>C75867D6DF922C6894ACCC88</key>
<dict>
<key>buildConfigurations</key>
<array>
- <string>74F28D2155D125C3068F96BE</string>
- <string>AF9F0D991C2913F55496D06E</string>
+ <string>098BE814C7B5F9F21878CDE6</string>
+ <string>6AA10AF7AE19131F66FB8586</string>
</array>
<key>defaultConfigurationIsVisible</key>
<string>0</string>
@@ -2178,10 +3480,39 @@
<key>isa</key>
<string>XCConfigurationList</string>
</dict>
- <key>B153046F0CBA526564A9673C</key>
+ <key>C818D7947CCCEA0324CD9E79</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>01E37BE5C7114E128C4664FB</string>
+ <string>21E0A8B187DFAE6BD32D1302</string>
+ <string>1C191978ED182A611393A626</string>
+ <string>C3E4DEFB7877BA48A9458947</string>
+ <string>FF378D56A81AE6EFC739CDE6</string>
+ <string>2C4B95CD783F7C0739F77B66</string>
+ <string>CC00C5E75E69BE36B9D2816E</string>
+ <string>EA8F6101AB32D6B0A3FC0163</string>
+ <string>D2BE15266514D3FE8B3E8820</string>
+ <string>8ACE4DE290D8847EA219A1B8</string>
+ </array>
+ <key>isa</key>
+ <string>PBXHeadersBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
+ </dict>
+ <key>C90E8B6A34A6456422C8086E</key>
+ <dict>
+ <key>fileRef</key>
+ <string>617AA57F150724B1881EC92E</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>CA294BA3C4F9A1948B2AE213</key>
<dict>
<key>baseConfigurationReference</key>
- <string>7FACBF2C8AF0403DD1C11015</string>
+ <string>EB86FC57EE5F50944BA86EE3</string>
<key>buildSettings</key>
<dict>
<key>ALWAYS_SEARCH_USER_PATHS</key>
@@ -2197,7 +3528,7 @@
<key>GCC_PRECOMPILE_PREFIX_HEADER</key>
<string>YES</string>
<key>GCC_PREFIX_HEADER</key>
- <string>Target Support Files/Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-prefix.pch</string>
+ <string>Target Support Files/Pods-GRPCClient/Pods-GRPCClient-prefix.pch</string>
<key>GCC_PREPROCESSOR_DEFINITIONS</key>
<array>
<string>DEBUG=1</string>
@@ -2227,156 +3558,105 @@
<key>name</key>
<string>Debug</string>
</dict>
- <key>B4FB10339A6A2E1AAF255802</key>
+ <key>CA8337B362EA0132CA470DB0</key>
+ <dict>
+ <key>fileRef</key>
+ <string>2DA7CCAA52B82F817FA61F5A</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>CAB17FE3D2357BFAF9B8598F</key>
+ <dict>
+ <key>fileRef</key>
+ <string>D444D13D4D0829CF4142949A</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>CB5B0489448E9051E9F9E423</key>
+ <dict>
+ <key>fileRef</key>
+ <string>A7CE4BCE7B6959BCDC54B854</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>CBB34B55930DEFBDE44A62E0</key>
<dict>
+ <key>explicitFileType</key>
+ <string>archive.ar</string>
<key>includeInIndex</key>
- <string>1</string>
+ <string>0</string>
<key>isa</key>
<string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>text</string>
- <key>name</key>
- <string>Podfile</string>
<key>path</key>
- <string>../Podfile</string>
+ <string>libPods-Sample-GRPCClient.a</string>
<key>sourceTree</key>
- <string>SOURCE_ROOT</string>
- <key>xcLanguageSpecificationIdentifier</key>
- <string>xcode.lang.ruby</string>
+ <string>BUILT_PRODUCTS_DIR</string>
+ </dict>
+ <key>CC00C5E75E69BE36B9D2816E</key>
+ <dict>
+ <key>fileRef</key>
+ <string>7F5DF8C37493F93C2636BAD6</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
</dict>
- <key>B50ECED4CEC7554ED6077619</key>
+ <key>CC354BAF9312E63AB7D4404A</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.plist.xml</string>
+ <string>sourcecode.c.h</string>
<key>path</key>
- <string>Pods-Sample-acknowledgements.plist</string>
+ <string>Pods-environment.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>B602CFEF970BEA98E40A056C</key>
- <dict>
- <key>baseConfigurationReference</key>
- <string>27E123435067CC11FE103999</string>
- <key>buildSettings</key>
- <dict>
- <key>ALWAYS_SEARCH_USER_PATHS</key>
- <string>NO</string>
- <key>COPY_PHASE_STRIP</key>
- <string>YES</string>
- <key>DSTROOT</key>
- <string>/tmp/xcodeproj.dst</string>
- <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
- <string>YES</string>
- <key>INSTALL_PATH</key>
- <string>$(BUILT_PRODUCTS_DIR)</string>
- <key>IPHONEOS_DEPLOYMENT_TARGET</key>
- <string>8.0</string>
- <key>OTHER_CFLAGS</key>
- <array>
- <string>-DNS_BLOCK_ASSERTIONS=1</string>
- <string>$(inherited)</string>
- </array>
- <key>OTHER_CPLUSPLUSFLAGS</key>
- <array>
- <string>-DNS_BLOCK_ASSERTIONS=1</string>
- <string>$(inherited)</string>
- </array>
- <key>OTHER_LDFLAGS</key>
- <string></string>
- <key>OTHER_LIBTOOLFLAGS</key>
- <string></string>
- <key>PRODUCT_NAME</key>
- <string>$(TARGET_NAME)</string>
- <key>PUBLIC_HEADERS_FOLDER_PATH</key>
- <string>$(TARGET_NAME)</string>
- <key>SDKROOT</key>
- <string>iphoneos</string>
- <key>SKIP_INSTALL</key>
- <string>YES</string>
- <key>VALIDATE_PRODUCT</key>
- <string>YES</string>
- </dict>
- <key>isa</key>
- <string>XCBuildConfiguration</string>
- <key>name</key>
- <string>Release</string>
- </dict>
- <key>B78477CA74AEFC96C25B49B4</key>
+ <key>CD18BC77ECA79D031662CC51</key>
<dict>
<key>fileRef</key>
- <string>BDA58E5E1AE450540A2B0227</string>
+ <string>8A203557337361CF44D2D664</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>B7902691B66134F3764663D9</key>
+ <key>CDA9A715DCFCE07755974888</key>
<dict>
- <key>fileRef</key>
- <string>3AD75C69A61408EF8BE0F247</string>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
+ <key>name</key>
+ <string>Pods-SampleTests-GRPCClient-Private.xcconfig</string>
+ <key>path</key>
+ <string>../Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-Private.xcconfig</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>B90592E4E39AFD1E769F9A95</key>
+ <key>CDB4449E284965A752BD1786</key>
<dict>
<key>fileRef</key>
- <string>F763F3DF1B47888E75D0ED9C</string>
+ <string>E0CF2237012441B69E760029</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>B960FF1BE77D3F4459EEB1E0</key>
+ <key>CEA794A7056AFAB8256CC44D</key>
<dict>
- <key>baseConfigurationReference</key>
- <string>7FACBF2C8AF0403DD1C11015</string>
- <key>buildSettings</key>
- <dict>
- <key>ALWAYS_SEARCH_USER_PATHS</key>
- <string>NO</string>
- <key>COPY_PHASE_STRIP</key>
- <string>YES</string>
- <key>DSTROOT</key>
- <string>/tmp/xcodeproj.dst</string>
- <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
- <string>YES</string>
- <key>GCC_PREFIX_HEADER</key>
- <string>Target Support Files/Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-prefix.pch</string>
- <key>INSTALL_PATH</key>
- <string>$(BUILT_PRODUCTS_DIR)</string>
- <key>IPHONEOS_DEPLOYMENT_TARGET</key>
- <string>8.0</string>
- <key>OTHER_CFLAGS</key>
- <array>
- <string>-DNS_BLOCK_ASSERTIONS=1</string>
- <string>$(inherited)</string>
- </array>
- <key>OTHER_CPLUSPLUSFLAGS</key>
- <array>
- <string>-DNS_BLOCK_ASSERTIONS=1</string>
- <string>$(inherited)</string>
- </array>
- <key>OTHER_LDFLAGS</key>
- <string></string>
- <key>OTHER_LIBTOOLFLAGS</key>
- <string></string>
- <key>PRODUCT_NAME</key>
- <string>$(TARGET_NAME)</string>
- <key>PUBLIC_HEADERS_FOLDER_PATH</key>
- <string>$(TARGET_NAME)</string>
- <key>SDKROOT</key>
- <string>iphoneos</string>
- <key>SKIP_INSTALL</key>
- <string>YES</string>
- <key>VALIDATE_PRODUCT</key>
- <string>YES</string>
- </dict>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>XCBuildConfiguration</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
<key>name</key>
- <string>Release</string>
+ <string>GRXMappingWriter.m</string>
+ <key>path</key>
+ <string>transformations/GRXMappingWriter.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>BA9F62DDE37FF0D601A4D5EA</key>
+ <key>D0641C22EEADF13905743122</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -2384,32 +3664,34 @@
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>GRPCCompletionQueue.m</string>
<key>path</key>
- <string>NSEnumerator+GRXUtil.m</string>
+ <string>private/GRPCCompletionQueue.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>BB88043BB37FC0261BA90A30</key>
+ <key>D0B7F6736070533C215E7DE3</key>
<dict>
<key>fileRef</key>
- <string>636AC1003F2C71FFD74542CD</string>
+ <string>423B94F0660BA470EAD9DA5E</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>BC50D76123DA4B85E6AD77B4</key>
+ <key>D0C130BBB6DBFE22F6B649E8</key>
<dict>
- <key>includeInIndex</key>
- <string>1</string>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>34D39E370FE6AF621D048E13</string>
+ </array>
<key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
- <key>path</key>
- <string>Pods-Sample-dummy.m</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>PBXFrameworksBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
</dict>
- <key>BC52B0661F25B25CE382296C</key>
+ <key>D0E4885FFC11D4A532FAB517</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -2417,12 +3699,42 @@
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>Pods-SampleTests-GRPCClient-dummy.m</string>
<key>path</key>
- <string>GRXImmediateWriter.m</string>
+ <string>../Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-dummy.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>BDA58E5E1AE450540A2B0227</key>
+ <key>D153B061942AF56AA4E13412</key>
+ <dict>
+ <key>fileRef</key>
+ <string>BC51F603F893AA6A748EB8EC</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>D1C458EAFDCA48A4C90131E9</key>
+ <dict>
+ <key>fileRef</key>
+ <string>A7CE4BCE7B6959BCDC54B854</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>D250768ADF5442C9C8880A18</key>
+ <dict>
+ <key>fileRef</key>
+ <string>6A4F426FF21092B2A4B44022</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>D2BE15266514D3FE8B3E8820</key>
+ <dict>
+ <key>fileRef</key>
+ <string>B5E4A18F0B2376BE20D1C8A5</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>D444D13D4D0829CF4142949A</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -2431,11 +3743,11 @@
<key>lastKnownFileType</key>
<string>sourcecode.c.objc</string>
<key>path</key>
- <string>GRXWriter.m</string>
+ <string>GRXImmediateWriter.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>BECFE3DCB323841851972996</key>
+ <key>D45F5D73E3D255043B7E349A</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -2443,188 +3755,353 @@
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>NSData+GRPC.h</string>
<key>path</key>
- <string>GRXImmediateWriter.h</string>
+ <string>private/NSData+GRPC.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>BFE770FF3C0847AB995A82CA</key>
+ <key>D520F3474212A72655D2F0ED</key>
<dict>
<key>buildActionMask</key>
<string>2147483647</string>
<key>files</key>
<array>
- <string>86D03B997B81819E2F39E48B</string>
- <string>43CC797FB2A733DF5B7A9F05</string>
- <string>6E0669CB3E76E19FC854BA74</string>
- <string>CBA4FEEF7E642535FB39D878</string>
- <string>FC1BEDED07CA4D91AFEB56BD</string>
- <string>46FAFA88CA3E774263422EB9</string>
- <string>8915073BE8158EF53FE11B95</string>
- <string>B90592E4E39AFD1E769F9A95</string>
- <string>F6383D21195A5BEFC51F6618</string>
- <string>352B4C7135E3BBBFEBAB7F55</string>
- <string>E8F0B998CE49FF732F312133</string>
+ <string>CB5B0489448E9051E9F9E423</string>
</array>
<key>isa</key>
- <string>PBXSourcesBuildPhase</string>
+ <string>PBXFrameworksBuildPhase</string>
<key>runOnlyForDeploymentPostprocessing</key>
<string>0</string>
</dict>
- <key>C0AC333A6FE8F07600C96890</key>
+ <key>D54769D14A73816406636B14</key>
<dict>
<key>fileRef</key>
- <string>1868370C0050315A6B835D42</string>
+ <string>B5E4A18F0B2376BE20D1C8A5</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>C382F416EFA39BE2CF216044</key>
+ <key>D548663391776A14DCAC50B8</key>
<dict>
<key>fileRef</key>
- <string>5AEFA85A5F1AD206D68B0576</string>
+ <string>A7CE4BCE7B6959BCDC54B854</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>C4342DDEEF3C3290956C21DF</key>
+ <key>D5B158492CFF90F975B03B8D</key>
<dict>
- <key>buildConfigurations</key>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
<array>
- <string>A8AFEFDF4700447BBCDF9E10</string>
- <string>0F20828B67FDCB990B1818E9</string>
+ <string>E0CA82F272732A2A5F024AD6</string>
+ <string>26A838790310501CB08753A6</string>
+ <string>00669D4383CB42C429D06591</string>
+ <string>91D5786D0585930DEFAB636E</string>
+ <string>AAAEE7AE6F373AA2C0D1969F</string>
+ <string>F84427B4C72738E045D44E6C</string>
+ <string>822AA7CD03CFBA9265225E74</string>
+ <string>0843899658450810B81AC1DD</string>
+ <string>F37E3DFDFA20082CBC4E2257</string>
+ <string>DDC9480509EAE89DED87393D</string>
</array>
- <key>defaultConfigurationIsVisible</key>
- <string>0</string>
- <key>defaultConfigurationName</key>
- <string>Release</string>
<key>isa</key>
- <string>XCConfigurationList</string>
+ <string>PBXSourcesBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
</dict>
- <key>CBA4FEEF7E642535FB39D878</key>
+ <key>D6715088D2AB1CBAA49F8651</key>
<dict>
- <key>fileRef</key>
- <string>636AC1003F2C71FFD74542CD</string>
+ <key>containerPortal</key>
+ <string>E61F9CBEB0CA9A172C4AA56B</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXContainerItemProxy</string>
+ <key>proxyType</key>
+ <string>1</string>
+ <key>remoteGlobalIDString</key>
+ <string>AB3F9F2CFA29030A599E9231</string>
+ <key>remoteInfo</key>
+ <string>Pods-GRPCClient</string>
</dict>
- <key>CC0A03D531EF0FF199671820</key>
+ <key>D6D8919597D4E28EBF5D166B</key>
<dict>
- <key>fileRef</key>
- <string>9CFAC09E370EA1C96C8D2880</string>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>path</key>
+ <string>GRXWriteable.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>CC358E38AE146C095C401760</key>
+ <key>D756E08287486CC7A7034803</key>
<dict>
- <key>fileRef</key>
- <string>0260773D27B4AE159FB0B22D</string>
+ <key>children</key>
+ <array>
+ <string>EB0497400F84ADD968F6AB42</string>
+ <string>A32A838D0E36519FB68C73DF</string>
+ <string>C5A09DD572522E9567EC6CD1</string>
+ <string>D985414BAA4686F0ED38ACF8</string>
+ <string>255EE0013C9A672760CB1F29</string>
+ <string>048EFCCABBC3F25828644716</string>
+ <string>51DBA8F3C7D4E67BDD768066</string>
+ </array>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXGroup</string>
+ <key>name</key>
+ <string>Pods-SampleTests</string>
+ <key>path</key>
+ <string>Target Support Files/Pods-SampleTests</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>D49849E96C0C5FFB93C810CD</key>
+ <key>D7BA8B8D4FFF3674A537221D</key>
<dict>
<key>children</key>
<array>
- <string>3133D1CCCF4F1FE3E893509C</string>
- <string>2FE1D288B8389F925AA3CE0C</string>
- <string>2663F4401A9075DAC0B24171</string>
- <string>911BEE248BE640294A081862</string>
- <string>B034EE43C1EF96D1CBD1328A</string>
- <string>7FACBF2C8AF0403DD1C11015</string>
- <string>E232BDE68610C0AC98C0D29F</string>
- <string>4972C151CE9A8A15BC1AE2C8</string>
- <string>8A7375A2F98889F35C15E2D7</string>
- <string>687D79F4C2484F58E9796051</string>
- <string>42B461F095E85911637DFD60</string>
- <string>2B05A4C21D00E8CF0DE88447</string>
+ <string>9470FB5E010191C87542871D</string>
+ <string>D444D13D4D0829CF4142949A</string>
+ <string>35A079DEB6141A6FDFF69D63</string>
+ <string>CEA794A7056AFAB8256CC44D</string>
+ <string>0B083D6614A831642ECCDB95</string>
+ <string>34373F1941450D17C3F85B57</string>
+ <string>1A2D9424BA1BE0E3B2598D06</string>
+ <string>19A733EC94B0F847F901D308</string>
+ <string>617AA57F150724B1881EC92E</string>
+ <string>2DA7CCAA52B82F817FA61F5A</string>
+ <string>0C52B5B243390BA62033C734</string>
+ <string>D6D8919597D4E28EBF5D166B</string>
+ <string>B5E4A18F0B2376BE20D1C8A5</string>
+ <string>8A203557337361CF44D2D664</string>
+ <string>7F5DF8C37493F93C2636BAD6</string>
+ <string>EA915E5B33F07CD0B9F8ACE9</string>
+ <string>F776B445ABD393C908B02302</string>
+ <string>439AF2B977736E012C79B2FE</string>
+ <string>2705BF8D166EFF8A2D44B2BA</string>
+ <string>68A0ACB0AFAA7186EB2ABE09</string>
+ <string>6BC5E8D01392B97FF237C655</string>
</array>
<key>isa</key>
<string>PBXGroup</string>
<key>name</key>
- <string>Support Files</string>
+ <string>RxLibrary</string>
<key>path</key>
- <string>../examples/Sample/Pods/Target Support Files/Pods-RxLibrary</string>
+ <string>../../../RxLibrary</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>D53A8F2B11E6C2C187AFFF1D</key>
+ <key>D80E545131A1D2922F88C5D7</key>
+ <dict>
+ <key>fileRef</key>
+ <string>F541961867C9493F07D54B8E</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>D965694635120F86B2E5E101</key>
+ <dict>
+ <key>fileRef</key>
+ <string>9470FB5E010191C87542871D</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>D985414BAA4686F0ED38ACF8</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text</string>
+ <string>sourcecode.c.h</string>
<key>path</key>
- <string>Pods-Sample-acknowledgements.markdown</string>
+ <string>Pods-SampleTests-environment.h</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>DD9A2AC14E9E04D4337DB76E</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
+ <key>name</key>
+ <string>Pods-SampleTests-RxLibrary.xcconfig</string>
+ <key>path</key>
+ <string>../Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary.xcconfig</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>DB007D27F74F8F72C72A1079</key>
+ <key>DDC9480509EAE89DED87393D</key>
+ <dict>
+ <key>fileRef</key>
+ <string>7E3BE2E23E465D87ECF0E962</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>DF829332517E7136AED2EC79</key>
<dict>
<key>containerPortal</key>
- <string>FBF79DDF04ADEAED54BA2286</string>
+ <string>E61F9CBEB0CA9A172C4AA56B</string>
<key>isa</key>
<string>PBXContainerItemProxy</string>
<key>proxyType</key>
<string>1</string>
<key>remoteGlobalIDString</key>
- <string>6BFD156F312F6CAA1E5B00CA</string>
+ <string>AEECE9DFCC8F060F1E30A421</string>
<key>remoteInfo</key>
<string>Pods-RxLibrary</string>
</dict>
- <key>DB0257E62EC33F3F316EF017</key>
+ <key>DFF269EBCC2A9D30DC7E264F</key>
+ <dict>
+ <key>fileRef</key>
+ <string>34373F1941450D17C3F85B57</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>E05C4D27465DD5F292E2A8EE</key>
+ <dict>
+ <key>fileRef</key>
+ <string>D45F5D73E3D255043B7E349A</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>E066A01F3A992087F10B31CF</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
+ <array>
+ <string>87F549870DB778A5F152B608</string>
+ </array>
+ <key>isa</key>
+ <string>PBXFrameworksBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
+ </dict>
+ <key>E0CA82F272732A2A5F024AD6</key>
+ <dict>
+ <key>fileRef</key>
+ <string>53A5EA857F02C1DEEC269122</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>E0CF2237012441B69E760029</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
+ <string>sourcecode.c.objc</string>
<key>path</key>
- <string>GRXWriter.h</string>
+ <string>GRPCMethodName.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>DB3528F609E6177E1C5A691C</key>
+ <key>E23D43F03E7C19D671C93F81</key>
+ <dict>
+ <key>fileRef</key>
+ <string>CEA794A7056AFAB8256CC44D</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>E256AF33BE1D5C30780D4E96</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.plist.xml</string>
+ <string>sourcecode.c.h</string>
<key>path</key>
- <string>Pods-SampleTests-acknowledgements.plist</string>
+ <string>Pods-RxLibrary-prefix.pch</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>DB677464758307786D68CCE9</key>
+ <key>E2EA100B27BDAB6CA32F3814</key>
<dict>
+ <key>children</key>
+ <array>
+ <string>4B765AEAB08FDC86E8082F7A</string>
+ <string>644143496CECB668F61BCD16</string>
+ <string>D756E08287486CC7A7034803</string>
+ </array>
+ <key>isa</key>
+ <string>PBXGroup</string>
+ <key>name</key>
+ <string>Targets Support Files</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>E328084D7C583851D3BE25CF</key>
+ <dict>
+ <key>fileRef</key>
+ <string>34373F1941450D17C3F85B57</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>E4F23FE4AEB216E7D1E2B7EE</key>
+ <dict>
+ <key>explicitFileType</key>
+ <string>archive.ar</string>
<key>includeInIndex</key>
- <string>1</string>
+ <string>0</string>
<key>isa</key>
<string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>text.xcconfig</string>
<key>path</key>
- <string>Pods-SampleTests.release.xcconfig</string>
+ <string>libPods-Sample.a</string>
<key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>BUILT_PRODUCTS_DIR</string>
</dict>
- <key>DCAB71BD665AF17533987B69</key>
+ <key>E61F9CBEB0CA9A172C4AA56B</key>
<dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
+ <key>attributes</key>
+ <dict>
+ <key>LastUpgradeCheck</key>
+ <string>0510</string>
+ </dict>
+ <key>buildConfigurationList</key>
+ <string>B22A719DB3DFD2337E996D6A</string>
+ <key>compatibilityVersion</key>
+ <string>Xcode 3.2</string>
+ <key>developmentRegion</key>
+ <string>English</string>
+ <key>hasScannedForEncodings</key>
+ <string>0</string>
+ <key>isa</key>
+ <string>PBXProject</string>
+ <key>knownRegions</key>
+ <array>
+ <string>en</string>
+ </array>
+ <key>mainGroup</key>
+ <string>39B5F5991112189C12D87D40</string>
+ <key>productRefGroup</key>
+ <string>4D580403A4A30D76B96E9775</string>
+ <key>projectDirPath</key>
+ <string></string>
+ <key>projectReferences</key>
+ <array/>
+ <key>projectRoot</key>
+ <string></string>
+ <key>targets</key>
<array>
- <string>85D5565EC08D14A6A60F1DDA</string>
+ <string>7962371F2502CBAEBF859730</string>
+ <string>AB3F9F2CFA29030A599E9231</string>
+ <string>AEECE9DFCC8F060F1E30A421</string>
+ <string>1F1DE3733C2AC2A97CA8885A</string>
+ <string>66E177AC7F3B02B51D36A226</string>
+ <string>4E2021A981DA9A189922E0C6</string>
+ <string>B37278C2CEC4C1C433BEF120</string>
+ <string>A10CFA4D4ED9B20894905742</string>
+ <string>474A50F85C06F74769FAD474</string>
</array>
- <key>isa</key>
- <string>PBXFrameworksBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
</dict>
- <key>DF94410F5DC0A0AB69336DF4</key>
+ <key>EA41D57C3938E8D766E0224F</key>
<dict>
<key>explicitFileType</key>
<string>archive.ar</string>
@@ -2633,79 +4110,191 @@
<key>isa</key>
<string>PBXFileReference</string>
<key>path</key>
- <string>libPods-Sample.a</string>
+ <string>libPods-Sample-RxLibrary.a</string>
<key>sourceTree</key>
<string>BUILT_PRODUCTS_DIR</string>
</dict>
- <key>E14CB6F332A9E58BB5F76C07</key>
+ <key>EA8F6101AB32D6B0A3FC0163</key>
+ <dict>
+ <key>fileRef</key>
+ <string>F776B445ABD393C908B02302</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>EA915E5B33F07CD0B9F8ACE9</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>text.script.sh</string>
+ <string>sourcecode.c.objc</string>
<key>path</key>
- <string>Pods-resources.sh</string>
+ <string>GRXWriter+Immediate.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>E232BDE68610C0AC98C0D29F</key>
+ <key>EB0497400F84ADD968F6AB42</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
- <key>name</key>
- <string>Pods-Sample-RxLibrary-dummy.m</string>
+ <string>text</string>
<key>path</key>
- <string>../Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-dummy.m</string>
+ <string>Pods-SampleTests-acknowledgements.markdown</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>E86A17CE1D79ECDCEBF91109</key>
+ <key>EB86FC57EE5F50944BA86EE3</key>
<dict>
- <key>fileRef</key>
- <string>F763F3DF1B47888E75D0ED9C</string>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXBuildFile</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
+ <key>path</key>
+ <string>Pods-GRPCClient-Private.xcconfig</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>EBB8787CD50E6221A0ABA3AE</key>
+ <dict>
+ <key>baseConfigurationReference</key>
+ <string>02396B6B22E0450EA29193E9</string>
+ <key>buildSettings</key>
+ <dict>
+ <key>ALWAYS_SEARCH_USER_PATHS</key>
+ <string>NO</string>
+ <key>COPY_PHASE_STRIP</key>
+ <string>NO</string>
+ <key>DSTROOT</key>
+ <string>/tmp/xcodeproj.dst</string>
+ <key>GCC_DYNAMIC_NO_PIC</key>
+ <string>NO</string>
+ <key>GCC_OPTIMIZATION_LEVEL</key>
+ <string>0</string>
+ <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+ <string>YES</string>
+ <key>GCC_PREFIX_HEADER</key>
+ <string>Target Support Files/Pods-RxLibrary/Pods-RxLibrary-prefix.pch</string>
+ <key>GCC_PREPROCESSOR_DEFINITIONS</key>
+ <array>
+ <string>DEBUG=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
+ <string>NO</string>
+ <key>INSTALL_PATH</key>
+ <string>$(BUILT_PRODUCTS_DIR)</string>
+ <key>IPHONEOS_DEPLOYMENT_TARGET</key>
+ <string>8.0</string>
+ <key>OTHER_LDFLAGS</key>
+ <string></string>
+ <key>OTHER_LIBTOOLFLAGS</key>
+ <string></string>
+ <key>PRODUCT_NAME</key>
+ <string>$(TARGET_NAME)</string>
+ <key>PUBLIC_HEADERS_FOLDER_PATH</key>
+ <string>$(TARGET_NAME)</string>
+ <key>SDKROOT</key>
+ <string>iphoneos</string>
+ <key>SKIP_INSTALL</key>
+ <string>YES</string>
+ </dict>
+ <key>isa</key>
+ <string>XCBuildConfiguration</string>
+ <key>name</key>
+ <string>Debug</string>
</dict>
- <key>E8F0B998CE49FF732F312133</key>
+ <key>EC47C9C8660A81111C71C967</key>
<dict>
<key>fileRef</key>
- <string>E232BDE68610C0AC98C0D29F</string>
+ <string>003D718984A073D9C6C71422</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>EB29FAB1F81F0D17BDAD72D0</key>
+ <key>EC4BA4B1D02C3BA6DBB450E7</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
+ <string>text</string>
+ <key>name</key>
+ <string>Podfile</string>
<key>path</key>
- <string>GRXWriter+Immediate.m</string>
+ <string>../Podfile</string>
<key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>SOURCE_ROOT</string>
+ <key>xcLanguageSpecificationIdentifier</key>
+ <string>xcode.lang.ruby</string>
</dict>
- <key>EF2EE4BC906FF9909348DAB5</key>
+ <key>ED9460BEAAB47A2752887CE9</key>
+ <dict>
+ <key>baseConfigurationReference</key>
+ <string>51DBA8F3C7D4E67BDD768066</string>
+ <key>buildSettings</key>
+ <dict>
+ <key>ALWAYS_SEARCH_USER_PATHS</key>
+ <string>NO</string>
+ <key>COPY_PHASE_STRIP</key>
+ <string>YES</string>
+ <key>DSTROOT</key>
+ <string>/tmp/xcodeproj.dst</string>
+ <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+ <string>YES</string>
+ <key>INSTALL_PATH</key>
+ <string>$(BUILT_PRODUCTS_DIR)</string>
+ <key>IPHONEOS_DEPLOYMENT_TARGET</key>
+ <string>8.0</string>
+ <key>OTHER_CFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_CPLUSPLUSFLAGS</key>
+ <array>
+ <string>-DNS_BLOCK_ASSERTIONS=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>OTHER_LDFLAGS</key>
+ <string></string>
+ <key>OTHER_LIBTOOLFLAGS</key>
+ <string></string>
+ <key>PRODUCT_NAME</key>
+ <string>$(TARGET_NAME)</string>
+ <key>PUBLIC_HEADERS_FOLDER_PATH</key>
+ <string>$(TARGET_NAME)</string>
+ <key>SDKROOT</key>
+ <string>iphoneos</string>
+ <key>SKIP_INSTALL</key>
+ <string>YES</string>
+ <key>VALIDATE_PRODUCT</key>
+ <string>YES</string>
+ </dict>
+ <key>isa</key>
+ <string>XCBuildConfiguration</string>
+ <key>name</key>
+ <string>Release</string>
+ </dict>
+ <key>EE156F6201B39BDD5F905822</key>
<dict>
- <key>explicitFileType</key>
- <string>archive.ar</string>
<key>includeInIndex</key>
- <string>0</string>
+ <string>1</string>
<key>isa</key>
<string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
<key>path</key>
- <string>libPods-Sample-RxLibrary.a</string>
+ <string>Pods-GRPCClient-prefix.pch</string>
<key>sourceTree</key>
- <string>BUILT_PRODUCTS_DIR</string>
+ <string>&lt;group&gt;</string>
</dict>
- <key>EF8B807C5A2059D6C709450D</key>
+ <key>EE695A82B047142EA781152E</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -2713,66 +4302,113 @@
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.h</string>
+ <key>name</key>
+ <string>GRPCMethodName+HTTP2Encoding.h</string>
<key>path</key>
- <string>Pods-SampleTests-environment.h</string>
+ <string>private/GRPCMethodName+HTTP2Encoding.h</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>F2BB78774BCEFD5DDDF38239</key>
+ <key>EE85C49640E6202C2A33CDF6</key>
<dict>
- <key>children</key>
+ <key>baseConfigurationReference</key>
+ <string>048EFCCABBC3F25828644716</string>
+ <key>buildSettings</key>
+ <dict>
+ <key>ALWAYS_SEARCH_USER_PATHS</key>
+ <string>NO</string>
+ <key>COPY_PHASE_STRIP</key>
+ <string>NO</string>
+ <key>DSTROOT</key>
+ <string>/tmp/xcodeproj.dst</string>
+ <key>GCC_DYNAMIC_NO_PIC</key>
+ <string>NO</string>
+ <key>GCC_OPTIMIZATION_LEVEL</key>
+ <string>0</string>
+ <key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+ <string>YES</string>
+ <key>GCC_PREPROCESSOR_DEFINITIONS</key>
+ <array>
+ <string>DEBUG=1</string>
+ <string>$(inherited)</string>
+ </array>
+ <key>GCC_SYMBOLS_PRIVATE_EXTERN</key>
+ <string>NO</string>
+ <key>INSTALL_PATH</key>
+ <string>$(BUILT_PRODUCTS_DIR)</string>
+ <key>IPHONEOS_DEPLOYMENT_TARGET</key>
+ <string>8.0</string>
+ <key>OTHER_LDFLAGS</key>
+ <string></string>
+ <key>OTHER_LIBTOOLFLAGS</key>
+ <string></string>
+ <key>PRODUCT_NAME</key>
+ <string>$(TARGET_NAME)</string>
+ <key>PUBLIC_HEADERS_FOLDER_PATH</key>
+ <string>$(TARGET_NAME)</string>
+ <key>SDKROOT</key>
+ <string>iphoneos</string>
+ <key>SKIP_INSTALL</key>
+ <string>YES</string>
+ </dict>
+ <key>isa</key>
+ <string>XCBuildConfiguration</string>
+ <key>name</key>
+ <string>Debug</string>
+ </dict>
+ <key>EF97D57CA44A79151103F06B</key>
+ <dict>
+ <key>isa</key>
+ <string>PBXTargetDependency</string>
+ <key>name</key>
+ <string>Pods-SampleTests-RxLibrary</string>
+ <key>target</key>
+ <string>474A50F85C06F74769FAD474</string>
+ <key>targetProxy</key>
+ <string>FE333C59E3BD0F9986105E29</string>
+ </dict>
+ <key>F058968A71750BBCF4F4FB1C</key>
+ <dict>
+ <key>buildActionMask</key>
+ <string>2147483647</string>
+ <key>files</key>
<array>
- <string>69E8FF71552D08D72B9068F1</string>
- <string>7A8627E1649F66DEE014EB46</string>
- <string>0D09CEB9308FA5BACEB5F84C</string>
+ <string>03289193476D7E6EE456FAA8</string>
</array>
<key>isa</key>
- <string>PBXGroup</string>
- <key>name</key>
- <string>Targets Support Files</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
+ <string>PBXSourcesBuildPhase</string>
+ <key>runOnlyForDeploymentPostprocessing</key>
+ <string>0</string>
</dict>
- <key>F2C6AACFE46FFA8DC383DE43</key>
+ <key>F156B1B8573809A342E0AE1F</key>
<dict>
<key>fileRef</key>
- <string>0D53085043D992DC00E29F0A</string>
+ <string>CEA794A7056AFAB8256CC44D</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>F6383D21195A5BEFC51F6618</key>
+ <key>F2B5B896D8C7E13B5E8ADA28</key>
<dict>
<key>fileRef</key>
- <string>BDA58E5E1AE450540A2B0227</string>
+ <string>E0CF2237012441B69E760029</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>F6C59E5B4CFE053E9F98000E</key>
+ <key>F37E3DFDFA20082CBC4E2257</key>
<dict>
- <key>buildConfigurationList</key>
- <string>17F4C2F25813E7A4588FF233</string>
- <key>buildPhases</key>
- <array>
- <string>BFE770FF3C0847AB995A82CA</string>
- <string>1146D04C598DEBA045C96C2F</string>
- <string>9E8DC61269B141639DA7F859</string>
- </array>
- <key>buildRules</key>
- <array/>
- <key>dependencies</key>
- <array/>
+ <key>fileRef</key>
+ <string>6BBDA0AD2955451BBF881052</string>
<key>isa</key>
- <string>PBXNativeTarget</string>
- <key>name</key>
- <string>Pods-Sample-RxLibrary</string>
- <key>productName</key>
- <string>Pods-Sample-RxLibrary</string>
- <key>productReference</key>
- <string>EF2EE4BC906FF9909348DAB5</string>
- <key>productType</key>
- <string>com.apple.product-type.library.static</string>
+ <string>PBXBuildFile</string>
</dict>
- <key>F763F3DF1B47888E75D0ED9C</key>
+ <key>F4586BA420EA562FECC43A3A</key>
+ <dict>
+ <key>fileRef</key>
+ <string>A7CE4BCE7B6959BCDC54B854</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>F541961867C9493F07D54B8E</key>
<dict>
<key>includeInIndex</key>
<string>1</string>
@@ -2780,109 +4416,167 @@
<string>PBXFileReference</string>
<key>lastKnownFileType</key>
<string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>GRPCDelegateWrapper.m</string>
<key>path</key>
- <string>GRXWriter+Transformations.m</string>
+ <string>private/GRPCDelegateWrapper.m</string>
<key>sourceTree</key>
<string>&lt;group&gt;</string>
</dict>
- <key>F779618174957BE31FCCDE56</key>
+ <key>F636FFBF62AFF197BE3CB427</key>
<dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
+ <key>fileRef</key>
+ <string>34373F1941450D17C3F85B57</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>F6A0AD6C190915DD52886BE2</key>
+ <dict>
+ <key>buildConfigurations</key>
<array>
- <string>2B49DCA723ECBC0F2777B960</string>
- <string>22531AF83592134D3879C3E1</string>
- <string>0C57EED724EBF58759F9F6DF</string>
- <string>8CD061F02F905957F4C1D188</string>
- <string>458FF1EEF4EB9646C699F3DD</string>
- <string>2B341576464148A01DCFB28B</string>
- <string>36FF37EAC7E918C4CD867776</string>
- <string>594F98D43B96AB5C11E61C10</string>
- <string>B78477CA74AEFC96C25B49B4</string>
- <string>9CCBE9A628C305B3B089B8DD</string>
- <string>801BBA7A538CFAE6746966A7</string>
+ <string>EE85C49640E6202C2A33CDF6</string>
+ <string>ED9460BEAAB47A2752887CE9</string>
</array>
- <key>isa</key>
- <string>PBXSourcesBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
+ <key>defaultConfigurationIsVisible</key>
<string>0</string>
+ <key>defaultConfigurationName</key>
+ <string>Release</string>
+ <key>isa</key>
+ <string>XCConfigurationList</string>
</dict>
- <key>F8B4778EF3030EEC2E9927CE</key>
+ <key>F6B6558E339AD89F764A6D88</key>
<dict>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXTargetDependency</string>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.xcconfig</string>
<key>name</key>
- <string>Pods-SampleTests-RxLibrary</string>
- <key>target</key>
- <string>3800855A656C8D0813062074</string>
- <key>targetProxy</key>
- <string>7DA2A517A18D85B390FB122A</string>
+ <string>Pods-Sample-RxLibrary.xcconfig</string>
+ <key>path</key>
+ <string>../Pods-Sample-RxLibrary/Pods-Sample-RxLibrary.xcconfig</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>FBF79DDF04ADEAED54BA2286</key>
+ <key>F776B445ABD393C908B02302</key>
<dict>
- <key>attributes</key>
- <dict>
- <key>LastUpgradeCheck</key>
- <string>0510</string>
- </dict>
- <key>buildConfigurationList</key>
- <string>3749A34D3DFA6E2F3539E546</string>
- <key>compatibilityVersion</key>
- <string>Xcode 3.2</string>
- <key>developmentRegion</key>
- <string>English</string>
- <key>hasScannedForEncodings</key>
- <string>0</string>
+ <key>includeInIndex</key>
+ <string>1</string>
<key>isa</key>
- <string>PBXProject</string>
- <key>knownRegions</key>
- <array>
- <string>en</string>
- </array>
- <key>mainGroup</key>
- <string>397A12919FB4BDD608FE207C</string>
- <key>productRefGroup</key>
- <string>8B05D39455D5B23720961FA4</string>
- <key>projectDirPath</key>
- <string></string>
- <key>projectReferences</key>
- <array/>
- <key>projectRoot</key>
- <string></string>
- <key>targets</key>
- <array>
- <string>26E6ACBF137DBC325B4E7DA7</string>
- <string>6BFD156F312F6CAA1E5B00CA</string>
- <string>0239F1B46D24E21A8042F47F</string>
- <string>F6C59E5B4CFE053E9F98000E</string>
- <string>14D92BB2ED12213381BD2EB9</string>
- <string>3800855A656C8D0813062074</string>
- </array>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.h</string>
+ <key>path</key>
+ <string>GRXWriter+Transformations.h</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
</dict>
- <key>FC1BEDED07CA4D91AFEB56BD</key>
+ <key>F84427B4C72738E045D44E6C</key>
<dict>
<key>fileRef</key>
- <string>57AC9BF19B9635D7476CA5FA</string>
+ <string>E0CF2237012441B69E760029</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>FDC6B84EAC9989F0827EA4F3</key>
+ <key>F911880EC1D908050569F8AF</key>
<dict>
<key>fileRef</key>
- <string>0260773D27B4AE159FB0B22D</string>
+ <string>3E850442224A3D7C7540C6C5</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
- <key>FDC939796E70DC7D141E29FC</key>
+ <key>FA5E9BC13067F1E32D6311E6</key>
<dict>
<key>fileRef</key>
- <string>DB0257E62EC33F3F316EF017</string>
+ <string>FB880554D85130C733402058</string>
<key>isa</key>
<string>PBXBuildFile</string>
</dict>
+ <key>FB880554D85130C733402058</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>sourcecode.c.objc</string>
+ <key>name</key>
+ <string>GRPCChannel.m</string>
+ <key>path</key>
+ <string>private/GRPCChannel.m</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
+ <key>FBC9D2D66DA1B0B501961B55</key>
+ <dict>
+ <key>containerPortal</key>
+ <string>E61F9CBEB0CA9A172C4AA56B</string>
+ <key>isa</key>
+ <string>PBXContainerItemProxy</string>
+ <key>proxyType</key>
+ <string>1</string>
+ <key>remoteGlobalIDString</key>
+ <string>474A50F85C06F74769FAD474</string>
+ <key>remoteInfo</key>
+ <string>Pods-SampleTests-RxLibrary</string>
+ </dict>
+ <key>FD9953A9B079B03396B2FEA3</key>
+ <dict>
+ <key>fileRef</key>
+ <string>F541961867C9493F07D54B8E</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>FE333C59E3BD0F9986105E29</key>
+ <dict>
+ <key>containerPortal</key>
+ <string>E61F9CBEB0CA9A172C4AA56B</string>
+ <key>isa</key>
+ <string>PBXContainerItemProxy</string>
+ <key>proxyType</key>
+ <string>1</string>
+ <key>remoteGlobalIDString</key>
+ <string>474A50F85C06F74769FAD474</string>
+ <key>remoteInfo</key>
+ <string>Pods-SampleTests-RxLibrary</string>
+ </dict>
+ <key>FF34F6701990B0955422EC9C</key>
+ <dict>
+ <key>buildConfigurations</key>
+ <array>
+ <string>EBB8787CD50E6221A0ABA3AE</string>
+ <string>0041F7F38D0B99E977EC7A9B</string>
+ </array>
+ <key>defaultConfigurationIsVisible</key>
+ <string>0</string>
+ <key>defaultConfigurationName</key>
+ <string>Release</string>
+ <key>isa</key>
+ <string>XCConfigurationList</string>
+ </dict>
+ <key>FF378D56A81AE6EFC739CDE6</key>
+ <dict>
+ <key>fileRef</key>
+ <string>617AA57F150724B1881EC92E</string>
+ <key>isa</key>
+ <string>PBXBuildFile</string>
+ </dict>
+ <key>FFC668E9994CC6407B338F9D</key>
+ <dict>
+ <key>includeInIndex</key>
+ <string>1</string>
+ <key>isa</key>
+ <string>PBXFileReference</string>
+ <key>lastKnownFileType</key>
+ <string>text.plist.xml</string>
+ <key>path</key>
+ <string>Pods-acknowledgements.plist</string>
+ <key>sourceTree</key>
+ <string>&lt;group&gt;</string>
+ </dict>
</dict>
<key>rootObject</key>
- <string>FBF79DDF04ADEAED54BA2286</string>
+ <string>E61F9CBEB0CA9A172C4AA56B</string>
</dict>
</plist>
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-Private.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-Private.xcconfig
new file mode 100644
index 0000000000..27df354315
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-Private.xcconfig
@@ -0,0 +1,5 @@
+#include "Pods-GRPCClient.xcconfig"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/GRPCClient" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_LDFLAGS = -ObjC
+PODS_ROOT = ${SRCROOT} \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-dummy.m b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-dummy.m
new file mode 100644
index 0000000000..8cac89bb84
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-dummy.m
@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_Pods_GRPCClient : NSObject
+@end
+@implementation PodsDummy_Pods_GRPCClient
+@end
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-prefix.pch b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-prefix.pch
new file mode 100644
index 0000000000..95cf11d9fb
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient-prefix.pch
@@ -0,0 +1,5 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#endif
+
+#import "Pods-environment.h"
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient.xcconfig
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-GRPCClient/Pods-GRPCClient.xcconfig
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-RxLibrary/Pods-RxLibrary-Private.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-RxLibrary/Pods-RxLibrary-Private.xcconfig
index 5c1a7097be..a1c3897b81 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-RxLibrary/Pods-RxLibrary-Private.xcconfig
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-RxLibrary/Pods-RxLibrary-Private.xcconfig
@@ -1,5 +1,5 @@
#include "Pods-RxLibrary.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/RxLibrary" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/RxLibrary"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/RxLibrary" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
OTHER_LDFLAGS = -ObjC
PODS_ROOT = ${SRCROOT} \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-Private.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-Private.xcconfig
new file mode 100644
index 0000000000..e23f7be66f
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-Private.xcconfig
@@ -0,0 +1,5 @@
+#include "Pods-Sample-GRPCClient.xcconfig"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/GRPCClient" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_LDFLAGS = -ObjC
+PODS_ROOT = ${SRCROOT} \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-dummy.m b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-dummy.m
new file mode 100644
index 0000000000..2bf2682a72
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-dummy.m
@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_Pods_Sample_GRPCClient : NSObject
+@end
+@implementation PodsDummy_Pods_Sample_GRPCClient
+@end
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-prefix.pch b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-prefix.pch
new file mode 100644
index 0000000000..0e807f67a3
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient-prefix.pch
@@ -0,0 +1,5 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#endif
+
+#import "Pods-Sample-environment.h"
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient.xcconfig
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-GRPCClient/Pods-Sample-GRPCClient.xcconfig
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-Private.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-Private.xcconfig
index 2cc81f729d..023a22eb14 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-Private.xcconfig
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample-RxLibrary/Pods-Sample-RxLibrary-Private.xcconfig
@@ -1,5 +1,5 @@
#include "Pods-Sample-RxLibrary.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/RxLibrary" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/RxLibrary"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/RxLibrary" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
OTHER_LDFLAGS = -ObjC
PODS_ROOT = ${SRCROOT} \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-environment.h b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-environment.h
index b4fd16b369..d0acfc70ec 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-environment.h
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-environment.h
@@ -6,6 +6,12 @@
// project.
+// GRPCClient
+#define COCOAPODS_POD_AVAILABLE_GRPCClient
+#define COCOAPODS_VERSION_MAJOR_GRPCClient 0
+#define COCOAPODS_VERSION_MINOR_GRPCClient 0
+#define COCOAPODS_VERSION_PATCH_GRPCClient 1
+
// RxLibrary
#define COCOAPODS_POD_AVAILABLE_RxLibrary
#define COCOAPODS_VERSION_MAJOR_RxLibrary 0
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.debug.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.debug.xcconfig
index 776727154c..06aa64cfac 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.debug.xcconfig
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.debug.xcconfig
@@ -1,6 +1,6 @@
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_LDFLAGS = -ObjC -l"Pods-Sample-RxLibrary"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/GRPCClient" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_LDFLAGS = -ObjC -l"Pods-Sample-GRPCClient" -l"Pods-Sample-RxLibrary"
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)
PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.release.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.release.xcconfig
index 776727154c..06aa64cfac 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.release.xcconfig
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.release.xcconfig
@@ -1,6 +1,6 @@
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_LDFLAGS = -ObjC -l"Pods-Sample-RxLibrary"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/GRPCClient" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_LDFLAGS = -ObjC -l"Pods-Sample-GRPCClient" -l"Pods-Sample-RxLibrary"
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)
PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-Private.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-Private.xcconfig
new file mode 100644
index 0000000000..01e25c4a88
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-Private.xcconfig
@@ -0,0 +1,5 @@
+#include "Pods-SampleTests-GRPCClient.xcconfig"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/GRPCClient" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_LDFLAGS = -ObjC
+PODS_ROOT = ${SRCROOT} \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-dummy.m b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-dummy.m
new file mode 100644
index 0000000000..7ecd57a34b
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-dummy.m
@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_Pods_SampleTests_GRPCClient : NSObject
+@end
+@implementation PodsDummy_Pods_SampleTests_GRPCClient
+@end
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-prefix.pch b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-prefix.pch
new file mode 100644
index 0000000000..abd5651587
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient-prefix.pch
@@ -0,0 +1,5 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#endif
+
+#import "Pods-SampleTests-environment.h"
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient.xcconfig
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-GRPCClient/Pods-SampleTests-GRPCClient.xcconfig
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-Private.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-Private.xcconfig
index a3cd792434..67069bae5d 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-Private.xcconfig
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests-RxLibrary/Pods-SampleTests-RxLibrary-Private.xcconfig
@@ -1,5 +1,5 @@
#include "Pods-SampleTests-RxLibrary.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/RxLibrary" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/RxLibrary"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/RxLibrary" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
OTHER_LDFLAGS = -ObjC
PODS_ROOT = ${SRCROOT} \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests-environment.h b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests-environment.h
index b4fd16b369..d0acfc70ec 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests-environment.h
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests-environment.h
@@ -6,6 +6,12 @@
// project.
+// GRPCClient
+#define COCOAPODS_POD_AVAILABLE_GRPCClient
+#define COCOAPODS_VERSION_MAJOR_GRPCClient 0
+#define COCOAPODS_VERSION_MINOR_GRPCClient 0
+#define COCOAPODS_VERSION_PATCH_GRPCClient 1
+
// RxLibrary
#define COCOAPODS_POD_AVAILABLE_RxLibrary
#define COCOAPODS_VERSION_MAJOR_RxLibrary 0
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests.debug.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests.debug.xcconfig
index 92a3b7d2bd..892541c53e 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests.debug.xcconfig
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests.debug.xcconfig
@@ -1,6 +1,6 @@
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_LDFLAGS = -ObjC -l"Pods-SampleTests-RxLibrary"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/GRPCClient" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_LDFLAGS = -ObjC -l"Pods-SampleTests-GRPCClient" -l"Pods-SampleTests-RxLibrary"
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)
PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests.release.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests.release.xcconfig
index 92a3b7d2bd..892541c53e 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests.release.xcconfig
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods-SampleTests/Pods-SampleTests.release.xcconfig
@@ -1,6 +1,6 @@
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_LDFLAGS = -ObjC -l"Pods-SampleTests-RxLibrary"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/GRPCClient" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_LDFLAGS = -ObjC -l"Pods-SampleTests-GRPCClient" -l"Pods-SampleTests-RxLibrary"
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)
PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods-environment.h b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods-environment.h
index b4fd16b369..d0acfc70ec 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods-environment.h
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods-environment.h
@@ -6,6 +6,12 @@
// project.
+// GRPCClient
+#define COCOAPODS_POD_AVAILABLE_GRPCClient
+#define COCOAPODS_VERSION_MAJOR_GRPCClient 0
+#define COCOAPODS_VERSION_MINOR_GRPCClient 0
+#define COCOAPODS_VERSION_PATCH_GRPCClient 1
+
// RxLibrary
#define COCOAPODS_POD_AVAILABLE_RxLibrary
#define COCOAPODS_VERSION_MAJOR_RxLibrary 0
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods.debug.xcconfig
index 3c7fe4aa00..e9fafccb07 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods.debug.xcconfig
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods.debug.xcconfig
@@ -1,6 +1,6 @@
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_LDFLAGS = -ObjC -l"Pods-RxLibrary"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/GRPCClient" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_LDFLAGS = -ObjC -l"Pods-GRPCClient" -l"Pods-RxLibrary"
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)
PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods.release.xcconfig b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods.release.xcconfig
index 3c7fe4aa00..e9fafccb07 100644
--- a/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods.release.xcconfig
+++ b/src/objective-c/examples/Sample/Pods/Target Support Files/Pods/Pods.release.xcconfig
@@ -1,6 +1,6 @@
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
-OTHER_LDFLAGS = -ObjC -l"Pods-RxLibrary"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GRPCClient" "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/GRPCClient" -isystem "${PODS_ROOT}/Headers/Public/RxLibrary"
+OTHER_LDFLAGS = -ObjC -l"Pods-GRPCClient" -l"Pods-RxLibrary"
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)
PODS_ROOT = ${SRCROOT}/Pods \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Sample/ViewController.m b/src/objective-c/examples/Sample/Sample/ViewController.m
index 70b5d45811..f24d81888b 100644
--- a/src/objective-c/examples/Sample/Sample/ViewController.m
+++ b/src/objective-c/examples/Sample/Sample/ViewController.m
@@ -32,6 +32,10 @@
*/
#import "ViewController.h"
+#import <GRPCClient/GRPCCall.h>
+#import <GRPCClient/GRPCMethodName.h>
+#import <RxLibrary/GRXWriter+Immediate.h>
+#import <RxLibrary/GRXWriteable.h>
@interface ViewController ()
@@ -42,6 +46,20 @@
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
+
+ GRPCMethodName *method = [[GRPCMethodName alloc] initWithPackage:@"grpc.testing"
+ interface:@"TestService"
+ method:@"EmptyCall"];
+
+ GRPCCall *call = [[GRPCCall alloc] initWithHost:@"localhost"
+ method:method
+ requestsWriter:[GRXWriter writerWithValue:[NSData data]]];
+
+ [call startWithWriteable:[[GRXWriteable alloc] initWithValueHandler:^(NSData *value) {
+ NSLog(@"Received response: %@", value);
+ } completionHandler:^(NSError *errorOrNil) {
+ NSLog(@"Finished with error: %@", errorOrNil);
+ }]];
}
- (void)didReceiveMemoryWarning {
diff --git a/src/python/src/grpc/framework/assembly/implementations.py b/src/python/src/grpc/framework/assembly/implementations.py
index 461aa9c855..b9d314844c 100644
--- a/src/python/src/grpc/framework/assembly/implementations.py
+++ b/src/python/src/grpc/framework/assembly/implementations.py
@@ -195,7 +195,7 @@ def _servicer(implementations, pool):
event_stream_in_stream_out_methods=event_stream_in_stream_out_methods)
-class _ServiceAssembly(activated.Activated):
+class _ServiceAssembly(interfaces.Server):
def __init__(self, implementations, fore_link):
self._implementations = implementations
@@ -237,6 +237,10 @@ class _ServiceAssembly(activated.Activated):
def stop(self):
self._stop()
+ def port(self):
+ with self._lock:
+ return self._fore_link.port()
+
def assemble_face_stub(activated_rear_link):
"""Assembles a face_interfaces.Stub.
@@ -300,6 +304,6 @@ def assemble_service(implementations, activated_fore_link):
when passed to this method.
Returns:
- An activated.Activated value encapsulating RPC service.
+ An interfaces.Server encapsulating RPC service.
"""
return _ServiceAssembly(implementations, activated_fore_link)
diff --git a/src/python/src/grpc/framework/assembly/interfaces.py b/src/python/src/grpc/framework/assembly/interfaces.py
index e5d750b2bc..d1a6aad29e 100644
--- a/src/python/src/grpc/framework/assembly/interfaces.py
+++ b/src/python/src/grpc/framework/assembly/interfaces.py
@@ -37,6 +37,7 @@ import abc
# module.
from grpc.framework.common import cardinality # pylint: disable=unused-import
from grpc.framework.common import style # pylint: disable=unused-import
+from grpc.framework.foundation import activated
from grpc.framework.foundation import stream # pylint: disable=unused-import
@@ -89,3 +90,25 @@ class MethodImplementation(object):
style.Service.EVENT.
"""
__metaclass__ = abc.ABCMeta
+
+
+class Server(activated.Activated):
+ """The server interface.
+
+ Aside from being able to be activated and deactivated, objects of this type
+ are able to report the port on which they are servicing RPCs.
+ """
+ __metaclass__ = abc.ABCMeta
+
+ # TODO(issue 726): This is an abstraction violation; not every Server is
+ # necessarily serving over a network at all.
+ @abc.abstractmethod
+ def port(self):
+ """Identifies the port on which this Server is servicing RPCs.
+
+ This method may only be called while the server is active.
+
+ Returns:
+ The number of the port on which this Server is servicing RPCs.
+ """
+ raise NotImplementedError()
diff --git a/src/ruby/bin/interop/interop_client.rb b/src/ruby/bin/interop/interop_client.rb
index 50a14e3a96..76402b7c89 100755
--- a/src/ruby/bin/interop/interop_client.rb
+++ b/src/ruby/bin/interop/interop_client.rb
@@ -56,7 +56,7 @@ require 'test/cpp/interop/empty'
require 'signet/ssl_config'
-include Google::RPC::Auth
+include GRPC::Auth
# loads the certificates used to access the test server securely.
def load_test_certs
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 22b382cdab..cd7eb23845 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -1,7 +1,7 @@
# GRPC global makefile
# This currently builds C and C++ code.
-# Copyright 2014, Google Inc.
+# Copyright 2015, Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
diff --git a/templates/vsprojects/vs2013/Grpc.mak.template b/templates/vsprojects/vs2013/Grpc.mak.template
index bae069c082..8e1b33bba7 100644
--- a/templates/vsprojects/vs2013/Grpc.mak.template
+++ b/templates/vsprojects/vs2013/Grpc.mak.template
@@ -1,3 +1,31 @@
+# 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.
<%!
import re
%>\
@@ -76,4 +104,4 @@ ${target.name}: ${target.name}.exe
echo Running ${target.name}
$(OUT_DIR)\${target.name}.exe
-% endfor \ No newline at end of file
+% endfor
diff --git a/test/core/json/json_test.c b/test/core/json/json_test.c
index 0e315e51ee..bc3c7a3da8 100644
--- a/test/core/json/json_test.c
+++ b/test/core/json/json_test.c
@@ -65,7 +65,7 @@ static testing_pair testing_pairs[] = {
/* Testing nested empty containers. */
{ " [ [ ] , { } , [ ] ] ", "[[],{},[]]", },
/* Testing escapes and control chars in key strings. */
- { " { \"\\n\\\\a , b\": 1, \"\": 0 } ", "{\"\\n\\\\a , b\":1,\"\":0}" },
+ { " { \"\x7f\\n\\\\a , b\": 1, \"\": 0 } ", "{\"\\u007f\\n\\\\a , b\":1,\"\":0}" },
/* Testing the writer's ability to cut off invalid UTF-8 sequences. */
{ "\"abc\xf0\x9d\x24\"", "\"abc\"" },
{ "\"\xff\"", "\"\"" },
diff --git a/test/core/security/print_google_default_creds_token.c b/test/core/security/print_google_default_creds_token.c
new file mode 100644
index 0000000000..cfd62cf6cc
--- /dev/null
+++ b/test/core/security/print_google_default_creds_token.c
@@ -0,0 +1,107 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "src/core/security/credentials.h"
+#include <grpc/grpc.h>
+#include <grpc/grpc_security.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/cmdline.h>
+#include <grpc/support/log.h>
+#include <grpc/support/slice.h>
+#include <grpc/support/sync.h>
+
+typedef struct {
+ gpr_cv cv;
+ gpr_mu mu;
+ int is_done;
+} synchronizer;
+
+static void on_metadata_response(void *user_data, grpc_mdelem **md_elems,
+ size_t num_md,
+ grpc_credentials_status status) {
+ synchronizer *sync = user_data;
+ if (status == GRPC_CREDENTIALS_ERROR) {
+ fprintf(stderr, "Fetching token failed.\n");
+ } else {
+ GPR_ASSERT(num_md == 1);
+ printf("\nGot token: %s\n\n",
+ (const char *)GPR_SLICE_START_PTR(md_elems[0]->value->slice));
+ }
+ gpr_mu_lock(&sync->mu);
+ sync->is_done = 1;
+ gpr_mu_unlock(&sync->mu);
+ gpr_cv_signal(&sync->cv);
+}
+
+int main(int argc, char **argv) {
+ int result = 0;
+ synchronizer sync;
+ grpc_credentials *creds = NULL;
+ char *service_url = "https://test.foo.google.com/Foo";
+ gpr_cmdline *cl = gpr_cmdline_create("print_google_default_creds_token");
+ gpr_cmdline_add_string(cl, "service_url",
+ "Service URL for the token request.",
+ &service_url);
+ gpr_cmdline_parse(cl, argc, argv);
+
+ grpc_init();
+
+ creds = grpc_google_default_credentials_create();
+ if (creds == NULL) {
+ fprintf(stderr, "\nCould not find default credentials.\n\n");
+ result = 1;
+ goto end;
+ }
+
+ gpr_mu_init(&sync.mu);
+ gpr_cv_init(&sync.cv);
+ sync.is_done = 0;
+
+ grpc_credentials_get_request_metadata(creds, "", on_metadata_response, &sync);
+
+ gpr_mu_lock(&sync.mu);
+ while (!sync.is_done) gpr_cv_wait(&sync.cv, &sync.mu, gpr_inf_future);
+ gpr_mu_unlock(&sync.mu);
+
+ gpr_mu_destroy(&sync.mu);
+ gpr_cv_destroy(&sync.cv);
+ grpc_credentials_release(creds);
+
+end:
+ gpr_cmdline_destroy(cl);
+ grpc_shutdown();
+ return result;
+}
diff --git a/test/core/support/time_test.c b/test/core/support/time_test.c
index 2741e17f95..c1dce777b0 100644
--- a/test/core/support/time_test.c
+++ b/test/core/support/time_test.c
@@ -81,7 +81,7 @@ static void ts_to_s(gpr_timespec t,
void *arg) {
if (t.tv_sec < 0 && t.tv_nsec != 0) {
t.tv_sec++;
- t.tv_nsec = 1000000000 - t.tv_nsec;
+ t.tv_nsec = GPR_NS_PER_SEC - t.tv_nsec;
}
i_to_s(t.tv_sec, 10, 0, writer, arg);
(*writer)(arg, ".", 1);
@@ -127,15 +127,15 @@ static void test_values(void) {
/* Test possible overflow in conversion of -ve values. */
x = gpr_time_from_micros(-(LONG_MAX - 999997));
GPR_ASSERT(x.tv_sec < 0);
- GPR_ASSERT(x.tv_nsec >= 0 && x.tv_nsec < 1000000000);
+ GPR_ASSERT(x.tv_nsec >= 0 && x.tv_nsec < GPR_NS_PER_SEC);
x = gpr_time_from_nanos(-(LONG_MAX - 999999997));
GPR_ASSERT(x.tv_sec < 0);
- GPR_ASSERT(x.tv_nsec >= 0 && x.tv_nsec < 1000000000);
+ GPR_ASSERT(x.tv_nsec >= 0 && x.tv_nsec < GPR_NS_PER_SEC);
x = gpr_time_from_millis(-(LONG_MAX - 997));
GPR_ASSERT(x.tv_sec < 0);
- GPR_ASSERT(x.tv_nsec >= 0 && x.tv_nsec < 1000000000);
+ GPR_ASSERT(x.tv_nsec >= 0 && x.tv_nsec < GPR_NS_PER_SEC);
/* Test general -ve values. */
for (i = -1; i > -1000 * 1000 * 1000; i *= 7) {
diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc
index c36ff42949..9e25a5308d 100644
--- a/test/cpp/end2end/async_end2end_test.cc
+++ b/test/cpp/end2end/async_end2end_test.cc
@@ -106,7 +106,7 @@ class AsyncEnd2endTest : public ::testing::Test {
void ResetStub() {
std::shared_ptr<ChannelInterface> channel =
CreateChannelDeprecated(server_address_.str(), ChannelArguments());
- stub_.reset(grpc::cpp::test::util::TestService::NewStub(channel));
+ stub_ = std::move(grpc::cpp::test::util::TestService::NewStub(channel));
}
void server_ok(int i) {
diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc
index df370d493c..45f12a9e9d 100644
--- a/test/cpp/end2end/end2end_test.cc
+++ b/test/cpp/end2end/end2end_test.cc
@@ -162,7 +162,7 @@ class End2endTest : public ::testing::Test {
void ResetStub() {
std::shared_ptr<ChannelInterface> channel =
CreateChannelDeprecated(server_address_.str(), ChannelArguments());
- stub_.reset(grpc::cpp::test::util::TestService::NewStub(channel));
+ stub_ = std::move(grpc::cpp::test::util::TestService::NewStub(channel));
}
std::unique_ptr<grpc::cpp::test::util::TestService::Stub> stub_;
@@ -292,15 +292,13 @@ TEST_F(End2endTest, RequestStreamOneRequest) {
EchoResponse response;
ClientContext context;
- ClientWriter<EchoRequest>* stream = stub_->RequestStream(&context, &response);
+ auto stream = stub_->RequestStream(&context, &response);
request.set_message("hello");
EXPECT_TRUE(stream->Write(request));
stream->WritesDone();
Status s = stream->Finish();
EXPECT_EQ(response.message(), request.message());
EXPECT_TRUE(s.IsOk());
-
- delete stream;
}
TEST_F(End2endTest, RequestStreamTwoRequests) {
@@ -309,7 +307,7 @@ TEST_F(End2endTest, RequestStreamTwoRequests) {
EchoResponse response;
ClientContext context;
- ClientWriter<EchoRequest>* stream = stub_->RequestStream(&context, &response);
+ auto stream = stub_->RequestStream(&context, &response);
request.set_message("hello");
EXPECT_TRUE(stream->Write(request));
EXPECT_TRUE(stream->Write(request));
@@ -317,8 +315,6 @@ TEST_F(End2endTest, RequestStreamTwoRequests) {
Status s = stream->Finish();
EXPECT_EQ(response.message(), "hellohello");
EXPECT_TRUE(s.IsOk());
-
- delete stream;
}
TEST_F(End2endTest, ResponseStream) {
@@ -328,8 +324,7 @@ TEST_F(End2endTest, ResponseStream) {
ClientContext context;
request.set_message("hello");
- ClientReader<EchoResponse>* stream =
- stub_->ResponseStream(&context, request);
+ auto stream = stub_->ResponseStream(&context, request);
EXPECT_TRUE(stream->Read(&response));
EXPECT_EQ(response.message(), request.message() + "0");
EXPECT_TRUE(stream->Read(&response));
@@ -340,8 +335,6 @@ TEST_F(End2endTest, ResponseStream) {
Status s = stream->Finish();
EXPECT_TRUE(s.IsOk());
-
- delete stream;
}
TEST_F(End2endTest, BidiStream) {
@@ -351,8 +344,7 @@ TEST_F(End2endTest, BidiStream) {
ClientContext context;
grpc::string msg("hello");
- ClientReaderWriter<EchoRequest, EchoResponse>* stream =
- stub_->BidiStream(&context);
+ auto stream = stub_->BidiStream(&context);
request.set_message(msg + "0");
EXPECT_TRUE(stream->Write(request));
@@ -374,8 +366,6 @@ TEST_F(End2endTest, BidiStream) {
Status s = stream->Finish();
EXPECT_TRUE(s.IsOk());
-
- delete stream;
}
// Talk to the two services with the same name but different package names.
@@ -426,14 +416,11 @@ TEST_F(End2endTest, BadCredentials) {
EXPECT_EQ("Rpc sent on a lame channel.", s.details());
ClientContext context2;
- ClientReaderWriter<EchoRequest, EchoResponse>* stream =
- stub->BidiStream(&context2);
+ auto stream = stub->BidiStream(&context2);
s = stream->Finish();
EXPECT_FALSE(s.IsOk());
EXPECT_EQ(StatusCode::UNKNOWN, s.code());
EXPECT_EQ("Rpc sent on a lame channel.", s.details());
-
- delete stream;
}
} // namespace testing
diff --git a/test/cpp/util/create_test_channel.cc b/test/cpp/util/create_test_channel.cc
index cf93589af5..be6c567060 100644
--- a/test/cpp/util/create_test_channel.cc
+++ b/test/cpp/util/create_test_channel.cc
@@ -75,7 +75,7 @@ std::shared_ptr<ChannelInterface> CreateTestChannel(
server.empty() ? override_hostname : server;
if (creds.get()) {
channel_creds =
- CredentialsFactory::ComposeCredentials(creds, channel_creds);
+ CredentialsFactory::CompositeCredentials(creds, channel_creds);
}
return CreateChannel(connect_to, channel_creds, channel_args);
} else {
diff --git a/tools/distrib/check_copyright.py b/tools/distrib/check_copyright.py
index ce66dcc22e..1d09ed42a5 100755
--- a/tools/distrib/check_copyright.py
+++ b/tools/distrib/check_copyright.py
@@ -78,6 +78,9 @@ LICENSE_FMT = {
'.proto': '// %s',
'.js': ' * %s',
'.cs': '// %s',
+ '.mak': '# %s',
+ 'Makefile': '# %s',
+ 'Dockerfile': '# %s',
}
# pregenerate the actual text that we should have
@@ -99,11 +102,16 @@ def log(cond, why, filename):
for filename in subprocess.check_output('git ls-tree -r --name-only -r HEAD',
shell=True).splitlines():
ext = os.path.splitext(filename)[1]
- if ext not in LICENSE_TEXT:
+ base = os.path.basename(filename)
+ if ext in LICENSE_TEXT:
+ license = LICENSE_TEXT[ext]
+ old_license = OLD_LICENSE_TEXT[ext]
+ elif base in LICENSE_TEXT:
+ license = LICENSE_TEXT[base]
+ old_license = OLD_LICENSE_TEXT[base]
+ else:
log(args.skips, 'skip', filename)
continue
- license = LICENSE_TEXT[ext]
- old_license = OLD_LICENSE_TEXT[ext]
with open(filename) as f:
text = '\n'.join(line.rstrip() for line in f.read().splitlines())
if license in text:
diff --git a/tools/dockerfile/grpc_base/Dockerfile b/tools/dockerfile/grpc_base/Dockerfile
index be1b69b0dc..d2b5569036 100644
--- a/tools/dockerfile/grpc_base/Dockerfile
+++ b/tools/dockerfile/grpc_base/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Base Dockerfile for gRPC dev images
FROM debian:latest
diff --git a/tools/dockerfile/grpc_clang/Dockerfile b/tools/dockerfile/grpc_clang/Dockerfile
index 0928121755..bb107cd6f8 100644
--- a/tools/dockerfile/grpc_clang/Dockerfile
+++ b/tools/dockerfile/grpc_clang/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
diff --git a/tools/dockerfile/grpc_cxx/Dockerfile b/tools/dockerfile/grpc_cxx/Dockerfile
index e1ddfcb2da..18c6732496 100644
--- a/tools/dockerfile/grpc_cxx/Dockerfile
+++ b/tools/dockerfile/grpc_cxx/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Dockerfile for gRPC C++
FROM grpc/base
diff --git a/tools/dockerfile/grpc_go/Dockerfile b/tools/dockerfile/grpc_go/Dockerfile
index 42620ff3cf..e1671eaee1 100644
--- a/tools/dockerfile/grpc_go/Dockerfile
+++ b/tools/dockerfile/grpc_go/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Dockerfile for gRPC Go
FROM golang:1.4
@@ -19,6 +48,9 @@ RUN git config --global url."git@github.com:".insteadOf "https://github.com/"
# Get the source from GitHub
RUN go get google.golang.org/grpc
+# Add a service_account directory containing the auth creds file
+ADD service_account service_account
+
# Build the interop client and server
RUN cd src/google.golang.org/grpc/interop/client && go install
RUN cd src/google.golang.org/grpc/interop/server && go install
diff --git a/tools/dockerfile/grpc_java/Dockerfile b/tools/dockerfile/grpc_java/Dockerfile
index 17682c63f0..affbec9b20 100644
--- a/tools/dockerfile/grpc_java/Dockerfile
+++ b/tools/dockerfile/grpc_java/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Dockerfile for the gRPC Java dev image
FROM grpc/java_base
diff --git a/tools/dockerfile/grpc_java_base/Dockerfile b/tools/dockerfile/grpc_java_base/Dockerfile
index 6031be484a..feac5e745e 100644
--- a/tools/dockerfile/grpc_java_base/Dockerfile
+++ b/tools/dockerfile/grpc_java_base/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Base Dockerfile for the gRPC Java dev image
FROM grpc/base
diff --git a/tools/dockerfile/grpc_node/Dockerfile b/tools/dockerfile/grpc_node/Dockerfile
index 08d060a8de..dcd9197845 100644
--- a/tools/dockerfile/grpc_node/Dockerfile
+++ b/tools/dockerfile/grpc_node/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Dockerfile for gRPC Node
FROM grpc/node_base
@@ -21,4 +50,4 @@ ADD cacerts cacerts
# Add a service_account directory containing the auth creds file
ADD service_account service_account
-CMD ["/usr/bin/nodejs", "/var/local/git/grpc/src/node/interop/interop_server.js", "--use_tls=true", "--port=8040"] \ No newline at end of file
+CMD ["/usr/bin/nodejs", "/var/local/git/grpc/src/node/interop/interop_server.js", "--use_tls=true", "--port=8040"]
diff --git a/tools/dockerfile/grpc_node_base/Dockerfile b/tools/dockerfile/grpc_node_base/Dockerfile
index e14e03143f..55ae608020 100644
--- a/tools/dockerfile/grpc_node_base/Dockerfile
+++ b/tools/dockerfile/grpc_node_base/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Base Dockerfile for gRPC Node.
#
# Includes Node installation dependencies
diff --git a/tools/dockerfile/grpc_php/Dockerfile b/tools/dockerfile/grpc_php/Dockerfile
index 6719208ce7..100d7b3bdb 100644
--- a/tools/dockerfile/grpc_php/Dockerfile
+++ b/tools/dockerfile/grpc_php/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Dockerfile for gRPC PHP
FROM grpc/php_base
diff --git a/tools/dockerfile/grpc_php_base/Dockerfile b/tools/dockerfile/grpc_php_base/Dockerfile
index 3d995e7a89..49f5da846d 100644
--- a/tools/dockerfile/grpc_php_base/Dockerfile
+++ b/tools/dockerfile/grpc_php_base/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Base Dockerfile for gRPC PHP.
#
# Includes PHP installation dependencies, things that are unlikely to vary.
diff --git a/tools/dockerfile/grpc_python/Dockerfile b/tools/dockerfile/grpc_python/Dockerfile
index 901375c6bf..2e72752cdd 100644
--- a/tools/dockerfile/grpc_python/Dockerfile
+++ b/tools/dockerfile/grpc_python/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Dockerfile for GRPC Python
FROM grpc/python_base
diff --git a/tools/dockerfile/grpc_python_base/Dockerfile b/tools/dockerfile/grpc_python_base/Dockerfile
index 98f695a819..18dd40a05a 100644
--- a/tools/dockerfile/grpc_python_base/Dockerfile
+++ b/tools/dockerfile/grpc_python_base/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Base Dockerfile for GRPC Python.
#
# Includes Python environment and installation dependencies.
@@ -17,4 +46,4 @@ RUN apt-get update && apt-get install -y \
RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0-alpha-1
# Get the GRPC source from GitHub
-RUN git clone --recursive git@github.com:google/grpc.git /var/local/git/grpc
+RUN git clone --recursive git@github.com:grpc/grpc.git /var/local/git/grpc
diff --git a/tools/dockerfile/grpc_ruby/Dockerfile b/tools/dockerfile/grpc_ruby/Dockerfile
index fda55719d9..89656d1743 100644
--- a/tools/dockerfile/grpc_ruby/Dockerfile
+++ b/tools/dockerfile/grpc_ruby/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Dockerfile for gRPC Ruby
FROM grpc/ruby_base
diff --git a/tools/dockerfile/grpc_ruby_base/Dockerfile b/tools/dockerfile/grpc_ruby_base/Dockerfile
index 0d872069d7..f3c7289943 100644
--- a/tools/dockerfile/grpc_ruby_base/Dockerfile
+++ b/tools/dockerfile/grpc_ruby_base/Dockerfile
@@ -1,3 +1,32 @@
+# 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.
+
# Base Dockerfile for gRPC Ruby.
#
# Includes Ruby installation dependencies, things that are unlikely to vary.
diff --git a/tools/gce_setup/grpc_docker.sh b/tools/gce_setup/grpc_docker.sh
index 41a1d200e6..bbc138c6be 100755
--- a/tools/gce_setup/grpc_docker.sh
+++ b/tools/gce_setup/grpc_docker.sh
@@ -935,6 +935,36 @@ grpc_cloud_prod_gen_ruby_cmd() {
echo $the_cmd
}
+# constructs the full dockerized Go interop test cmd.
+#
+# call-seq:
+# flags= .... # generic flags to include the command
+# cmd=$($grpc_gen_test_cmd $flags)
+grpc_cloud_prod_auth_service_account_creds_gen_go_cmd() {
+ local cmd_prefix="sudo docker run grpc/go /bin/bash -c"
+ local test_script="cd src/google.golang.org/grpc/interop/client"
+ local test_script+=" && go run client.go --use_tls=true"
+ local gfe_flags=" --tls_ca_file=\"\" --tls_server_name=\"\" --server_port=443 --server_host=grpc-test.sandbox.google.com"
+ local added_gfe_flags=$(_grpc_svc_acc_test_flags)
+ local the_cmd="$cmd_prefix '$test_script $gfe_flags $added_gfe_flags $@'"
+ echo $the_cmd
+}
+
+# constructs the full dockerized Go interop test cmd.
+#
+# call-seq:
+# flags= .... # generic flags to include the command
+# cmd=$($grpc_gen_test_cmd $flags)
+grpc_cloud_prod_auth_compute_engine_creds_gen_go_cmd() {
+ local cmd_prefix="sudo docker run grpc/go /bin/bash -c"
+ local test_script="cd src/google.golang.org/grpc/interop/client"
+ local test_script+=" && go run client.go --use_tls=true"
+ local gfe_flags=" --tls_ca_file=\"\" --tls_server_name=\"\" --server_port=443 --server_host=grpc-test.sandbox.google.com"
+ local added_gfe_flags=$(_grpc_gce_test_flags)
+ local the_cmd="$cmd_prefix '$test_script $gfe_flags $added_gfe_flags $@'"
+ echo $the_cmd
+}
+
# constructs the full dockerized ruby service_account auth interop test cmd.
#
# call-seq:
diff --git a/tools/gce_setup/shared_startup_funcs.sh b/tools/gce_setup/shared_startup_funcs.sh
index 143e039c93..195f8f28a8 100755
--- a/tools/gce_setup/shared_startup_funcs.sh
+++ b/tools/gce_setup/shared_startup_funcs.sh
@@ -364,7 +364,7 @@ grpc_docker_launch_registry() {
grpc_docker_pull_known() {
local addr=$1
[[ -n $addr ]] || addr="0.0.0.0:5000"
- local known="base cxx php_base php ruby_base ruby java_base java go node_base node"
+ local known="base cxx php_base php ruby_base ruby java_base java go node_base node python_base python"
echo "... pulling docker images for '$known'"
for i in $known
do
@@ -408,6 +408,7 @@ grpc_dockerfile_install() {
}
[[ $image_label == "grpc/go" ]] && {
grpc_docker_sync_github_key $dockerfile_dir/.ssh 'go_ssh_key' || return 1;
+ grpc_docker_sync_service_account $dockerfile_dir/service_account || return 1;
}
[[ $image_label == "grpc/java_base" ]] && {
grpc_docker_sync_github_key $dockerfile_dir/.ssh 'java_base_ssh_key' || return 1;
@@ -424,6 +425,10 @@ grpc_dockerfile_install() {
grpc_docker_sync_roots_pem $dockerfile_dir/cacerts || return 1;
grpc_docker_sync_service_account $dockerfile_dir/service_account || return 1;
}
+ [[ $image_label == "grpc/python" ]] && {
+ grpc_docker_sync_roots_pem $dockerfile_dir/cacerts || return 1;
+ grpc_docker_sync_service_account $dockerfile_dir/service_account || return 1;
+ }
# TODO(temiola): maybe make cache/no-cache a func option?
diff --git a/vsprojects/vs2013/Grpc.mak b/vsprojects/vs2013/Grpc.mak
index 4dc342d77e..9272d07cb9 100644
--- a/vsprojects/vs2013/Grpc.mak
+++ b/vsprojects/vs2013/Grpc.mak
@@ -1,3 +1,31 @@
+# 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.
# NMake file to build secondary gRPC targets on Windows.
# Use grpc.sln to solution to build the gRPC libraries.
@@ -450,6 +478,14 @@ grpc_json_token_test: grpc_json_token_test.exe
echo Running grpc_json_token_test
$(OUT_DIR)\grpc_json_token_test.exe
+grpc_print_google_default_creds_token.exe: grpc_test_util
+ echo Building grpc_print_google_default_creds_token
+ $(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\security\print_google_default_creds_token.c
+ $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_print_google_default_creds_token.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\print_google_default_creds_token.obj
+grpc_print_google_default_creds_token: grpc_print_google_default_creds_token.exe
+ echo Running grpc_print_google_default_creds_token
+ $(OUT_DIR)\grpc_print_google_default_creds_token.exe
+
grpc_stream_op_test.exe: grpc_test_util
echo Building grpc_stream_op_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ ..\..\test\core\transport\stream_op_test.c
diff --git a/vsprojects/vs2013/grpc.vcxproj b/vsprojects/vs2013/grpc.vcxproj
index 89c0de333c..48f975f99b 100644
--- a/vsprojects/vs2013/grpc.vcxproj
+++ b/vsprojects/vs2013/grpc.vcxproj
@@ -201,8 +201,14 @@
</ClCompile>
<ClCompile Include="..\..\src\core\security\credentials.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\security\credentials_posix.c">
+ </ClCompile>
+ <ClCompile Include="..\..\src\core\security\credentials_win32.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\security\factories.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\security\google_default_credentials.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\security\json_token.c">
</ClCompile>
<ClCompile Include="..\..\src\core\security\secure_endpoint.c">
diff --git a/vsprojects/vs2013/grpc.vcxproj.filters b/vsprojects/vs2013/grpc.vcxproj.filters
index a2d9f30eda..867e54516c 100644
--- a/vsprojects/vs2013/grpc.vcxproj.filters
+++ b/vsprojects/vs2013/grpc.vcxproj.filters
@@ -22,9 +22,18 @@
<ClCompile Include="..\..\src\core\security\credentials.c">
<Filter>src\core\security</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\security\credentials_posix.c">
+ <Filter>src\core\security</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\core\security\credentials_win32.c">
+ <Filter>src\core\security</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\security\factories.c">
<Filter>src\core\security</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\security\google_default_credentials.c">
+ <Filter>src\core\security</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\security\json_token.c">
<Filter>src\core\security</Filter>
</ClCompile>
diff --git a/vsprojects/vs2013/grpc_shared.vcxproj b/vsprojects/vs2013/grpc_shared.vcxproj
index 81a280d912..4b2f1e725e 100644
--- a/vsprojects/vs2013/grpc_shared.vcxproj
+++ b/vsprojects/vs2013/grpc_shared.vcxproj
@@ -205,8 +205,14 @@
</ClCompile>
<ClCompile Include="..\..\src\core\security\credentials.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\security\credentials_posix.c">
+ </ClCompile>
+ <ClCompile Include="..\..\src\core\security\credentials_win32.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\security\factories.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\security\google_default_credentials.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\security\json_token.c">
</ClCompile>
<ClCompile Include="..\..\src\core\security\secure_endpoint.c">
diff --git a/vsprojects/vs2013/grpc_shared.vcxproj.filters b/vsprojects/vs2013/grpc_shared.vcxproj.filters
index a2d9f30eda..867e54516c 100644
--- a/vsprojects/vs2013/grpc_shared.vcxproj.filters
+++ b/vsprojects/vs2013/grpc_shared.vcxproj.filters
@@ -22,9 +22,18 @@
<ClCompile Include="..\..\src\core\security\credentials.c">
<Filter>src\core\security</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\security\credentials_posix.c">
+ <Filter>src\core\security</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\core\security\credentials_win32.c">
+ <Filter>src\core\security</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\security\factories.c">
<Filter>src\core\security</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\security\google_default_credentials.c">
+ <Filter>src\core\security</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\security\json_token.c">
<Filter>src\core\security</Filter>
</ClCompile>