aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gRPC.podspec9
-rw-r--r--include/grpc/support/atm_win32.h2
-rw-r--r--include/grpc/support/port_platform.h4
-rw-r--r--src/core/iomgr/iocp_windows.c9
-rw-r--r--src/core/iomgr/resolve_address_windows.c4
-rw-r--r--src/core/iomgr/socket_windows.c3
-rw-r--r--src/core/iomgr/tcp_client_windows.c6
-rw-r--r--src/core/iomgr/tcp_server_windows.c12
-rw-r--r--src/core/iomgr/tcp_windows.c29
-rw-r--r--src/cpp/util/byte_buffer.cc1
-rw-r--r--src/csharp/Grpc.Core/.gitignore3
-rw-r--r--src/csharp/Grpc.Core/Grpc.Core.csproj5
-rw-r--r--src/csharp/Grpc.Core/Grpc.Core.nuspec8
-rw-r--r--src/csharp/Grpc.Core/packages.config2
-rw-r--r--src/csharp/Grpc.Examples.MathServer/MathServer.cs2
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj5
-rw-r--r--src/csharp/Grpc.IntegrationTesting/packages.config2
-rw-r--r--src/objective-c/GRPCClient/private/GRPCChannel.h5
-rw-r--r--src/objective-c/GRPCClient/private/GRPCChannel.m41
-rw-r--r--src/objective-c/GRPCClient/private/GRPCSecureChannel.h38
-rw-r--r--src/objective-c/GRPCClient/private/GRPCSecureChannel.m52
-rw-r--r--src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.h38
-rw-r--r--src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.m44
-rw-r--r--src/objective-c/examples/Sample/Podfile2
-rw-r--r--src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.h103
-rw-r--r--src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.m179
-rw-r--r--src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.h578
-rw-r--r--src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.m2256
-rw-r--r--src/objective-c/examples/Sample/RemoteTestClient/RemoteTest.podspec17
-rw-r--r--src/objective-c/examples/Sample/RemoteTestClient/Test.pb.h81
-rw-r--r--src/objective-c/examples/Sample/RemoteTestClient/Test.pb.m27
-rw-r--r--src/objective-c/examples/Sample/RemoteTestClient/empty.proto46
-rw-r--r--src/objective-c/examples/Sample/RemoteTestClient/messages.proto135
-rw-r--r--src/objective-c/examples/Sample/RemoteTestClient/test.proto74
-rw-r--r--src/objective-c/examples/Sample/RouteGuideClient/Route_guide.pb.h387
-rw-r--r--src/objective-c/examples/Sample/RouteGuideClient/Route_guide.pb.m1435
-rw-r--r--src/objective-c/examples/Sample/RouteGuideClient/Route_guide.podspec17
-rw-r--r--src/objective-c/examples/Sample/RouteGuideClient/route_guide.proto121
-rw-r--r--src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj1556
-rw-r--r--src/objective-c/examples/Sample/Sample/AppDelegate.h1
-rw-r--r--src/objective-c/examples/Sample/Sample/AppDelegate.m25
-rw-r--r--src/objective-c/examples/Sample/Sample/ViewController.h3
-rw-r--r--src/objective-c/examples/Sample/Sample/ViewController.m22
-rw-r--r--src/objective-c/examples/Sample/SampleTests/RemoteTests.m144
-rw-r--r--src/objective-c/examples/Sample/SampleTests/SampleTests.m39
-rwxr-xr-xsrc/php/bin/run_gen_code_test.sh3
-rwxr-xr-xsrc/php/lib/Grpc/BaseStub.php45
-rw-r--r--src/php/tests/generated_code/AbstractGeneratedCodeTest.php97
-rwxr-xr-xsrc/php/tests/generated_code/GeneratedCodeTest.php66
-rw-r--r--src/php/tests/generated_code/GeneratedCodeWithCallbackTest.php47
-rw-r--r--templates/vsprojects/vcxproj_defs.include2
-rwxr-xr-xtest/core/end2end/gen_build_json.py1
-rw-r--r--test/cpp/end2end/generic_end2end_test.cc3
-rwxr-xr-xtools/buildgen/generate_projects.sh4
-rw-r--r--tools/run_tests/tests.json16
-rw-r--r--vsprojects/grpc_csharp_ext/grpc_csharp_ext.vcxproj2
-rw-r--r--vsprojects/nuget_package/.gitignore3
-rw-r--r--vsprojects/nuget_package/README.md20
-rw-r--r--vsprojects/nuget_package/buildall.bat46
-rw-r--r--vsprojects/nuget_package/grpc.native.csharp_ext.nuspec30
-rw-r--r--vsprojects/nuget_package/grpc.native.csharp_ext.props12
-rw-r--r--vsprojects/nuget_package/grpc.native.csharp_ext.targets14
62 files changed, 6756 insertions, 1227 deletions
diff --git a/gRPC.podspec b/gRPC.podspec
index 654f613f1c..562b797eaf 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -24,9 +24,9 @@ Pod::Spec.new do |s|
s.subspec 'C-Core' do |cs|
cs.summary = 'Core gRPC library, written in C'
- cs.authors = { 'Craig Tiller' => 'ctiller@google.com',
- 'David Klempner' => 'klempner@google.com',
- 'Nicolas Noble' => 'nnoble@google.com',
+ cs.authors = { 'Craig Tiller' => 'ctiller@google.com',
+ 'David Klempner' => 'klempner@google.com',
+ 'Nicolas Noble' => 'nnoble@google.com',
'Vijay Pai' => 'vpai@google.com',
'Yang Gao' => 'yangg@google.com' }
@@ -63,4 +63,7 @@ Pod::Spec.new do |s|
CMD
s.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/Headers/Public/gRPC/include"' }
+
+ # Certificates, to be able to establish TLS connections:
+ s.resource_bundles = { 'gRPC' => ['etc/roots.pem'] }
end
diff --git a/include/grpc/support/atm_win32.h b/include/grpc/support/atm_win32.h
index 4a21b5b547..dcba4d433d 100644
--- a/include/grpc/support/atm_win32.h
+++ b/include/grpc/support/atm_win32.h
@@ -73,7 +73,7 @@ static __inline int gpr_atm_no_barrier_cas(gpr_atm *p, gpr_atm o, gpr_atm n) {
static __inline int gpr_atm_acq_cas(gpr_atm *p, gpr_atm o, gpr_atm n) {
#ifdef GPR_ARCH_64
- return o == (gpr_atm)InterlockedCompareExchangeAcquire64((volatile LONGLONG) p,
+ return o == (gpr_atm)InterlockedCompareExchangeAcquire64((volatile LONGLONG *) p,
(LONGLONG) n, (LONGLONG) o);
#else
return o == (gpr_atm)InterlockedCompareExchangeAcquire((volatile LONG *) p,
diff --git a/include/grpc/support/port_platform.h b/include/grpc/support/port_platform.h
index 0bb3e16c8d..864d669eda 100644
--- a/include/grpc/support/port_platform.h
+++ b/include/grpc/support/port_platform.h
@@ -45,8 +45,10 @@
#define GPR_WINSOCK_SOCKET 1
#ifdef __GNUC__
#define GPR_GCC_ATOMIC 1
+#define GPR_GCC_TLS 1
#else
#define GPR_WIN32_ATOMIC 1
+#define GPR_MSVC_TLS 1
#endif
#elif defined(_WIN32) || defined(WIN32)
#define GPR_ARCH_32 1
@@ -233,7 +235,7 @@
#endif
#if defined(GPR_MSVC_TLS) + defined(GPR_GCC_TLS) + defined(GPR_PTHREAD_TLS) + defined(GPR_CUSTOM_TLS) != 1
-#error Must define exactly one of GPR_MSVC_TLS, GPR_GCC_TLS, GPR_PTHREAD_TLS, defined(GPR_CUSTOM_TLS)
+#error Must define exactly one of GPR_MSVC_TLS, GPR_GCC_TLS, GPR_PTHREAD_TLS, GPR_CUSTOM_TLS
#endif
typedef int16_t gpr_int16;
diff --git a/src/core/iomgr/iocp_windows.c b/src/core/iomgr/iocp_windows.c
index aec626509a..7968729353 100644
--- a/src/core/iomgr/iocp_windows.c
+++ b/src/core/iomgr/iocp_windows.c
@@ -78,7 +78,6 @@ static void do_iocp_work() {
if (overlapped == &g_iocp_custom_overlap) {
if (completion_key == (ULONG_PTR) &g_iocp_kick_token) {
/* We were awoken from a kick. */
- gpr_log(GPR_DEBUG, "do_iocp_work - got a kick");
return;
}
gpr_log(GPR_ERROR, "Unknown custom completion key.");
@@ -87,10 +86,8 @@ static void do_iocp_work() {
socket = (grpc_winsocket*) completion_key;
if (overlapped == &socket->write_info.overlapped) {
- gpr_log(GPR_DEBUG, "do_iocp_work - got write packet");
info = &socket->write_info;
} else if (overlapped == &socket->read_info.overlapped) {
- gpr_log(GPR_DEBUG, "do_iocp_work - got read packet");
info = &socket->read_info;
} else {
gpr_log(GPR_ERROR, "Unknown IOCP operation");
@@ -98,8 +95,6 @@ static void do_iocp_work() {
}
success = WSAGetOverlappedResult(socket->socket, &info->overlapped, &bytes,
FALSE, &flags);
- gpr_log(GPR_DEBUG, "bytes: %u, flags: %u - op %s %s", bytes, flags,
- success ? "succeeded" : "failed", socket->orphan ? "orphan" : "");
if (socket->orphan) {
grpc_winsocket_destroy(socket);
gpr_atm_full_fetch_add(&g_orphans, -1);
@@ -189,11 +184,9 @@ static void socket_notify_on_iocp(grpc_winsocket *socket,
if (info->has_pending_iocp) {
run_now = 1;
info->has_pending_iocp = 0;
- gpr_log(GPR_DEBUG, "socket_notify_on_iocp - runs now");
} else {
info->cb = cb;
info->opaque = opaque;
- gpr_log(GPR_DEBUG, "socket_notify_on_iocp - queued");
}
gpr_mu_unlock(&socket->state_mu);
if (run_now) cb(opaque, 1);
@@ -201,13 +194,11 @@ static void socket_notify_on_iocp(grpc_winsocket *socket,
void grpc_socket_notify_on_write(grpc_winsocket *socket,
void(*cb)(void *, int), void *opaque) {
- gpr_log(GPR_DEBUG, "grpc_socket_notify_on_write");
socket_notify_on_iocp(socket, cb, opaque, &socket->write_info);
}
void grpc_socket_notify_on_read(grpc_winsocket *socket,
void(*cb)(void *, int), void *opaque) {
- gpr_log(GPR_DEBUG, "grpc_socket_notify_on_read");
socket_notify_on_iocp(socket, cb, opaque, &socket->read_info);
}
diff --git a/src/core/iomgr/resolve_address_windows.c b/src/core/iomgr/resolve_address_windows.c
index 877b3f35ed..ac31dadd9d 100644
--- a/src/core/iomgr/resolve_address_windows.c
+++ b/src/core/iomgr/resolve_address_windows.c
@@ -107,18 +107,14 @@ grpc_resolved_addresses *grpc_blocking_resolve_address(
i++;
}
- /* Temporary logging, to help identify flakiness in dualstack_socket_test. */
{
const gpr_timespec delay = gpr_time_sub(gpr_now(), start_time);
const int delay_ms =
delay.tv_sec * GPR_MS_PER_SEC + delay.tv_nsec / GPR_NS_PER_MS;
- gpr_log(GPR_INFO, "logspam: getaddrinfo(%s, %s) resolved %d addrs in %dms:",
- host, port, addrs->naddrs, delay_ms);
for (i = 0; i < addrs->naddrs; i++) {
char *buf;
grpc_sockaddr_to_string(&buf, (struct sockaddr *)&addrs->addrs[i].addr,
0);
- gpr_log(GPR_INFO, "logspam: [%d] %s", i, buf);
gpr_free(buf);
}
}
diff --git a/src/core/iomgr/socket_windows.c b/src/core/iomgr/socket_windows.c
index 22dad41783..91268c04e6 100644
--- a/src/core/iomgr/socket_windows.c
+++ b/src/core/iomgr/socket_windows.c
@@ -46,7 +46,6 @@
grpc_winsocket *grpc_winsocket_create(SOCKET socket) {
grpc_winsocket *r = gpr_malloc(sizeof(grpc_winsocket));
- gpr_log(GPR_DEBUG, "grpc_winsocket_create");
memset(r, 0, sizeof(grpc_winsocket));
r->socket = socket;
gpr_mu_init(&r->state_mu);
@@ -61,13 +60,11 @@ static void shutdown_op(grpc_winsocket_callback_info *info) {
}
void grpc_winsocket_shutdown(grpc_winsocket *socket) {
- gpr_log(GPR_DEBUG, "grpc_winsocket_shutdown");
shutdown_op(&socket->read_info);
shutdown_op(&socket->write_info);
}
void grpc_winsocket_orphan(grpc_winsocket *socket) {
- gpr_log(GPR_DEBUG, "grpc_winsocket_orphan");
grpc_iocp_socket_orphan(socket);
socket->orphan = 1;
grpc_iomgr_unref();
diff --git a/src/core/iomgr/tcp_client_windows.c b/src/core/iomgr/tcp_client_windows.c
index 181d89cb6d..00c8da601b 100644
--- a/src/core/iomgr/tcp_client_windows.c
+++ b/src/core/iomgr/tcp_client_windows.c
@@ -102,7 +102,6 @@ static void on_connect(void *acp, int success) {
gpr_free(utf8_message);
goto finish;
} else {
- gpr_log(GPR_DEBUG, "on_connect: connection established");
ep = grpc_tcp_create(ac->socket);
goto finish;
}
@@ -179,9 +178,7 @@ void grpc_tcp_client_connect(void(*cb)(void *arg, grpc_endpoint *tcp),
info = &socket->write_info;
success = ConnectEx(sock, addr, addr_len, NULL, 0, NULL, &info->overlapped);
- if (success) {
- gpr_log(GPR_DEBUG, "connected immediately - but we still go to sleep");
- } else {
+ if (!success) {
int error = WSAGetLastError();
if (error != ERROR_IO_PENDING) {
message = "ConnectEx failed: %s";
@@ -189,7 +186,6 @@ void grpc_tcp_client_connect(void(*cb)(void *arg, grpc_endpoint *tcp),
}
}
- gpr_log(GPR_DEBUG, "grpc_tcp_client_connect: connection pending");
ac = gpr_malloc(sizeof(async_connect));
ac->cb = cb;
ac->cb_arg = arg;
diff --git a/src/core/iomgr/tcp_server_windows.c b/src/core/iomgr/tcp_server_windows.c
index a43d5670a4..6e10da97cc 100644
--- a/src/core/iomgr/tcp_server_windows.c
+++ b/src/core/iomgr/tcp_server_windows.c
@@ -191,13 +191,13 @@ static void start_accept(server_port *port) {
goto failure;
}
+ /* TODO(jtattermusch): probably a race here, we regularly get use-after-free on server shutdown */
+ GPR_ASSERT(port->socket != 0xfeeefeee);
success = port->AcceptEx(port->socket->socket, sock, port->addresses, 0,
addrlen, addrlen, &bytes_received,
&port->socket->read_info.overlapped);
- if (success) {
- gpr_log(GPR_DEBUG, "accepted immediately - but we still go to sleep");
- } else {
+ if (!success) {
int error = WSAGetLastError();
if (error != ERROR_IO_PENDING) {
message = "AcceptEx failed: %s";
@@ -234,11 +234,9 @@ static void on_accept(void *arg, int success) {
gpr_free(utf8_message);
closesocket(sock);
} else {
- gpr_log(GPR_DEBUG, "on_accept: accepted connection");
ep = grpc_tcp_create(grpc_winsocket_create(sock));
}
} else {
- gpr_log(GPR_DEBUG, "on_accept: shutting down");
closesocket(sock);
gpr_mu_lock(&sp->server->mu);
if (0 == --sp->server->active_ports) {
@@ -248,7 +246,9 @@ static void on_accept(void *arg, int success) {
}
if (ep) sp->server->cb(sp->server->cb_arg, ep);
- start_accept(sp);
+ if (success) {
+ start_accept(sp);
+ }
}
static int add_socket_to_server(grpc_tcp_server *s, SOCKET sock,
diff --git a/src/core/iomgr/tcp_windows.c b/src/core/iomgr/tcp_windows.c
index ec5496e7ee..71534eaa3d 100644
--- a/src/core/iomgr/tcp_windows.c
+++ b/src/core/iomgr/tcp_windows.c
@@ -93,14 +93,11 @@ typedef struct grpc_tcp {
} grpc_tcp;
static void tcp_ref(grpc_tcp *tcp) {
- gpr_log(GPR_DEBUG, "tcp_ref");
gpr_ref(&tcp->refcount);
}
static void tcp_unref(grpc_tcp *tcp) {
- gpr_log(GPR_DEBUG, "tcp_unref");
if (gpr_unref(&tcp->refcount)) {
- gpr_log(GPR_DEBUG, "tcp_unref: destroying");
gpr_slice_buffer_destroy(&tcp->write_slices);
grpc_winsocket_orphan(tcp->socket);
gpr_free(tcp);
@@ -126,24 +123,20 @@ static void on_read(void *tcpp, int success) {
return;
}
- gpr_log(GPR_DEBUG, "on_read");
tcp->outstanding_read = 0;
if (socket->read_info.wsa_error != 0) {
char *utf8_message = gpr_format_message(info->wsa_error);
- __debugbreak();
gpr_log(GPR_ERROR, "ReadFile overlapped error: %s", utf8_message);
gpr_free(utf8_message);
status = GRPC_ENDPOINT_CB_ERROR;
} else {
if (info->bytes_transfered != 0) {
sub = gpr_slice_sub(tcp->read_slice, 0, info->bytes_transfered);
- gpr_log(GPR_DEBUG, "on_read: calling callback");
status = GRPC_ENDPOINT_CB_OK;
slice = &sub;
nslices = 1;
} else {
- gpr_log(GPR_DEBUG, "on_read: closed socket");
gpr_slice_unref(tcp->read_slice);
status = GRPC_ENDPOINT_CB_EOF;
}
@@ -174,27 +167,22 @@ static void win_notify_on_read(grpc_endpoint *ep,
buffer.len = GPR_SLICE_LENGTH(tcp->read_slice);
buffer.buf = (char *)GPR_SLICE_START_PTR(tcp->read_slice);
- gpr_log(GPR_DEBUG, "win_notify_on_read: calling WSARecv without overlap");
status = WSARecv(tcp->socket->socket, &buffer, 1, &bytes_read, &flags,
NULL, NULL);
info->wsa_error = status == 0 ? 0 : WSAGetLastError();
if (info->wsa_error != WSAEWOULDBLOCK) {
- gpr_log(GPR_DEBUG, "got response immediately, calling on_read");
info->bytes_transfered = bytes_read;
/* This might heavily recurse. */
on_read(tcp, 1);
return;
}
- gpr_log(GPR_DEBUG, "got WSAEWOULDBLOCK - calling WSARecv with overlap");
-
memset(&tcp->socket->read_info.overlapped, 0, sizeof(OVERLAPPED));
status = WSARecv(tcp->socket->socket, &buffer, 1, &bytes_read, &flags,
&info->overlapped, NULL);
if (status == 0) {
- gpr_log(GPR_DEBUG, "got response immediately, but we're going to sleep");
grpc_socket_notify_on_read(tcp->socket, on_read, tcp);
return;
}
@@ -213,7 +201,6 @@ static void win_notify_on_read(grpc_endpoint *ep,
return;
}
- gpr_log(GPR_DEBUG, "waiting on the IO completion port now");
grpc_socket_notify_on_read(tcp->socket, on_read, tcp);
}
@@ -227,8 +214,6 @@ static void on_write(void *tcpp, int success) {
GPR_ASSERT(tcp->outstanding_write);
- gpr_log(GPR_DEBUG, "on_write");
-
if (!success) {
tcp_unref(tcp);
cb(opaque, GRPC_ENDPOINT_CB_SHUTDOWN);
@@ -265,13 +250,9 @@ static grpc_endpoint_write_status win_write(grpc_endpoint *ep,
WSABUF *allocated = NULL;
WSABUF *buffers = local_buffers;
- GPR_ASSERT(nslices != 0);
- GPR_ASSERT(GPR_SLICE_LENGTH(slices[0]) != 0);
GPR_ASSERT(!tcp->outstanding_write);
tcp_ref(tcp);
- gpr_log(GPR_DEBUG, "win_write");
-
tcp->outstanding_write = 1;
tcp->write_cb = cb;
tcp->write_user_data = arg;
@@ -287,14 +268,12 @@ static grpc_endpoint_write_status win_write(grpc_endpoint *ep,
buffers[i].buf = (char *)GPR_SLICE_START_PTR(tcp->write_slices.slices[i]);
}
- gpr_log(GPR_DEBUG, "win_write: calling WSASend without overlap");
status = WSASend(socket->socket, buffers, tcp->write_slices.count,
&bytes_sent, 0, NULL, NULL);
info->wsa_error = status == 0 ? 0 : WSAGetLastError();
if (info->wsa_error != WSAEWOULDBLOCK) {
grpc_endpoint_write_status ret = GRPC_ENDPOINT_WRITE_ERROR;
- gpr_log(GPR_DEBUG, "got response immediately, cleaning up and leaving");
if (status == 0) {
ret = GRPC_ENDPOINT_WRITE_DONE;
GPR_ASSERT(bytes_sent == tcp->write_slices.length);
@@ -310,8 +289,6 @@ static grpc_endpoint_write_status win_write(grpc_endpoint *ep,
return ret;
}
- gpr_log(GPR_DEBUG, "got WSAEWOULDBLOCK - calling WSASend with overlap");
-
memset(&socket->write_info, 0, sizeof(OVERLAPPED));
status = WSASend(socket->socket, buffers, tcp->write_slices.count,
&bytes_sent, 0, &socket->write_info.overlapped, NULL);
@@ -329,9 +306,6 @@ static grpc_endpoint_write_status win_write(grpc_endpoint *ep,
tcp_unref(tcp);
return GRPC_ENDPOINT_WRITE_ERROR;
}
- gpr_log(GPR_DEBUG, "win_write: got pending op");
- } else {
- gpr_log(GPR_DEBUG, "wrote data immediately - but we're going to sleep");
}
grpc_socket_notify_on_write(socket, on_write, tcp);
@@ -340,19 +314,16 @@ static grpc_endpoint_write_status win_write(grpc_endpoint *ep,
static void win_add_to_pollset(grpc_endpoint *ep, grpc_pollset *pollset) {
grpc_tcp *tcp = (grpc_tcp *) ep;
- gpr_log(GPR_DEBUG, "win_add_to_pollset");
grpc_iocp_add_socket(tcp->socket);
}
static void win_shutdown(grpc_endpoint *ep) {
grpc_tcp *tcp = (grpc_tcp *) ep;
- gpr_log(GPR_DEBUG, "win_shutdown");
grpc_winsocket_shutdown(tcp->socket);
}
static void win_destroy(grpc_endpoint *ep) {
grpc_tcp *tcp = (grpc_tcp *) ep;
- gpr_log(GPR_DEBUG, "win_destroy");
tcp_unref(tcp);
}
diff --git a/src/cpp/util/byte_buffer.cc b/src/cpp/util/byte_buffer.cc
index f8d8eec065..ac2657472c 100644
--- a/src/cpp/util/byte_buffer.cc
+++ b/src/cpp/util/byte_buffer.cc
@@ -60,7 +60,6 @@ void ByteBuffer::Dump(std::vector<Slice>* slices) {
gpr_slice s;
while (grpc_byte_buffer_reader_next(reader, &s)) {
slices->push_back(Slice(s, Slice::STEAL_REF));
- gpr_slice_unref(s);
}
grpc_byte_buffer_reader_destroy(reader);
}
diff --git a/src/csharp/Grpc.Core/.gitignore b/src/csharp/Grpc.Core/.gitignore
index 8d4a6c08a8..c2dd664167 100644
--- a/src/csharp/Grpc.Core/.gitignore
+++ b/src/csharp/Grpc.Core/.gitignore
@@ -1,2 +1,3 @@
bin
-obj \ No newline at end of file
+obj
+*.nupkg
diff --git a/src/csharp/Grpc.Core/Grpc.Core.csproj b/src/csharp/Grpc.Core/Grpc.Core.csproj
index b4b42dfbf5..b612512b03 100644
--- a/src/csharp/Grpc.Core/Grpc.Core.csproj
+++ b/src/csharp/Grpc.Core/Grpc.Core.csproj
@@ -34,8 +34,9 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
- <Reference Include="System.Collections.Immutable">
- <HintPath>..\packages\System.Collections.Immutable.1.1.34-rc\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
+ <Reference Include="System.Collections.Immutable, Version=1.0.34.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Microsoft.Bcl.Immutable.1.0.34\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
diff --git a/src/csharp/Grpc.Core/Grpc.Core.nuspec b/src/csharp/Grpc.Core/Grpc.Core.nuspec
index f2032522c9..4865ead555 100644
--- a/src/csharp/Grpc.Core/Grpc.Core.nuspec
+++ b/src/csharp/Grpc.Core/Grpc.Core.nuspec
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<package >
+<package>
<metadata>
<id>Grpc.Core</id>
<title>gRPC Core</title>
@@ -7,7 +7,7 @@
<description>Core C# implementation of gRPC - an RPC library and framework. See project site for more info.
This is an experimental release, not ready to use.
</description>
- <version>0.2.0</version>
+ <version>0.2.1</version>
<authors>Google Inc.</authors>
<owners>jtattermusch</owners>
<licenseUrl>https://github.com/grpc/grpc/blob/master/LICENSE</licenseUrl>
@@ -16,6 +16,10 @@
<releaseNotes>The first experimental release. Not ready to use.</releaseNotes>
<copyright>Copyright 2015, Google Inc.</copyright>
<tags>gRPC RPC Protocol HTTP/2</tags>
+ <dependencies>
+ <dependency id="Microsoft.Bcl.Immutable" version="1.0.34" />
+ <dependency id="grpc.native.csharp_ext" version="0.6.0.0" />
+ </dependencies>
</metadata>
<files>
<file src="bin/Release/Grpc.Core.dll" target="lib/net45" />
diff --git a/src/csharp/Grpc.Core/packages.config b/src/csharp/Grpc.Core/packages.config
index 669c1dc625..71967de56e 100644
--- a/src/csharp/Grpc.Core/packages.config
+++ b/src/csharp/Grpc.Core/packages.config
@@ -2,5 +2,5 @@
<packages>
<package id="grpc.dependencies.openssl.redist" version="1.0.2.2" targetFramework="net45" />
<package id="grpc.dependencies.zlib.redist" version="1.2.8.9" targetFramework="net45" />
- <package id="System.Collections.Immutable" version="1.1.34-rc" targetFramework="net45" />
+ <package id="Microsoft.Bcl.Immutable" version="1.0.34" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.Examples.MathServer/MathServer.cs b/src/csharp/Grpc.Examples.MathServer/MathServer.cs
index 884a84d0a6..f7429fb43f 100644
--- a/src/csharp/Grpc.Examples.MathServer/MathServer.cs
+++ b/src/csharp/Grpc.Examples.MathServer/MathServer.cs
@@ -46,7 +46,7 @@ namespace math
Server server = new Server();
server.AddServiceDefinition(MathGrpc.BindService(new MathServiceImpl()));
- int port = server.AddListeningPort(host + ":0");
+ int port = server.AddListeningPort(host + ":23456");
server.Start();
Console.WriteLine("MathServer listening on port " + port);
diff --git a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
index c3e5f03074..584bf1068d 100644
--- a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
+++ b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
@@ -39,8 +39,9 @@
<Reference Include="Google.ProtocolBuffers">
<HintPath>..\packages\Google.ProtocolBuffers.2.4.1.521\lib\net40\Google.ProtocolBuffers.dll</HintPath>
</Reference>
- <Reference Include="System.Collections.Immutable">
- <HintPath>..\packages\System.Collections.Immutable.1.1.34-rc\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
+ <Reference Include="System.Collections.Immutable, Version=1.0.34.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Microsoft.Bcl.Immutable.1.0.34\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
diff --git a/src/csharp/Grpc.IntegrationTesting/packages.config b/src/csharp/Grpc.IntegrationTesting/packages.config
index 157c264eac..335f829432 100644
--- a/src/csharp/Grpc.IntegrationTesting/packages.config
+++ b/src/csharp/Grpc.IntegrationTesting/packages.config
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Google.ProtocolBuffers" version="2.4.1.521" targetFramework="net45" />
+ <package id="Microsoft.Bcl.Immutable" version="1.0.34" targetFramework="net45" />
<package id="NUnit" version="2.6.4" targetFramework="net45" />
- <package id="System.Collections.Immutable" version="1.1.34-rc" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/objective-c/GRPCClient/private/GRPCChannel.h b/src/objective-c/GRPCClient/private/GRPCChannel.h
index 2e07dcc3c7..bc6a47d469 100644
--- a/src/objective-c/GRPCClient/private/GRPCChannel.h
+++ b/src/objective-c/GRPCClient/private/GRPCChannel.h
@@ -45,6 +45,7 @@ struct grpc_channel;
// Convenience constructor to allow for reuse of connections.
+ (instancetype)channelToHost:(NSString *)host;
-// Designated initializer
-- (instancetype)initWithHost:(NSString *)host;
+- (instancetype)initWithHost:(NSString *)host NS_DESIGNATED_INITIALIZER;
+
+- (instancetype)initWithChannel:(struct grpc_channel *)unmanagedChannel NS_DESIGNATED_INITIALIZER;
@end
diff --git a/src/objective-c/GRPCClient/private/GRPCChannel.m b/src/objective-c/GRPCClient/private/GRPCChannel.m
index 7ddc01dc24..8b7055815d 100644
--- a/src/objective-c/GRPCClient/private/GRPCChannel.m
+++ b/src/objective-c/GRPCClient/private/GRPCChannel.m
@@ -33,7 +33,10 @@
#import "GRPCChannel.h"
-#import <grpc/grpc.h>
+#include <grpc/grpc.h>
+
+#import "GRPCSecureChannel.h"
+#import "GRPCUnsecuredChannel.h"
@implementation GRPCChannel
@@ -46,20 +49,42 @@
return [self initWithHost:nil];
}
-// Designated initializer
- (instancetype)initWithHost:(NSString *)host {
- if (!host) {
- [NSException raise:NSInvalidArgumentException format:@"Host can't be nil."];
+ if (![host containsString:@"://"]) {
+ // No scheme provided; assume https.
+ host = [@"https://" stringByAppendingString:host];
+ }
+ NSURL *hostURL = [NSURL URLWithString:host];
+ if (!hostURL) {
+ [NSException raise:NSInvalidArgumentException format:@"Invalid URL: %@", host];
+ }
+ if ([hostURL.scheme isEqualToString:@"https"]) {
+ host = [@[hostURL.host, hostURL.port ?: @443] componentsJoinedByString:@":"];
+ return [[GRPCSecureChannel alloc] initWithHost:host];
+ }
+ if ([hostURL.scheme isEqualToString:@"http"]) {
+ host = [@[hostURL.host, hostURL.port ?: @80] componentsJoinedByString:@":"];
+ return [[GRPCUnsecuredChannel alloc] initWithHost:host];
}
+ [NSException raise:NSInvalidArgumentException
+ format:@"URL scheme %@ isn't supported.", hostURL.scheme];
+ return nil; // silence warning.
+}
+
+- (instancetype)initWithChannel:(struct grpc_channel *)unmanagedChannel {
if ((self = [super init])) {
- _unmanagedChannel = grpc_channel_create(host.UTF8String, NULL);
+ _unmanagedChannel = unmanagedChannel;
}
return self;
}
- (void)dealloc {
- // TODO(jcanizales): Be sure to add a test with a server that closes the connection prematurely,
- // as in the past that made this call to crash.
- grpc_channel_destroy(_unmanagedChannel);
+ // _unmanagedChannel is NULL when deallocating an object of the base class (because the
+ // initializer returns a different object).
+ if (_unmanagedChannel) {
+ // TODO(jcanizales): Be sure to add a test with a server that closes the connection prematurely,
+ // as in the past that made this call to crash.
+ grpc_channel_destroy(_unmanagedChannel);
+ }
}
@end
diff --git a/src/objective-c/GRPCClient/private/GRPCSecureChannel.h b/src/objective-c/GRPCClient/private/GRPCSecureChannel.h
new file mode 100644
index 0000000000..d34ceaea0c
--- /dev/null
+++ b/src/objective-c/GRPCClient/private/GRPCSecureChannel.h
@@ -0,0 +1,38 @@
+/*
+ *
+ * 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 "GRPCChannel.h"
+
+@interface GRPCSecureChannel : GRPCChannel
+
+@end
diff --git a/src/objective-c/GRPCClient/private/GRPCSecureChannel.m b/src/objective-c/GRPCClient/private/GRPCSecureChannel.m
new file mode 100644
index 0000000000..47bdfe3f28
--- /dev/null
+++ b/src/objective-c/GRPCClient/private/GRPCSecureChannel.m
@@ -0,0 +1,52 @@
+/*
+ *
+ * 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 "GRPCSecureChannel.h"
+
+#import <grpc/grpc_security.h>
+
+@implementation GRPCSecureChannel
+
+- (instancetype)initWithHost:(NSString *)host {
+ // TODO(jcanizales): Load certs only once.
+ NSURL *certsURL = [[NSBundle mainBundle] URLForResource:@"gRPC.bundle/roots" withExtension:@"pem"];
+ NSData *certsData = [NSData dataWithContentsOfURL:certsURL];
+ NSString *certsString = [[NSString alloc] initWithData:certsData encoding:NSUTF8StringEncoding];
+
+ grpc_credentials *credentials = grpc_ssl_credentials_create(certsString.UTF8String, NULL);
+ return (self = [super initWithChannel:grpc_secure_channel_create(credentials,
+ host.UTF8String,
+ NULL)]);
+}
+
+@end
diff --git a/src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.h b/src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.h
new file mode 100644
index 0000000000..9d89cfb541
--- /dev/null
+++ b/src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.h
@@ -0,0 +1,38 @@
+/*
+ *
+ * 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 "GRPCChannel.h"
+
+@interface GRPCUnsecuredChannel : GRPCChannel
+
+@end
diff --git a/src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.m b/src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.m
new file mode 100644
index 0000000000..d27f7ca565
--- /dev/null
+++ b/src/objective-c/GRPCClient/private/GRPCUnsecuredChannel.m
@@ -0,0 +1,44 @@
+/*
+ *
+ * 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 "GRPCUnsecuredChannel.h"
+
+#include <grpc/grpc.h>
+
+@implementation GRPCUnsecuredChannel
+
+- (instancetype)initWithHost:(NSString *)host {
+ return (self = [super initWithChannel:grpc_channel_create(host.UTF8String, NULL)]);
+}
+
+@end
diff --git a/src/objective-c/examples/Sample/Podfile b/src/objective-c/examples/Sample/Podfile
index 848627ff54..8b1a90e39b 100644
--- a/src/objective-c/examples/Sample/Podfile
+++ b/src/objective-c/examples/Sample/Podfile
@@ -2,6 +2,8 @@ source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
pod 'gRPC', :path => "../../../.."
+pod 'Route_guide', :path => "RouteGuideClient"
+pod 'RemoteTest', :path => "RemoteTestClient"
link_with 'Sample', 'SampleTests'
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.h b/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.h
new file mode 100644
index 0000000000..bf9fa3e36f
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.h
@@ -0,0 +1,103 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+
+#import <ProtocolBuffers/ProtocolBuffers.h>
+
+// @@protoc_insertion_point(imports)
+
+@class ObjectiveCFileOptions;
+@class ObjectiveCFileOptionsBuilder;
+@class PBDescriptorProto;
+@class PBDescriptorProtoBuilder;
+@class PBDescriptorProtoExtensionRange;
+@class PBDescriptorProtoExtensionRangeBuilder;
+@class PBEnumDescriptorProto;
+@class PBEnumDescriptorProtoBuilder;
+@class PBEnumOptions;
+@class PBEnumOptionsBuilder;
+@class PBEnumValueDescriptorProto;
+@class PBEnumValueDescriptorProtoBuilder;
+@class PBEnumValueOptions;
+@class PBEnumValueOptionsBuilder;
+@class PBFieldDescriptorProto;
+@class PBFieldDescriptorProtoBuilder;
+@class PBFieldOptions;
+@class PBFieldOptionsBuilder;
+@class PBFileDescriptorProto;
+@class PBFileDescriptorProtoBuilder;
+@class PBFileDescriptorSet;
+@class PBFileDescriptorSetBuilder;
+@class PBFileOptions;
+@class PBFileOptionsBuilder;
+@class PBMessageOptions;
+@class PBMessageOptionsBuilder;
+@class PBMethodDescriptorProto;
+@class PBMethodDescriptorProtoBuilder;
+@class PBMethodOptions;
+@class PBMethodOptionsBuilder;
+@class PBOneofDescriptorProto;
+@class PBOneofDescriptorProtoBuilder;
+@class PBServiceDescriptorProto;
+@class PBServiceDescriptorProtoBuilder;
+@class PBServiceOptions;
+@class PBServiceOptionsBuilder;
+@class PBSourceCodeInfo;
+@class PBSourceCodeInfoBuilder;
+@class PBSourceCodeInfoLocation;
+@class PBSourceCodeInfoLocationBuilder;
+@class PBUninterpretedOption;
+@class PBUninterpretedOptionBuilder;
+@class PBUninterpretedOptionNamePart;
+@class PBUninterpretedOptionNamePartBuilder;
+@class RMTEmpty;
+@class RMTEmptyBuilder;
+
+
+
+@interface RMTEmptyRoot : NSObject {
+}
++ (PBExtensionRegistry*) extensionRegistry;
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry;
+@end
+
+@interface RMTEmpty : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+}
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTEmptyBuilder*) builder;
++ (RMTEmptyBuilder*) builder;
++ (RMTEmptyBuilder*) builderWithPrototype:(RMTEmpty*) prototype;
+- (RMTEmptyBuilder*) toBuilder;
+
++ (RMTEmpty*) parseFromData:(NSData*) data;
++ (RMTEmpty*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTEmpty*) parseFromInputStream:(NSInputStream*) input;
++ (RMTEmpty*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTEmpty*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTEmpty*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTEmptyBuilder : PBGeneratedMessageBuilder {
+@private
+ RMTEmpty* resultEmpty;
+}
+
+- (RMTEmpty*) defaultInstance;
+
+- (RMTEmptyBuilder*) clear;
+- (RMTEmptyBuilder*) clone;
+
+- (RMTEmpty*) build;
+- (RMTEmpty*) buildPartial;
+
+- (RMTEmptyBuilder*) mergeFrom:(RMTEmpty*) other;
+- (RMTEmptyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTEmptyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.m b/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.m
new file mode 100644
index 0000000000..8e39cb70d1
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.m
@@ -0,0 +1,179 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+
+#import "Empty.pb.h"
+// @@protoc_insertion_point(imports)
+
+@implementation RMTEmptyRoot
+static PBExtensionRegistry* extensionRegistry = nil;
++ (PBExtensionRegistry*) extensionRegistry {
+ return extensionRegistry;
+}
+
++ (void) initialize {
+ if (self == [RMTEmptyRoot class]) {
+ PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry];
+ [self registerAllExtensions:registry];
+ [ObjectivecDescriptorRoot registerAllExtensions:registry];
+ extensionRegistry = registry;
+ }
+}
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry {
+}
+@end
+
+@interface RMTEmpty ()
+@end
+
+@implementation RMTEmpty
+
+- (instancetype) init {
+ if ((self = [super init])) {
+ }
+ return self;
+}
+static RMTEmpty* defaultRMTEmptyInstance = nil;
++ (void) initialize {
+ if (self == [RMTEmpty class]) {
+ defaultRMTEmptyInstance = [[RMTEmpty alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRMTEmptyInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRMTEmptyInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RMTEmpty*) parseFromData:(NSData*) data {
+ return (RMTEmpty*)[[[RMTEmpty builder] mergeFromData:data] build];
+}
++ (RMTEmpty*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTEmpty*)[[[RMTEmpty builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTEmpty*) parseFromInputStream:(NSInputStream*) input {
+ return (RMTEmpty*)[[[RMTEmpty builder] mergeFromInputStream:input] build];
+}
++ (RMTEmpty*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTEmpty*)[[[RMTEmpty builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTEmpty*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RMTEmpty*)[[[RMTEmpty builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTEmpty*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTEmpty*)[[[RMTEmpty builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTEmptyBuilder*) builder {
+ return [[RMTEmptyBuilder alloc] init];
+}
++ (RMTEmptyBuilder*) builderWithPrototype:(RMTEmpty*) prototype {
+ return [[RMTEmpty builder] mergeFrom:prototype];
+}
+- (RMTEmptyBuilder*) builder {
+ return [RMTEmpty builder];
+}
+- (RMTEmptyBuilder*) toBuilder {
+ return [RMTEmpty builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RMTEmpty class]]) {
+ return NO;
+ }
+ RMTEmpty *otherMessage = other;
+ return
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RMTEmptyBuilder()
+@property (strong) RMTEmpty* resultEmpty;
+@end
+
+@implementation RMTEmptyBuilder
+@synthesize resultEmpty;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultEmpty = [[RMTEmpty alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultEmpty;
+}
+- (RMTEmptyBuilder*) clear {
+ self.resultEmpty = [[RMTEmpty alloc] init];
+ return self;
+}
+- (RMTEmptyBuilder*) clone {
+ return [RMTEmpty builderWithPrototype:resultEmpty];
+}
+- (RMTEmpty*) defaultInstance {
+ return [RMTEmpty defaultInstance];
+}
+- (RMTEmpty*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RMTEmpty*) buildPartial {
+ RMTEmpty* returnMe = resultEmpty;
+ self.resultEmpty = nil;
+ return returnMe;
+}
+- (RMTEmptyBuilder*) mergeFrom:(RMTEmpty*) other {
+ if (other == [RMTEmpty defaultInstance]) {
+ return self;
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RMTEmptyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTEmptyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ }
+ }
+}
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.h b/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.h
new file mode 100644
index 0000000000..0a08e67702
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.h
@@ -0,0 +1,578 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+
+#import <ProtocolBuffers/ProtocolBuffers.h>
+
+// @@protoc_insertion_point(imports)
+
+@class ObjectiveCFileOptions;
+@class ObjectiveCFileOptionsBuilder;
+@class PBDescriptorProto;
+@class PBDescriptorProtoBuilder;
+@class PBDescriptorProtoExtensionRange;
+@class PBDescriptorProtoExtensionRangeBuilder;
+@class PBEnumDescriptorProto;
+@class PBEnumDescriptorProtoBuilder;
+@class PBEnumOptions;
+@class PBEnumOptionsBuilder;
+@class PBEnumValueDescriptorProto;
+@class PBEnumValueDescriptorProtoBuilder;
+@class PBEnumValueOptions;
+@class PBEnumValueOptionsBuilder;
+@class PBFieldDescriptorProto;
+@class PBFieldDescriptorProtoBuilder;
+@class PBFieldOptions;
+@class PBFieldOptionsBuilder;
+@class PBFileDescriptorProto;
+@class PBFileDescriptorProtoBuilder;
+@class PBFileDescriptorSet;
+@class PBFileDescriptorSetBuilder;
+@class PBFileOptions;
+@class PBFileOptionsBuilder;
+@class PBMessageOptions;
+@class PBMessageOptionsBuilder;
+@class PBMethodDescriptorProto;
+@class PBMethodDescriptorProtoBuilder;
+@class PBMethodOptions;
+@class PBMethodOptionsBuilder;
+@class PBOneofDescriptorProto;
+@class PBOneofDescriptorProtoBuilder;
+@class PBServiceDescriptorProto;
+@class PBServiceDescriptorProtoBuilder;
+@class PBServiceOptions;
+@class PBServiceOptionsBuilder;
+@class PBSourceCodeInfo;
+@class PBSourceCodeInfoBuilder;
+@class PBSourceCodeInfoLocation;
+@class PBSourceCodeInfoLocationBuilder;
+@class PBUninterpretedOption;
+@class PBUninterpretedOptionBuilder;
+@class PBUninterpretedOptionNamePart;
+@class PBUninterpretedOptionNamePartBuilder;
+@class RMTPayload;
+@class RMTPayloadBuilder;
+@class RMTResponseParameters;
+@class RMTResponseParametersBuilder;
+@class RMTSimpleRequest;
+@class RMTSimpleRequestBuilder;
+@class RMTSimpleResponse;
+@class RMTSimpleResponseBuilder;
+@class RMTStreamingInputCallRequest;
+@class RMTStreamingInputCallRequestBuilder;
+@class RMTStreamingInputCallResponse;
+@class RMTStreamingInputCallResponseBuilder;
+@class RMTStreamingOutputCallRequest;
+@class RMTStreamingOutputCallRequestBuilder;
+@class RMTStreamingOutputCallResponse;
+@class RMTStreamingOutputCallResponseBuilder;
+
+
+typedef NS_ENUM(SInt32, RMTPayloadType) {
+ RMTPayloadTypeCompressable = 0,
+ RMTPayloadTypeUncompressable = 1,
+ RMTPayloadTypeRandom = 2,
+};
+
+BOOL RMTPayloadTypeIsValidValue(RMTPayloadType value);
+NSString *NSStringFromRMTPayloadType(RMTPayloadType value);
+
+
+@interface RMTMessagesRoot : NSObject {
+}
++ (PBExtensionRegistry*) extensionRegistry;
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry;
+@end
+
+@interface RMTPayload : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasBody_:1;
+ BOOL hasType_:1;
+ NSData* body;
+ RMTPayloadType type;
+}
+- (BOOL) hasType;
+- (BOOL) hasBody;
+@property (readonly) RMTPayloadType type;
+@property (readonly, strong) NSData* body;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTPayloadBuilder*) builder;
++ (RMTPayloadBuilder*) builder;
++ (RMTPayloadBuilder*) builderWithPrototype:(RMTPayload*) prototype;
+- (RMTPayloadBuilder*) toBuilder;
+
++ (RMTPayload*) parseFromData:(NSData*) data;
++ (RMTPayload*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTPayload*) parseFromInputStream:(NSInputStream*) input;
++ (RMTPayload*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTPayload*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTPayload*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTPayloadBuilder : PBGeneratedMessageBuilder {
+@private
+ RMTPayload* resultPayload;
+}
+
+- (RMTPayload*) defaultInstance;
+
+- (RMTPayloadBuilder*) clear;
+- (RMTPayloadBuilder*) clone;
+
+- (RMTPayload*) build;
+- (RMTPayload*) buildPartial;
+
+- (RMTPayloadBuilder*) mergeFrom:(RMTPayload*) other;
+- (RMTPayloadBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTPayloadBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasType;
+- (RMTPayloadType) type;
+- (RMTPayloadBuilder*) setType:(RMTPayloadType) value;
+- (RMTPayloadBuilder*) clearType;
+
+- (BOOL) hasBody;
+- (NSData*) body;
+- (RMTPayloadBuilder*) setBody:(NSData*) value;
+- (RMTPayloadBuilder*) clearBody;
+@end
+
+@interface RMTSimpleRequest : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasFillUsername_:1;
+ BOOL hasFillOauthScope_:1;
+ BOOL hasResponseSize_:1;
+ BOOL hasPayload_:1;
+ BOOL hasResponseType_:1;
+ BOOL fillUsername_:1;
+ BOOL fillOauthScope_:1;
+ SInt32 responseSize;
+ RMTPayload* payload;
+ RMTPayloadType responseType;
+}
+- (BOOL) hasResponseType;
+- (BOOL) hasResponseSize;
+- (BOOL) hasPayload;
+- (BOOL) hasFillUsername;
+- (BOOL) hasFillOauthScope;
+@property (readonly) RMTPayloadType responseType;
+@property (readonly) SInt32 responseSize;
+@property (readonly, strong) RMTPayload* payload;
+- (BOOL) fillUsername;
+- (BOOL) fillOauthScope;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTSimpleRequestBuilder*) builder;
++ (RMTSimpleRequestBuilder*) builder;
++ (RMTSimpleRequestBuilder*) builderWithPrototype:(RMTSimpleRequest*) prototype;
+- (RMTSimpleRequestBuilder*) toBuilder;
+
++ (RMTSimpleRequest*) parseFromData:(NSData*) data;
++ (RMTSimpleRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTSimpleRequest*) parseFromInputStream:(NSInputStream*) input;
++ (RMTSimpleRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTSimpleRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTSimpleRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTSimpleRequestBuilder : PBGeneratedMessageBuilder {
+@private
+ RMTSimpleRequest* resultSimpleRequest;
+}
+
+- (RMTSimpleRequest*) defaultInstance;
+
+- (RMTSimpleRequestBuilder*) clear;
+- (RMTSimpleRequestBuilder*) clone;
+
+- (RMTSimpleRequest*) build;
+- (RMTSimpleRequest*) buildPartial;
+
+- (RMTSimpleRequestBuilder*) mergeFrom:(RMTSimpleRequest*) other;
+- (RMTSimpleRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTSimpleRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasResponseType;
+- (RMTPayloadType) responseType;
+- (RMTSimpleRequestBuilder*) setResponseType:(RMTPayloadType) value;
+- (RMTSimpleRequestBuilder*) clearResponseType;
+
+- (BOOL) hasResponseSize;
+- (SInt32) responseSize;
+- (RMTSimpleRequestBuilder*) setResponseSize:(SInt32) value;
+- (RMTSimpleRequestBuilder*) clearResponseSize;
+
+- (BOOL) hasPayload;
+- (RMTPayload*) payload;
+- (RMTSimpleRequestBuilder*) setPayload:(RMTPayload*) value;
+- (RMTSimpleRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue;
+- (RMTSimpleRequestBuilder*) mergePayload:(RMTPayload*) value;
+- (RMTSimpleRequestBuilder*) clearPayload;
+
+- (BOOL) hasFillUsername;
+- (BOOL) fillUsername;
+- (RMTSimpleRequestBuilder*) setFillUsername:(BOOL) value;
+- (RMTSimpleRequestBuilder*) clearFillUsername;
+
+- (BOOL) hasFillOauthScope;
+- (BOOL) fillOauthScope;
+- (RMTSimpleRequestBuilder*) setFillOauthScope:(BOOL) value;
+- (RMTSimpleRequestBuilder*) clearFillOauthScope;
+@end
+
+@interface RMTSimpleResponse : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasUsername_:1;
+ BOOL hasOauthScope_:1;
+ BOOL hasPayload_:1;
+ NSString* username;
+ NSString* oauthScope;
+ RMTPayload* payload;
+}
+- (BOOL) hasPayload;
+- (BOOL) hasUsername;
+- (BOOL) hasOauthScope;
+@property (readonly, strong) RMTPayload* payload;
+@property (readonly, strong) NSString* username;
+@property (readonly, strong) NSString* oauthScope;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTSimpleResponseBuilder*) builder;
++ (RMTSimpleResponseBuilder*) builder;
++ (RMTSimpleResponseBuilder*) builderWithPrototype:(RMTSimpleResponse*) prototype;
+- (RMTSimpleResponseBuilder*) toBuilder;
+
++ (RMTSimpleResponse*) parseFromData:(NSData*) data;
++ (RMTSimpleResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTSimpleResponse*) parseFromInputStream:(NSInputStream*) input;
++ (RMTSimpleResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTSimpleResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTSimpleResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTSimpleResponseBuilder : PBGeneratedMessageBuilder {
+@private
+ RMTSimpleResponse* resultSimpleResponse;
+}
+
+- (RMTSimpleResponse*) defaultInstance;
+
+- (RMTSimpleResponseBuilder*) clear;
+- (RMTSimpleResponseBuilder*) clone;
+
+- (RMTSimpleResponse*) build;
+- (RMTSimpleResponse*) buildPartial;
+
+- (RMTSimpleResponseBuilder*) mergeFrom:(RMTSimpleResponse*) other;
+- (RMTSimpleResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTSimpleResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasPayload;
+- (RMTPayload*) payload;
+- (RMTSimpleResponseBuilder*) setPayload:(RMTPayload*) value;
+- (RMTSimpleResponseBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue;
+- (RMTSimpleResponseBuilder*) mergePayload:(RMTPayload*) value;
+- (RMTSimpleResponseBuilder*) clearPayload;
+
+- (BOOL) hasUsername;
+- (NSString*) username;
+- (RMTSimpleResponseBuilder*) setUsername:(NSString*) value;
+- (RMTSimpleResponseBuilder*) clearUsername;
+
+- (BOOL) hasOauthScope;
+- (NSString*) oauthScope;
+- (RMTSimpleResponseBuilder*) setOauthScope:(NSString*) value;
+- (RMTSimpleResponseBuilder*) clearOauthScope;
+@end
+
+@interface RMTStreamingInputCallRequest : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasPayload_:1;
+ RMTPayload* payload;
+}
+- (BOOL) hasPayload;
+@property (readonly, strong) RMTPayload* payload;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTStreamingInputCallRequestBuilder*) builder;
++ (RMTStreamingInputCallRequestBuilder*) builder;
++ (RMTStreamingInputCallRequestBuilder*) builderWithPrototype:(RMTStreamingInputCallRequest*) prototype;
+- (RMTStreamingInputCallRequestBuilder*) toBuilder;
+
++ (RMTStreamingInputCallRequest*) parseFromData:(NSData*) data;
++ (RMTStreamingInputCallRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingInputCallRequest*) parseFromInputStream:(NSInputStream*) input;
++ (RMTStreamingInputCallRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingInputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTStreamingInputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTStreamingInputCallRequestBuilder : PBGeneratedMessageBuilder {
+@private
+ RMTStreamingInputCallRequest* resultStreamingInputCallRequest;
+}
+
+- (RMTStreamingInputCallRequest*) defaultInstance;
+
+- (RMTStreamingInputCallRequestBuilder*) clear;
+- (RMTStreamingInputCallRequestBuilder*) clone;
+
+- (RMTStreamingInputCallRequest*) build;
+- (RMTStreamingInputCallRequest*) buildPartial;
+
+- (RMTStreamingInputCallRequestBuilder*) mergeFrom:(RMTStreamingInputCallRequest*) other;
+- (RMTStreamingInputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTStreamingInputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasPayload;
+- (RMTPayload*) payload;
+- (RMTStreamingInputCallRequestBuilder*) setPayload:(RMTPayload*) value;
+- (RMTStreamingInputCallRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue;
+- (RMTStreamingInputCallRequestBuilder*) mergePayload:(RMTPayload*) value;
+- (RMTStreamingInputCallRequestBuilder*) clearPayload;
+@end
+
+@interface RMTStreamingInputCallResponse : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasAggregatedPayloadSize_:1;
+ SInt32 aggregatedPayloadSize;
+}
+- (BOOL) hasAggregatedPayloadSize;
+@property (readonly) SInt32 aggregatedPayloadSize;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTStreamingInputCallResponseBuilder*) builder;
++ (RMTStreamingInputCallResponseBuilder*) builder;
++ (RMTStreamingInputCallResponseBuilder*) builderWithPrototype:(RMTStreamingInputCallResponse*) prototype;
+- (RMTStreamingInputCallResponseBuilder*) toBuilder;
+
++ (RMTStreamingInputCallResponse*) parseFromData:(NSData*) data;
++ (RMTStreamingInputCallResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingInputCallResponse*) parseFromInputStream:(NSInputStream*) input;
++ (RMTStreamingInputCallResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingInputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTStreamingInputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTStreamingInputCallResponseBuilder : PBGeneratedMessageBuilder {
+@private
+ RMTStreamingInputCallResponse* resultStreamingInputCallResponse;
+}
+
+- (RMTStreamingInputCallResponse*) defaultInstance;
+
+- (RMTStreamingInputCallResponseBuilder*) clear;
+- (RMTStreamingInputCallResponseBuilder*) clone;
+
+- (RMTStreamingInputCallResponse*) build;
+- (RMTStreamingInputCallResponse*) buildPartial;
+
+- (RMTStreamingInputCallResponseBuilder*) mergeFrom:(RMTStreamingInputCallResponse*) other;
+- (RMTStreamingInputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTStreamingInputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasAggregatedPayloadSize;
+- (SInt32) aggregatedPayloadSize;
+- (RMTStreamingInputCallResponseBuilder*) setAggregatedPayloadSize:(SInt32) value;
+- (RMTStreamingInputCallResponseBuilder*) clearAggregatedPayloadSize;
+@end
+
+@interface RMTResponseParameters : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasSize_:1;
+ BOOL hasIntervalUs_:1;
+ SInt32 size;
+ SInt32 intervalUs;
+}
+- (BOOL) hasSize;
+- (BOOL) hasIntervalUs;
+@property (readonly) SInt32 size;
+@property (readonly) SInt32 intervalUs;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTResponseParametersBuilder*) builder;
++ (RMTResponseParametersBuilder*) builder;
++ (RMTResponseParametersBuilder*) builderWithPrototype:(RMTResponseParameters*) prototype;
+- (RMTResponseParametersBuilder*) toBuilder;
+
++ (RMTResponseParameters*) parseFromData:(NSData*) data;
++ (RMTResponseParameters*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTResponseParameters*) parseFromInputStream:(NSInputStream*) input;
++ (RMTResponseParameters*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTResponseParameters*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTResponseParameters*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTResponseParametersBuilder : PBGeneratedMessageBuilder {
+@private
+ RMTResponseParameters* resultResponseParameters;
+}
+
+- (RMTResponseParameters*) defaultInstance;
+
+- (RMTResponseParametersBuilder*) clear;
+- (RMTResponseParametersBuilder*) clone;
+
+- (RMTResponseParameters*) build;
+- (RMTResponseParameters*) buildPartial;
+
+- (RMTResponseParametersBuilder*) mergeFrom:(RMTResponseParameters*) other;
+- (RMTResponseParametersBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTResponseParametersBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasSize;
+- (SInt32) size;
+- (RMTResponseParametersBuilder*) setSize:(SInt32) value;
+- (RMTResponseParametersBuilder*) clearSize;
+
+- (BOOL) hasIntervalUs;
+- (SInt32) intervalUs;
+- (RMTResponseParametersBuilder*) setIntervalUs:(SInt32) value;
+- (RMTResponseParametersBuilder*) clearIntervalUs;
+@end
+
+@interface RMTStreamingOutputCallRequest : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasPayload_:1;
+ BOOL hasResponseType_:1;
+ RMTPayload* payload;
+ RMTPayloadType responseType;
+ NSMutableArray * responseParametersArray;
+}
+- (BOOL) hasResponseType;
+- (BOOL) hasPayload;
+@property (readonly) RMTPayloadType responseType;
+@property (readonly, strong) NSArray * responseParameters;
+@property (readonly, strong) RMTPayload* payload;
+- (RMTResponseParameters*)responseParametersAtIndex:(NSUInteger)index;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTStreamingOutputCallRequestBuilder*) builder;
++ (RMTStreamingOutputCallRequestBuilder*) builder;
++ (RMTStreamingOutputCallRequestBuilder*) builderWithPrototype:(RMTStreamingOutputCallRequest*) prototype;
+- (RMTStreamingOutputCallRequestBuilder*) toBuilder;
+
++ (RMTStreamingOutputCallRequest*) parseFromData:(NSData*) data;
++ (RMTStreamingOutputCallRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingOutputCallRequest*) parseFromInputStream:(NSInputStream*) input;
++ (RMTStreamingOutputCallRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingOutputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTStreamingOutputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTStreamingOutputCallRequestBuilder : PBGeneratedMessageBuilder {
+@private
+ RMTStreamingOutputCallRequest* resultStreamingOutputCallRequest;
+}
+
+- (RMTStreamingOutputCallRequest*) defaultInstance;
+
+- (RMTStreamingOutputCallRequestBuilder*) clear;
+- (RMTStreamingOutputCallRequestBuilder*) clone;
+
+- (RMTStreamingOutputCallRequest*) build;
+- (RMTStreamingOutputCallRequest*) buildPartial;
+
+- (RMTStreamingOutputCallRequestBuilder*) mergeFrom:(RMTStreamingOutputCallRequest*) other;
+- (RMTStreamingOutputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTStreamingOutputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasResponseType;
+- (RMTPayloadType) responseType;
+- (RMTStreamingOutputCallRequestBuilder*) setResponseType:(RMTPayloadType) value;
+- (RMTStreamingOutputCallRequestBuilder*) clearResponseType;
+
+- (NSMutableArray *)responseParameters;
+- (RMTResponseParameters*)responseParametersAtIndex:(NSUInteger)index;
+- (RMTStreamingOutputCallRequestBuilder *)addResponseParameters:(RMTResponseParameters*)value;
+- (RMTStreamingOutputCallRequestBuilder *)setResponseParametersArray:(NSArray *)array;
+- (RMTStreamingOutputCallRequestBuilder *)clearResponseParameters;
+
+- (BOOL) hasPayload;
+- (RMTPayload*) payload;
+- (RMTStreamingOutputCallRequestBuilder*) setPayload:(RMTPayload*) value;
+- (RMTStreamingOutputCallRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue;
+- (RMTStreamingOutputCallRequestBuilder*) mergePayload:(RMTPayload*) value;
+- (RMTStreamingOutputCallRequestBuilder*) clearPayload;
+@end
+
+@interface RMTStreamingOutputCallResponse : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasPayload_:1;
+ RMTPayload* payload;
+}
+- (BOOL) hasPayload;
+@property (readonly, strong) RMTPayload* payload;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTStreamingOutputCallResponseBuilder*) builder;
++ (RMTStreamingOutputCallResponseBuilder*) builder;
++ (RMTStreamingOutputCallResponseBuilder*) builderWithPrototype:(RMTStreamingOutputCallResponse*) prototype;
+- (RMTStreamingOutputCallResponseBuilder*) toBuilder;
+
++ (RMTStreamingOutputCallResponse*) parseFromData:(NSData*) data;
++ (RMTStreamingOutputCallResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingOutputCallResponse*) parseFromInputStream:(NSInputStream*) input;
++ (RMTStreamingOutputCallResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingOutputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTStreamingOutputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTStreamingOutputCallResponseBuilder : PBGeneratedMessageBuilder {
+@private
+ RMTStreamingOutputCallResponse* resultStreamingOutputCallResponse;
+}
+
+- (RMTStreamingOutputCallResponse*) defaultInstance;
+
+- (RMTStreamingOutputCallResponseBuilder*) clear;
+- (RMTStreamingOutputCallResponseBuilder*) clone;
+
+- (RMTStreamingOutputCallResponse*) build;
+- (RMTStreamingOutputCallResponse*) buildPartial;
+
+- (RMTStreamingOutputCallResponseBuilder*) mergeFrom:(RMTStreamingOutputCallResponse*) other;
+- (RMTStreamingOutputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTStreamingOutputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasPayload;
+- (RMTPayload*) payload;
+- (RMTStreamingOutputCallResponseBuilder*) setPayload:(RMTPayload*) value;
+- (RMTStreamingOutputCallResponseBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue;
+- (RMTStreamingOutputCallResponseBuilder*) mergePayload:(RMTPayload*) value;
+- (RMTStreamingOutputCallResponseBuilder*) clearPayload;
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.m b/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.m
new file mode 100644
index 0000000000..fbad1a9c09
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.m
@@ -0,0 +1,2256 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+
+#import "Messages.pb.h"
+// @@protoc_insertion_point(imports)
+
+@implementation RMTMessagesRoot
+static PBExtensionRegistry* extensionRegistry = nil;
++ (PBExtensionRegistry*) extensionRegistry {
+ return extensionRegistry;
+}
+
++ (void) initialize {
+ if (self == [RMTMessagesRoot class]) {
+ PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry];
+ [self registerAllExtensions:registry];
+ [ObjectivecDescriptorRoot registerAllExtensions:registry];
+ extensionRegistry = registry;
+ }
+}
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry {
+}
+@end
+
+BOOL RMTPayloadTypeIsValidValue(RMTPayloadType value) {
+ switch (value) {
+ case RMTPayloadTypeCompressable:
+ case RMTPayloadTypeUncompressable:
+ case RMTPayloadTypeRandom:
+ return YES;
+ default:
+ return NO;
+ }
+}
+NSString *NSStringFromRMTPayloadType(RMTPayloadType value) {
+ switch (value) {
+ case RMTPayloadTypeCompressable:
+ return @"RMTPayloadTypeCompressable";
+ case RMTPayloadTypeUncompressable:
+ return @"RMTPayloadTypeUncompressable";
+ case RMTPayloadTypeRandom:
+ return @"RMTPayloadTypeRandom";
+ default:
+ return nil;
+ }
+}
+
+@interface RMTPayload ()
+@property RMTPayloadType type;
+@property (strong) NSData* body;
+@end
+
+@implementation RMTPayload
+
+- (BOOL) hasType {
+ return !!hasType_;
+}
+- (void) setHasType:(BOOL) _value_ {
+ hasType_ = !!_value_;
+}
+@synthesize type;
+- (BOOL) hasBody {
+ return !!hasBody_;
+}
+- (void) setHasBody:(BOOL) _value_ {
+ hasBody_ = !!_value_;
+}
+@synthesize body;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.type = RMTPayloadTypeCompressable;
+ self.body = [NSData data];
+ }
+ return self;
+}
+static RMTPayload* defaultRMTPayloadInstance = nil;
++ (void) initialize {
+ if (self == [RMTPayload class]) {
+ defaultRMTPayloadInstance = [[RMTPayload alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRMTPayloadInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRMTPayloadInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasType) {
+ [output writeEnum:1 value:self.type];
+ }
+ if (self.hasBody) {
+ [output writeData:2 value:self.body];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasType) {
+ size_ += computeEnumSize(1, self.type);
+ }
+ if (self.hasBody) {
+ size_ += computeDataSize(2, self.body);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RMTPayload*) parseFromData:(NSData*) data {
+ return (RMTPayload*)[[[RMTPayload builder] mergeFromData:data] build];
+}
++ (RMTPayload*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTPayload*)[[[RMTPayload builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTPayload*) parseFromInputStream:(NSInputStream*) input {
+ return (RMTPayload*)[[[RMTPayload builder] mergeFromInputStream:input] build];
+}
++ (RMTPayload*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTPayload*)[[[RMTPayload builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTPayload*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RMTPayload*)[[[RMTPayload builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTPayload*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTPayload*)[[[RMTPayload builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTPayloadBuilder*) builder {
+ return [[RMTPayloadBuilder alloc] init];
+}
++ (RMTPayloadBuilder*) builderWithPrototype:(RMTPayload*) prototype {
+ return [[RMTPayload builder] mergeFrom:prototype];
+}
+- (RMTPayloadBuilder*) builder {
+ return [RMTPayload builder];
+}
+- (RMTPayloadBuilder*) toBuilder {
+ return [RMTPayload builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasType) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"type", NSStringFromRMTPayloadType(self.type)];
+ }
+ if (self.hasBody) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"body", self.body];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RMTPayload class]]) {
+ return NO;
+ }
+ RMTPayload *otherMessage = other;
+ return
+ self.hasType == otherMessage.hasType &&
+ (!self.hasType || self.type == otherMessage.type) &&
+ self.hasBody == otherMessage.hasBody &&
+ (!self.hasBody || [self.body isEqual:otherMessage.body]) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasType) {
+ hashCode = hashCode * 31 + self.type;
+ }
+ if (self.hasBody) {
+ hashCode = hashCode * 31 + [self.body hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RMTPayloadBuilder()
+@property (strong) RMTPayload* resultPayload;
+@end
+
+@implementation RMTPayloadBuilder
+@synthesize resultPayload;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultPayload = [[RMTPayload alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultPayload;
+}
+- (RMTPayloadBuilder*) clear {
+ self.resultPayload = [[RMTPayload alloc] init];
+ return self;
+}
+- (RMTPayloadBuilder*) clone {
+ return [RMTPayload builderWithPrototype:resultPayload];
+}
+- (RMTPayload*) defaultInstance {
+ return [RMTPayload defaultInstance];
+}
+- (RMTPayload*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RMTPayload*) buildPartial {
+ RMTPayload* returnMe = resultPayload;
+ self.resultPayload = nil;
+ return returnMe;
+}
+- (RMTPayloadBuilder*) mergeFrom:(RMTPayload*) other {
+ if (other == [RMTPayload defaultInstance]) {
+ return self;
+ }
+ if (other.hasType) {
+ [self setType:other.type];
+ }
+ if (other.hasBody) {
+ [self setBody:other.body];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RMTPayloadBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTPayloadBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 8: {
+ RMTPayloadType value = (RMTPayloadType)[input readEnum];
+ if (RMTPayloadTypeIsValidValue(value)) {
+ [self setType:value];
+ } else {
+ [unknownFields mergeVarintField:1 value:value];
+ }
+ break;
+ }
+ case 18: {
+ [self setBody:[input readData]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasType {
+ return resultPayload.hasType;
+}
+- (RMTPayloadType) type {
+ return resultPayload.type;
+}
+- (RMTPayloadBuilder*) setType:(RMTPayloadType) value {
+ resultPayload.hasType = YES;
+ resultPayload.type = value;
+ return self;
+}
+- (RMTPayloadBuilder*) clearType {
+ resultPayload.hasType = NO;
+ resultPayload.type = RMTPayloadTypeCompressable;
+ return self;
+}
+- (BOOL) hasBody {
+ return resultPayload.hasBody;
+}
+- (NSData*) body {
+ return resultPayload.body;
+}
+- (RMTPayloadBuilder*) setBody:(NSData*) value {
+ resultPayload.hasBody = YES;
+ resultPayload.body = value;
+ return self;
+}
+- (RMTPayloadBuilder*) clearBody {
+ resultPayload.hasBody = NO;
+ resultPayload.body = [NSData data];
+ return self;
+}
+@end
+
+@interface RMTSimpleRequest ()
+@property RMTPayloadType responseType;
+@property SInt32 responseSize;
+@property (strong) RMTPayload* payload;
+@property BOOL fillUsername;
+@property BOOL fillOauthScope;
+@end
+
+@implementation RMTSimpleRequest
+
+- (BOOL) hasResponseType {
+ return !!hasResponseType_;
+}
+- (void) setHasResponseType:(BOOL) _value_ {
+ hasResponseType_ = !!_value_;
+}
+@synthesize responseType;
+- (BOOL) hasResponseSize {
+ return !!hasResponseSize_;
+}
+- (void) setHasResponseSize:(BOOL) _value_ {
+ hasResponseSize_ = !!_value_;
+}
+@synthesize responseSize;
+- (BOOL) hasPayload {
+ return !!hasPayload_;
+}
+- (void) setHasPayload:(BOOL) _value_ {
+ hasPayload_ = !!_value_;
+}
+@synthesize payload;
+- (BOOL) hasFillUsername {
+ return !!hasFillUsername_;
+}
+- (void) setHasFillUsername:(BOOL) _value_ {
+ hasFillUsername_ = !!_value_;
+}
+- (BOOL) fillUsername {
+ return !!fillUsername_;
+}
+- (void) setFillUsername:(BOOL) _value_ {
+ fillUsername_ = !!_value_;
+}
+- (BOOL) hasFillOauthScope {
+ return !!hasFillOauthScope_;
+}
+- (void) setHasFillOauthScope:(BOOL) _value_ {
+ hasFillOauthScope_ = !!_value_;
+}
+- (BOOL) fillOauthScope {
+ return !!fillOauthScope_;
+}
+- (void) setFillOauthScope:(BOOL) _value_ {
+ fillOauthScope_ = !!_value_;
+}
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.responseType = RMTPayloadTypeCompressable;
+ self.responseSize = 0;
+ self.payload = [RMTPayload defaultInstance];
+ self.fillUsername = NO;
+ self.fillOauthScope = NO;
+ }
+ return self;
+}
+static RMTSimpleRequest* defaultRMTSimpleRequestInstance = nil;
++ (void) initialize {
+ if (self == [RMTSimpleRequest class]) {
+ defaultRMTSimpleRequestInstance = [[RMTSimpleRequest alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRMTSimpleRequestInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRMTSimpleRequestInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasResponseType) {
+ [output writeEnum:1 value:self.responseType];
+ }
+ if (self.hasResponseSize) {
+ [output writeInt32:2 value:self.responseSize];
+ }
+ if (self.hasPayload) {
+ [output writeMessage:3 value:self.payload];
+ }
+ if (self.hasFillUsername) {
+ [output writeBool:4 value:self.fillUsername];
+ }
+ if (self.hasFillOauthScope) {
+ [output writeBool:5 value:self.fillOauthScope];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasResponseType) {
+ size_ += computeEnumSize(1, self.responseType);
+ }
+ if (self.hasResponseSize) {
+ size_ += computeInt32Size(2, self.responseSize);
+ }
+ if (self.hasPayload) {
+ size_ += computeMessageSize(3, self.payload);
+ }
+ if (self.hasFillUsername) {
+ size_ += computeBoolSize(4, self.fillUsername);
+ }
+ if (self.hasFillOauthScope) {
+ size_ += computeBoolSize(5, self.fillOauthScope);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RMTSimpleRequest*) parseFromData:(NSData*) data {
+ return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromData:data] build];
+}
++ (RMTSimpleRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleRequest*) parseFromInputStream:(NSInputStream*) input {
+ return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromInputStream:input] build];
+}
++ (RMTSimpleRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTSimpleRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleRequestBuilder*) builder {
+ return [[RMTSimpleRequestBuilder alloc] init];
+}
++ (RMTSimpleRequestBuilder*) builderWithPrototype:(RMTSimpleRequest*) prototype {
+ return [[RMTSimpleRequest builder] mergeFrom:prototype];
+}
+- (RMTSimpleRequestBuilder*) builder {
+ return [RMTSimpleRequest builder];
+}
+- (RMTSimpleRequestBuilder*) toBuilder {
+ return [RMTSimpleRequest builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasResponseType) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"responseType", NSStringFromRMTPayloadType(self.responseType)];
+ }
+ if (self.hasResponseSize) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"responseSize", [NSNumber numberWithInteger:self.responseSize]];
+ }
+ if (self.hasPayload) {
+ [output appendFormat:@"%@%@ {\n", indent, @"payload"];
+ [self.payload writeDescriptionTo:output
+ withIndent:[NSString stringWithFormat:@"%@ ", indent]];
+ [output appendFormat:@"%@}\n", indent];
+ }
+ if (self.hasFillUsername) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"fillUsername", [NSNumber numberWithBool:self.fillUsername]];
+ }
+ if (self.hasFillOauthScope) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"fillOauthScope", [NSNumber numberWithBool:self.fillOauthScope]];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RMTSimpleRequest class]]) {
+ return NO;
+ }
+ RMTSimpleRequest *otherMessage = other;
+ return
+ self.hasResponseType == otherMessage.hasResponseType &&
+ (!self.hasResponseType || self.responseType == otherMessage.responseType) &&
+ self.hasResponseSize == otherMessage.hasResponseSize &&
+ (!self.hasResponseSize || self.responseSize == otherMessage.responseSize) &&
+ self.hasPayload == otherMessage.hasPayload &&
+ (!self.hasPayload || [self.payload isEqual:otherMessage.payload]) &&
+ self.hasFillUsername == otherMessage.hasFillUsername &&
+ (!self.hasFillUsername || self.fillUsername == otherMessage.fillUsername) &&
+ self.hasFillOauthScope == otherMessage.hasFillOauthScope &&
+ (!self.hasFillOauthScope || self.fillOauthScope == otherMessage.fillOauthScope) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasResponseType) {
+ hashCode = hashCode * 31 + self.responseType;
+ }
+ if (self.hasResponseSize) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.responseSize] hash];
+ }
+ if (self.hasPayload) {
+ hashCode = hashCode * 31 + [self.payload hash];
+ }
+ if (self.hasFillUsername) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithBool:self.fillUsername] hash];
+ }
+ if (self.hasFillOauthScope) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithBool:self.fillOauthScope] hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RMTSimpleRequestBuilder()
+@property (strong) RMTSimpleRequest* resultSimpleRequest;
+@end
+
+@implementation RMTSimpleRequestBuilder
+@synthesize resultSimpleRequest;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultSimpleRequest = [[RMTSimpleRequest alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultSimpleRequest;
+}
+- (RMTSimpleRequestBuilder*) clear {
+ self.resultSimpleRequest = [[RMTSimpleRequest alloc] init];
+ return self;
+}
+- (RMTSimpleRequestBuilder*) clone {
+ return [RMTSimpleRequest builderWithPrototype:resultSimpleRequest];
+}
+- (RMTSimpleRequest*) defaultInstance {
+ return [RMTSimpleRequest defaultInstance];
+}
+- (RMTSimpleRequest*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RMTSimpleRequest*) buildPartial {
+ RMTSimpleRequest* returnMe = resultSimpleRequest;
+ self.resultSimpleRequest = nil;
+ return returnMe;
+}
+- (RMTSimpleRequestBuilder*) mergeFrom:(RMTSimpleRequest*) other {
+ if (other == [RMTSimpleRequest defaultInstance]) {
+ return self;
+ }
+ if (other.hasResponseType) {
+ [self setResponseType:other.responseType];
+ }
+ if (other.hasResponseSize) {
+ [self setResponseSize:other.responseSize];
+ }
+ if (other.hasPayload) {
+ [self mergePayload:other.payload];
+ }
+ if (other.hasFillUsername) {
+ [self setFillUsername:other.fillUsername];
+ }
+ if (other.hasFillOauthScope) {
+ [self setFillOauthScope:other.fillOauthScope];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RMTSimpleRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTSimpleRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 8: {
+ RMTPayloadType value = (RMTPayloadType)[input readEnum];
+ if (RMTPayloadTypeIsValidValue(value)) {
+ [self setResponseType:value];
+ } else {
+ [unknownFields mergeVarintField:1 value:value];
+ }
+ break;
+ }
+ case 16: {
+ [self setResponseSize:[input readInt32]];
+ break;
+ }
+ case 26: {
+ RMTPayloadBuilder* subBuilder = [RMTPayload builder];
+ if (self.hasPayload) {
+ [subBuilder mergeFrom:self.payload];
+ }
+ [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+ [self setPayload:[subBuilder buildPartial]];
+ break;
+ }
+ case 32: {
+ [self setFillUsername:[input readBool]];
+ break;
+ }
+ case 40: {
+ [self setFillOauthScope:[input readBool]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasResponseType {
+ return resultSimpleRequest.hasResponseType;
+}
+- (RMTPayloadType) responseType {
+ return resultSimpleRequest.responseType;
+}
+- (RMTSimpleRequestBuilder*) setResponseType:(RMTPayloadType) value {
+ resultSimpleRequest.hasResponseType = YES;
+ resultSimpleRequest.responseType = value;
+ return self;
+}
+- (RMTSimpleRequestBuilder*) clearResponseType {
+ resultSimpleRequest.hasResponseType = NO;
+ resultSimpleRequest.responseType = RMTPayloadTypeCompressable;
+ return self;
+}
+- (BOOL) hasResponseSize {
+ return resultSimpleRequest.hasResponseSize;
+}
+- (SInt32) responseSize {
+ return resultSimpleRequest.responseSize;
+}
+- (RMTSimpleRequestBuilder*) setResponseSize:(SInt32) value {
+ resultSimpleRequest.hasResponseSize = YES;
+ resultSimpleRequest.responseSize = value;
+ return self;
+}
+- (RMTSimpleRequestBuilder*) clearResponseSize {
+ resultSimpleRequest.hasResponseSize = NO;
+ resultSimpleRequest.responseSize = 0;
+ return self;
+}
+- (BOOL) hasPayload {
+ return resultSimpleRequest.hasPayload;
+}
+- (RMTPayload*) payload {
+ return resultSimpleRequest.payload;
+}
+- (RMTSimpleRequestBuilder*) setPayload:(RMTPayload*) value {
+ resultSimpleRequest.hasPayload = YES;
+ resultSimpleRequest.payload = value;
+ return self;
+}
+- (RMTSimpleRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue {
+ return [self setPayload:[builderForValue build]];
+}
+- (RMTSimpleRequestBuilder*) mergePayload:(RMTPayload*) value {
+ if (resultSimpleRequest.hasPayload &&
+ resultSimpleRequest.payload != [RMTPayload defaultInstance]) {
+ resultSimpleRequest.payload =
+ [[[RMTPayload builderWithPrototype:resultSimpleRequest.payload] mergeFrom:value] buildPartial];
+ } else {
+ resultSimpleRequest.payload = value;
+ }
+ resultSimpleRequest.hasPayload = YES;
+ return self;
+}
+- (RMTSimpleRequestBuilder*) clearPayload {
+ resultSimpleRequest.hasPayload = NO;
+ resultSimpleRequest.payload = [RMTPayload defaultInstance];
+ return self;
+}
+- (BOOL) hasFillUsername {
+ return resultSimpleRequest.hasFillUsername;
+}
+- (BOOL) fillUsername {
+ return resultSimpleRequest.fillUsername;
+}
+- (RMTSimpleRequestBuilder*) setFillUsername:(BOOL) value {
+ resultSimpleRequest.hasFillUsername = YES;
+ resultSimpleRequest.fillUsername = value;
+ return self;
+}
+- (RMTSimpleRequestBuilder*) clearFillUsername {
+ resultSimpleRequest.hasFillUsername = NO;
+ resultSimpleRequest.fillUsername = NO;
+ return self;
+}
+- (BOOL) hasFillOauthScope {
+ return resultSimpleRequest.hasFillOauthScope;
+}
+- (BOOL) fillOauthScope {
+ return resultSimpleRequest.fillOauthScope;
+}
+- (RMTSimpleRequestBuilder*) setFillOauthScope:(BOOL) value {
+ resultSimpleRequest.hasFillOauthScope = YES;
+ resultSimpleRequest.fillOauthScope = value;
+ return self;
+}
+- (RMTSimpleRequestBuilder*) clearFillOauthScope {
+ resultSimpleRequest.hasFillOauthScope = NO;
+ resultSimpleRequest.fillOauthScope = NO;
+ return self;
+}
+@end
+
+@interface RMTSimpleResponse ()
+@property (strong) RMTPayload* payload;
+@property (strong) NSString* username;
+@property (strong) NSString* oauthScope;
+@end
+
+@implementation RMTSimpleResponse
+
+- (BOOL) hasPayload {
+ return !!hasPayload_;
+}
+- (void) setHasPayload:(BOOL) _value_ {
+ hasPayload_ = !!_value_;
+}
+@synthesize payload;
+- (BOOL) hasUsername {
+ return !!hasUsername_;
+}
+- (void) setHasUsername:(BOOL) _value_ {
+ hasUsername_ = !!_value_;
+}
+@synthesize username;
+- (BOOL) hasOauthScope {
+ return !!hasOauthScope_;
+}
+- (void) setHasOauthScope:(BOOL) _value_ {
+ hasOauthScope_ = !!_value_;
+}
+@synthesize oauthScope;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.payload = [RMTPayload defaultInstance];
+ self.username = @"";
+ self.oauthScope = @"";
+ }
+ return self;
+}
+static RMTSimpleResponse* defaultRMTSimpleResponseInstance = nil;
++ (void) initialize {
+ if (self == [RMTSimpleResponse class]) {
+ defaultRMTSimpleResponseInstance = [[RMTSimpleResponse alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRMTSimpleResponseInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRMTSimpleResponseInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasPayload) {
+ [output writeMessage:1 value:self.payload];
+ }
+ if (self.hasUsername) {
+ [output writeString:2 value:self.username];
+ }
+ if (self.hasOauthScope) {
+ [output writeString:3 value:self.oauthScope];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasPayload) {
+ size_ += computeMessageSize(1, self.payload);
+ }
+ if (self.hasUsername) {
+ size_ += computeStringSize(2, self.username);
+ }
+ if (self.hasOauthScope) {
+ size_ += computeStringSize(3, self.oauthScope);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RMTSimpleResponse*) parseFromData:(NSData*) data {
+ return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromData:data] build];
+}
++ (RMTSimpleResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleResponse*) parseFromInputStream:(NSInputStream*) input {
+ return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromInputStream:input] build];
+}
++ (RMTSimpleResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTSimpleResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleResponseBuilder*) builder {
+ return [[RMTSimpleResponseBuilder alloc] init];
+}
++ (RMTSimpleResponseBuilder*) builderWithPrototype:(RMTSimpleResponse*) prototype {
+ return [[RMTSimpleResponse builder] mergeFrom:prototype];
+}
+- (RMTSimpleResponseBuilder*) builder {
+ return [RMTSimpleResponse builder];
+}
+- (RMTSimpleResponseBuilder*) toBuilder {
+ return [RMTSimpleResponse builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasPayload) {
+ [output appendFormat:@"%@%@ {\n", indent, @"payload"];
+ [self.payload writeDescriptionTo:output
+ withIndent:[NSString stringWithFormat:@"%@ ", indent]];
+ [output appendFormat:@"%@}\n", indent];
+ }
+ if (self.hasUsername) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"username", self.username];
+ }
+ if (self.hasOauthScope) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"oauthScope", self.oauthScope];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RMTSimpleResponse class]]) {
+ return NO;
+ }
+ RMTSimpleResponse *otherMessage = other;
+ return
+ self.hasPayload == otherMessage.hasPayload &&
+ (!self.hasPayload || [self.payload isEqual:otherMessage.payload]) &&
+ self.hasUsername == otherMessage.hasUsername &&
+ (!self.hasUsername || [self.username isEqual:otherMessage.username]) &&
+ self.hasOauthScope == otherMessage.hasOauthScope &&
+ (!self.hasOauthScope || [self.oauthScope isEqual:otherMessage.oauthScope]) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasPayload) {
+ hashCode = hashCode * 31 + [self.payload hash];
+ }
+ if (self.hasUsername) {
+ hashCode = hashCode * 31 + [self.username hash];
+ }
+ if (self.hasOauthScope) {
+ hashCode = hashCode * 31 + [self.oauthScope hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RMTSimpleResponseBuilder()
+@property (strong) RMTSimpleResponse* resultSimpleResponse;
+@end
+
+@implementation RMTSimpleResponseBuilder
+@synthesize resultSimpleResponse;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultSimpleResponse = [[RMTSimpleResponse alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultSimpleResponse;
+}
+- (RMTSimpleResponseBuilder*) clear {
+ self.resultSimpleResponse = [[RMTSimpleResponse alloc] init];
+ return self;
+}
+- (RMTSimpleResponseBuilder*) clone {
+ return [RMTSimpleResponse builderWithPrototype:resultSimpleResponse];
+}
+- (RMTSimpleResponse*) defaultInstance {
+ return [RMTSimpleResponse defaultInstance];
+}
+- (RMTSimpleResponse*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RMTSimpleResponse*) buildPartial {
+ RMTSimpleResponse* returnMe = resultSimpleResponse;
+ self.resultSimpleResponse = nil;
+ return returnMe;
+}
+- (RMTSimpleResponseBuilder*) mergeFrom:(RMTSimpleResponse*) other {
+ if (other == [RMTSimpleResponse defaultInstance]) {
+ return self;
+ }
+ if (other.hasPayload) {
+ [self mergePayload:other.payload];
+ }
+ if (other.hasUsername) {
+ [self setUsername:other.username];
+ }
+ if (other.hasOauthScope) {
+ [self setOauthScope:other.oauthScope];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RMTSimpleResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTSimpleResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 10: {
+ RMTPayloadBuilder* subBuilder = [RMTPayload builder];
+ if (self.hasPayload) {
+ [subBuilder mergeFrom:self.payload];
+ }
+ [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+ [self setPayload:[subBuilder buildPartial]];
+ break;
+ }
+ case 18: {
+ [self setUsername:[input readString]];
+ break;
+ }
+ case 26: {
+ [self setOauthScope:[input readString]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasPayload {
+ return resultSimpleResponse.hasPayload;
+}
+- (RMTPayload*) payload {
+ return resultSimpleResponse.payload;
+}
+- (RMTSimpleResponseBuilder*) setPayload:(RMTPayload*) value {
+ resultSimpleResponse.hasPayload = YES;
+ resultSimpleResponse.payload = value;
+ return self;
+}
+- (RMTSimpleResponseBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue {
+ return [self setPayload:[builderForValue build]];
+}
+- (RMTSimpleResponseBuilder*) mergePayload:(RMTPayload*) value {
+ if (resultSimpleResponse.hasPayload &&
+ resultSimpleResponse.payload != [RMTPayload defaultInstance]) {
+ resultSimpleResponse.payload =
+ [[[RMTPayload builderWithPrototype:resultSimpleResponse.payload] mergeFrom:value] buildPartial];
+ } else {
+ resultSimpleResponse.payload = value;
+ }
+ resultSimpleResponse.hasPayload = YES;
+ return self;
+}
+- (RMTSimpleResponseBuilder*) clearPayload {
+ resultSimpleResponse.hasPayload = NO;
+ resultSimpleResponse.payload = [RMTPayload defaultInstance];
+ return self;
+}
+- (BOOL) hasUsername {
+ return resultSimpleResponse.hasUsername;
+}
+- (NSString*) username {
+ return resultSimpleResponse.username;
+}
+- (RMTSimpleResponseBuilder*) setUsername:(NSString*) value {
+ resultSimpleResponse.hasUsername = YES;
+ resultSimpleResponse.username = value;
+ return self;
+}
+- (RMTSimpleResponseBuilder*) clearUsername {
+ resultSimpleResponse.hasUsername = NO;
+ resultSimpleResponse.username = @"";
+ return self;
+}
+- (BOOL) hasOauthScope {
+ return resultSimpleResponse.hasOauthScope;
+}
+- (NSString*) oauthScope {
+ return resultSimpleResponse.oauthScope;
+}
+- (RMTSimpleResponseBuilder*) setOauthScope:(NSString*) value {
+ resultSimpleResponse.hasOauthScope = YES;
+ resultSimpleResponse.oauthScope = value;
+ return self;
+}
+- (RMTSimpleResponseBuilder*) clearOauthScope {
+ resultSimpleResponse.hasOauthScope = NO;
+ resultSimpleResponse.oauthScope = @"";
+ return self;
+}
+@end
+
+@interface RMTStreamingInputCallRequest ()
+@property (strong) RMTPayload* payload;
+@end
+
+@implementation RMTStreamingInputCallRequest
+
+- (BOOL) hasPayload {
+ return !!hasPayload_;
+}
+- (void) setHasPayload:(BOOL) _value_ {
+ hasPayload_ = !!_value_;
+}
+@synthesize payload;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.payload = [RMTPayload defaultInstance];
+ }
+ return self;
+}
+static RMTStreamingInputCallRequest* defaultRMTStreamingInputCallRequestInstance = nil;
++ (void) initialize {
+ if (self == [RMTStreamingInputCallRequest class]) {
+ defaultRMTStreamingInputCallRequestInstance = [[RMTStreamingInputCallRequest alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRMTStreamingInputCallRequestInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRMTStreamingInputCallRequestInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasPayload) {
+ [output writeMessage:1 value:self.payload];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasPayload) {
+ size_ += computeMessageSize(1, self.payload);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RMTStreamingInputCallRequest*) parseFromData:(NSData*) data {
+ return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromData:data] build];
+}
++ (RMTStreamingInputCallRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallRequest*) parseFromInputStream:(NSInputStream*) input {
+ return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromInputStream:input] build];
+}
++ (RMTStreamingInputCallRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTStreamingInputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallRequestBuilder*) builder {
+ return [[RMTStreamingInputCallRequestBuilder alloc] init];
+}
++ (RMTStreamingInputCallRequestBuilder*) builderWithPrototype:(RMTStreamingInputCallRequest*) prototype {
+ return [[RMTStreamingInputCallRequest builder] mergeFrom:prototype];
+}
+- (RMTStreamingInputCallRequestBuilder*) builder {
+ return [RMTStreamingInputCallRequest builder];
+}
+- (RMTStreamingInputCallRequestBuilder*) toBuilder {
+ return [RMTStreamingInputCallRequest builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasPayload) {
+ [output appendFormat:@"%@%@ {\n", indent, @"payload"];
+ [self.payload writeDescriptionTo:output
+ withIndent:[NSString stringWithFormat:@"%@ ", indent]];
+ [output appendFormat:@"%@}\n", indent];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RMTStreamingInputCallRequest class]]) {
+ return NO;
+ }
+ RMTStreamingInputCallRequest *otherMessage = other;
+ return
+ self.hasPayload == otherMessage.hasPayload &&
+ (!self.hasPayload || [self.payload isEqual:otherMessage.payload]) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasPayload) {
+ hashCode = hashCode * 31 + [self.payload hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RMTStreamingInputCallRequestBuilder()
+@property (strong) RMTStreamingInputCallRequest* resultStreamingInputCallRequest;
+@end
+
+@implementation RMTStreamingInputCallRequestBuilder
+@synthesize resultStreamingInputCallRequest;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultStreamingInputCallRequest = [[RMTStreamingInputCallRequest alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultStreamingInputCallRequest;
+}
+- (RMTStreamingInputCallRequestBuilder*) clear {
+ self.resultStreamingInputCallRequest = [[RMTStreamingInputCallRequest alloc] init];
+ return self;
+}
+- (RMTStreamingInputCallRequestBuilder*) clone {
+ return [RMTStreamingInputCallRequest builderWithPrototype:resultStreamingInputCallRequest];
+}
+- (RMTStreamingInputCallRequest*) defaultInstance {
+ return [RMTStreamingInputCallRequest defaultInstance];
+}
+- (RMTStreamingInputCallRequest*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RMTStreamingInputCallRequest*) buildPartial {
+ RMTStreamingInputCallRequest* returnMe = resultStreamingInputCallRequest;
+ self.resultStreamingInputCallRequest = nil;
+ return returnMe;
+}
+- (RMTStreamingInputCallRequestBuilder*) mergeFrom:(RMTStreamingInputCallRequest*) other {
+ if (other == [RMTStreamingInputCallRequest defaultInstance]) {
+ return self;
+ }
+ if (other.hasPayload) {
+ [self mergePayload:other.payload];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RMTStreamingInputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTStreamingInputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 10: {
+ RMTPayloadBuilder* subBuilder = [RMTPayload builder];
+ if (self.hasPayload) {
+ [subBuilder mergeFrom:self.payload];
+ }
+ [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+ [self setPayload:[subBuilder buildPartial]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasPayload {
+ return resultStreamingInputCallRequest.hasPayload;
+}
+- (RMTPayload*) payload {
+ return resultStreamingInputCallRequest.payload;
+}
+- (RMTStreamingInputCallRequestBuilder*) setPayload:(RMTPayload*) value {
+ resultStreamingInputCallRequest.hasPayload = YES;
+ resultStreamingInputCallRequest.payload = value;
+ return self;
+}
+- (RMTStreamingInputCallRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue {
+ return [self setPayload:[builderForValue build]];
+}
+- (RMTStreamingInputCallRequestBuilder*) mergePayload:(RMTPayload*) value {
+ if (resultStreamingInputCallRequest.hasPayload &&
+ resultStreamingInputCallRequest.payload != [RMTPayload defaultInstance]) {
+ resultStreamingInputCallRequest.payload =
+ [[[RMTPayload builderWithPrototype:resultStreamingInputCallRequest.payload] mergeFrom:value] buildPartial];
+ } else {
+ resultStreamingInputCallRequest.payload = value;
+ }
+ resultStreamingInputCallRequest.hasPayload = YES;
+ return self;
+}
+- (RMTStreamingInputCallRequestBuilder*) clearPayload {
+ resultStreamingInputCallRequest.hasPayload = NO;
+ resultStreamingInputCallRequest.payload = [RMTPayload defaultInstance];
+ return self;
+}
+@end
+
+@interface RMTStreamingInputCallResponse ()
+@property SInt32 aggregatedPayloadSize;
+@end
+
+@implementation RMTStreamingInputCallResponse
+
+- (BOOL) hasAggregatedPayloadSize {
+ return !!hasAggregatedPayloadSize_;
+}
+- (void) setHasAggregatedPayloadSize:(BOOL) _value_ {
+ hasAggregatedPayloadSize_ = !!_value_;
+}
+@synthesize aggregatedPayloadSize;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.aggregatedPayloadSize = 0;
+ }
+ return self;
+}
+static RMTStreamingInputCallResponse* defaultRMTStreamingInputCallResponseInstance = nil;
++ (void) initialize {
+ if (self == [RMTStreamingInputCallResponse class]) {
+ defaultRMTStreamingInputCallResponseInstance = [[RMTStreamingInputCallResponse alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRMTStreamingInputCallResponseInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRMTStreamingInputCallResponseInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasAggregatedPayloadSize) {
+ [output writeInt32:1 value:self.aggregatedPayloadSize];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasAggregatedPayloadSize) {
+ size_ += computeInt32Size(1, self.aggregatedPayloadSize);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RMTStreamingInputCallResponse*) parseFromData:(NSData*) data {
+ return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromData:data] build];
+}
++ (RMTStreamingInputCallResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallResponse*) parseFromInputStream:(NSInputStream*) input {
+ return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromInputStream:input] build];
+}
++ (RMTStreamingInputCallResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTStreamingInputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallResponseBuilder*) builder {
+ return [[RMTStreamingInputCallResponseBuilder alloc] init];
+}
++ (RMTStreamingInputCallResponseBuilder*) builderWithPrototype:(RMTStreamingInputCallResponse*) prototype {
+ return [[RMTStreamingInputCallResponse builder] mergeFrom:prototype];
+}
+- (RMTStreamingInputCallResponseBuilder*) builder {
+ return [RMTStreamingInputCallResponse builder];
+}
+- (RMTStreamingInputCallResponseBuilder*) toBuilder {
+ return [RMTStreamingInputCallResponse builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasAggregatedPayloadSize) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"aggregatedPayloadSize", [NSNumber numberWithInteger:self.aggregatedPayloadSize]];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RMTStreamingInputCallResponse class]]) {
+ return NO;
+ }
+ RMTStreamingInputCallResponse *otherMessage = other;
+ return
+ self.hasAggregatedPayloadSize == otherMessage.hasAggregatedPayloadSize &&
+ (!self.hasAggregatedPayloadSize || self.aggregatedPayloadSize == otherMessage.aggregatedPayloadSize) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasAggregatedPayloadSize) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.aggregatedPayloadSize] hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RMTStreamingInputCallResponseBuilder()
+@property (strong) RMTStreamingInputCallResponse* resultStreamingInputCallResponse;
+@end
+
+@implementation RMTStreamingInputCallResponseBuilder
+@synthesize resultStreamingInputCallResponse;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultStreamingInputCallResponse = [[RMTStreamingInputCallResponse alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultStreamingInputCallResponse;
+}
+- (RMTStreamingInputCallResponseBuilder*) clear {
+ self.resultStreamingInputCallResponse = [[RMTStreamingInputCallResponse alloc] init];
+ return self;
+}
+- (RMTStreamingInputCallResponseBuilder*) clone {
+ return [RMTStreamingInputCallResponse builderWithPrototype:resultStreamingInputCallResponse];
+}
+- (RMTStreamingInputCallResponse*) defaultInstance {
+ return [RMTStreamingInputCallResponse defaultInstance];
+}
+- (RMTStreamingInputCallResponse*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RMTStreamingInputCallResponse*) buildPartial {
+ RMTStreamingInputCallResponse* returnMe = resultStreamingInputCallResponse;
+ self.resultStreamingInputCallResponse = nil;
+ return returnMe;
+}
+- (RMTStreamingInputCallResponseBuilder*) mergeFrom:(RMTStreamingInputCallResponse*) other {
+ if (other == [RMTStreamingInputCallResponse defaultInstance]) {
+ return self;
+ }
+ if (other.hasAggregatedPayloadSize) {
+ [self setAggregatedPayloadSize:other.aggregatedPayloadSize];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RMTStreamingInputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTStreamingInputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 8: {
+ [self setAggregatedPayloadSize:[input readInt32]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasAggregatedPayloadSize {
+ return resultStreamingInputCallResponse.hasAggregatedPayloadSize;
+}
+- (SInt32) aggregatedPayloadSize {
+ return resultStreamingInputCallResponse.aggregatedPayloadSize;
+}
+- (RMTStreamingInputCallResponseBuilder*) setAggregatedPayloadSize:(SInt32) value {
+ resultStreamingInputCallResponse.hasAggregatedPayloadSize = YES;
+ resultStreamingInputCallResponse.aggregatedPayloadSize = value;
+ return self;
+}
+- (RMTStreamingInputCallResponseBuilder*) clearAggregatedPayloadSize {
+ resultStreamingInputCallResponse.hasAggregatedPayloadSize = NO;
+ resultStreamingInputCallResponse.aggregatedPayloadSize = 0;
+ return self;
+}
+@end
+
+@interface RMTResponseParameters ()
+@property SInt32 size;
+@property SInt32 intervalUs;
+@end
+
+@implementation RMTResponseParameters
+
+- (BOOL) hasSize {
+ return !!hasSize_;
+}
+- (void) setHasSize:(BOOL) _value_ {
+ hasSize_ = !!_value_;
+}
+@synthesize size;
+- (BOOL) hasIntervalUs {
+ return !!hasIntervalUs_;
+}
+- (void) setHasIntervalUs:(BOOL) _value_ {
+ hasIntervalUs_ = !!_value_;
+}
+@synthesize intervalUs;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.size = 0;
+ self.intervalUs = 0;
+ }
+ return self;
+}
+static RMTResponseParameters* defaultRMTResponseParametersInstance = nil;
++ (void) initialize {
+ if (self == [RMTResponseParameters class]) {
+ defaultRMTResponseParametersInstance = [[RMTResponseParameters alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRMTResponseParametersInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRMTResponseParametersInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasSize) {
+ [output writeInt32:1 value:self.size];
+ }
+ if (self.hasIntervalUs) {
+ [output writeInt32:2 value:self.intervalUs];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasSize) {
+ size_ += computeInt32Size(1, self.size);
+ }
+ if (self.hasIntervalUs) {
+ size_ += computeInt32Size(2, self.intervalUs);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RMTResponseParameters*) parseFromData:(NSData*) data {
+ return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromData:data] build];
+}
++ (RMTResponseParameters*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTResponseParameters*) parseFromInputStream:(NSInputStream*) input {
+ return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromInputStream:input] build];
+}
++ (RMTResponseParameters*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTResponseParameters*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTResponseParameters*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTResponseParametersBuilder*) builder {
+ return [[RMTResponseParametersBuilder alloc] init];
+}
++ (RMTResponseParametersBuilder*) builderWithPrototype:(RMTResponseParameters*) prototype {
+ return [[RMTResponseParameters builder] mergeFrom:prototype];
+}
+- (RMTResponseParametersBuilder*) builder {
+ return [RMTResponseParameters builder];
+}
+- (RMTResponseParametersBuilder*) toBuilder {
+ return [RMTResponseParameters builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasSize) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"size", [NSNumber numberWithInteger:self.size]];
+ }
+ if (self.hasIntervalUs) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"intervalUs", [NSNumber numberWithInteger:self.intervalUs]];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RMTResponseParameters class]]) {
+ return NO;
+ }
+ RMTResponseParameters *otherMessage = other;
+ return
+ self.hasSize == otherMessage.hasSize &&
+ (!self.hasSize || self.size == otherMessage.size) &&
+ self.hasIntervalUs == otherMessage.hasIntervalUs &&
+ (!self.hasIntervalUs || self.intervalUs == otherMessage.intervalUs) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasSize) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.size] hash];
+ }
+ if (self.hasIntervalUs) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.intervalUs] hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RMTResponseParametersBuilder()
+@property (strong) RMTResponseParameters* resultResponseParameters;
+@end
+
+@implementation RMTResponseParametersBuilder
+@synthesize resultResponseParameters;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultResponseParameters = [[RMTResponseParameters alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultResponseParameters;
+}
+- (RMTResponseParametersBuilder*) clear {
+ self.resultResponseParameters = [[RMTResponseParameters alloc] init];
+ return self;
+}
+- (RMTResponseParametersBuilder*) clone {
+ return [RMTResponseParameters builderWithPrototype:resultResponseParameters];
+}
+- (RMTResponseParameters*) defaultInstance {
+ return [RMTResponseParameters defaultInstance];
+}
+- (RMTResponseParameters*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RMTResponseParameters*) buildPartial {
+ RMTResponseParameters* returnMe = resultResponseParameters;
+ self.resultResponseParameters = nil;
+ return returnMe;
+}
+- (RMTResponseParametersBuilder*) mergeFrom:(RMTResponseParameters*) other {
+ if (other == [RMTResponseParameters defaultInstance]) {
+ return self;
+ }
+ if (other.hasSize) {
+ [self setSize:other.size];
+ }
+ if (other.hasIntervalUs) {
+ [self setIntervalUs:other.intervalUs];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RMTResponseParametersBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTResponseParametersBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 8: {
+ [self setSize:[input readInt32]];
+ break;
+ }
+ case 16: {
+ [self setIntervalUs:[input readInt32]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasSize {
+ return resultResponseParameters.hasSize;
+}
+- (SInt32) size {
+ return resultResponseParameters.size;
+}
+- (RMTResponseParametersBuilder*) setSize:(SInt32) value {
+ resultResponseParameters.hasSize = YES;
+ resultResponseParameters.size = value;
+ return self;
+}
+- (RMTResponseParametersBuilder*) clearSize {
+ resultResponseParameters.hasSize = NO;
+ resultResponseParameters.size = 0;
+ return self;
+}
+- (BOOL) hasIntervalUs {
+ return resultResponseParameters.hasIntervalUs;
+}
+- (SInt32) intervalUs {
+ return resultResponseParameters.intervalUs;
+}
+- (RMTResponseParametersBuilder*) setIntervalUs:(SInt32) value {
+ resultResponseParameters.hasIntervalUs = YES;
+ resultResponseParameters.intervalUs = value;
+ return self;
+}
+- (RMTResponseParametersBuilder*) clearIntervalUs {
+ resultResponseParameters.hasIntervalUs = NO;
+ resultResponseParameters.intervalUs = 0;
+ return self;
+}
+@end
+
+@interface RMTStreamingOutputCallRequest ()
+@property RMTPayloadType responseType;
+@property (strong) NSMutableArray * responseParametersArray;
+@property (strong) RMTPayload* payload;
+@end
+
+@implementation RMTStreamingOutputCallRequest
+
+- (BOOL) hasResponseType {
+ return !!hasResponseType_;
+}
+- (void) setHasResponseType:(BOOL) _value_ {
+ hasResponseType_ = !!_value_;
+}
+@synthesize responseType;
+@synthesize responseParametersArray;
+@dynamic responseParameters;
+- (BOOL) hasPayload {
+ return !!hasPayload_;
+}
+- (void) setHasPayload:(BOOL) _value_ {
+ hasPayload_ = !!_value_;
+}
+@synthesize payload;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.responseType = RMTPayloadTypeCompressable;
+ self.payload = [RMTPayload defaultInstance];
+ }
+ return self;
+}
+static RMTStreamingOutputCallRequest* defaultRMTStreamingOutputCallRequestInstance = nil;
++ (void) initialize {
+ if (self == [RMTStreamingOutputCallRequest class]) {
+ defaultRMTStreamingOutputCallRequestInstance = [[RMTStreamingOutputCallRequest alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRMTStreamingOutputCallRequestInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRMTStreamingOutputCallRequestInstance;
+}
+- (NSArray *)responseParameters {
+ return responseParametersArray;
+}
+- (RMTResponseParameters*)responseParametersAtIndex:(NSUInteger)index {
+ return [responseParametersArray objectAtIndex:index];
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasResponseType) {
+ [output writeEnum:1 value:self.responseType];
+ }
+ [self.responseParametersArray enumerateObjectsUsingBlock:^(RMTResponseParameters *element, NSUInteger idx, BOOL *stop) {
+ [output writeMessage:2 value:element];
+ }];
+ if (self.hasPayload) {
+ [output writeMessage:3 value:self.payload];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasResponseType) {
+ size_ += computeEnumSize(1, self.responseType);
+ }
+ [self.responseParametersArray enumerateObjectsUsingBlock:^(RMTResponseParameters *element, NSUInteger idx, BOOL *stop) {
+ size_ += computeMessageSize(2, element);
+ }];
+ if (self.hasPayload) {
+ size_ += computeMessageSize(3, self.payload);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RMTStreamingOutputCallRequest*) parseFromData:(NSData*) data {
+ return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromData:data] build];
+}
++ (RMTStreamingOutputCallRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallRequest*) parseFromInputStream:(NSInputStream*) input {
+ return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromInputStream:input] build];
+}
++ (RMTStreamingOutputCallRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTStreamingOutputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallRequestBuilder*) builder {
+ return [[RMTStreamingOutputCallRequestBuilder alloc] init];
+}
++ (RMTStreamingOutputCallRequestBuilder*) builderWithPrototype:(RMTStreamingOutputCallRequest*) prototype {
+ return [[RMTStreamingOutputCallRequest builder] mergeFrom:prototype];
+}
+- (RMTStreamingOutputCallRequestBuilder*) builder {
+ return [RMTStreamingOutputCallRequest builder];
+}
+- (RMTStreamingOutputCallRequestBuilder*) toBuilder {
+ return [RMTStreamingOutputCallRequest builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasResponseType) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"responseType", NSStringFromRMTPayloadType(self.responseType)];
+ }
+ [self.responseParametersArray enumerateObjectsUsingBlock:^(RMTResponseParameters *element, NSUInteger idx, BOOL *stop) {
+ [output appendFormat:@"%@%@ {\n", indent, @"responseParameters"];
+ [element writeDescriptionTo:output
+ withIndent:[NSString stringWithFormat:@"%@ ", indent]];
+ [output appendFormat:@"%@}\n", indent];
+ }];
+ if (self.hasPayload) {
+ [output appendFormat:@"%@%@ {\n", indent, @"payload"];
+ [self.payload writeDescriptionTo:output
+ withIndent:[NSString stringWithFormat:@"%@ ", indent]];
+ [output appendFormat:@"%@}\n", indent];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RMTStreamingOutputCallRequest class]]) {
+ return NO;
+ }
+ RMTStreamingOutputCallRequest *otherMessage = other;
+ return
+ self.hasResponseType == otherMessage.hasResponseType &&
+ (!self.hasResponseType || self.responseType == otherMessage.responseType) &&
+ [self.responseParametersArray isEqualToArray:otherMessage.responseParametersArray] &&
+ self.hasPayload == otherMessage.hasPayload &&
+ (!self.hasPayload || [self.payload isEqual:otherMessage.payload]) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasResponseType) {
+ hashCode = hashCode * 31 + self.responseType;
+ }
+ [self.responseParametersArray enumerateObjectsUsingBlock:^(RMTResponseParameters *element, NSUInteger idx, BOOL *stop) {
+ hashCode = hashCode * 31 + [element hash];
+ }];
+ if (self.hasPayload) {
+ hashCode = hashCode * 31 + [self.payload hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RMTStreamingOutputCallRequestBuilder()
+@property (strong) RMTStreamingOutputCallRequest* resultStreamingOutputCallRequest;
+@end
+
+@implementation RMTStreamingOutputCallRequestBuilder
+@synthesize resultStreamingOutputCallRequest;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultStreamingOutputCallRequest = [[RMTStreamingOutputCallRequest alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultStreamingOutputCallRequest;
+}
+- (RMTStreamingOutputCallRequestBuilder*) clear {
+ self.resultStreamingOutputCallRequest = [[RMTStreamingOutputCallRequest alloc] init];
+ return self;
+}
+- (RMTStreamingOutputCallRequestBuilder*) clone {
+ return [RMTStreamingOutputCallRequest builderWithPrototype:resultStreamingOutputCallRequest];
+}
+- (RMTStreamingOutputCallRequest*) defaultInstance {
+ return [RMTStreamingOutputCallRequest defaultInstance];
+}
+- (RMTStreamingOutputCallRequest*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RMTStreamingOutputCallRequest*) buildPartial {
+ RMTStreamingOutputCallRequest* returnMe = resultStreamingOutputCallRequest;
+ self.resultStreamingOutputCallRequest = nil;
+ return returnMe;
+}
+- (RMTStreamingOutputCallRequestBuilder*) mergeFrom:(RMTStreamingOutputCallRequest*) other {
+ if (other == [RMTStreamingOutputCallRequest defaultInstance]) {
+ return self;
+ }
+ if (other.hasResponseType) {
+ [self setResponseType:other.responseType];
+ }
+ if (other.responseParametersArray.count > 0) {
+ if (resultStreamingOutputCallRequest.responseParametersArray == nil) {
+ resultStreamingOutputCallRequest.responseParametersArray = [[NSMutableArray alloc] initWithArray:other.responseParametersArray];
+ } else {
+ [resultStreamingOutputCallRequest.responseParametersArray addObjectsFromArray:other.responseParametersArray];
+ }
+ }
+ if (other.hasPayload) {
+ [self mergePayload:other.payload];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RMTStreamingOutputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTStreamingOutputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 8: {
+ RMTPayloadType value = (RMTPayloadType)[input readEnum];
+ if (RMTPayloadTypeIsValidValue(value)) {
+ [self setResponseType:value];
+ } else {
+ [unknownFields mergeVarintField:1 value:value];
+ }
+ break;
+ }
+ case 18: {
+ RMTResponseParametersBuilder* subBuilder = [RMTResponseParameters builder];
+ [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+ [self addResponseParameters:[subBuilder buildPartial]];
+ break;
+ }
+ case 26: {
+ RMTPayloadBuilder* subBuilder = [RMTPayload builder];
+ if (self.hasPayload) {
+ [subBuilder mergeFrom:self.payload];
+ }
+ [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+ [self setPayload:[subBuilder buildPartial]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasResponseType {
+ return resultStreamingOutputCallRequest.hasResponseType;
+}
+- (RMTPayloadType) responseType {
+ return resultStreamingOutputCallRequest.responseType;
+}
+- (RMTStreamingOutputCallRequestBuilder*) setResponseType:(RMTPayloadType) value {
+ resultStreamingOutputCallRequest.hasResponseType = YES;
+ resultStreamingOutputCallRequest.responseType = value;
+ return self;
+}
+- (RMTStreamingOutputCallRequestBuilder*) clearResponseType {
+ resultStreamingOutputCallRequest.hasResponseType = NO;
+ resultStreamingOutputCallRequest.responseType = RMTPayloadTypeCompressable;
+ return self;
+}
+- (NSMutableArray *)responseParameters {
+ return resultStreamingOutputCallRequest.responseParametersArray;
+}
+- (RMTResponseParameters*)responseParametersAtIndex:(NSUInteger)index {
+ return [resultStreamingOutputCallRequest responseParametersAtIndex:index];
+}
+- (RMTStreamingOutputCallRequestBuilder *)addResponseParameters:(RMTResponseParameters*)value {
+ if (resultStreamingOutputCallRequest.responseParametersArray == nil) {
+ resultStreamingOutputCallRequest.responseParametersArray = [[NSMutableArray alloc]init];
+ }
+ [resultStreamingOutputCallRequest.responseParametersArray addObject:value];
+ return self;
+}
+- (RMTStreamingOutputCallRequestBuilder *)setResponseParametersArray:(NSArray *)array {
+ resultStreamingOutputCallRequest.responseParametersArray = [[NSMutableArray alloc]initWithArray:array];
+ return self;
+}
+- (RMTStreamingOutputCallRequestBuilder *)clearResponseParameters {
+ resultStreamingOutputCallRequest.responseParametersArray = nil;
+ return self;
+}
+- (BOOL) hasPayload {
+ return resultStreamingOutputCallRequest.hasPayload;
+}
+- (RMTPayload*) payload {
+ return resultStreamingOutputCallRequest.payload;
+}
+- (RMTStreamingOutputCallRequestBuilder*) setPayload:(RMTPayload*) value {
+ resultStreamingOutputCallRequest.hasPayload = YES;
+ resultStreamingOutputCallRequest.payload = value;
+ return self;
+}
+- (RMTStreamingOutputCallRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue {
+ return [self setPayload:[builderForValue build]];
+}
+- (RMTStreamingOutputCallRequestBuilder*) mergePayload:(RMTPayload*) value {
+ if (resultStreamingOutputCallRequest.hasPayload &&
+ resultStreamingOutputCallRequest.payload != [RMTPayload defaultInstance]) {
+ resultStreamingOutputCallRequest.payload =
+ [[[RMTPayload builderWithPrototype:resultStreamingOutputCallRequest.payload] mergeFrom:value] buildPartial];
+ } else {
+ resultStreamingOutputCallRequest.payload = value;
+ }
+ resultStreamingOutputCallRequest.hasPayload = YES;
+ return self;
+}
+- (RMTStreamingOutputCallRequestBuilder*) clearPayload {
+ resultStreamingOutputCallRequest.hasPayload = NO;
+ resultStreamingOutputCallRequest.payload = [RMTPayload defaultInstance];
+ return self;
+}
+@end
+
+@interface RMTStreamingOutputCallResponse ()
+@property (strong) RMTPayload* payload;
+@end
+
+@implementation RMTStreamingOutputCallResponse
+
+- (BOOL) hasPayload {
+ return !!hasPayload_;
+}
+- (void) setHasPayload:(BOOL) _value_ {
+ hasPayload_ = !!_value_;
+}
+@synthesize payload;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.payload = [RMTPayload defaultInstance];
+ }
+ return self;
+}
+static RMTStreamingOutputCallResponse* defaultRMTStreamingOutputCallResponseInstance = nil;
++ (void) initialize {
+ if (self == [RMTStreamingOutputCallResponse class]) {
+ defaultRMTStreamingOutputCallResponseInstance = [[RMTStreamingOutputCallResponse alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRMTStreamingOutputCallResponseInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRMTStreamingOutputCallResponseInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasPayload) {
+ [output writeMessage:1 value:self.payload];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasPayload) {
+ size_ += computeMessageSize(1, self.payload);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RMTStreamingOutputCallResponse*) parseFromData:(NSData*) data {
+ return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromData:data] build];
+}
++ (RMTStreamingOutputCallResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallResponse*) parseFromInputStream:(NSInputStream*) input {
+ return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromInputStream:input] build];
+}
++ (RMTStreamingOutputCallResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTStreamingOutputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallResponseBuilder*) builder {
+ return [[RMTStreamingOutputCallResponseBuilder alloc] init];
+}
++ (RMTStreamingOutputCallResponseBuilder*) builderWithPrototype:(RMTStreamingOutputCallResponse*) prototype {
+ return [[RMTStreamingOutputCallResponse builder] mergeFrom:prototype];
+}
+- (RMTStreamingOutputCallResponseBuilder*) builder {
+ return [RMTStreamingOutputCallResponse builder];
+}
+- (RMTStreamingOutputCallResponseBuilder*) toBuilder {
+ return [RMTStreamingOutputCallResponse builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasPayload) {
+ [output appendFormat:@"%@%@ {\n", indent, @"payload"];
+ [self.payload writeDescriptionTo:output
+ withIndent:[NSString stringWithFormat:@"%@ ", indent]];
+ [output appendFormat:@"%@}\n", indent];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RMTStreamingOutputCallResponse class]]) {
+ return NO;
+ }
+ RMTStreamingOutputCallResponse *otherMessage = other;
+ return
+ self.hasPayload == otherMessage.hasPayload &&
+ (!self.hasPayload || [self.payload isEqual:otherMessage.payload]) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasPayload) {
+ hashCode = hashCode * 31 + [self.payload hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RMTStreamingOutputCallResponseBuilder()
+@property (strong) RMTStreamingOutputCallResponse* resultStreamingOutputCallResponse;
+@end
+
+@implementation RMTStreamingOutputCallResponseBuilder
+@synthesize resultStreamingOutputCallResponse;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultStreamingOutputCallResponse = [[RMTStreamingOutputCallResponse alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultStreamingOutputCallResponse;
+}
+- (RMTStreamingOutputCallResponseBuilder*) clear {
+ self.resultStreamingOutputCallResponse = [[RMTStreamingOutputCallResponse alloc] init];
+ return self;
+}
+- (RMTStreamingOutputCallResponseBuilder*) clone {
+ return [RMTStreamingOutputCallResponse builderWithPrototype:resultStreamingOutputCallResponse];
+}
+- (RMTStreamingOutputCallResponse*) defaultInstance {
+ return [RMTStreamingOutputCallResponse defaultInstance];
+}
+- (RMTStreamingOutputCallResponse*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RMTStreamingOutputCallResponse*) buildPartial {
+ RMTStreamingOutputCallResponse* returnMe = resultStreamingOutputCallResponse;
+ self.resultStreamingOutputCallResponse = nil;
+ return returnMe;
+}
+- (RMTStreamingOutputCallResponseBuilder*) mergeFrom:(RMTStreamingOutputCallResponse*) other {
+ if (other == [RMTStreamingOutputCallResponse defaultInstance]) {
+ return self;
+ }
+ if (other.hasPayload) {
+ [self mergePayload:other.payload];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RMTStreamingOutputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTStreamingOutputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 10: {
+ RMTPayloadBuilder* subBuilder = [RMTPayload builder];
+ if (self.hasPayload) {
+ [subBuilder mergeFrom:self.payload];
+ }
+ [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+ [self setPayload:[subBuilder buildPartial]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasPayload {
+ return resultStreamingOutputCallResponse.hasPayload;
+}
+- (RMTPayload*) payload {
+ return resultStreamingOutputCallResponse.payload;
+}
+- (RMTStreamingOutputCallResponseBuilder*) setPayload:(RMTPayload*) value {
+ resultStreamingOutputCallResponse.hasPayload = YES;
+ resultStreamingOutputCallResponse.payload = value;
+ return self;
+}
+- (RMTStreamingOutputCallResponseBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue {
+ return [self setPayload:[builderForValue build]];
+}
+- (RMTStreamingOutputCallResponseBuilder*) mergePayload:(RMTPayload*) value {
+ if (resultStreamingOutputCallResponse.hasPayload &&
+ resultStreamingOutputCallResponse.payload != [RMTPayload defaultInstance]) {
+ resultStreamingOutputCallResponse.payload =
+ [[[RMTPayload builderWithPrototype:resultStreamingOutputCallResponse.payload] mergeFrom:value] buildPartial];
+ } else {
+ resultStreamingOutputCallResponse.payload = value;
+ }
+ resultStreamingOutputCallResponse.hasPayload = YES;
+ return self;
+}
+- (RMTStreamingOutputCallResponseBuilder*) clearPayload {
+ resultStreamingOutputCallResponse.hasPayload = NO;
+ resultStreamingOutputCallResponse.payload = [RMTPayload defaultInstance];
+ return self;
+}
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/RemoteTest.podspec b/src/objective-c/examples/Sample/RemoteTestClient/RemoteTest.podspec
new file mode 100644
index 0000000000..4790594bc5
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/RemoteTest.podspec
@@ -0,0 +1,17 @@
+Pod::Spec.new do |s|
+ s.name = 'RemoteTest'
+ s.version = '0.0.1'
+ s.summary = 'Protobuf library generated from test.proto, messages.proto, and empty.proto'
+ s.homepage = 'https://github.com/grpc/grpc/tree/master/src/objective-c/examples/Sample/RemoteTestClient'
+ s.license = 'New BSD'
+ s.authors = { 'Jorge Canizales' => 'jcanizales@google.com' }
+
+ s.source_files = '*.pb.{h,m}'
+ s.public_header_files = '*.pb.h'
+
+ s.platform = :ios
+ s.ios.deployment_target = '6.0'
+ s.requires_arc = true
+
+ s.dependency 'ProtocolBuffers', '~> 1.9'
+end
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.h b/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.h
new file mode 100644
index 0000000000..6db981dc5b
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.h
@@ -0,0 +1,81 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+
+#import <ProtocolBuffers/ProtocolBuffers.h>
+
+#import "Empty.pb.h"
+#import "Messages.pb.h"
+// @@protoc_insertion_point(imports)
+
+@class ObjectiveCFileOptions;
+@class ObjectiveCFileOptionsBuilder;
+@class PBDescriptorProto;
+@class PBDescriptorProtoBuilder;
+@class PBDescriptorProtoExtensionRange;
+@class PBDescriptorProtoExtensionRangeBuilder;
+@class PBEnumDescriptorProto;
+@class PBEnumDescriptorProtoBuilder;
+@class PBEnumOptions;
+@class PBEnumOptionsBuilder;
+@class PBEnumValueDescriptorProto;
+@class PBEnumValueDescriptorProtoBuilder;
+@class PBEnumValueOptions;
+@class PBEnumValueOptionsBuilder;
+@class PBFieldDescriptorProto;
+@class PBFieldDescriptorProtoBuilder;
+@class PBFieldOptions;
+@class PBFieldOptionsBuilder;
+@class PBFileDescriptorProto;
+@class PBFileDescriptorProtoBuilder;
+@class PBFileDescriptorSet;
+@class PBFileDescriptorSetBuilder;
+@class PBFileOptions;
+@class PBFileOptionsBuilder;
+@class PBMessageOptions;
+@class PBMessageOptionsBuilder;
+@class PBMethodDescriptorProto;
+@class PBMethodDescriptorProtoBuilder;
+@class PBMethodOptions;
+@class PBMethodOptionsBuilder;
+@class PBOneofDescriptorProto;
+@class PBOneofDescriptorProtoBuilder;
+@class PBServiceDescriptorProto;
+@class PBServiceDescriptorProtoBuilder;
+@class PBServiceOptions;
+@class PBServiceOptionsBuilder;
+@class PBSourceCodeInfo;
+@class PBSourceCodeInfoBuilder;
+@class PBSourceCodeInfoLocation;
+@class PBSourceCodeInfoLocationBuilder;
+@class PBUninterpretedOption;
+@class PBUninterpretedOptionBuilder;
+@class PBUninterpretedOptionNamePart;
+@class PBUninterpretedOptionNamePartBuilder;
+@class RMTEmpty;
+@class RMTEmptyBuilder;
+@class RMTPayload;
+@class RMTPayloadBuilder;
+@class RMTResponseParameters;
+@class RMTResponseParametersBuilder;
+@class RMTSimpleRequest;
+@class RMTSimpleRequestBuilder;
+@class RMTSimpleResponse;
+@class RMTSimpleResponseBuilder;
+@class RMTStreamingInputCallRequest;
+@class RMTStreamingInputCallRequestBuilder;
+@class RMTStreamingInputCallResponse;
+@class RMTStreamingInputCallResponseBuilder;
+@class RMTStreamingOutputCallRequest;
+@class RMTStreamingOutputCallRequestBuilder;
+@class RMTStreamingOutputCallResponse;
+@class RMTStreamingOutputCallResponseBuilder;
+
+
+
+@interface RMTTestRoot : NSObject {
+}
++ (PBExtensionRegistry*) extensionRegistry;
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry;
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.m b/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.m
new file mode 100644
index 0000000000..bd6a29df41
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.m
@@ -0,0 +1,27 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+
+#import "Test.pb.h"
+// @@protoc_insertion_point(imports)
+
+@implementation RMTTestRoot
+static PBExtensionRegistry* extensionRegistry = nil;
++ (PBExtensionRegistry*) extensionRegistry {
+ return extensionRegistry;
+}
+
++ (void) initialize {
+ if (self == [RMTTestRoot class]) {
+ PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry];
+ [self registerAllExtensions:registry];
+ [RMTEmptyRoot registerAllExtensions:registry];
+ [RMTMessagesRoot registerAllExtensions:registry];
+ [ObjectivecDescriptorRoot registerAllExtensions:registry];
+ extensionRegistry = registry;
+ }
+}
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry {
+}
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/empty.proto b/src/objective-c/examples/Sample/RemoteTestClient/empty.proto
new file mode 100644
index 0000000000..3b626ab131
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/empty.proto
@@ -0,0 +1,46 @@
+// 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";
+
+import "google/protobuf/objectivec-descriptor.proto";
+
+package grpc.testing;
+
+option (google.protobuf.objectivec_file_options).class_prefix = "RMT";
+
+// 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 (grpc.testing.Empty) returns (grpc.testing.Empty) { };
+// };
+//
+message Empty {}
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/messages.proto b/src/objective-c/examples/Sample/RemoteTestClient/messages.proto
new file mode 100644
index 0000000000..ab8577401f
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/messages.proto
@@ -0,0 +1,135 @@
+// 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.
+
+// Message definitions to be used by integration test service definitions.
+
+syntax = "proto2";
+
+import "google/protobuf/objectivec-descriptor.proto";
+
+package grpc.testing;
+
+option (google.protobuf.objectivec_file_options).class_prefix = "RMT";
+
+// The type of payload that should be returned.
+enum PayloadType {
+ // Compressable text format.
+ COMPRESSABLE = 0;
+
+ // Uncompressable binary format.
+ UNCOMPRESSABLE = 1;
+
+ // Randomly chosen from all other formats defined in this enum.
+ RANDOM = 2;
+}
+
+// A block of data, to simply increase gRPC message size.
+message Payload {
+ // The type of data in body.
+ optional PayloadType type = 1;
+ // Primary contents of payload.
+ optional bytes body = 2;
+}
+
+// Unary request.
+message SimpleRequest {
+ // Desired payload type in the response from the server.
+ // If response_type is RANDOM, server randomly chooses one from other formats.
+ optional PayloadType response_type = 1;
+
+ // Desired payload size in the response from the server.
+ // If response_type is COMPRESSABLE, this denotes the size before compression.
+ optional int32 response_size = 2;
+
+ // Optional input payload sent along with the request.
+ optional Payload payload = 3;
+
+ // Whether SimpleResponse should include username.
+ optional bool fill_username = 4;
+
+ // Whether SimpleResponse should include OAuth scope.
+ optional bool fill_oauth_scope = 5;
+}
+
+// Unary response, as configured by the request.
+message SimpleResponse {
+ // Payload to increase message size.
+ optional Payload payload = 1;
+ // The user the request came from, for verifying authentication was
+ // successful when the client expected it.
+ optional string username = 2;
+ // OAuth scope.
+ optional string oauth_scope = 3;
+}
+
+// Client-streaming request.
+message StreamingInputCallRequest {
+ // Optional input payload sent along with the request.
+ optional Payload payload = 1;
+
+ // Not expecting any payload from the response.
+}
+
+// Client-streaming response.
+message StreamingInputCallResponse {
+ // Aggregated size of payloads received from the client.
+ optional int32 aggregated_payload_size = 1;
+}
+
+// Configuration for a particular response.
+message ResponseParameters {
+ // Desired payload sizes in responses from the server.
+ // If response_type is COMPRESSABLE, this denotes the size before compression.
+ optional int32 size = 1;
+
+ // Desired interval between consecutive responses in the response stream in
+ // microseconds.
+ optional int32 interval_us = 2;
+}
+
+// Server-streaming request.
+message StreamingOutputCallRequest {
+ // Desired payload type in the response from the server.
+ // If response_type is RANDOM, the payload from each response in the stream
+ // might be of different types. This is to simulate a mixed type of payload
+ // stream.
+ optional PayloadType response_type = 1;
+
+ // Configuration for each expected response message.
+ repeated ResponseParameters response_parameters = 2;
+
+ // Optional input payload sent along with the request.
+ optional Payload payload = 3;
+}
+
+// Server-streaming response, as configured by the request and parameters.
+message StreamingOutputCallResponse {
+ // Payload to increase response size.
+ optional Payload payload = 1;
+}
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/test.proto b/src/objective-c/examples/Sample/RemoteTestClient/test.proto
new file mode 100644
index 0000000000..4b08220599
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/test.proto
@@ -0,0 +1,74 @@
+// 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.
+
+// An integration test service that covers all the method signature permutations
+// of unary/streaming requests/responses.
+syntax = "proto2";
+
+import "empty.proto";
+import "messages.proto";
+import "google/protobuf/objectivec-descriptor.proto";
+
+package grpc.testing;
+
+option (google.protobuf.objectivec_file_options).class_prefix = "RMT";
+
+// A simple service to test the various types of RPCs and experiment with
+// performance with various types of payload.
+service TestService {
+ // One empty request followed by one empty response.
+ rpc EmptyCall(grpc.testing.Empty) returns (grpc.testing.Empty);
+
+ // One request followed by one response.
+ // TODO(Issue 527): Describe required server behavior.
+ rpc UnaryCall(SimpleRequest) returns (SimpleResponse);
+
+ // One request followed by a sequence of responses (streamed download).
+ // The server returns the payload with client desired type and sizes.
+// rpc StreamingOutputCall(StreamingOutputCallRequest)
+// returns (stream StreamingOutputCallResponse);
+
+ // A sequence of requests followed by one response (streamed upload).
+ // The server returns the aggregated size of client payload as the result.
+// rpc StreamingInputCall(stream StreamingInputCallRequest)
+// returns (StreamingInputCallResponse);
+
+ // A sequence of requests with each request served by the server immediately.
+ // As one request could lead to multiple responses, this interface
+ // demonstrates the idea of full duplexing.
+// rpc FullDuplexCall(stream StreamingOutputCallRequest)
+// returns (stream StreamingOutputCallResponse);
+
+ // A sequence of requests followed by a sequence of responses.
+ // The server buffers all the client requests and then serves them in order. A
+ // stream of responses are returned to the client when the server starts with
+ // first request.
+// rpc HalfDuplexCall(stream StreamingOutputCallRequest)
+// returns (stream StreamingOutputCallResponse);
+}
diff --git a/src/objective-c/examples/Sample/RouteGuideClient/Route_guide.pb.h b/src/objective-c/examples/Sample/RouteGuideClient/Route_guide.pb.h
new file mode 100644
index 0000000000..194bfc5f2a
--- /dev/null
+++ b/src/objective-c/examples/Sample/RouteGuideClient/Route_guide.pb.h
@@ -0,0 +1,387 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+
+#import <ProtocolBuffers/ProtocolBuffers.h>
+
+// @@protoc_insertion_point(imports)
+
+@class ObjectiveCFileOptions;
+@class ObjectiveCFileOptionsBuilder;
+@class PBDescriptorProto;
+@class PBDescriptorProtoBuilder;
+@class PBDescriptorProtoExtensionRange;
+@class PBDescriptorProtoExtensionRangeBuilder;
+@class PBEnumDescriptorProto;
+@class PBEnumDescriptorProtoBuilder;
+@class PBEnumOptions;
+@class PBEnumOptionsBuilder;
+@class PBEnumValueDescriptorProto;
+@class PBEnumValueDescriptorProtoBuilder;
+@class PBEnumValueOptions;
+@class PBEnumValueOptionsBuilder;
+@class PBFieldDescriptorProto;
+@class PBFieldDescriptorProtoBuilder;
+@class PBFieldOptions;
+@class PBFieldOptionsBuilder;
+@class PBFileDescriptorProto;
+@class PBFileDescriptorProtoBuilder;
+@class PBFileDescriptorSet;
+@class PBFileDescriptorSetBuilder;
+@class PBFileOptions;
+@class PBFileOptionsBuilder;
+@class PBMessageOptions;
+@class PBMessageOptionsBuilder;
+@class PBMethodDescriptorProto;
+@class PBMethodDescriptorProtoBuilder;
+@class PBMethodOptions;
+@class PBMethodOptionsBuilder;
+@class PBOneofDescriptorProto;
+@class PBOneofDescriptorProtoBuilder;
+@class PBServiceDescriptorProto;
+@class PBServiceDescriptorProtoBuilder;
+@class PBServiceOptions;
+@class PBServiceOptionsBuilder;
+@class PBSourceCodeInfo;
+@class PBSourceCodeInfoBuilder;
+@class PBSourceCodeInfoLocation;
+@class PBSourceCodeInfoLocationBuilder;
+@class PBUninterpretedOption;
+@class PBUninterpretedOptionBuilder;
+@class PBUninterpretedOptionNamePart;
+@class PBUninterpretedOptionNamePartBuilder;
+@class RGDFeature;
+@class RGDFeatureBuilder;
+@class RGDPoint;
+@class RGDPointBuilder;
+@class RGDRectangle;
+@class RGDRectangleBuilder;
+@class RGDRouteNote;
+@class RGDRouteNoteBuilder;
+@class RGDRouteSummary;
+@class RGDRouteSummaryBuilder;
+
+
+
+@interface RGDRouteGuideRoot : NSObject {
+}
++ (PBExtensionRegistry*) extensionRegistry;
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry;
+@end
+
+@interface RGDPoint : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasLatitude_:1;
+ BOOL hasLongitude_:1;
+ SInt32 latitude;
+ SInt32 longitude;
+}
+- (BOOL) hasLatitude;
+- (BOOL) hasLongitude;
+@property (readonly) SInt32 latitude;
+@property (readonly) SInt32 longitude;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RGDPointBuilder*) builder;
++ (RGDPointBuilder*) builder;
++ (RGDPointBuilder*) builderWithPrototype:(RGDPoint*) prototype;
+- (RGDPointBuilder*) toBuilder;
+
++ (RGDPoint*) parseFromData:(NSData*) data;
++ (RGDPoint*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RGDPoint*) parseFromInputStream:(NSInputStream*) input;
++ (RGDPoint*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RGDPoint*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RGDPoint*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RGDPointBuilder : PBGeneratedMessageBuilder {
+@private
+ RGDPoint* resultPoint;
+}
+
+- (RGDPoint*) defaultInstance;
+
+- (RGDPointBuilder*) clear;
+- (RGDPointBuilder*) clone;
+
+- (RGDPoint*) build;
+- (RGDPoint*) buildPartial;
+
+- (RGDPointBuilder*) mergeFrom:(RGDPoint*) other;
+- (RGDPointBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RGDPointBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasLatitude;
+- (SInt32) latitude;
+- (RGDPointBuilder*) setLatitude:(SInt32) value;
+- (RGDPointBuilder*) clearLatitude;
+
+- (BOOL) hasLongitude;
+- (SInt32) longitude;
+- (RGDPointBuilder*) setLongitude:(SInt32) value;
+- (RGDPointBuilder*) clearLongitude;
+@end
+
+@interface RGDRectangle : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasLo_:1;
+ BOOL hasHi_:1;
+ RGDPoint* lo;
+ RGDPoint* hi;
+}
+- (BOOL) hasLo;
+- (BOOL) hasHi;
+@property (readonly, strong) RGDPoint* lo;
+@property (readonly, strong) RGDPoint* hi;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RGDRectangleBuilder*) builder;
++ (RGDRectangleBuilder*) builder;
++ (RGDRectangleBuilder*) builderWithPrototype:(RGDRectangle*) prototype;
+- (RGDRectangleBuilder*) toBuilder;
+
++ (RGDRectangle*) parseFromData:(NSData*) data;
++ (RGDRectangle*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RGDRectangle*) parseFromInputStream:(NSInputStream*) input;
++ (RGDRectangle*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RGDRectangle*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RGDRectangle*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RGDRectangleBuilder : PBGeneratedMessageBuilder {
+@private
+ RGDRectangle* resultRectangle;
+}
+
+- (RGDRectangle*) defaultInstance;
+
+- (RGDRectangleBuilder*) clear;
+- (RGDRectangleBuilder*) clone;
+
+- (RGDRectangle*) build;
+- (RGDRectangle*) buildPartial;
+
+- (RGDRectangleBuilder*) mergeFrom:(RGDRectangle*) other;
+- (RGDRectangleBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RGDRectangleBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasLo;
+- (RGDPoint*) lo;
+- (RGDRectangleBuilder*) setLo:(RGDPoint*) value;
+- (RGDRectangleBuilder*) setLoBuilder:(RGDPointBuilder*) builderForValue;
+- (RGDRectangleBuilder*) mergeLo:(RGDPoint*) value;
+- (RGDRectangleBuilder*) clearLo;
+
+- (BOOL) hasHi;
+- (RGDPoint*) hi;
+- (RGDRectangleBuilder*) setHi:(RGDPoint*) value;
+- (RGDRectangleBuilder*) setHiBuilder:(RGDPointBuilder*) builderForValue;
+- (RGDRectangleBuilder*) mergeHi:(RGDPoint*) value;
+- (RGDRectangleBuilder*) clearHi;
+@end
+
+@interface RGDFeature : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasName_:1;
+ BOOL hasLocation_:1;
+ NSString* name;
+ RGDPoint* location;
+}
+- (BOOL) hasName;
+- (BOOL) hasLocation;
+@property (readonly, strong) NSString* name;
+@property (readonly, strong) RGDPoint* location;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RGDFeatureBuilder*) builder;
++ (RGDFeatureBuilder*) builder;
++ (RGDFeatureBuilder*) builderWithPrototype:(RGDFeature*) prototype;
+- (RGDFeatureBuilder*) toBuilder;
+
++ (RGDFeature*) parseFromData:(NSData*) data;
++ (RGDFeature*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RGDFeature*) parseFromInputStream:(NSInputStream*) input;
++ (RGDFeature*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RGDFeature*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RGDFeature*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RGDFeatureBuilder : PBGeneratedMessageBuilder {
+@private
+ RGDFeature* resultFeature;
+}
+
+- (RGDFeature*) defaultInstance;
+
+- (RGDFeatureBuilder*) clear;
+- (RGDFeatureBuilder*) clone;
+
+- (RGDFeature*) build;
+- (RGDFeature*) buildPartial;
+
+- (RGDFeatureBuilder*) mergeFrom:(RGDFeature*) other;
+- (RGDFeatureBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RGDFeatureBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasName;
+- (NSString*) name;
+- (RGDFeatureBuilder*) setName:(NSString*) value;
+- (RGDFeatureBuilder*) clearName;
+
+- (BOOL) hasLocation;
+- (RGDPoint*) location;
+- (RGDFeatureBuilder*) setLocation:(RGDPoint*) value;
+- (RGDFeatureBuilder*) setLocationBuilder:(RGDPointBuilder*) builderForValue;
+- (RGDFeatureBuilder*) mergeLocation:(RGDPoint*) value;
+- (RGDFeatureBuilder*) clearLocation;
+@end
+
+@interface RGDRouteNote : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasMessage_:1;
+ BOOL hasLocation_:1;
+ NSString* message;
+ RGDPoint* location;
+}
+- (BOOL) hasLocation;
+- (BOOL) hasMessage;
+@property (readonly, strong) RGDPoint* location;
+@property (readonly, strong) NSString* message;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RGDRouteNoteBuilder*) builder;
++ (RGDRouteNoteBuilder*) builder;
++ (RGDRouteNoteBuilder*) builderWithPrototype:(RGDRouteNote*) prototype;
+- (RGDRouteNoteBuilder*) toBuilder;
+
++ (RGDRouteNote*) parseFromData:(NSData*) data;
++ (RGDRouteNote*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RGDRouteNote*) parseFromInputStream:(NSInputStream*) input;
++ (RGDRouteNote*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RGDRouteNote*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RGDRouteNote*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RGDRouteNoteBuilder : PBGeneratedMessageBuilder {
+@private
+ RGDRouteNote* resultRouteNote;
+}
+
+- (RGDRouteNote*) defaultInstance;
+
+- (RGDRouteNoteBuilder*) clear;
+- (RGDRouteNoteBuilder*) clone;
+
+- (RGDRouteNote*) build;
+- (RGDRouteNote*) buildPartial;
+
+- (RGDRouteNoteBuilder*) mergeFrom:(RGDRouteNote*) other;
+- (RGDRouteNoteBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RGDRouteNoteBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasLocation;
+- (RGDPoint*) location;
+- (RGDRouteNoteBuilder*) setLocation:(RGDPoint*) value;
+- (RGDRouteNoteBuilder*) setLocationBuilder:(RGDPointBuilder*) builderForValue;
+- (RGDRouteNoteBuilder*) mergeLocation:(RGDPoint*) value;
+- (RGDRouteNoteBuilder*) clearLocation;
+
+- (BOOL) hasMessage;
+- (NSString*) message;
+- (RGDRouteNoteBuilder*) setMessage:(NSString*) value;
+- (RGDRouteNoteBuilder*) clearMessage;
+@end
+
+@interface RGDRouteSummary : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+ BOOL hasPointCount_:1;
+ BOOL hasFeatureCount_:1;
+ BOOL hasDistance_:1;
+ BOOL hasElapsedTime_:1;
+ SInt32 pointCount;
+ SInt32 featureCount;
+ SInt32 distance;
+ SInt32 elapsedTime;
+}
+- (BOOL) hasPointCount;
+- (BOOL) hasFeatureCount;
+- (BOOL) hasDistance;
+- (BOOL) hasElapsedTime;
+@property (readonly) SInt32 pointCount;
+@property (readonly) SInt32 featureCount;
+@property (readonly) SInt32 distance;
+@property (readonly) SInt32 elapsedTime;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RGDRouteSummaryBuilder*) builder;
++ (RGDRouteSummaryBuilder*) builder;
++ (RGDRouteSummaryBuilder*) builderWithPrototype:(RGDRouteSummary*) prototype;
+- (RGDRouteSummaryBuilder*) toBuilder;
+
++ (RGDRouteSummary*) parseFromData:(NSData*) data;
++ (RGDRouteSummary*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RGDRouteSummary*) parseFromInputStream:(NSInputStream*) input;
++ (RGDRouteSummary*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RGDRouteSummary*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RGDRouteSummary*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RGDRouteSummaryBuilder : PBGeneratedMessageBuilder {
+@private
+ RGDRouteSummary* resultRouteSummary;
+}
+
+- (RGDRouteSummary*) defaultInstance;
+
+- (RGDRouteSummaryBuilder*) clear;
+- (RGDRouteSummaryBuilder*) clone;
+
+- (RGDRouteSummary*) build;
+- (RGDRouteSummary*) buildPartial;
+
+- (RGDRouteSummaryBuilder*) mergeFrom:(RGDRouteSummary*) other;
+- (RGDRouteSummaryBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RGDRouteSummaryBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasPointCount;
+- (SInt32) pointCount;
+- (RGDRouteSummaryBuilder*) setPointCount:(SInt32) value;
+- (RGDRouteSummaryBuilder*) clearPointCount;
+
+- (BOOL) hasFeatureCount;
+- (SInt32) featureCount;
+- (RGDRouteSummaryBuilder*) setFeatureCount:(SInt32) value;
+- (RGDRouteSummaryBuilder*) clearFeatureCount;
+
+- (BOOL) hasDistance;
+- (SInt32) distance;
+- (RGDRouteSummaryBuilder*) setDistance:(SInt32) value;
+- (RGDRouteSummaryBuilder*) clearDistance;
+
+- (BOOL) hasElapsedTime;
+- (SInt32) elapsedTime;
+- (RGDRouteSummaryBuilder*) setElapsedTime:(SInt32) value;
+- (RGDRouteSummaryBuilder*) clearElapsedTime;
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RouteGuideClient/Route_guide.pb.m b/src/objective-c/examples/Sample/RouteGuideClient/Route_guide.pb.m
new file mode 100644
index 0000000000..63cdd00206
--- /dev/null
+++ b/src/objective-c/examples/Sample/RouteGuideClient/Route_guide.pb.m
@@ -0,0 +1,1435 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+
+#import "Route_guide.pb.h"
+// @@protoc_insertion_point(imports)
+
+@implementation RGDRouteGuideRoot
+static PBExtensionRegistry* extensionRegistry = nil;
++ (PBExtensionRegistry*) extensionRegistry {
+ return extensionRegistry;
+}
+
++ (void) initialize {
+ if (self == [RGDRouteGuideRoot class]) {
+ PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry];
+ [self registerAllExtensions:registry];
+ [ObjectivecDescriptorRoot registerAllExtensions:registry];
+ extensionRegistry = registry;
+ }
+}
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry {
+}
+@end
+
+@interface RGDPoint ()
+@property SInt32 latitude;
+@property SInt32 longitude;
+@end
+
+@implementation RGDPoint
+
+- (BOOL) hasLatitude {
+ return !!hasLatitude_;
+}
+- (void) setHasLatitude:(BOOL) _value_ {
+ hasLatitude_ = !!_value_;
+}
+@synthesize latitude;
+- (BOOL) hasLongitude {
+ return !!hasLongitude_;
+}
+- (void) setHasLongitude:(BOOL) _value_ {
+ hasLongitude_ = !!_value_;
+}
+@synthesize longitude;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.latitude = 0;
+ self.longitude = 0;
+ }
+ return self;
+}
+static RGDPoint* defaultRGDPointInstance = nil;
++ (void) initialize {
+ if (self == [RGDPoint class]) {
+ defaultRGDPointInstance = [[RGDPoint alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRGDPointInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRGDPointInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasLatitude) {
+ [output writeInt32:1 value:self.latitude];
+ }
+ if (self.hasLongitude) {
+ [output writeInt32:2 value:self.longitude];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasLatitude) {
+ size_ += computeInt32Size(1, self.latitude);
+ }
+ if (self.hasLongitude) {
+ size_ += computeInt32Size(2, self.longitude);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RGDPoint*) parseFromData:(NSData*) data {
+ return (RGDPoint*)[[[RGDPoint builder] mergeFromData:data] build];
+}
++ (RGDPoint*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDPoint*)[[[RGDPoint builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RGDPoint*) parseFromInputStream:(NSInputStream*) input {
+ return (RGDPoint*)[[[RGDPoint builder] mergeFromInputStream:input] build];
+}
++ (RGDPoint*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDPoint*)[[[RGDPoint builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RGDPoint*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RGDPoint*)[[[RGDPoint builder] mergeFromCodedInputStream:input] build];
+}
++ (RGDPoint*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDPoint*)[[[RGDPoint builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RGDPointBuilder*) builder {
+ return [[RGDPointBuilder alloc] init];
+}
++ (RGDPointBuilder*) builderWithPrototype:(RGDPoint*) prototype {
+ return [[RGDPoint builder] mergeFrom:prototype];
+}
+- (RGDPointBuilder*) builder {
+ return [RGDPoint builder];
+}
+- (RGDPointBuilder*) toBuilder {
+ return [RGDPoint builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasLatitude) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"latitude", [NSNumber numberWithInteger:self.latitude]];
+ }
+ if (self.hasLongitude) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"longitude", [NSNumber numberWithInteger:self.longitude]];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RGDPoint class]]) {
+ return NO;
+ }
+ RGDPoint *otherMessage = other;
+ return
+ self.hasLatitude == otherMessage.hasLatitude &&
+ (!self.hasLatitude || self.latitude == otherMessage.latitude) &&
+ self.hasLongitude == otherMessage.hasLongitude &&
+ (!self.hasLongitude || self.longitude == otherMessage.longitude) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasLatitude) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.latitude] hash];
+ }
+ if (self.hasLongitude) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.longitude] hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RGDPointBuilder()
+@property (strong) RGDPoint* resultPoint;
+@end
+
+@implementation RGDPointBuilder
+@synthesize resultPoint;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultPoint = [[RGDPoint alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultPoint;
+}
+- (RGDPointBuilder*) clear {
+ self.resultPoint = [[RGDPoint alloc] init];
+ return self;
+}
+- (RGDPointBuilder*) clone {
+ return [RGDPoint builderWithPrototype:resultPoint];
+}
+- (RGDPoint*) defaultInstance {
+ return [RGDPoint defaultInstance];
+}
+- (RGDPoint*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RGDPoint*) buildPartial {
+ RGDPoint* returnMe = resultPoint;
+ self.resultPoint = nil;
+ return returnMe;
+}
+- (RGDPointBuilder*) mergeFrom:(RGDPoint*) other {
+ if (other == [RGDPoint defaultInstance]) {
+ return self;
+ }
+ if (other.hasLatitude) {
+ [self setLatitude:other.latitude];
+ }
+ if (other.hasLongitude) {
+ [self setLongitude:other.longitude];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RGDPointBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RGDPointBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 8: {
+ [self setLatitude:[input readInt32]];
+ break;
+ }
+ case 16: {
+ [self setLongitude:[input readInt32]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasLatitude {
+ return resultPoint.hasLatitude;
+}
+- (SInt32) latitude {
+ return resultPoint.latitude;
+}
+- (RGDPointBuilder*) setLatitude:(SInt32) value {
+ resultPoint.hasLatitude = YES;
+ resultPoint.latitude = value;
+ return self;
+}
+- (RGDPointBuilder*) clearLatitude {
+ resultPoint.hasLatitude = NO;
+ resultPoint.latitude = 0;
+ return self;
+}
+- (BOOL) hasLongitude {
+ return resultPoint.hasLongitude;
+}
+- (SInt32) longitude {
+ return resultPoint.longitude;
+}
+- (RGDPointBuilder*) setLongitude:(SInt32) value {
+ resultPoint.hasLongitude = YES;
+ resultPoint.longitude = value;
+ return self;
+}
+- (RGDPointBuilder*) clearLongitude {
+ resultPoint.hasLongitude = NO;
+ resultPoint.longitude = 0;
+ return self;
+}
+@end
+
+@interface RGDRectangle ()
+@property (strong) RGDPoint* lo;
+@property (strong) RGDPoint* hi;
+@end
+
+@implementation RGDRectangle
+
+- (BOOL) hasLo {
+ return !!hasLo_;
+}
+- (void) setHasLo:(BOOL) _value_ {
+ hasLo_ = !!_value_;
+}
+@synthesize lo;
+- (BOOL) hasHi {
+ return !!hasHi_;
+}
+- (void) setHasHi:(BOOL) _value_ {
+ hasHi_ = !!_value_;
+}
+@synthesize hi;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.lo = [RGDPoint defaultInstance];
+ self.hi = [RGDPoint defaultInstance];
+ }
+ return self;
+}
+static RGDRectangle* defaultRGDRectangleInstance = nil;
++ (void) initialize {
+ if (self == [RGDRectangle class]) {
+ defaultRGDRectangleInstance = [[RGDRectangle alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRGDRectangleInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRGDRectangleInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasLo) {
+ [output writeMessage:1 value:self.lo];
+ }
+ if (self.hasHi) {
+ [output writeMessage:2 value:self.hi];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasLo) {
+ size_ += computeMessageSize(1, self.lo);
+ }
+ if (self.hasHi) {
+ size_ += computeMessageSize(2, self.hi);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RGDRectangle*) parseFromData:(NSData*) data {
+ return (RGDRectangle*)[[[RGDRectangle builder] mergeFromData:data] build];
+}
++ (RGDRectangle*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDRectangle*)[[[RGDRectangle builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RGDRectangle*) parseFromInputStream:(NSInputStream*) input {
+ return (RGDRectangle*)[[[RGDRectangle builder] mergeFromInputStream:input] build];
+}
++ (RGDRectangle*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDRectangle*)[[[RGDRectangle builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RGDRectangle*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RGDRectangle*)[[[RGDRectangle builder] mergeFromCodedInputStream:input] build];
+}
++ (RGDRectangle*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDRectangle*)[[[RGDRectangle builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RGDRectangleBuilder*) builder {
+ return [[RGDRectangleBuilder alloc] init];
+}
++ (RGDRectangleBuilder*) builderWithPrototype:(RGDRectangle*) prototype {
+ return [[RGDRectangle builder] mergeFrom:prototype];
+}
+- (RGDRectangleBuilder*) builder {
+ return [RGDRectangle builder];
+}
+- (RGDRectangleBuilder*) toBuilder {
+ return [RGDRectangle builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasLo) {
+ [output appendFormat:@"%@%@ {\n", indent, @"lo"];
+ [self.lo writeDescriptionTo:output
+ withIndent:[NSString stringWithFormat:@"%@ ", indent]];
+ [output appendFormat:@"%@}\n", indent];
+ }
+ if (self.hasHi) {
+ [output appendFormat:@"%@%@ {\n", indent, @"hi"];
+ [self.hi writeDescriptionTo:output
+ withIndent:[NSString stringWithFormat:@"%@ ", indent]];
+ [output appendFormat:@"%@}\n", indent];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RGDRectangle class]]) {
+ return NO;
+ }
+ RGDRectangle *otherMessage = other;
+ return
+ self.hasLo == otherMessage.hasLo &&
+ (!self.hasLo || [self.lo isEqual:otherMessage.lo]) &&
+ self.hasHi == otherMessage.hasHi &&
+ (!self.hasHi || [self.hi isEqual:otherMessage.hi]) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasLo) {
+ hashCode = hashCode * 31 + [self.lo hash];
+ }
+ if (self.hasHi) {
+ hashCode = hashCode * 31 + [self.hi hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RGDRectangleBuilder()
+@property (strong) RGDRectangle* resultRectangle;
+@end
+
+@implementation RGDRectangleBuilder
+@synthesize resultRectangle;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultRectangle = [[RGDRectangle alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultRectangle;
+}
+- (RGDRectangleBuilder*) clear {
+ self.resultRectangle = [[RGDRectangle alloc] init];
+ return self;
+}
+- (RGDRectangleBuilder*) clone {
+ return [RGDRectangle builderWithPrototype:resultRectangle];
+}
+- (RGDRectangle*) defaultInstance {
+ return [RGDRectangle defaultInstance];
+}
+- (RGDRectangle*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RGDRectangle*) buildPartial {
+ RGDRectangle* returnMe = resultRectangle;
+ self.resultRectangle = nil;
+ return returnMe;
+}
+- (RGDRectangleBuilder*) mergeFrom:(RGDRectangle*) other {
+ if (other == [RGDRectangle defaultInstance]) {
+ return self;
+ }
+ if (other.hasLo) {
+ [self mergeLo:other.lo];
+ }
+ if (other.hasHi) {
+ [self mergeHi:other.hi];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RGDRectangleBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RGDRectangleBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 10: {
+ RGDPointBuilder* subBuilder = [RGDPoint builder];
+ if (self.hasLo) {
+ [subBuilder mergeFrom:self.lo];
+ }
+ [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+ [self setLo:[subBuilder buildPartial]];
+ break;
+ }
+ case 18: {
+ RGDPointBuilder* subBuilder = [RGDPoint builder];
+ if (self.hasHi) {
+ [subBuilder mergeFrom:self.hi];
+ }
+ [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+ [self setHi:[subBuilder buildPartial]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasLo {
+ return resultRectangle.hasLo;
+}
+- (RGDPoint*) lo {
+ return resultRectangle.lo;
+}
+- (RGDRectangleBuilder*) setLo:(RGDPoint*) value {
+ resultRectangle.hasLo = YES;
+ resultRectangle.lo = value;
+ return self;
+}
+- (RGDRectangleBuilder*) setLoBuilder:(RGDPointBuilder*) builderForValue {
+ return [self setLo:[builderForValue build]];
+}
+- (RGDRectangleBuilder*) mergeLo:(RGDPoint*) value {
+ if (resultRectangle.hasLo &&
+ resultRectangle.lo != [RGDPoint defaultInstance]) {
+ resultRectangle.lo =
+ [[[RGDPoint builderWithPrototype:resultRectangle.lo] mergeFrom:value] buildPartial];
+ } else {
+ resultRectangle.lo = value;
+ }
+ resultRectangle.hasLo = YES;
+ return self;
+}
+- (RGDRectangleBuilder*) clearLo {
+ resultRectangle.hasLo = NO;
+ resultRectangle.lo = [RGDPoint defaultInstance];
+ return self;
+}
+- (BOOL) hasHi {
+ return resultRectangle.hasHi;
+}
+- (RGDPoint*) hi {
+ return resultRectangle.hi;
+}
+- (RGDRectangleBuilder*) setHi:(RGDPoint*) value {
+ resultRectangle.hasHi = YES;
+ resultRectangle.hi = value;
+ return self;
+}
+- (RGDRectangleBuilder*) setHiBuilder:(RGDPointBuilder*) builderForValue {
+ return [self setHi:[builderForValue build]];
+}
+- (RGDRectangleBuilder*) mergeHi:(RGDPoint*) value {
+ if (resultRectangle.hasHi &&
+ resultRectangle.hi != [RGDPoint defaultInstance]) {
+ resultRectangle.hi =
+ [[[RGDPoint builderWithPrototype:resultRectangle.hi] mergeFrom:value] buildPartial];
+ } else {
+ resultRectangle.hi = value;
+ }
+ resultRectangle.hasHi = YES;
+ return self;
+}
+- (RGDRectangleBuilder*) clearHi {
+ resultRectangle.hasHi = NO;
+ resultRectangle.hi = [RGDPoint defaultInstance];
+ return self;
+}
+@end
+
+@interface RGDFeature ()
+@property (strong) NSString* name;
+@property (strong) RGDPoint* location;
+@end
+
+@implementation RGDFeature
+
+- (BOOL) hasName {
+ return !!hasName_;
+}
+- (void) setHasName:(BOOL) _value_ {
+ hasName_ = !!_value_;
+}
+@synthesize name;
+- (BOOL) hasLocation {
+ return !!hasLocation_;
+}
+- (void) setHasLocation:(BOOL) _value_ {
+ hasLocation_ = !!_value_;
+}
+@synthesize location;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.name = @"";
+ self.location = [RGDPoint defaultInstance];
+ }
+ return self;
+}
+static RGDFeature* defaultRGDFeatureInstance = nil;
++ (void) initialize {
+ if (self == [RGDFeature class]) {
+ defaultRGDFeatureInstance = [[RGDFeature alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRGDFeatureInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRGDFeatureInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasName) {
+ [output writeString:1 value:self.name];
+ }
+ if (self.hasLocation) {
+ [output writeMessage:2 value:self.location];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasName) {
+ size_ += computeStringSize(1, self.name);
+ }
+ if (self.hasLocation) {
+ size_ += computeMessageSize(2, self.location);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RGDFeature*) parseFromData:(NSData*) data {
+ return (RGDFeature*)[[[RGDFeature builder] mergeFromData:data] build];
+}
++ (RGDFeature*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDFeature*)[[[RGDFeature builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RGDFeature*) parseFromInputStream:(NSInputStream*) input {
+ return (RGDFeature*)[[[RGDFeature builder] mergeFromInputStream:input] build];
+}
++ (RGDFeature*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDFeature*)[[[RGDFeature builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RGDFeature*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RGDFeature*)[[[RGDFeature builder] mergeFromCodedInputStream:input] build];
+}
++ (RGDFeature*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDFeature*)[[[RGDFeature builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RGDFeatureBuilder*) builder {
+ return [[RGDFeatureBuilder alloc] init];
+}
++ (RGDFeatureBuilder*) builderWithPrototype:(RGDFeature*) prototype {
+ return [[RGDFeature builder] mergeFrom:prototype];
+}
+- (RGDFeatureBuilder*) builder {
+ return [RGDFeature builder];
+}
+- (RGDFeatureBuilder*) toBuilder {
+ return [RGDFeature builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasName) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"name", self.name];
+ }
+ if (self.hasLocation) {
+ [output appendFormat:@"%@%@ {\n", indent, @"location"];
+ [self.location writeDescriptionTo:output
+ withIndent:[NSString stringWithFormat:@"%@ ", indent]];
+ [output appendFormat:@"%@}\n", indent];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RGDFeature class]]) {
+ return NO;
+ }
+ RGDFeature *otherMessage = other;
+ return
+ self.hasName == otherMessage.hasName &&
+ (!self.hasName || [self.name isEqual:otherMessage.name]) &&
+ self.hasLocation == otherMessage.hasLocation &&
+ (!self.hasLocation || [self.location isEqual:otherMessage.location]) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasName) {
+ hashCode = hashCode * 31 + [self.name hash];
+ }
+ if (self.hasLocation) {
+ hashCode = hashCode * 31 + [self.location hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RGDFeatureBuilder()
+@property (strong) RGDFeature* resultFeature;
+@end
+
+@implementation RGDFeatureBuilder
+@synthesize resultFeature;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultFeature = [[RGDFeature alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultFeature;
+}
+- (RGDFeatureBuilder*) clear {
+ self.resultFeature = [[RGDFeature alloc] init];
+ return self;
+}
+- (RGDFeatureBuilder*) clone {
+ return [RGDFeature builderWithPrototype:resultFeature];
+}
+- (RGDFeature*) defaultInstance {
+ return [RGDFeature defaultInstance];
+}
+- (RGDFeature*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RGDFeature*) buildPartial {
+ RGDFeature* returnMe = resultFeature;
+ self.resultFeature = nil;
+ return returnMe;
+}
+- (RGDFeatureBuilder*) mergeFrom:(RGDFeature*) other {
+ if (other == [RGDFeature defaultInstance]) {
+ return self;
+ }
+ if (other.hasName) {
+ [self setName:other.name];
+ }
+ if (other.hasLocation) {
+ [self mergeLocation:other.location];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RGDFeatureBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RGDFeatureBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 10: {
+ [self setName:[input readString]];
+ break;
+ }
+ case 18: {
+ RGDPointBuilder* subBuilder = [RGDPoint builder];
+ if (self.hasLocation) {
+ [subBuilder mergeFrom:self.location];
+ }
+ [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+ [self setLocation:[subBuilder buildPartial]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasName {
+ return resultFeature.hasName;
+}
+- (NSString*) name {
+ return resultFeature.name;
+}
+- (RGDFeatureBuilder*) setName:(NSString*) value {
+ resultFeature.hasName = YES;
+ resultFeature.name = value;
+ return self;
+}
+- (RGDFeatureBuilder*) clearName {
+ resultFeature.hasName = NO;
+ resultFeature.name = @"";
+ return self;
+}
+- (BOOL) hasLocation {
+ return resultFeature.hasLocation;
+}
+- (RGDPoint*) location {
+ return resultFeature.location;
+}
+- (RGDFeatureBuilder*) setLocation:(RGDPoint*) value {
+ resultFeature.hasLocation = YES;
+ resultFeature.location = value;
+ return self;
+}
+- (RGDFeatureBuilder*) setLocationBuilder:(RGDPointBuilder*) builderForValue {
+ return [self setLocation:[builderForValue build]];
+}
+- (RGDFeatureBuilder*) mergeLocation:(RGDPoint*) value {
+ if (resultFeature.hasLocation &&
+ resultFeature.location != [RGDPoint defaultInstance]) {
+ resultFeature.location =
+ [[[RGDPoint builderWithPrototype:resultFeature.location] mergeFrom:value] buildPartial];
+ } else {
+ resultFeature.location = value;
+ }
+ resultFeature.hasLocation = YES;
+ return self;
+}
+- (RGDFeatureBuilder*) clearLocation {
+ resultFeature.hasLocation = NO;
+ resultFeature.location = [RGDPoint defaultInstance];
+ return self;
+}
+@end
+
+@interface RGDRouteNote ()
+@property (strong) RGDPoint* location;
+@property (strong) NSString* message;
+@end
+
+@implementation RGDRouteNote
+
+- (BOOL) hasLocation {
+ return !!hasLocation_;
+}
+- (void) setHasLocation:(BOOL) _value_ {
+ hasLocation_ = !!_value_;
+}
+@synthesize location;
+- (BOOL) hasMessage {
+ return !!hasMessage_;
+}
+- (void) setHasMessage:(BOOL) _value_ {
+ hasMessage_ = !!_value_;
+}
+@synthesize message;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.location = [RGDPoint defaultInstance];
+ self.message = @"";
+ }
+ return self;
+}
+static RGDRouteNote* defaultRGDRouteNoteInstance = nil;
++ (void) initialize {
+ if (self == [RGDRouteNote class]) {
+ defaultRGDRouteNoteInstance = [[RGDRouteNote alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRGDRouteNoteInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRGDRouteNoteInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasLocation) {
+ [output writeMessage:1 value:self.location];
+ }
+ if (self.hasMessage) {
+ [output writeString:2 value:self.message];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasLocation) {
+ size_ += computeMessageSize(1, self.location);
+ }
+ if (self.hasMessage) {
+ size_ += computeStringSize(2, self.message);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RGDRouteNote*) parseFromData:(NSData*) data {
+ return (RGDRouteNote*)[[[RGDRouteNote builder] mergeFromData:data] build];
+}
++ (RGDRouteNote*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDRouteNote*)[[[RGDRouteNote builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RGDRouteNote*) parseFromInputStream:(NSInputStream*) input {
+ return (RGDRouteNote*)[[[RGDRouteNote builder] mergeFromInputStream:input] build];
+}
++ (RGDRouteNote*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDRouteNote*)[[[RGDRouteNote builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RGDRouteNote*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RGDRouteNote*)[[[RGDRouteNote builder] mergeFromCodedInputStream:input] build];
+}
++ (RGDRouteNote*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDRouteNote*)[[[RGDRouteNote builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RGDRouteNoteBuilder*) builder {
+ return [[RGDRouteNoteBuilder alloc] init];
+}
++ (RGDRouteNoteBuilder*) builderWithPrototype:(RGDRouteNote*) prototype {
+ return [[RGDRouteNote builder] mergeFrom:prototype];
+}
+- (RGDRouteNoteBuilder*) builder {
+ return [RGDRouteNote builder];
+}
+- (RGDRouteNoteBuilder*) toBuilder {
+ return [RGDRouteNote builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasLocation) {
+ [output appendFormat:@"%@%@ {\n", indent, @"location"];
+ [self.location writeDescriptionTo:output
+ withIndent:[NSString stringWithFormat:@"%@ ", indent]];
+ [output appendFormat:@"%@}\n", indent];
+ }
+ if (self.hasMessage) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"message", self.message];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RGDRouteNote class]]) {
+ return NO;
+ }
+ RGDRouteNote *otherMessage = other;
+ return
+ self.hasLocation == otherMessage.hasLocation &&
+ (!self.hasLocation || [self.location isEqual:otherMessage.location]) &&
+ self.hasMessage == otherMessage.hasMessage &&
+ (!self.hasMessage || [self.message isEqual:otherMessage.message]) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasLocation) {
+ hashCode = hashCode * 31 + [self.location hash];
+ }
+ if (self.hasMessage) {
+ hashCode = hashCode * 31 + [self.message hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RGDRouteNoteBuilder()
+@property (strong) RGDRouteNote* resultRouteNote;
+@end
+
+@implementation RGDRouteNoteBuilder
+@synthesize resultRouteNote;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultRouteNote = [[RGDRouteNote alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultRouteNote;
+}
+- (RGDRouteNoteBuilder*) clear {
+ self.resultRouteNote = [[RGDRouteNote alloc] init];
+ return self;
+}
+- (RGDRouteNoteBuilder*) clone {
+ return [RGDRouteNote builderWithPrototype:resultRouteNote];
+}
+- (RGDRouteNote*) defaultInstance {
+ return [RGDRouteNote defaultInstance];
+}
+- (RGDRouteNote*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RGDRouteNote*) buildPartial {
+ RGDRouteNote* returnMe = resultRouteNote;
+ self.resultRouteNote = nil;
+ return returnMe;
+}
+- (RGDRouteNoteBuilder*) mergeFrom:(RGDRouteNote*) other {
+ if (other == [RGDRouteNote defaultInstance]) {
+ return self;
+ }
+ if (other.hasLocation) {
+ [self mergeLocation:other.location];
+ }
+ if (other.hasMessage) {
+ [self setMessage:other.message];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RGDRouteNoteBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RGDRouteNoteBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 10: {
+ RGDPointBuilder* subBuilder = [RGDPoint builder];
+ if (self.hasLocation) {
+ [subBuilder mergeFrom:self.location];
+ }
+ [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+ [self setLocation:[subBuilder buildPartial]];
+ break;
+ }
+ case 18: {
+ [self setMessage:[input readString]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasLocation {
+ return resultRouteNote.hasLocation;
+}
+- (RGDPoint*) location {
+ return resultRouteNote.location;
+}
+- (RGDRouteNoteBuilder*) setLocation:(RGDPoint*) value {
+ resultRouteNote.hasLocation = YES;
+ resultRouteNote.location = value;
+ return self;
+}
+- (RGDRouteNoteBuilder*) setLocationBuilder:(RGDPointBuilder*) builderForValue {
+ return [self setLocation:[builderForValue build]];
+}
+- (RGDRouteNoteBuilder*) mergeLocation:(RGDPoint*) value {
+ if (resultRouteNote.hasLocation &&
+ resultRouteNote.location != [RGDPoint defaultInstance]) {
+ resultRouteNote.location =
+ [[[RGDPoint builderWithPrototype:resultRouteNote.location] mergeFrom:value] buildPartial];
+ } else {
+ resultRouteNote.location = value;
+ }
+ resultRouteNote.hasLocation = YES;
+ return self;
+}
+- (RGDRouteNoteBuilder*) clearLocation {
+ resultRouteNote.hasLocation = NO;
+ resultRouteNote.location = [RGDPoint defaultInstance];
+ return self;
+}
+- (BOOL) hasMessage {
+ return resultRouteNote.hasMessage;
+}
+- (NSString*) message {
+ return resultRouteNote.message;
+}
+- (RGDRouteNoteBuilder*) setMessage:(NSString*) value {
+ resultRouteNote.hasMessage = YES;
+ resultRouteNote.message = value;
+ return self;
+}
+- (RGDRouteNoteBuilder*) clearMessage {
+ resultRouteNote.hasMessage = NO;
+ resultRouteNote.message = @"";
+ return self;
+}
+@end
+
+@interface RGDRouteSummary ()
+@property SInt32 pointCount;
+@property SInt32 featureCount;
+@property SInt32 distance;
+@property SInt32 elapsedTime;
+@end
+
+@implementation RGDRouteSummary
+
+- (BOOL) hasPointCount {
+ return !!hasPointCount_;
+}
+- (void) setHasPointCount:(BOOL) _value_ {
+ hasPointCount_ = !!_value_;
+}
+@synthesize pointCount;
+- (BOOL) hasFeatureCount {
+ return !!hasFeatureCount_;
+}
+- (void) setHasFeatureCount:(BOOL) _value_ {
+ hasFeatureCount_ = !!_value_;
+}
+@synthesize featureCount;
+- (BOOL) hasDistance {
+ return !!hasDistance_;
+}
+- (void) setHasDistance:(BOOL) _value_ {
+ hasDistance_ = !!_value_;
+}
+@synthesize distance;
+- (BOOL) hasElapsedTime {
+ return !!hasElapsedTime_;
+}
+- (void) setHasElapsedTime:(BOOL) _value_ {
+ hasElapsedTime_ = !!_value_;
+}
+@synthesize elapsedTime;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.pointCount = 0;
+ self.featureCount = 0;
+ self.distance = 0;
+ self.elapsedTime = 0;
+ }
+ return self;
+}
+static RGDRouteSummary* defaultRGDRouteSummaryInstance = nil;
++ (void) initialize {
+ if (self == [RGDRouteSummary class]) {
+ defaultRGDRouteSummaryInstance = [[RGDRouteSummary alloc] init];
+ }
+}
++ (instancetype) defaultInstance {
+ return defaultRGDRouteSummaryInstance;
+}
+- (instancetype) defaultInstance {
+ return defaultRGDRouteSummaryInstance;
+}
+- (BOOL) isInitialized {
+ return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+ if (self.hasPointCount) {
+ [output writeInt32:1 value:self.pointCount];
+ }
+ if (self.hasFeatureCount) {
+ [output writeInt32:2 value:self.featureCount];
+ }
+ if (self.hasDistance) {
+ [output writeInt32:3 value:self.distance];
+ }
+ if (self.hasElapsedTime) {
+ [output writeInt32:4 value:self.elapsedTime];
+ }
+ [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+ __block SInt32 size_ = memoizedSerializedSize;
+ if (size_ != -1) {
+ return size_;
+ }
+
+ size_ = 0;
+ if (self.hasPointCount) {
+ size_ += computeInt32Size(1, self.pointCount);
+ }
+ if (self.hasFeatureCount) {
+ size_ += computeInt32Size(2, self.featureCount);
+ }
+ if (self.hasDistance) {
+ size_ += computeInt32Size(3, self.distance);
+ }
+ if (self.hasElapsedTime) {
+ size_ += computeInt32Size(4, self.elapsedTime);
+ }
+ size_ += self.unknownFields.serializedSize;
+ memoizedSerializedSize = size_;
+ return size_;
+}
++ (RGDRouteSummary*) parseFromData:(NSData*) data {
+ return (RGDRouteSummary*)[[[RGDRouteSummary builder] mergeFromData:data] build];
+}
++ (RGDRouteSummary*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDRouteSummary*)[[[RGDRouteSummary builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RGDRouteSummary*) parseFromInputStream:(NSInputStream*) input {
+ return (RGDRouteSummary*)[[[RGDRouteSummary builder] mergeFromInputStream:input] build];
+}
++ (RGDRouteSummary*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDRouteSummary*)[[[RGDRouteSummary builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RGDRouteSummary*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+ return (RGDRouteSummary*)[[[RGDRouteSummary builder] mergeFromCodedInputStream:input] build];
+}
++ (RGDRouteSummary*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ return (RGDRouteSummary*)[[[RGDRouteSummary builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RGDRouteSummaryBuilder*) builder {
+ return [[RGDRouteSummaryBuilder alloc] init];
+}
++ (RGDRouteSummaryBuilder*) builderWithPrototype:(RGDRouteSummary*) prototype {
+ return [[RGDRouteSummary builder] mergeFrom:prototype];
+}
+- (RGDRouteSummaryBuilder*) builder {
+ return [RGDRouteSummary builder];
+}
+- (RGDRouteSummaryBuilder*) toBuilder {
+ return [RGDRouteSummary builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+ if (self.hasPointCount) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"pointCount", [NSNumber numberWithInteger:self.pointCount]];
+ }
+ if (self.hasFeatureCount) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"featureCount", [NSNumber numberWithInteger:self.featureCount]];
+ }
+ if (self.hasDistance) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"distance", [NSNumber numberWithInteger:self.distance]];
+ }
+ if (self.hasElapsedTime) {
+ [output appendFormat:@"%@%@: %@\n", indent, @"elapsedTime", [NSNumber numberWithInteger:self.elapsedTime]];
+ }
+ [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+ if (other == self) {
+ return YES;
+ }
+ if (![other isKindOfClass:[RGDRouteSummary class]]) {
+ return NO;
+ }
+ RGDRouteSummary *otherMessage = other;
+ return
+ self.hasPointCount == otherMessage.hasPointCount &&
+ (!self.hasPointCount || self.pointCount == otherMessage.pointCount) &&
+ self.hasFeatureCount == otherMessage.hasFeatureCount &&
+ (!self.hasFeatureCount || self.featureCount == otherMessage.featureCount) &&
+ self.hasDistance == otherMessage.hasDistance &&
+ (!self.hasDistance || self.distance == otherMessage.distance) &&
+ self.hasElapsedTime == otherMessage.hasElapsedTime &&
+ (!self.hasElapsedTime || self.elapsedTime == otherMessage.elapsedTime) &&
+ (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+ __block NSUInteger hashCode = 7;
+ if (self.hasPointCount) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.pointCount] hash];
+ }
+ if (self.hasFeatureCount) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.featureCount] hash];
+ }
+ if (self.hasDistance) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.distance] hash];
+ }
+ if (self.hasElapsedTime) {
+ hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.elapsedTime] hash];
+ }
+ hashCode = hashCode * 31 + [self.unknownFields hash];
+ return hashCode;
+}
+@end
+
+@interface RGDRouteSummaryBuilder()
+@property (strong) RGDRouteSummary* resultRouteSummary;
+@end
+
+@implementation RGDRouteSummaryBuilder
+@synthesize resultRouteSummary;
+- (instancetype) init {
+ if ((self = [super init])) {
+ self.resultRouteSummary = [[RGDRouteSummary alloc] init];
+ }
+ return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+ return resultRouteSummary;
+}
+- (RGDRouteSummaryBuilder*) clear {
+ self.resultRouteSummary = [[RGDRouteSummary alloc] init];
+ return self;
+}
+- (RGDRouteSummaryBuilder*) clone {
+ return [RGDRouteSummary builderWithPrototype:resultRouteSummary];
+}
+- (RGDRouteSummary*) defaultInstance {
+ return [RGDRouteSummary defaultInstance];
+}
+- (RGDRouteSummary*) build {
+ [self checkInitialized];
+ return [self buildPartial];
+}
+- (RGDRouteSummary*) buildPartial {
+ RGDRouteSummary* returnMe = resultRouteSummary;
+ self.resultRouteSummary = nil;
+ return returnMe;
+}
+- (RGDRouteSummaryBuilder*) mergeFrom:(RGDRouteSummary*) other {
+ if (other == [RGDRouteSummary defaultInstance]) {
+ return self;
+ }
+ if (other.hasPointCount) {
+ [self setPointCount:other.pointCount];
+ }
+ if (other.hasFeatureCount) {
+ [self setFeatureCount:other.featureCount];
+ }
+ if (other.hasDistance) {
+ [self setDistance:other.distance];
+ }
+ if (other.hasElapsedTime) {
+ [self setElapsedTime:other.elapsedTime];
+ }
+ [self mergeUnknownFields:other.unknownFields];
+ return self;
+}
+- (RGDRouteSummaryBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+ return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RGDRouteSummaryBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+ PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+ while (YES) {
+ SInt32 tag = [input readTag];
+ switch (tag) {
+ case 0:
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ default: {
+ if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+ [self setUnknownFields:[unknownFields build]];
+ return self;
+ }
+ break;
+ }
+ case 8: {
+ [self setPointCount:[input readInt32]];
+ break;
+ }
+ case 16: {
+ [self setFeatureCount:[input readInt32]];
+ break;
+ }
+ case 24: {
+ [self setDistance:[input readInt32]];
+ break;
+ }
+ case 32: {
+ [self setElapsedTime:[input readInt32]];
+ break;
+ }
+ }
+ }
+}
+- (BOOL) hasPointCount {
+ return resultRouteSummary.hasPointCount;
+}
+- (SInt32) pointCount {
+ return resultRouteSummary.pointCount;
+}
+- (RGDRouteSummaryBuilder*) setPointCount:(SInt32) value {
+ resultRouteSummary.hasPointCount = YES;
+ resultRouteSummary.pointCount = value;
+ return self;
+}
+- (RGDRouteSummaryBuilder*) clearPointCount {
+ resultRouteSummary.hasPointCount = NO;
+ resultRouteSummary.pointCount = 0;
+ return self;
+}
+- (BOOL) hasFeatureCount {
+ return resultRouteSummary.hasFeatureCount;
+}
+- (SInt32) featureCount {
+ return resultRouteSummary.featureCount;
+}
+- (RGDRouteSummaryBuilder*) setFeatureCount:(SInt32) value {
+ resultRouteSummary.hasFeatureCount = YES;
+ resultRouteSummary.featureCount = value;
+ return self;
+}
+- (RGDRouteSummaryBuilder*) clearFeatureCount {
+ resultRouteSummary.hasFeatureCount = NO;
+ resultRouteSummary.featureCount = 0;
+ return self;
+}
+- (BOOL) hasDistance {
+ return resultRouteSummary.hasDistance;
+}
+- (SInt32) distance {
+ return resultRouteSummary.distance;
+}
+- (RGDRouteSummaryBuilder*) setDistance:(SInt32) value {
+ resultRouteSummary.hasDistance = YES;
+ resultRouteSummary.distance = value;
+ return self;
+}
+- (RGDRouteSummaryBuilder*) clearDistance {
+ resultRouteSummary.hasDistance = NO;
+ resultRouteSummary.distance = 0;
+ return self;
+}
+- (BOOL) hasElapsedTime {
+ return resultRouteSummary.hasElapsedTime;
+}
+- (SInt32) elapsedTime {
+ return resultRouteSummary.elapsedTime;
+}
+- (RGDRouteSummaryBuilder*) setElapsedTime:(SInt32) value {
+ resultRouteSummary.hasElapsedTime = YES;
+ resultRouteSummary.elapsedTime = value;
+ return self;
+}
+- (RGDRouteSummaryBuilder*) clearElapsedTime {
+ resultRouteSummary.hasElapsedTime = NO;
+ resultRouteSummary.elapsedTime = 0;
+ return self;
+}
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RouteGuideClient/Route_guide.podspec b/src/objective-c/examples/Sample/RouteGuideClient/Route_guide.podspec
new file mode 100644
index 0000000000..04d847bf8f
--- /dev/null
+++ b/src/objective-c/examples/Sample/RouteGuideClient/Route_guide.podspec
@@ -0,0 +1,17 @@
+Pod::Spec.new do |s|
+ s.name = 'Route_guide'
+ s.version = '0.0.1'
+ s.summary = 'Protobuf library generated from route_guide.proto'
+ s.homepage = 'https://github.com/grpc/grpc/tree/master/src/objective-c/examples/Sample/RouteGuideClient'
+ s.license = 'New BSD'
+ s.authors = { 'Jorge Canizales' => 'jcanizales@google.com' }
+
+ s.source_files = '*.pb.{h,m}'
+ s.public_header_files = '*.pb.h'
+
+ s.platform = :ios
+ s.ios.deployment_target = '6.0'
+ s.requires_arc = true
+
+ s.dependency 'ProtocolBuffers', '~> 1.9'
+end
diff --git a/src/objective-c/examples/Sample/RouteGuideClient/route_guide.proto b/src/objective-c/examples/Sample/RouteGuideClient/route_guide.proto
new file mode 100644
index 0000000000..91b0372a07
--- /dev/null
+++ b/src/objective-c/examples/Sample/RouteGuideClient/route_guide.proto
@@ -0,0 +1,121 @@
+// 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 grpc.example.routeguide;
+
+import "google/protobuf/objectivec-descriptor.proto";
+option (google.protobuf.objectivec_file_options).class_prefix = "RGD";
+
+// Interface exported by the server.
+service RouteGuide {
+ // A simple RPC.
+ //
+ // Obtains the feature at a given position.
+ rpc GetFeature(Point) returns (Feature) {}
+
+ // A server-to-client streaming RPC.
+ //
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+// rpc ListFeatures(Rectangle) returns (stream Feature) {}
+
+ // A client-to-server streaming RPC.
+ //
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+// rpc RecordRoute(stream Point) returns (RouteSummary) {}
+
+ // A Bidirectional streaming RPC.
+ //
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+// rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+}
+
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ optional int32 latitude = 1;
+ optional int32 longitude = 2;
+}
+
+// A latitude-longitude rectangle, represented as two diagonally opposite
+// points "lo" and "hi".
+message Rectangle {
+ // One corner of the rectangle.
+ optional Point lo = 1;
+
+ // The other corner of the rectangle.
+ optional Point hi = 2;
+}
+
+// A feature names something at a given point.
+//
+// If a feature could not be named, the name is empty.
+message Feature {
+ // The name of the feature.
+ optional string name = 1;
+
+ // The point where the feature is detected.
+ optional Point location = 2;
+}
+
+// A RouteNote is a message sent while at a given point.
+message RouteNote {
+ // The location from which the message is sent.
+ optional Point location = 1;
+
+ // The message to be sent.
+ optional string message = 2;
+}
+
+// A RouteSummary is received in response to a RecordRoute rpc.
+//
+// It contains the number of individual points received, the number of
+// detected features, and the total distance covered as the cumulative sum of
+// the distance between each point.
+message RouteSummary {
+ // The number of points received.
+ optional int32 point_count = 1;
+
+ // The number of known features passed while traversing the route.
+ optional int32 feature_count = 2;
+
+ // The distance covered in metres.
+ optional int32 distance = 3;
+
+ // The duration of the traversal in seconds.
+ optional int32 elapsed_time = 4;
+} \ No newline at end of file
diff --git a/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj b/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj
index 162046fca6..3ddaceadce 100644
--- a/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj
+++ b/src/objective-c/examples/Sample/Sample.xcodeproj/project.pbxproj
@@ -1,1024 +1,532 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>archiveVersion</key>
- <string>1</string>
- <key>classes</key>
- <dict/>
- <key>objectVersion</key>
- <string>46</string>
- <key>objects</key>
- <dict>
- <key>04554623324BE4A838846086</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array/>
- <key>inputPaths</key>
- <array/>
- <key>isa</key>
- <string>PBXShellScriptBuildPhase</string>
- <key>name</key>
- <string>Copy Pods Resources</string>
- <key>outputPaths</key>
- <array/>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
- <key>shellPath</key>
- <string>/bin/sh</string>
- <key>shellScript</key>
- <string>"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh"
-</string>
- <key>showEnvVarsInLog</key>
- <string>0</string>
- </dict>
- <key>2DC7B7C4C0410F43B9621631</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.a</string>
- <key>sourceTree</key>
- <string>BUILT_PRODUCTS_DIR</string>
- </dict>
- <key>41F7486D8F66994B0BFB84AF</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array/>
- <key>inputPaths</key>
- <array/>
- <key>isa</key>
- <string>PBXShellScriptBuildPhase</string>
- <key>name</key>
- <string>Check Pods Manifest.lock</string>
- <key>outputPaths</key>
- <array/>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
- <key>shellPath</key>
- <string>/bin/sh</string>
- <key>shellScript</key>
- <string>diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" &gt; /dev/null
-if [[ $? != 0 ]] ; then
- cat &lt;&lt; EOM
-error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
-EOM
- exit 1
-fi
-</string>
- <key>showEnvVarsInLog</key>
- <string>0</string>
- </dict>
- <key>60BBBBB15823BBF7639D7AA9</key>
- <dict>
- <key>fileRef</key>
- <string>2DC7B7C4C0410F43B9621631</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>6369A2611A9322E20015FC5C</key>
- <dict>
- <key>children</key>
- <array>
- <string>6369A26C1A9322E20015FC5C</string>
- <string>6369A2861A9322E20015FC5C</string>
- <string>6369A26B1A9322E20015FC5C</string>
- <string>AB3331C9AE6488E61B2B094E</string>
- <string>C4C2C5219053E079C9EFB930</string>
- </array>
- <key>isa</key>
- <string>PBXGroup</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2621A9322E20015FC5C</key>
- <dict>
- <key>attributes</key>
- <dict>
- <key>LastUpgradeCheck</key>
- <string>0610</string>
- <key>ORGANIZATIONNAME</key>
- <string>gRPC</string>
- <key>TargetAttributes</key>
- <dict>
- <key>6369A2691A9322E20015FC5C</key>
- <dict>
- <key>CreatedOnToolsVersion</key>
- <string>6.1.1</string>
- </dict>
- <key>6369A2821A9322E20015FC5C</key>
- <dict>
- <key>CreatedOnToolsVersion</key>
- <string>6.1.1</string>
- <key>TestTargetID</key>
- <string>6369A2691A9322E20015FC5C</string>
- </dict>
- </dict>
- </dict>
- <key>buildConfigurationList</key>
- <string>6369A2651A9322E20015FC5C</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>
- <string>Base</string>
- </array>
- <key>mainGroup</key>
- <string>6369A2611A9322E20015FC5C</string>
- <key>productRefGroup</key>
- <string>6369A26B1A9322E20015FC5C</string>
- <key>projectDirPath</key>
- <string></string>
- <key>projectReferences</key>
- <array/>
- <key>projectRoot</key>
- <string></string>
- <key>targets</key>
- <array>
- <string>6369A2691A9322E20015FC5C</string>
- <string>6369A2821A9322E20015FC5C</string>
- </array>
- </dict>
- <key>6369A2651A9322E20015FC5C</key>
- <dict>
- <key>buildConfigurations</key>
- <array>
- <string>6369A28B1A9322E20015FC5C</string>
- <string>6369A28C1A9322E20015FC5C</string>
- </array>
- <key>defaultConfigurationIsVisible</key>
- <string>0</string>
- <key>defaultConfigurationName</key>
- <string>Release</string>
- <key>isa</key>
- <string>XCConfigurationList</string>
- </dict>
- <key>6369A2661A9322E20015FC5C</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array>
- <string>6369A2761A9322E20015FC5C</string>
- <string>6369A2731A9322E20015FC5C</string>
- <string>6369A2701A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXSourcesBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
- </dict>
- <key>6369A2671A9322E20015FC5C</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array>
- <string>FC81FE63CA655031F3524EC0</string>
- </array>
- <key>isa</key>
- <string>PBXFrameworksBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
- </dict>
- <key>6369A2681A9322E20015FC5C</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array>
- <string>6369A2791A9322E20015FC5C</string>
- <string>6369A27E1A9322E20015FC5C</string>
- <string>6369A27B1A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXResourcesBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
- </dict>
- <key>6369A2691A9322E20015FC5C</key>
- <dict>
- <key>buildConfigurationList</key>
- <string>6369A28D1A9322E20015FC5C</string>
- <key>buildPhases</key>
- <array>
- <string>41F7486D8F66994B0BFB84AF</string>
- <string>6369A2661A9322E20015FC5C</string>
- <string>6369A2671A9322E20015FC5C</string>
- <string>6369A2681A9322E20015FC5C</string>
- <string>04554623324BE4A838846086</string>
- </array>
- <key>buildRules</key>
- <array/>
- <key>dependencies</key>
- <array/>
- <key>isa</key>
- <string>PBXNativeTarget</string>
- <key>name</key>
- <string>Sample</string>
- <key>productName</key>
- <string>Sample</string>
- <key>productReference</key>
- <string>6369A26A1A9322E20015FC5C</string>
- <key>productType</key>
- <string>com.apple.product-type.application</string>
- </dict>
- <key>6369A26A1A9322E20015FC5C</key>
- <dict>
- <key>explicitFileType</key>
- <string>wrapper.application</string>
- <key>includeInIndex</key>
- <string>0</string>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>path</key>
- <string>Sample.app</string>
- <key>sourceTree</key>
- <string>BUILT_PRODUCTS_DIR</string>
- </dict>
- <key>6369A26B1A9322E20015FC5C</key>
- <dict>
- <key>children</key>
- <array>
- <string>6369A26A1A9322E20015FC5C</string>
- <string>6369A2831A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXGroup</string>
- <key>name</key>
- <string>Products</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A26C1A9322E20015FC5C</key>
- <dict>
- <key>children</key>
- <array>
- <string>6369A2711A9322E20015FC5C</string>
- <string>6369A2721A9322E20015FC5C</string>
- <string>6369A2741A9322E20015FC5C</string>
- <string>6369A2751A9322E20015FC5C</string>
- <string>6369A2771A9322E20015FC5C</string>
- <string>6369A27A1A9322E20015FC5C</string>
- <string>6369A27C1A9322E20015FC5C</string>
- <string>6369A26D1A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXGroup</string>
- <key>path</key>
- <string>Sample</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A26D1A9322E20015FC5C</key>
- <dict>
- <key>children</key>
- <array>
- <string>6369A26E1A9322E20015FC5C</string>
- <string>6369A26F1A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXGroup</string>
- <key>name</key>
- <string>Supporting Files</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A26E1A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>text.plist.xml</string>
- <key>path</key>
- <string>Info.plist</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A26F1A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
- <key>path</key>
- <string>main.m</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2701A9322E20015FC5C</key>
- <dict>
- <key>fileRef</key>
- <string>6369A26F1A9322E20015FC5C</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>6369A2711A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
- <key>path</key>
- <string>AppDelegate.h</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2721A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
- <key>path</key>
- <string>AppDelegate.m</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2731A9322E20015FC5C</key>
- <dict>
- <key>fileRef</key>
- <string>6369A2721A9322E20015FC5C</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>6369A2741A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.h</string>
- <key>path</key>
- <string>ViewController.h</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2751A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
- <key>path</key>
- <string>ViewController.m</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2761A9322E20015FC5C</key>
- <dict>
- <key>fileRef</key>
- <string>6369A2751A9322E20015FC5C</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>6369A2771A9322E20015FC5C</key>
- <dict>
- <key>children</key>
- <array>
- <string>6369A2781A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXVariantGroup</string>
- <key>name</key>
- <string>Main.storyboard</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2781A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>file.storyboard</string>
- <key>name</key>
- <string>Base</string>
- <key>path</key>
- <string>Base.lproj/Main.storyboard</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2791A9322E20015FC5C</key>
- <dict>
- <key>fileRef</key>
- <string>6369A2771A9322E20015FC5C</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>6369A27A1A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>folder.assetcatalog</string>
- <key>path</key>
- <string>Images.xcassets</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A27B1A9322E20015FC5C</key>
- <dict>
- <key>fileRef</key>
- <string>6369A27A1A9322E20015FC5C</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>6369A27C1A9322E20015FC5C</key>
- <dict>
- <key>children</key>
- <array>
- <string>6369A27D1A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXVariantGroup</string>
- <key>name</key>
- <string>LaunchScreen.xib</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A27D1A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>file.xib</string>
- <key>name</key>
- <string>Base</string>
- <key>path</key>
- <string>Base.lproj/LaunchScreen.xib</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A27E1A9322E20015FC5C</key>
- <dict>
- <key>fileRef</key>
- <string>6369A27C1A9322E20015FC5C</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>6369A27F1A9322E20015FC5C</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array>
- <string>6369A28A1A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXSourcesBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
- </dict>
- <key>6369A2801A9322E20015FC5C</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array>
- <string>60BBBBB15823BBF7639D7AA9</string>
- </array>
- <key>isa</key>
- <string>PBXFrameworksBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
- </dict>
- <key>6369A2811A9322E20015FC5C</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array/>
- <key>isa</key>
- <string>PBXResourcesBuildPhase</string>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
- </dict>
- <key>6369A2821A9322E20015FC5C</key>
- <dict>
- <key>buildConfigurationList</key>
- <string>6369A2901A9322E20015FC5C</string>
- <key>buildPhases</key>
- <array>
- <string>75C393B2FDC60A22B2121058</string>
- <string>6369A27F1A9322E20015FC5C</string>
- <string>6369A2801A9322E20015FC5C</string>
- <string>6369A2811A9322E20015FC5C</string>
- <string>7B8CDC152F76D6014A96C798</string>
- </array>
- <key>buildRules</key>
- <array/>
- <key>dependencies</key>
- <array>
- <string>6369A2851A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXNativeTarget</string>
- <key>name</key>
- <string>SampleTests</string>
- <key>productName</key>
- <string>SampleTests</string>
- <key>productReference</key>
- <string>6369A2831A9322E20015FC5C</string>
- <key>productType</key>
- <string>com.apple.product-type.bundle.unit-test</string>
- </dict>
- <key>6369A2831A9322E20015FC5C</key>
- <dict>
- <key>explicitFileType</key>
- <string>wrapper.cfbundle</string>
- <key>includeInIndex</key>
- <string>0</string>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>path</key>
- <string>SampleTests.xctest</string>
- <key>sourceTree</key>
- <string>BUILT_PRODUCTS_DIR</string>
- </dict>
- <key>6369A2841A9322E20015FC5C</key>
- <dict>
- <key>containerPortal</key>
- <string>6369A2621A9322E20015FC5C</string>
- <key>isa</key>
- <string>PBXContainerItemProxy</string>
- <key>proxyType</key>
- <string>1</string>
- <key>remoteGlobalIDString</key>
- <string>6369A2691A9322E20015FC5C</string>
- <key>remoteInfo</key>
- <string>Sample</string>
- </dict>
- <key>6369A2851A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXTargetDependency</string>
- <key>target</key>
- <string>6369A2691A9322E20015FC5C</string>
- <key>targetProxy</key>
- <string>6369A2841A9322E20015FC5C</string>
- </dict>
- <key>6369A2861A9322E20015FC5C</key>
- <dict>
- <key>children</key>
- <array>
- <string>6369A2891A9322E20015FC5C</string>
- <string>6369A2871A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXGroup</string>
- <key>path</key>
- <string>SampleTests</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2871A9322E20015FC5C</key>
- <dict>
- <key>children</key>
- <array>
- <string>6369A2881A9322E20015FC5C</string>
- </array>
- <key>isa</key>
- <string>PBXGroup</string>
- <key>name</key>
- <string>Supporting Files</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2881A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>text.plist.xml</string>
- <key>path</key>
- <string>Info.plist</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A2891A9322E20015FC5C</key>
- <dict>
- <key>isa</key>
- <string>PBXFileReference</string>
- <key>lastKnownFileType</key>
- <string>sourcecode.c.objc</string>
- <key>path</key>
- <string>SampleTests.m</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>6369A28A1A9322E20015FC5C</key>
- <dict>
- <key>fileRef</key>
- <string>6369A2891A9322E20015FC5C</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- <key>6369A28B1A9322E20015FC5C</key>
- <dict>
- <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_ERROR</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_ERROR</string>
- <key>CLANG_WARN_UNREACHABLE_CODE</key>
- <string>YES</string>
- <key>CLANG_WARN__DUPLICATE_METHOD_MATCH</key>
- <string>YES</string>
- <key>CODE_SIGN_IDENTITY[sdk=iphoneos*]</key>
- <string>iPhone Developer</string>
- <key>COPY_PHASE_STRIP</key>
- <string>NO</string>
- <key>ENABLE_STRICT_OBJC_MSGSEND</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>DEBUG=1</string>
- <string>$(inherited)</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>
- <string>YES_ERROR</string>
- <key>GCC_WARN_UNDECLARED_SELECTOR</key>
- <string>YES</string>
- <key>GCC_WARN_UNINITIALIZED_AUTOS</key>
- <string>YES_AGGRESSIVE</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.1</string>
- <key>MTL_ENABLE_DEBUG_INFO</key>
- <string>YES</string>
- <key>ONLY_ACTIVE_ARCH</key>
- <string>YES</string>
- <key>SDKROOT</key>
- <string>iphoneos</string>
- <key>TARGETED_DEVICE_FAMILY</key>
- <string>1,2</string>
- </dict>
- <key>isa</key>
- <string>XCBuildConfiguration</string>
- <key>name</key>
- <string>Debug</string>
- </dict>
- <key>6369A28C1A9322E20015FC5C</key>
- <dict>
- <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_ERROR</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_ERROR</string>
- <key>CLANG_WARN_UNREACHABLE_CODE</key>
- <string>YES</string>
- <key>CLANG_WARN__DUPLICATE_METHOD_MATCH</key>
- <string>YES</string>
- <key>CODE_SIGN_IDENTITY[sdk=iphoneos*]</key>
- <string>iPhone Developer</string>
- <key>COPY_PHASE_STRIP</key>
- <string>YES</string>
- <key>ENABLE_NS_ASSERTIONS</key>
- <string>NO</string>
- <key>ENABLE_STRICT_OBJC_MSGSEND</key>
- <string>YES</string>
- <key>GCC_C_LANGUAGE_STANDARD</key>
- <string>gnu99</string>
- <key>GCC_WARN_64_TO_32_BIT_CONVERSION</key>
- <string>YES</string>
- <key>GCC_WARN_ABOUT_RETURN_TYPE</key>
- <string>YES_ERROR</string>
- <key>GCC_WARN_UNDECLARED_SELECTOR</key>
- <string>YES</string>
- <key>GCC_WARN_UNINITIALIZED_AUTOS</key>
- <string>YES_AGGRESSIVE</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.1</string>
- <key>MTL_ENABLE_DEBUG_INFO</key>
- <string>NO</string>
- <key>SDKROOT</key>
- <string>iphoneos</string>
- <key>TARGETED_DEVICE_FAMILY</key>
- <string>1,2</string>
- <key>VALIDATE_PRODUCT</key>
- <string>YES</string>
- </dict>
- <key>isa</key>
- <string>XCBuildConfiguration</string>
- <key>name</key>
- <string>Release</string>
- </dict>
- <key>6369A28D1A9322E20015FC5C</key>
- <dict>
- <key>buildConfigurations</key>
- <array>
- <string>6369A28E1A9322E20015FC5C</string>
- <string>6369A28F1A9322E20015FC5C</string>
- </array>
- <key>defaultConfigurationIsVisible</key>
- <string>0</string>
- <key>isa</key>
- <string>XCConfigurationList</string>
- </dict>
- <key>6369A28E1A9322E20015FC5C</key>
- <dict>
- <key>baseConfigurationReference</key>
- <string>AC29DD6FCDF962F519FEBB0D</string>
- <key>buildSettings</key>
- <dict>
- <key>ASSETCATALOG_COMPILER_APPICON_NAME</key>
- <string>AppIcon</string>
- <key>INFOPLIST_FILE</key>
- <string>Sample/Info.plist</string>
- <key>LD_RUNPATH_SEARCH_PATHS</key>
- <string>$(inherited) @executable_path/Frameworks</string>
- <key>PRODUCT_NAME</key>
- <string>$(TARGET_NAME)</string>
- </dict>
- <key>isa</key>
- <string>XCBuildConfiguration</string>
- <key>name</key>
- <string>Debug</string>
- </dict>
- <key>6369A28F1A9322E20015FC5C</key>
- <dict>
- <key>baseConfigurationReference</key>
- <string>C68330F8D451CC6ACEABA09F</string>
- <key>buildSettings</key>
- <dict>
- <key>ASSETCATALOG_COMPILER_APPICON_NAME</key>
- <string>AppIcon</string>
- <key>INFOPLIST_FILE</key>
- <string>Sample/Info.plist</string>
- <key>LD_RUNPATH_SEARCH_PATHS</key>
- <string>$(inherited) @executable_path/Frameworks</string>
- <key>PRODUCT_NAME</key>
- <string>$(TARGET_NAME)</string>
- </dict>
- <key>isa</key>
- <string>XCBuildConfiguration</string>
- <key>name</key>
- <string>Release</string>
- </dict>
- <key>6369A2901A9322E20015FC5C</key>
- <dict>
- <key>buildConfigurations</key>
- <array>
- <string>6369A2911A9322E20015FC5C</string>
- <string>6369A2921A9322E20015FC5C</string>
- </array>
- <key>defaultConfigurationIsVisible</key>
- <string>0</string>
- <key>isa</key>
- <string>XCConfigurationList</string>
- </dict>
- <key>6369A2911A9322E20015FC5C</key>
- <dict>
- <key>baseConfigurationReference</key>
- <string>AC29DD6FCDF962F519FEBB0D</string>
- <key>buildSettings</key>
- <dict>
- <key>BUNDLE_LOADER</key>
- <string>$(TEST_HOST)</string>
- <key>FRAMEWORK_SEARCH_PATHS</key>
- <array>
- <string>$(SDKROOT)/Developer/Library/Frameworks</string>
- <string>$(inherited)</string>
- </array>
- <key>GCC_PREPROCESSOR_DEFINITIONS</key>
- <array>
- <string>DEBUG=1</string>
- <string>$(inherited)</string>
- </array>
- <key>INFOPLIST_FILE</key>
- <string>SampleTests/Info.plist</string>
- <key>LD_RUNPATH_SEARCH_PATHS</key>
- <string>$(inherited) @executable_path/Frameworks @loader_path/Frameworks</string>
- <key>PRODUCT_NAME</key>
- <string>$(TARGET_NAME)</string>
- <key>TEST_HOST</key>
- <string>$(BUILT_PRODUCTS_DIR)/Sample.app/Sample</string>
- </dict>
- <key>isa</key>
- <string>XCBuildConfiguration</string>
- <key>name</key>
- <string>Debug</string>
- </dict>
- <key>6369A2921A9322E20015FC5C</key>
- <dict>
- <key>baseConfigurationReference</key>
- <string>C68330F8D451CC6ACEABA09F</string>
- <key>buildSettings</key>
- <dict>
- <key>BUNDLE_LOADER</key>
- <string>$(TEST_HOST)</string>
- <key>FRAMEWORK_SEARCH_PATHS</key>
- <array>
- <string>$(SDKROOT)/Developer/Library/Frameworks</string>
- <string>$(inherited)</string>
- </array>
- <key>INFOPLIST_FILE</key>
- <string>SampleTests/Info.plist</string>
- <key>LD_RUNPATH_SEARCH_PATHS</key>
- <string>$(inherited) @executable_path/Frameworks @loader_path/Frameworks</string>
- <key>PRODUCT_NAME</key>
- <string>$(TARGET_NAME)</string>
- <key>TEST_HOST</key>
- <string>$(BUILT_PRODUCTS_DIR)/Sample.app/Sample</string>
- </dict>
- <key>isa</key>
- <string>XCBuildConfiguration</string>
- <key>name</key>
- <string>Release</string>
- </dict>
- <key>75C393B2FDC60A22B2121058</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array/>
- <key>inputPaths</key>
- <array/>
- <key>isa</key>
- <string>PBXShellScriptBuildPhase</string>
- <key>name</key>
- <string>Check Pods Manifest.lock</string>
- <key>outputPaths</key>
- <array/>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
- <key>shellPath</key>
- <string>/bin/sh</string>
- <key>shellScript</key>
- <string>diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" &gt; /dev/null
-if [[ $? != 0 ]] ; then
- cat &lt;&lt; EOM
-error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
-EOM
- exit 1
-fi
-</string>
- <key>showEnvVarsInLog</key>
- <string>0</string>
- </dict>
- <key>7B8CDC152F76D6014A96C798</key>
- <dict>
- <key>buildActionMask</key>
- <string>2147483647</string>
- <key>files</key>
- <array/>
- <key>inputPaths</key>
- <array/>
- <key>isa</key>
- <string>PBXShellScriptBuildPhase</string>
- <key>name</key>
- <string>Copy Pods Resources</string>
- <key>outputPaths</key>
- <array/>
- <key>runOnlyForDeploymentPostprocessing</key>
- <string>0</string>
- <key>shellPath</key>
- <string>/bin/sh</string>
- <key>shellScript</key>
- <string>"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh"
-</string>
- <key>showEnvVarsInLog</key>
- <string>0</string>
- </dict>
- <key>AB3331C9AE6488E61B2B094E</key>
- <dict>
- <key>children</key>
- <array>
- <string>AC29DD6FCDF962F519FEBB0D</string>
- <string>C68330F8D451CC6ACEABA09F</string>
- </array>
- <key>isa</key>
- <string>PBXGroup</string>
- <key>name</key>
- <string>Pods</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>AC29DD6FCDF962F519FEBB0D</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.debug.xcconfig</string>
- <key>path</key>
- <string>Pods/Target Support Files/Pods/Pods.debug.xcconfig</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>C4C2C5219053E079C9EFB930</key>
- <dict>
- <key>children</key>
- <array>
- <string>2DC7B7C4C0410F43B9621631</string>
- </array>
- <key>isa</key>
- <string>PBXGroup</string>
- <key>name</key>
- <string>Frameworks</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>C68330F8D451CC6ACEABA09F</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.release.xcconfig</string>
- <key>path</key>
- <string>Pods/Target Support Files/Pods/Pods.release.xcconfig</string>
- <key>sourceTree</key>
- <string>&lt;group&gt;</string>
- </dict>
- <key>FC81FE63CA655031F3524EC0</key>
- <dict>
- <key>fileRef</key>
- <string>2DC7B7C4C0410F43B9621631</string>
- <key>isa</key>
- <string>PBXBuildFile</string>
- </dict>
- </dict>
- <key>rootObject</key>
- <string>6369A2621A9322E20015FC5C</string>
-</dict>
-</plist>
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 60BBBBB15823BBF7639D7AA9 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2DC7B7C4C0410F43B9621631 /* libPods.a */; };
+ 6369A2701A9322E20015FC5C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6369A26F1A9322E20015FC5C /* main.m */; };
+ 6369A2731A9322E20015FC5C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6369A2721A9322E20015FC5C /* AppDelegate.m */; };
+ 6369A2761A9322E20015FC5C /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6369A2751A9322E20015FC5C /* ViewController.m */; };
+ 6369A2791A9322E20015FC5C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6369A2771A9322E20015FC5C /* Main.storyboard */; };
+ 6369A27B1A9322E20015FC5C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6369A27A1A9322E20015FC5C /* Images.xcassets */; };
+ 6369A27E1A9322E20015FC5C /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6369A27C1A9322E20015FC5C /* LaunchScreen.xib */; };
+ 6369A28A1A9322E20015FC5C /* SampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6369A2891A9322E20015FC5C /* SampleTests.m */; };
+ 63D886A71AE73797000580D7 /* RemoteTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 63D886A61AE73797000580D7 /* RemoteTests.m */; };
+ FC81FE63CA655031F3524EC0 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2DC7B7C4C0410F43B9621631 /* libPods.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 6369A2841A9322E20015FC5C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 6369A2621A9322E20015FC5C /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 6369A2691A9322E20015FC5C;
+ remoteInfo = Sample;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 2DC7B7C4C0410F43B9621631 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6369A26A1A9322E20015FC5C /* Sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Sample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6369A26E1A9322E20015FC5C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 6369A26F1A9322E20015FC5C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 6369A2711A9322E20015FC5C /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ 6369A2721A9322E20015FC5C /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+ 6369A2741A9322E20015FC5C /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
+ 6369A2751A9322E20015FC5C /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
+ 6369A2781A9322E20015FC5C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+ 6369A27A1A9322E20015FC5C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
+ 6369A27D1A9322E20015FC5C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
+ 6369A2831A9322E20015FC5C /* SampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6369A2881A9322E20015FC5C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 6369A2891A9322E20015FC5C /* SampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SampleTests.m; sourceTree = "<group>"; };
+ 63D886A61AE73797000580D7 /* RemoteTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RemoteTests.m; sourceTree = "<group>"; };
+ AC29DD6FCDF962F519FEBB0D /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = "<group>"; };
+ C68330F8D451CC6ACEABA09F /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 6369A2671A9322E20015FC5C /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ FC81FE63CA655031F3524EC0 /* libPods.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6369A2801A9322E20015FC5C /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 60BBBBB15823BBF7639D7AA9 /* libPods.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 6369A2611A9322E20015FC5C = {
+ isa = PBXGroup;
+ children = (
+ 6369A26C1A9322E20015FC5C /* Sample */,
+ 6369A2861A9322E20015FC5C /* SampleTests */,
+ 6369A26B1A9322E20015FC5C /* Products */,
+ AB3331C9AE6488E61B2B094E /* Pods */,
+ C4C2C5219053E079C9EFB930 /* Frameworks */,
+ );
+ sourceTree = "<group>";
+ };
+ 6369A26B1A9322E20015FC5C /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 6369A26A1A9322E20015FC5C /* Sample.app */,
+ 6369A2831A9322E20015FC5C /* SampleTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 6369A26C1A9322E20015FC5C /* Sample */ = {
+ isa = PBXGroup;
+ children = (
+ 6369A2711A9322E20015FC5C /* AppDelegate.h */,
+ 6369A2721A9322E20015FC5C /* AppDelegate.m */,
+ 6369A2741A9322E20015FC5C /* ViewController.h */,
+ 6369A2751A9322E20015FC5C /* ViewController.m */,
+ 6369A2771A9322E20015FC5C /* Main.storyboard */,
+ 6369A27A1A9322E20015FC5C /* Images.xcassets */,
+ 6369A27C1A9322E20015FC5C /* LaunchScreen.xib */,
+ 6369A26D1A9322E20015FC5C /* Supporting Files */,
+ );
+ path = Sample;
+ sourceTree = "<group>";
+ };
+ 6369A26D1A9322E20015FC5C /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 6369A26E1A9322E20015FC5C /* Info.plist */,
+ 6369A26F1A9322E20015FC5C /* main.m */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ 6369A2861A9322E20015FC5C /* SampleTests */ = {
+ isa = PBXGroup;
+ children = (
+ 63D886A61AE73797000580D7 /* RemoteTests.m */,
+ 6369A2891A9322E20015FC5C /* SampleTests.m */,
+ 6369A2871A9322E20015FC5C /* Supporting Files */,
+ );
+ path = SampleTests;
+ sourceTree = "<group>";
+ };
+ 6369A2871A9322E20015FC5C /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 6369A2881A9322E20015FC5C /* Info.plist */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ AB3331C9AE6488E61B2B094E /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ AC29DD6FCDF962F519FEBB0D /* Pods.debug.xcconfig */,
+ C68330F8D451CC6ACEABA09F /* Pods.release.xcconfig */,
+ );
+ name = Pods;
+ sourceTree = "<group>";
+ };
+ C4C2C5219053E079C9EFB930 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 2DC7B7C4C0410F43B9621631 /* libPods.a */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 6369A2691A9322E20015FC5C /* Sample */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 6369A28D1A9322E20015FC5C /* Build configuration list for PBXNativeTarget "Sample" */;
+ buildPhases = (
+ 41F7486D8F66994B0BFB84AF /* Check Pods Manifest.lock */,
+ 6369A2661A9322E20015FC5C /* Sources */,
+ 6369A2671A9322E20015FC5C /* Frameworks */,
+ 6369A2681A9322E20015FC5C /* Resources */,
+ 04554623324BE4A838846086 /* Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Sample;
+ productName = Sample;
+ productReference = 6369A26A1A9322E20015FC5C /* Sample.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 6369A2821A9322E20015FC5C /* SampleTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 6369A2901A9322E20015FC5C /* Build configuration list for PBXNativeTarget "SampleTests" */;
+ buildPhases = (
+ 75C393B2FDC60A22B2121058 /* Check Pods Manifest.lock */,
+ 6369A27F1A9322E20015FC5C /* Sources */,
+ 6369A2801A9322E20015FC5C /* Frameworks */,
+ 6369A2811A9322E20015FC5C /* Resources */,
+ 7B8CDC152F76D6014A96C798 /* Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 6369A2851A9322E20015FC5C /* PBXTargetDependency */,
+ );
+ name = SampleTests;
+ productName = SampleTests;
+ productReference = 6369A2831A9322E20015FC5C /* SampleTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 6369A2621A9322E20015FC5C /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0610;
+ ORGANIZATIONNAME = gRPC;
+ TargetAttributes = {
+ 6369A2691A9322E20015FC5C = {
+ CreatedOnToolsVersion = 6.1.1;
+ };
+ 6369A2821A9322E20015FC5C = {
+ CreatedOnToolsVersion = 6.1.1;
+ TestTargetID = 6369A2691A9322E20015FC5C;
+ };
+ };
+ };
+ buildConfigurationList = 6369A2651A9322E20015FC5C /* Build configuration list for PBXProject "Sample" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 6369A2611A9322E20015FC5C;
+ productRefGroup = 6369A26B1A9322E20015FC5C /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 6369A2691A9322E20015FC5C /* Sample */,
+ 6369A2821A9322E20015FC5C /* SampleTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 6369A2681A9322E20015FC5C /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6369A2791A9322E20015FC5C /* Main.storyboard in Resources */,
+ 6369A27E1A9322E20015FC5C /* LaunchScreen.xib in Resources */,
+ 6369A27B1A9322E20015FC5C /* Images.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6369A2811A9322E20015FC5C /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 04554623324BE4A838846086 /* Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Copy Pods Resources";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 41F7486D8F66994B0BFB84AF /* Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Check Pods Manifest.lock";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+ 75C393B2FDC60A22B2121058 /* Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Check Pods Manifest.lock";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+ 7B8CDC152F76D6014A96C798 /* Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Copy Pods Resources";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 6369A2661A9322E20015FC5C /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6369A2761A9322E20015FC5C /* ViewController.m in Sources */,
+ 6369A2731A9322E20015FC5C /* AppDelegate.m in Sources */,
+ 6369A2701A9322E20015FC5C /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6369A27F1A9322E20015FC5C /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6369A28A1A9322E20015FC5C /* SampleTests.m in Sources */,
+ 63D886A71AE73797000580D7 /* RemoteTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 6369A2851A9322E20015FC5C /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 6369A2691A9322E20015FC5C /* Sample */;
+ targetProxy = 6369A2841A9322E20015FC5C /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 6369A2771A9322E20015FC5C /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 6369A2781A9322E20015FC5C /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "<group>";
+ };
+ 6369A27C1A9322E20015FC5C /* LaunchScreen.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 6369A27D1A9322E20015FC5C /* Base */,
+ );
+ name = LaunchScreen.xib;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 6369A28B1A9322E20015FC5C /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.1;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 6369A28C1A9322E20015FC5C /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.1;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 6369A28E1A9322E20015FC5C /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = AC29DD6FCDF962F519FEBB0D /* Pods.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ INFOPLIST_FILE = Sample/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 6369A28F1A9322E20015FC5C /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = C68330F8D451CC6ACEABA09F /* Pods.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ INFOPLIST_FILE = Sample/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+ 6369A2911A9322E20015FC5C /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = AC29DD6FCDF962F519FEBB0D /* Pods.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(SDKROOT)/Developer/Library/Frameworks",
+ "$(inherited)",
+ );
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ INFOPLIST_FILE = SampleTests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Sample.app/Sample";
+ };
+ name = Debug;
+ };
+ 6369A2921A9322E20015FC5C /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = C68330F8D451CC6ACEABA09F /* Pods.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(SDKROOT)/Developer/Library/Frameworks",
+ "$(inherited)",
+ );
+ INFOPLIST_FILE = SampleTests/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Sample.app/Sample";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 6369A2651A9322E20015FC5C /* Build configuration list for PBXProject "Sample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 6369A28B1A9322E20015FC5C /* Debug */,
+ 6369A28C1A9322E20015FC5C /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 6369A28D1A9322E20015FC5C /* Build configuration list for PBXNativeTarget "Sample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 6369A28E1A9322E20015FC5C /* Debug */,
+ 6369A28F1A9322E20015FC5C /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 6369A2901A9322E20015FC5C /* Build configuration list for PBXNativeTarget "SampleTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 6369A2911A9322E20015FC5C /* Debug */,
+ 6369A2921A9322E20015FC5C /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 6369A2621A9322E20015FC5C /* Project object */;
+}
diff --git a/src/objective-c/examples/Sample/Sample/AppDelegate.h b/src/objective-c/examples/Sample/Sample/AppDelegate.h
index 867e62842a..b1857f28e0 100644
--- a/src/objective-c/examples/Sample/Sample/AppDelegate.h
+++ b/src/objective-c/examples/Sample/Sample/AppDelegate.h
@@ -37,6 +37,5 @@
@property (strong, nonatomic) UIWindow *window;
-
@end
diff --git a/src/objective-c/examples/Sample/Sample/AppDelegate.m b/src/objective-c/examples/Sample/Sample/AppDelegate.m
index 66fceffd85..12e1ad9d67 100644
--- a/src/objective-c/examples/Sample/Sample/AppDelegate.m
+++ b/src/objective-c/examples/Sample/Sample/AppDelegate.m
@@ -34,37 +34,12 @@
#import "AppDelegate.h"
@interface AppDelegate ()
-
@end
@implementation AppDelegate
-
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
- // Override point for customization after application launch.
return YES;
}
-- (void)applicationWillResignActive:(UIApplication *)application {
- // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
- // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
-}
-
-- (void)applicationDidEnterBackground:(UIApplication *)application {
- // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
- // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
-}
-
-- (void)applicationWillEnterForeground:(UIApplication *)application {
- // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
-}
-
-- (void)applicationDidBecomeActive:(UIApplication *)application {
- // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
-}
-
-- (void)applicationWillTerminate:(UIApplication *)application {
- // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
-}
-
@end
diff --git a/src/objective-c/examples/Sample/Sample/ViewController.h b/src/objective-c/examples/Sample/Sample/ViewController.h
index 38cd7f92b6..c0b4aca77e 100644
--- a/src/objective-c/examples/Sample/Sample/ViewController.h
+++ b/src/objective-c/examples/Sample/Sample/ViewController.h
@@ -34,7 +34,4 @@
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
-
-
@end
-
diff --git a/src/objective-c/examples/Sample/Sample/ViewController.m b/src/objective-c/examples/Sample/Sample/ViewController.m
index 839e181070..c7d8e0d145 100644
--- a/src/objective-c/examples/Sample/Sample/ViewController.m
+++ b/src/objective-c/examples/Sample/Sample/ViewController.m
@@ -37,29 +37,34 @@
#import <gRPC/GRPCMethodName.h>
#import <gRPC/GRXWriter+Immediate.h>
#import <gRPC/GRXWriteable.h>
+#import <RemoteTest/Messages.pb.h>
@interface ViewController ()
-
@end
@implementation ViewController
- (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"];
+ method:@"UnaryCall"];
- id<GRXWriter> requestsWriter = [GRXWriter writerWithValue:[NSData data]];
+ RMTSimpleRequest *request = [[[[[[RMTSimpleRequestBuilder alloc] init]
+ setResponseSize:100]
+ setFillUsername:YES]
+ setFillOauthScope:YES]
+ build];
+ id<GRXWriter> requestsWriter = [GRXWriter writerWithValue:[request data]];
- GRPCCall *call = [[GRPCCall alloc] initWithHost:@"grpc-test.sandbox.google.com:443"
+ GRPCCall *call = [[GRPCCall alloc] initWithHost:@"grpc-test.sandbox.google.com"
method:method
requestsWriter:requestsWriter];
id<GRXWriteable> responsesWriteable = [[GRXWriteable alloc] initWithValueHandler:^(NSData *value) {
- NSLog(@"Received response: %@", value);
+ RMTSimpleResponse *response = [RMTSimpleResponse parseFromData:value];
+ NSLog(@"Received response:\n%@", response);
} completionHandler:^(NSError *errorOrNil) {
NSLog(@"Finished with error: %@", errorOrNil);
}];
@@ -67,9 +72,4 @@
[call startWithWriteable:responsesWriteable];
}
-- (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
-}
-
@end
diff --git a/src/objective-c/examples/Sample/SampleTests/RemoteTests.m b/src/objective-c/examples/Sample/SampleTests/RemoteTests.m
new file mode 100644
index 0000000000..6091aa9d31
--- /dev/null
+++ b/src/objective-c/examples/Sample/SampleTests/RemoteTests.m
@@ -0,0 +1,144 @@
+/*
+ *
+ * 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 <UIKit/UIKit.h>
+#import <XCTest/XCTest.h>
+
+#import <gRPC/GRPCCall.h>
+#import <gRPC/GRPCMethodName.h>
+#import <gRPC/GRXWriter+Immediate.h>
+#import <gRPC/GRXWriteable.h>
+#import <RemoteTest/Messages.pb.h>
+
+@interface RemoteTests : XCTestCase
+@end
+
+@implementation RemoteTests
+
+- (void)testConnectionToRemoteServer {
+ __weak XCTestExpectation *expectation = [self expectationWithDescription:@"Server reachable."];
+
+ // This method isn't implemented by the remote server.
+ GRPCMethodName *method = [[GRPCMethodName alloc] initWithPackage:@"grpc.testing"
+ interface:@"TestService"
+ method:@"Nonexistent"];
+
+ id<GRXWriter> requestsWriter = [GRXWriter writerWithValue:[NSData data]];
+
+ GRPCCall *call = [[GRPCCall alloc] initWithHost:@"grpc-test.sandbox.google.com"
+ method:method
+ requestsWriter:requestsWriter];
+
+ id<GRXWriteable> responsesWriteable = [[GRXWriteable alloc] initWithValueHandler:^(NSData *value) {
+ XCTFail(@"Received unexpected response: %@", value);
+ } completionHandler:^(NSError *errorOrNil) {
+ XCTAssertNotNil(errorOrNil, @"Finished without error!");
+ // TODO(jcanizales): The server should return code 12 UNIMPLEMENTED, not 5 NOT FOUND.
+ XCTAssertEqual(errorOrNil.code, 5, @"Finished with unexpected error: %@", errorOrNil);
+ [expectation fulfill];
+ }];
+
+ [call startWithWriteable:responsesWriteable];
+
+ [self waitForExpectationsWithTimeout:2. handler:nil];
+}
+
+- (void)testEmptyRPC {
+ __weak XCTestExpectation *response = [self expectationWithDescription:@"Empty response received."];
+ __weak XCTestExpectation *completion = [self expectationWithDescription:@"Empty RPC completed."];
+
+ GRPCMethodName *method = [[GRPCMethodName alloc] initWithPackage:@"grpc.testing"
+ interface:@"TestService"
+ method:@"EmptyCall"];
+
+ id<GRXWriter> requestsWriter = [GRXWriter writerWithValue:[NSData data]];
+
+ GRPCCall *call = [[GRPCCall alloc] initWithHost:@"grpc-test.sandbox.google.com"
+ method:method
+ requestsWriter:requestsWriter];
+
+ id<GRXWriteable> responsesWriteable = [[GRXWriteable alloc] initWithValueHandler:^(NSData *value) {
+ XCTAssertNotNil(value, @"nil value received as response.");
+ XCTAssertEqual([value length], 0, @"Non-empty response received: %@", value);
+ [response fulfill];
+ } completionHandler:^(NSError *errorOrNil) {
+ XCTAssertNil(errorOrNil, @"Finished with unexpected error: %@", errorOrNil);
+ [completion fulfill];
+ }];
+
+ [call startWithWriteable:responsesWriteable];
+
+ [self waitForExpectationsWithTimeout:2. handler:nil];
+}
+
+- (void)testSimpleProtoRPC {
+ __weak XCTestExpectation *response = [self expectationWithDescription:@"Response received."];
+ __weak XCTestExpectation *expectedResponse =
+ [self expectationWithDescription:@"Expected response."];
+ __weak XCTestExpectation *completion = [self expectationWithDescription:@"RPC completed."];
+
+ GRPCMethodName *method = [[GRPCMethodName alloc] initWithPackage:@"grpc.testing"
+ interface:@"TestService"
+ method:@"UnaryCall"];
+
+ RMTSimpleRequest *request = [[[[[[RMTSimpleRequestBuilder alloc] init]
+ setResponseSize:100]
+ setFillUsername:YES]
+ setFillOauthScope:YES]
+ build];
+ id<GRXWriter> requestsWriter = [GRXWriter writerWithValue:[request data]];
+
+ GRPCCall *call = [[GRPCCall alloc] initWithHost:@"grpc-test.sandbox.google.com"
+ method:method
+ requestsWriter:requestsWriter];
+
+ id<GRXWriteable> responsesWriteable = [[GRXWriteable alloc] initWithValueHandler:^(NSData *value) {
+ XCTAssertNotNil(value, @"nil value received as response.");
+ [response fulfill];
+ XCTAssertGreaterThan(value.length, 0, @"Empty response received.");
+ RMTSimpleResponse *response = [RMTSimpleResponse parseFromData:value];
+ // We expect empty strings, not nil:
+ XCTAssertNotNil(response.username, @"Response's username is nil.");
+ XCTAssertNotNil(response.oauthScope, @"Response's OAuth scope is nil.");
+ [expectedResponse fulfill];
+ } completionHandler:^(NSError *errorOrNil) {
+ XCTAssertNil(errorOrNil, @"Finished with unexpected error: %@", errorOrNil);
+ [completion fulfill];
+ }];
+
+ [call startWithWriteable:responsesWriteable];
+
+ [self waitForExpectationsWithTimeout:2. handler:nil];
+}
+
+@end
diff --git a/src/objective-c/examples/Sample/SampleTests/SampleTests.m b/src/objective-c/examples/Sample/SampleTests/SampleTests.m
index bf0b3642b1..6d6875c233 100644
--- a/src/objective-c/examples/Sample/SampleTests/SampleTests.m
+++ b/src/objective-c/examples/Sample/SampleTests/SampleTests.m
@@ -38,6 +38,7 @@
#import <gRPC/GRPCMethodName.h>
#import <gRPC/GRXWriter+Immediate.h>
#import <gRPC/GRXWriteable.h>
+#import <Route_guide/Route_guide.pb.h>
@interface SampleTests : XCTestCase
@end
@@ -57,7 +58,7 @@
id<GRXWriter> requestsWriter = [GRXWriter writerWithValue:[NSData data]];
- GRPCCall *call = [[GRPCCall alloc] initWithHost:@"127.0.0.1:8980"
+ GRPCCall *call = [[GRPCCall alloc] initWithHost:@"http://127.0.0.1:8980"
method:method
requestsWriter:requestsWriter];
@@ -84,7 +85,7 @@
id<GRXWriter> requestsWriter = [GRXWriter emptyWriter];
- GRPCCall *call = [[GRPCCall alloc] initWithHost:@"127.0.0.1:8980"
+ GRPCCall *call = [[GRPCCall alloc] initWithHost:@"http://127.0.0.1:8980"
method:method
requestsWriter:requestsWriter];
@@ -101,4 +102,38 @@
[self waitForExpectationsWithTimeout:2.0 handler:nil];
}
+
+- (void)testSimpleProtoRPC {
+ __weak XCTestExpectation *response = [self expectationWithDescription:@"Response received."];
+ __weak XCTestExpectation *expectedResponse =
+ [self expectationWithDescription:@"Expected response."];
+ __weak XCTestExpectation *completion = [self expectationWithDescription:@"RPC completed."];
+
+ GRPCMethodName *method = [[GRPCMethodName alloc] initWithPackage:@"grpc.example.routeguide"
+ interface:@"RouteGuide"
+ method:@"GetFeature"];
+
+ RGDPoint *point = [[[[[RGDPointBuilder alloc] init] setLatitude:28E7] setLongitude:-15E7] build];
+ id<GRXWriter> requestsWriter = [GRXWriter writerWithValue:[point data]];
+
+ GRPCCall *call = [[GRPCCall alloc] initWithHost:@"http://127.0.0.1:8980"
+ method:method
+ requestsWriter:requestsWriter];
+
+ id<GRXWriteable> responsesWriteable = [[GRXWriteable alloc] initWithValueHandler:^(NSData *value) {
+ XCTAssertNotNil(value, @"nil value received as response.");
+ [response fulfill];
+ RGDFeature *feature = [RGDFeature parseFromData:value];
+ XCTAssertEqualObjects(point, feature.location);
+ XCTAssertNotNil(feature.name, @"Response's name is nil.");
+ [expectedResponse fulfill];
+ } completionHandler:^(NSError *errorOrNil) {
+ XCTAssertNil(errorOrNil, @"Finished with unexpected error: %@", errorOrNil);
+ [completion fulfill];
+ }];
+
+ [call startWithWriteable:responsesWriteable];
+
+ [self waitForExpectationsWithTimeout:2.0 handler:nil];
+}
@end
diff --git a/src/php/bin/run_gen_code_test.sh b/src/php/bin/run_gen_code_test.sh
index 3f176fb5e4..79abbe6cf8 100755
--- a/src/php/bin/run_gen_code_test.sh
+++ b/src/php/bin/run_gen_code_test.sh
@@ -32,3 +32,6 @@ cd $(dirname $0)
GRPC_TEST_HOST=localhost:7070 php -d extension_dir=../ext/grpc/modules/ \
-d extension=grpc.so /usr/local/bin/phpunit -v --debug --strict \
../tests/generated_code/GeneratedCodeTest.php
+GRPC_TEST_HOST=localhost:7070 php -d extension_dir=../ext/grpc/modules/ \
+ -d extension=grpc.so /usr/local/bin/phpunit -v --debug --strict \
+ ../tests/generated_code/GeneratedCodeWithCallbackTest.php
diff --git a/src/php/lib/Grpc/BaseStub.php b/src/php/lib/Grpc/BaseStub.php
index fc83dace20..cb2537fe98 100755
--- a/src/php/lib/Grpc/BaseStub.php
+++ b/src/php/lib/Grpc/BaseStub.php
@@ -41,7 +41,24 @@ class BaseStub {
private $channel;
+ // a callback function
+ private $update_metadata;
+
+ /**
+ * @param $hostname string
+ * @param $opts array
+ * - 'update_metadata': (optional) a callback function which takes in a
+ * metadata array, and returns an updated metadata array
+ */
public function __construct($hostname, $opts) {
+ $this->update_metadata = null;
+ if (isset($opts['update_metadata'])) {
+ if (is_callable($opts['update_metadata'])) {
+ $this->update_metadata = $opts['update_metadata'];
+ }
+ unset($opts['update_metadata']);
+ }
+
$this->channel = new Channel($hostname, $opts);
}
@@ -69,7 +86,12 @@ class BaseStub {
callable $deserialize,
$metadata = array()) {
$call = new UnaryCall($this->channel, $method, $deserialize);
- $call->start($argument, $metadata);
+ $actual_metadata = $metadata;
+ if (is_callable($this->update_metadata)) {
+ $actual_metadata = call_user_func($this->update_metadata,
+ $actual_metadata);
+ }
+ $call->start($argument, $actual_metadata);
return $call;
}
@@ -89,7 +111,12 @@ class BaseStub {
callable $deserialize,
$metadata = array()) {
$call = new ClientStreamingCall($this->channel, $method, $deserialize);
- $call->start($arguments, $metadata);
+ $actual_metadata = $metadata;
+ if (is_callable($this->update_metadata)) {
+ $actual_metadata = call_user_func($this->update_metadata,
+ $actual_metadata);
+ }
+ $call->start($arguments, $actual_metadata);
return $call;
}
@@ -108,7 +135,12 @@ class BaseStub {
callable $deserialize,
$metadata = array()) {
$call = new ServerStreamingCall($this->channel, $method, $deserialize);
- $call->start($argument, $metadata);
+ $actual_metadata = $metadata;
+ if (is_callable($this->update_metadata)) {
+ $actual_metadata = call_user_func($this->update_metadata,
+ $actual_metadata);
+ }
+ $call->start($argument, $actual_metadata);
return $call;
}
@@ -124,7 +156,12 @@ class BaseStub {
callable $deserialize,
$metadata = array()) {
$call = new BidiStreamingCall($this->channel, $method, $deserialize);
- $call->start($metadata);
+ $actual_metadata = $metadata;
+ if (is_callable($this->update_metadata)) {
+ $actual_metadata = call_user_func($this->update_metadata,
+ $actual_metadata);
+ }
+ $call->start($actual_metadata);
return $call;
}
}
diff --git a/src/php/tests/generated_code/AbstractGeneratedCodeTest.php b/src/php/tests/generated_code/AbstractGeneratedCodeTest.php
new file mode 100644
index 0000000000..2d2352b199
--- /dev/null
+++ b/src/php/tests/generated_code/AbstractGeneratedCodeTest.php
@@ -0,0 +1,97 @@
+<?php
+/*
+ *
+ * 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.
+ *
+ */
+require_once realpath(dirname(__FILE__) . '/../../vendor/autoload.php');
+require 'DrSlump/Protobuf.php';
+\DrSlump\Protobuf::autoload();
+require 'math.php';
+abstract class AbstractGeneratedCodeTest extends PHPUnit_Framework_TestCase {
+ /* These tests require that a server exporting the math service must be
+ * running on $GRPC_TEST_HOST */
+ protected static $client;
+ protected static $timeout;
+
+ public function testSimpleRequest() {
+ $div_arg = new math\DivArgs();
+ $div_arg->setDividend(7);
+ $div_arg->setDivisor(4);
+ list($response, $status) = self::$client->Div($div_arg)->wait();
+ $this->assertSame(1, $response->getQuotient());
+ $this->assertSame(3, $response->getRemainder());
+ $this->assertSame(\Grpc\STATUS_OK, $status->code);
+ }
+
+ public function testServerStreaming() {
+ $fib_arg = new math\FibArgs();
+ $fib_arg->setLimit(7);
+ $call = self::$client->Fib($fib_arg);
+ $result_array = iterator_to_array($call->responses());
+ $extract_num = function($num){
+ return $num->getNum();
+ };
+ $values = array_map($extract_num, $result_array);
+ $this->assertSame([1, 1, 2, 3, 5, 8, 13], $values);
+ $status = $call->getStatus();
+ $this->assertSame(\Grpc\STATUS_OK, $status->code);
+ }
+
+ public function testClientStreaming() {
+ $num_iter = function() {
+ for ($i = 0; $i < 7; $i++) {
+ $num = new math\Num();
+ $num->setNum($i);
+ yield $num;
+ }
+ };
+ $call = self::$client->Sum($num_iter());
+ list($response, $status) = $call->wait();
+ $this->assertSame(21, $response->getNum());
+ $this->assertSame(\Grpc\STATUS_OK, $status->code);
+ }
+
+ public function testBidiStreaming() {
+ $call = self::$client->DivMany();
+ for ($i = 0; $i < 7; $i++) {
+ $div_arg = new math\DivArgs();
+ $div_arg->setDividend(2 * $i + 1);
+ $div_arg->setDivisor(2);
+ $call->write($div_arg);
+ $response = $call->read();
+ $this->assertSame($i, $response->getQuotient());
+ $this->assertSame(1, $response->getRemainder());
+ }
+ $call->writesDone();
+ $status = $call->getStatus();
+ $this->assertSame(\Grpc\STATUS_OK, $status->code);
+ }
+}
diff --git a/src/php/tests/generated_code/GeneratedCodeTest.php b/src/php/tests/generated_code/GeneratedCodeTest.php
index 927d24ca63..1e4742fc80 100755
--- a/src/php/tests/generated_code/GeneratedCodeTest.php
+++ b/src/php/tests/generated_code/GeneratedCodeTest.php
@@ -31,71 +31,11 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
-require_once realpath(dirname(__FILE__) . '/../../vendor/autoload.php');
-require 'DrSlump/Protobuf.php';
-\DrSlump\Protobuf::autoload();
-require 'math.php';
-class GeneratedCodeTest extends PHPUnit_Framework_TestCase {
- /* These tests require that a server exporting the math service must be
- * running on $GRPC_TEST_HOST */
- protected static $client;
- protected static $timeout;
+require 'AbstractGeneratedCodeTest.php';
+
+class GeneratedCodeTest extends AbstractGeneratedCodeTest {
public static function setUpBeforeClass() {
self::$client = new math\MathClient(new Grpc\BaseStub(
getenv('GRPC_TEST_HOST'), []));
}
-
- public function testSimpleRequest() {
- $div_arg = new math\DivArgs();
- $div_arg->setDividend(7);
- $div_arg->setDivisor(4);
- list($response, $status) = self::$client->Div($div_arg)->wait();
- $this->assertSame(1, $response->getQuotient());
- $this->assertSame(3, $response->getRemainder());
- $this->assertSame(\Grpc\STATUS_OK, $status->code);
- }
-
- public function testServerStreaming() {
- $fib_arg = new math\FibArgs();
- $fib_arg->setLimit(7);
- $call = self::$client->Fib($fib_arg);
- $result_array = iterator_to_array($call->responses());
- $extract_num = function($num){
- return $num->getNum();
- };
- $values = array_map($extract_num, $result_array);
- $this->assertSame([1, 1, 2, 3, 5, 8, 13], $values);
- $status = $call->getStatus();
- $this->assertSame(\Grpc\STATUS_OK, $status->code);
- }
-
- public function testClientStreaming() {
- $num_iter = function() {
- for ($i = 0; $i < 7; $i++) {
- $num = new math\Num();
- $num->setNum($i);
- yield $num;
- }
- };
- $call = self::$client->Sum($num_iter());
- list($response, $status) = $call->wait();
- $this->assertSame(21, $response->getNum());
- $this->assertSame(\Grpc\STATUS_OK, $status->code);
- }
-
- public function testBidiStreaming() {
- $call = self::$client->DivMany();
- for ($i = 0; $i < 7; $i++) {
- $div_arg = new math\DivArgs();
- $div_arg->setDividend(2 * $i + 1);
- $div_arg->setDivisor(2);
- $call->write($div_arg);
- $response = $call->read();
- $this->assertSame($i, $response->getQuotient());
- $this->assertSame(1, $response->getRemainder());
- }
- $call->writesDone();
- $status = $call->getStatus();
- $this->assertSame(\Grpc\STATUS_OK, $status->code);
- }
}
diff --git a/src/php/tests/generated_code/GeneratedCodeWithCallbackTest.php b/src/php/tests/generated_code/GeneratedCodeWithCallbackTest.php
new file mode 100644
index 0000000000..f8ec1e7da8
--- /dev/null
+++ b/src/php/tests/generated_code/GeneratedCodeWithCallbackTest.php
@@ -0,0 +1,47 @@
+<?php
+/*
+ *
+ * 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.
+ *
+ */
+require 'AbstractGeneratedCodeTest.php';
+
+class GeneratedCodeWithCallbackTest extends AbstractGeneratedCodeTest {
+ public static function setUpBeforeClass() {
+ self::$client = new math\MathClient(new Grpc\BaseStub(
+ getenv('GRPC_TEST_HOST'), ['update_metadata' =>
+ function($a_hash,
+ $client = array()) {
+ $a_copy = $a_hash;
+ $a_copy['foo'] = ['bar'];
+ return $a_copy;
+ }]));
+ }
+}
diff --git a/templates/vsprojects/vcxproj_defs.include b/templates/vsprojects/vcxproj_defs.include
index 61baa2b35d..062a3b0247 100644
--- a/templates/vsprojects/vcxproj_defs.include
+++ b/templates/vsprojects/vcxproj_defs.include
@@ -56,7 +56,7 @@ ${gen_package_props(packages)}\
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\global.props" />
% for prop in additional_props:
- <Import Project="..\${prop}." />
+ <Import Project="..\${prop}.props" />
% endfor
</ImportGroup>
<PropertyGroup Label="UserMacros" />
diff --git a/test/core/end2end/gen_build_json.py b/test/core/end2end/gen_build_json.py
index 51026a81e5..cb8cf6ce9c 100755
--- a/test/core/end2end/gen_build_json.py
+++ b/test/core/end2end/gen_build_json.py
@@ -158,6 +158,7 @@ def main():
'build': 'test',
'language': 'c',
'src': [],
+ 'flaky': 'invoke_large_request' in t,
'deps': [
'end2end_fixture_%s' % f,
'end2end_test_%s' % t,
diff --git a/test/cpp/end2end/generic_end2end_test.cc b/test/cpp/end2end/generic_end2end_test.cc
index eb6f5369a9..584d4bc7ba 100644
--- a/test/cpp/end2end/generic_end2end_test.cc
+++ b/test/cpp/end2end/generic_end2end_test.cc
@@ -149,7 +149,8 @@ class GenericEnd2endTest : public ::testing::Test {
GenericServerContext srv_ctx;
GenericServerAsyncReaderWriter stream(&srv_ctx);
- send_request.set_message("Hello");
+ // The string needs to be long enough to test heap-based slice.
+ send_request.set_message("Hello world. Hello world. Hello world.");
std::unique_ptr<GenericClientAsyncReaderWriter> call =
generic_stub_->Call(&cli_ctx, kMethodName, &cli_cq_, tag(1));
client_ok(1);
diff --git a/tools/buildgen/generate_projects.sh b/tools/buildgen/generate_projects.sh
index c745edb797..cdea1f9319 100755
--- a/tools/buildgen/generate_projects.sh
+++ b/tools/buildgen/generate_projects.sh
@@ -40,7 +40,9 @@ cd `dirname $0`/../..
mako_renderer=tools/buildgen/mako_renderer.py
gen_build_json=test/core/end2end/gen_build_json.py
-tools/buildgen/build-cleaner.py build.json
+if [ "x$TEST" != "x" ] ; then
+ tools/buildgen/build-cleaner.py build.json
+fi
end2end_test_build=`mktemp /tmp/genXXXXXX`
$gen_build_json > $end2end_test_build
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index 2b4886d4fc..ad994e99a3 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -4042,7 +4042,7 @@
]
},
{
- "flaky": false,
+ "flaky": true,
"language": "c",
"name": "chttp2_fullstack_invoke_large_request_unsecure_test",
"platforms": [
@@ -4051,7 +4051,7 @@
]
},
{
- "flaky": false,
+ "flaky": true,
"language": "c",
"name": "chttp2_fullstack_invoke_large_request_legacy_unsecure_test",
"platforms": [
@@ -4492,7 +4492,7 @@
]
},
{
- "flaky": false,
+ "flaky": true,
"language": "c",
"name": "chttp2_fullstack_uds_invoke_large_request_unsecure_test",
"platforms": [
@@ -4501,7 +4501,7 @@
]
},
{
- "flaky": false,
+ "flaky": true,
"language": "c",
"name": "chttp2_fullstack_uds_invoke_large_request_legacy_unsecure_test",
"platforms": [
@@ -4942,7 +4942,7 @@
]
},
{
- "flaky": false,
+ "flaky": true,
"language": "c",
"name": "chttp2_socket_pair_invoke_large_request_unsecure_test",
"platforms": [
@@ -4951,7 +4951,7 @@
]
},
{
- "flaky": false,
+ "flaky": true,
"language": "c",
"name": "chttp2_socket_pair_invoke_large_request_legacy_unsecure_test",
"platforms": [
@@ -5392,7 +5392,7 @@
]
},
{
- "flaky": false,
+ "flaky": true,
"language": "c",
"name": "chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_unsecure_test",
"platforms": [
@@ -5401,7 +5401,7 @@
]
},
{
- "flaky": false,
+ "flaky": true,
"language": "c",
"name": "chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_legacy_unsecure_test",
"platforms": [
diff --git a/vsprojects/grpc_csharp_ext/grpc_csharp_ext.vcxproj b/vsprojects/grpc_csharp_ext/grpc_csharp_ext.vcxproj
index 501b0d9b1a..2adb4a5367 100644
--- a/vsprojects/grpc_csharp_ext/grpc_csharp_ext.vcxproj
+++ b/vsprojects/grpc_csharp_ext/grpc_csharp_ext.vcxproj
@@ -46,7 +46,7 @@
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\global.props" />
- <Import Project="..\winsock." />
+ <Import Project="..\winsock.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/nuget_package/.gitignore b/vsprojects/nuget_package/.gitignore
new file mode 100644
index 0000000000..ae830da1b2
--- /dev/null
+++ b/vsprojects/nuget_package/.gitignore
@@ -0,0 +1,3 @@
+/tmp
+/output
+*.nupkg
diff --git a/vsprojects/nuget_package/README.md b/vsprojects/nuget_package/README.md
new file mode 100644
index 0000000000..80d84ce8c8
--- /dev/null
+++ b/vsprojects/nuget_package/README.md
@@ -0,0 +1,20 @@
+gRPC Native Nuget package
+=========================
+
+Prerequisites
+-------------
+Multiple versions of VS installed to be able to build all the targets:
+* Visual Studio 2013
+* Visual Studio 2010 (you might need SP1 to prevent LNK1123 error)
+
+NuGet binary
+
+Building the package
+--------------------
+
+Build all flavors of gRPC C# extension and package them as a NuGet package.
+```
+buildall.bat
+
+nuget pack grpc.native.csharp_ext
+``` \ No newline at end of file
diff --git a/vsprojects/nuget_package/buildall.bat b/vsprojects/nuget_package/buildall.bat
new file mode 100644
index 0000000000..837eef0f6a
--- /dev/null
+++ b/vsprojects/nuget_package/buildall.bat
@@ -0,0 +1,46 @@
+@echo off
+setlocal
+
+REM setlocal
+REM call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64
+REM call :build x64 Release v120 || goto :eof
+REM call :build x64 Debug v120 || goto :eof
+REM endlocal
+
+setlocal
+call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
+call :build Win32 Release v120 || goto :eof
+call :build Win32 Debug v120 || goto :eof
+endlocal
+
+REM setlocal
+REM call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" amd64
+REM call :build x64 Release v110 || goto :eof
+REM call :build x64 Debug v110 || goto :eof
+REM endlocal
+
+REM setlocal
+REM call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86
+REM call :build Win32 Release v110 || goto :eof
+REM call :build Win32 Debug v110 || goto :eof
+REM endlocal
+
+REM setlocal
+REM call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64
+REM call :build x64 Release v100 || goto :eof
+REM call :build x64 Debug v100 || goto :eof
+REM endlocal
+
+setlocal
+call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
+call :build Win32 Release v100 || goto :eof
+call :build Win32 Debug v100 || goto :eof
+endlocal
+
+goto :eof
+
+:build
+msbuild /t:grpc_csharp_ext /P:Platform=%1 /P:Configuration=%2 /P:PlatformToolset=%3 /P:OutDir=..\nuget_package\output\%3\%1\%2\ /P:IntDir=..\nuget_package\tmp\%3\%1\%2\ ..\grpc.sln || goto :eof
+goto :eof
+
+
diff --git a/vsprojects/nuget_package/grpc.native.csharp_ext.nuspec b/vsprojects/nuget_package/grpc.native.csharp_ext.nuspec
new file mode 100644
index 0000000000..d225b77190
--- /dev/null
+++ b/vsprojects/nuget_package/grpc.native.csharp_ext.nuspec
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<package>
+ <metadata>
+ <id>grpc.native.csharp_ext</id>
+ <version>0.6.0.0</version>
+ <authors>Google Inc.</authors>
+ <owners>Jan Tattermusch</owners>
+ <licenseUrl>https://github.com/grpc/grpc/blob/master/LICENSE</licenseUrl>
+ <projectUrl>http://github.com/grpc/grpc</projectUrl>
+ <requireLicenseAcceptance>false</requireLicenseAcceptance>
+ <description>Native extension needed by gRPC C# library. This is not the package you are looking for, it is only meant to be used as a dependency.</description>
+ <releaseNotes>Release of gRPC C core 0.6.0 libraries.</releaseNotes>
+ <copyright>Copyright 2015</copyright>
+ <title>gRPC C# Native Extension</title>
+ <summary>Native library required by gRPC C#</summary>
+ <tags>gRPC native</tags>
+ <dependencies>
+ <dependency id="grpc.dependencies.zlib.redist" version="1.2.8.9" />
+ <dependency id="grpc.dependencies.openssl.redist" version="1.0.2.2" />
+ </dependencies>
+ </metadata>
+ <files>
+ <file src="grpc.native.csharp_ext.props" target="\build\portable-net45\grpc.native.csharp_ext.props" />
+ <file src="grpc.native.csharp_ext.targets" target="\build\portable-net45\grpc.native.csharp_ext.targets" />
+ <file src="output\v100\Win32\Release\grpc_csharp_ext.dll" target="/build/native/bin/v100\Win32\Release\grpc_csharp_ext.dll" />
+ <file src="output\v120\Win32\Release\grpc_csharp_ext.dll" target="/build/native/bin/v120\Win32\Release\grpc_csharp_ext.dll" />
+ <file src="output\v100\Win32\Debug\grpc_csharp_ext.dll" target="/build/native/bin/v100\Win32\Debug\grpc_csharp_ext.dll" />
+ <file src="output\v120\Win32\Debug\grpc_csharp_ext.dll" target="/build/native/bin/v120\Win32\Debug\grpc_csharp_ext.dll" />
+ </files>
+</package> \ No newline at end of file
diff --git a/vsprojects/nuget_package/grpc.native.csharp_ext.props b/vsprojects/nuget_package/grpc.native.csharp_ext.props
new file mode 100644
index 0000000000..63d23be3da
--- /dev/null
+++ b/vsprojects/nuget_package/grpc.native.csharp_ext.props
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <!-- Whether or not copy native dependencies to output directory after building -->
+ <CopyNativeDependencies Condition=" '$(CopyNativeDependencies)' == '' ">true</CopyNativeDependencies>
+
+ <!-- Set defaults for native dependencies if not already set. Properties can be overriden in the project files. -->
+ <NativeDependenciesToolset Condition=" '$(NativeDependenciesToolset)' == '' ">v120</NativeDependenciesToolset>
+ <NativeDependenciesPlatform Condition=" '$(NativeDependenciesPlatform)' == '' ">Win32</NativeDependenciesPlatform>
+ <NativeDependenciesConfiguration Condition=" '$(NativeDependenciesConfiguration)' == '' ">Debug</NativeDependenciesConfiguration>
+ </PropertyGroup>
+</Project> \ No newline at end of file
diff --git a/vsprojects/nuget_package/grpc.native.csharp_ext.targets b/vsprojects/nuget_package/grpc.native.csharp_ext.targets
new file mode 100644
index 0000000000..1b69362d43
--- /dev/null
+++ b/vsprojects/nuget_package/grpc.native.csharp_ext.targets
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Choose>
+ <!-- Under older versions of Monodevelop, Choose is not supported and is just ignored, which gives us the desired effect. -->
+ <When Condition=" '$(OS)' != 'Unix' ">
+ <ItemGroup Condition=" '$(CopyNativeDependencies)' == 'true' ">
+ <Content Include="$(MSBuildThisFileDirectory)..\..\build\native\bin\$(NativeDependenciesToolset)\$(NativeDependenciesPlatform)\$(NativeDependenciesConfiguration)\grpc_csharp_ext.dll">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ </When>
+ <Otherwise />
+ </Choose>
+</Project> \ No newline at end of file