diff --git a/BUILD b/BUILD index 9f1ab2a5384a09bb0effd22da8b11812d7efb25d..083639c856bf7dade8a465d801c7598467cf38a8 100644 --- a/BUILD +++ b/BUILD @@ -1404,12 +1404,14 @@ grpc_cc_library( name = "tsi", srcs = [ "src/core/tsi/fake_transport_security.c", + "src/core/tsi/gts_transport_security.c", "src/core/tsi/ssl_transport_security.c", "src/core/tsi/transport_security.c", "src/core/tsi/transport_security_adapter.c", ], hdrs = [ "src/core/tsi/fake_transport_security.h", + "src/core/tsi/gts_transport_security.h", "src/core/tsi/ssl_transport_security.h", "src/core/tsi/ssl_types.h", "src/core/tsi/transport_security.h", @@ -1422,6 +1424,7 @@ grpc_cc_library( language = "c", deps = [ "gpr", + "grpc_base", "grpc_trace", ], ) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5413bbcc0f3719088d991149f0f2dd72119ffc5c..4f8b449f8be207b515212da8995315e9b3dcb1c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1124,6 +1124,7 @@ add_library(grpc src/core/lib/security/util/json_util.c src/core/lib/surface/init_secure.c src/core/tsi/fake_transport_security.c + src/core/tsi/gts_transport_security.c src/core/tsi/ssl_transport_security.c src/core/tsi/transport_security.c src/core/tsi/transport_security_adapter.c @@ -1490,6 +1491,7 @@ add_library(grpc_cronet src/core/lib/security/util/json_util.c src/core/lib/surface/init_secure.c src/core/tsi/fake_transport_security.c + src/core/tsi/gts_transport_security.c src/core/tsi/ssl_transport_security.c src/core/tsi/transport_security.c src/core/tsi/transport_security_adapter.c diff --git a/Makefile b/Makefile index 210d6768222e15a49cc11057135ac164e322a2f0..eaf4074252eb188834df3969622246dcf2daa76c 100644 --- a/Makefile +++ b/Makefile @@ -3064,6 +3064,7 @@ LIBGRPC_SRC = \ src/core/lib/security/util/json_util.c \ src/core/lib/surface/init_secure.c \ src/core/tsi/fake_transport_security.c \ + src/core/tsi/gts_transport_security.c \ src/core/tsi/ssl_transport_security.c \ src/core/tsi/transport_security.c \ src/core/tsi/transport_security_adapter.c \ @@ -3428,6 +3429,7 @@ LIBGRPC_CRONET_SRC = \ src/core/lib/security/util/json_util.c \ src/core/lib/surface/init_secure.c \ src/core/tsi/fake_transport_security.c \ + src/core/tsi/gts_transport_security.c \ src/core/tsi/ssl_transport_security.c \ src/core/tsi/transport_security.c \ src/core/tsi/transport_security_adapter.c \ @@ -19174,6 +19176,7 @@ src/core/lib/surface/init_secure.c: $(OPENSSL_DEP) src/core/plugin_registry/grpc_cronet_plugin_registry.c: $(OPENSSL_DEP) src/core/plugin_registry/grpc_plugin_registry.c: $(OPENSSL_DEP) src/core/tsi/fake_transport_security.c: $(OPENSSL_DEP) +src/core/tsi/gts_transport_security.c: $(OPENSSL_DEP) src/core/tsi/ssl_transport_security.c: $(OPENSSL_DEP) src/core/tsi/transport_security.c: $(OPENSSL_DEP) src/core/tsi/transport_security_adapter.c: $(OPENSSL_DEP) diff --git a/binding.gyp b/binding.gyp index ae78d931f2d884404bf49e491932bb9a9d06879b..d11a60a68afb3c629aa4c7bd707d6f8d6e61d368 100644 --- a/binding.gyp +++ b/binding.gyp @@ -814,6 +814,7 @@ 'src/core/lib/security/util/json_util.c', 'src/core/lib/surface/init_secure.c', 'src/core/tsi/fake_transport_security.c', + 'src/core/tsi/gts_transport_security.c', 'src/core/tsi/ssl_transport_security.c', 'src/core/tsi/transport_security.c', 'src/core/tsi/transport_security_adapter.c', diff --git a/build.yaml b/build.yaml index 581fa65a235d82a47b4c6dfcdf7ae7e4dfd67e63..bbcca1d3204a03db1925a83dc9003778c6929e9b 100644 --- a/build.yaml +++ b/build.yaml @@ -876,6 +876,7 @@ filegroups: - name: tsi headers: - src/core/tsi/fake_transport_security.h + - src/core/tsi/gts_transport_security.h - src/core/tsi/ssl_transport_security.h - src/core/tsi/ssl_types.h - src/core/tsi/transport_security.h @@ -883,14 +884,17 @@ filegroups: - src/core/tsi/transport_security_interface.h src: - src/core/tsi/fake_transport_security.c + - src/core/tsi/gts_transport_security.c - src/core/tsi/ssl_transport_security.c - src/core/tsi/transport_security.c - src/core/tsi/transport_security_adapter.c deps: - gpr + plugin: grpc_tsi_gts secure: true uses: - grpc_trace + - grpc_base - name: grpc++_base language: c++ public_headers: diff --git a/config.m4 b/config.m4 index e214f9c5464eb63a2b84f67583b07a7b11d52462..f97baadde4d04acc8400b5e4cc76f6ec1847f296 100644 --- a/config.m4 +++ b/config.m4 @@ -264,6 +264,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/security/util/json_util.c \ src/core/lib/surface/init_secure.c \ src/core/tsi/fake_transport_security.c \ + src/core/tsi/gts_transport_security.c \ src/core/tsi/ssl_transport_security.c \ src/core/tsi/transport_security.c \ src/core/tsi/transport_security_adapter.c \ diff --git a/config.w32 b/config.w32 index 6d50712fb543144bcc1dde293ed166e9d7dd573e..c00f3f953d4569ca1570d756ed2f955da72b2c21 100644 --- a/config.w32 +++ b/config.w32 @@ -241,6 +241,7 @@ if (PHP_GRPC != "no") { "src\\core\\lib\\security\\util\\json_util.c " + "src\\core\\lib\\surface\\init_secure.c " + "src\\core\\tsi\\fake_transport_security.c " + + "src\\core\\tsi\\gts_transport_security.c " + "src\\core\\tsi\\ssl_transport_security.c " + "src\\core\\tsi\\transport_security.c " + "src\\core\\tsi\\transport_security_adapter.c " + diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index cf3fc3598a28bf9b5c1f318b3b97277542c3910f..57b6f92d1e0cb4f7ce9f9e8325241879295434f3 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -398,6 +398,7 @@ Pod::Spec.new do |s| 'src/core/lib/security/transport/tsi_error.h', 'src/core/lib/security/util/json_util.h', 'src/core/tsi/fake_transport_security.h', + 'src/core/tsi/gts_transport_security.h', 'src/core/tsi/ssl_transport_security.h', 'src/core/tsi/ssl_types.h', 'src/core/tsi/transport_security.h', @@ -637,6 +638,7 @@ Pod::Spec.new do |s| 'src/core/lib/security/util/json_util.c', 'src/core/lib/surface/init_secure.c', 'src/core/tsi/fake_transport_security.c', + 'src/core/tsi/gts_transport_security.c', 'src/core/tsi/ssl_transport_security.c', 'src/core/tsi/transport_security.c', 'src/core/tsi/transport_security_adapter.c', @@ -880,6 +882,7 @@ Pod::Spec.new do |s| 'src/core/lib/security/transport/tsi_error.h', 'src/core/lib/security/util/json_util.h', 'src/core/tsi/fake_transport_security.h', + 'src/core/tsi/gts_transport_security.h', 'src/core/tsi/ssl_transport_security.h', 'src/core/tsi/ssl_types.h', 'src/core/tsi/transport_security.h', diff --git a/grpc.gemspec b/grpc.gemspec index a87c113b04b17a4be8bac0139f92db69fe4c2dc3..dedee020b7d2be0d5b84f5842ef6be67888bf44c 100755 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -330,6 +330,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/security/transport/tsi_error.h ) s.files += %w( src/core/lib/security/util/json_util.h ) s.files += %w( src/core/tsi/fake_transport_security.h ) + s.files += %w( src/core/tsi/gts_transport_security.h ) s.files += %w( src/core/tsi/ssl_transport_security.h ) s.files += %w( src/core/tsi/ssl_types.h ) s.files += %w( src/core/tsi/transport_security.h ) @@ -573,6 +574,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/security/util/json_util.c ) s.files += %w( src/core/lib/surface/init_secure.c ) s.files += %w( src/core/tsi/fake_transport_security.c ) + s.files += %w( src/core/tsi/gts_transport_security.c ) s.files += %w( src/core/tsi/ssl_transport_security.c ) s.files += %w( src/core/tsi/transport_security.c ) s.files += %w( src/core/tsi/transport_security_adapter.c ) diff --git a/package.xml b/package.xml index 256a21d017bd6a0a9e834cbc67f937244e362fd6..38f51424e6a654425cdd9a3330560850ae215999 100644 --- a/package.xml +++ b/package.xml @@ -344,6 +344,7 @@ <file baseinstalldir="/" name="src/core/lib/security/transport/tsi_error.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/security/util/json_util.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/fake_transport_security.h" role="src" /> + <file baseinstalldir="/" name="src/core/tsi/gts_transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/ssl_types.h" role="src" /> <file baseinstalldir="/" name="src/core/tsi/transport_security.h" role="src" /> @@ -587,6 +588,7 @@ <file baseinstalldir="/" name="src/core/lib/security/util/json_util.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/surface/init_secure.c" role="src" /> <file baseinstalldir="/" name="src/core/tsi/fake_transport_security.c" role="src" /> + <file baseinstalldir="/" name="src/core/tsi/gts_transport_security.c" role="src" /> <file baseinstalldir="/" name="src/core/tsi/ssl_transport_security.c" role="src" /> <file baseinstalldir="/" name="src/core/tsi/transport_security.c" role="src" /> <file baseinstalldir="/" name="src/core/tsi/transport_security_adapter.c" role="src" /> diff --git a/src/core/plugin_registry/grpc_cronet_plugin_registry.c b/src/core/plugin_registry/grpc_cronet_plugin_registry.c index b468c03aa3428db5522fb0ca50d9a74555809962..322ebea1115729e53e68d26bcfb7e215d7bf6286 100644 --- a/src/core/plugin_registry/grpc_cronet_plugin_registry.c +++ b/src/core/plugin_registry/grpc_cronet_plugin_registry.c @@ -26,6 +26,8 @@ extern void grpc_deadline_filter_init(void); extern void grpc_deadline_filter_shutdown(void); extern void grpc_client_channel_init(void); extern void grpc_client_channel_shutdown(void); +extern void grpc_tsi_gts_init(void); +extern void grpc_tsi_gts_shutdown(void); extern void grpc_load_reporting_plugin_init(void); extern void grpc_load_reporting_plugin_shutdown(void); @@ -38,6 +40,8 @@ void grpc_register_built_in_plugins(void) { grpc_deadline_filter_shutdown); grpc_register_plugin(grpc_client_channel_init, grpc_client_channel_shutdown); + grpc_register_plugin(grpc_tsi_gts_init, + grpc_tsi_gts_shutdown); grpc_register_plugin(grpc_load_reporting_plugin_init, grpc_load_reporting_plugin_shutdown); } diff --git a/src/core/plugin_registry/grpc_plugin_registry.c b/src/core/plugin_registry/grpc_plugin_registry.c index b0d06a3f43a57fb9a7df2888670effe32dd2fefc..fa9974952c0d4e0c6068ce537fd2f8f78d74be9a 100644 --- a/src/core/plugin_registry/grpc_plugin_registry.c +++ b/src/core/plugin_registry/grpc_plugin_registry.c @@ -22,6 +22,8 @@ extern void grpc_http_filters_init(void); extern void grpc_http_filters_shutdown(void); extern void grpc_chttp2_plugin_init(void); extern void grpc_chttp2_plugin_shutdown(void); +extern void grpc_tsi_gts_init(void); +extern void grpc_tsi_gts_shutdown(void); extern void grpc_deadline_filter_init(void); extern void grpc_deadline_filter_shutdown(void); extern void grpc_client_channel_init(void); @@ -58,6 +60,8 @@ void grpc_register_built_in_plugins(void) { grpc_http_filters_shutdown); grpc_register_plugin(grpc_chttp2_plugin_init, grpc_chttp2_plugin_shutdown); + grpc_register_plugin(grpc_tsi_gts_init, + grpc_tsi_gts_shutdown); grpc_register_plugin(grpc_deadline_filter_init, grpc_deadline_filter_shutdown); grpc_register_plugin(grpc_client_channel_init, diff --git a/src/core/tsi/gts_transport_security.c b/src/core/tsi/gts_transport_security.c new file mode 100644 index 0000000000000000000000000000000000000000..e2ac685e44134bb9d59bd5c6685185d4f96867b1 --- /dev/null +++ b/src/core/tsi/gts_transport_security.c @@ -0,0 +1,40 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "src/core/tsi/gts_transport_security.h" + +#include <string.h> + +static gts_shared_resource g_gts_resource; + +gts_shared_resource *gts_get_shared_resource(void) { return &g_gts_resource; } + +void grpc_tsi_gts_init() { + memset(&g_gts_resource, 0, sizeof(gts_shared_resource)); + gpr_mu_init(&g_gts_resource.mu); +} + +void grpc_tsi_gts_shutdown() { + gpr_mu_destroy(&g_gts_resource.mu); + if (g_gts_resource.cq == NULL) { + return; + } + grpc_completion_queue_destroy(g_gts_resource.cq); + grpc_channel_destroy(g_gts_resource.channel); + gpr_thd_join(g_gts_resource.thread_id); +} diff --git a/src/core/tsi/gts_transport_security.h b/src/core/tsi/gts_transport_security.h new file mode 100644 index 0000000000000000000000000000000000000000..538e1030bc5a34d7a19e9b99faabe2db332448f3 --- /dev/null +++ b/src/core/tsi/gts_transport_security.h @@ -0,0 +1,37 @@ +/* + * + * Copyright 2017 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef GRPC_CORE_TSI_GTS_TRANSPORT_SECURITY_H +#define GRPC_CORE_TSI_GTS_TRANSPORT_SECURITY_H + +#include <grpc/grpc.h> +#include <grpc/support/sync.h> +#include <grpc/support/thd.h> + +typedef struct gts_shared_resource { + gpr_thd_id thread_id; + grpc_channel *channel; + grpc_completion_queue *cq; + gpr_mu mu; +} gts_shared_resource; + +/* This method returns the address of gts_shared_resource object shared by all + * TSI handshakes. */ +gts_shared_resource *gts_get_shared_resource(void); + +#endif /* GRPC_CORE_TSI_GTS_TRANSPORT_SECURITY_H */ diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index e7f7332b99508ab469a3a721f8eef82862d4f8bb..605044b65e0ef48006e3670b976adc3fa17e7cc8 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -240,6 +240,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/security/util/json_util.c', 'src/core/lib/surface/init_secure.c', 'src/core/tsi/fake_transport_security.c', + 'src/core/tsi/gts_transport_security.c', 'src/core/tsi/ssl_transport_security.c', 'src/core/tsi/transport_security.c', 'src/core/tsi/transport_security_adapter.c', diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 7c1e75a99cdd1d038e1cbe1ae674345d6a51d5d6..4ad8a0ddb4634167bc3f35f003f444c902032c6a 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -1404,6 +1404,8 @@ src/core/plugin_registry/grpc_plugin_registry.c \ src/core/tsi/README.md \ src/core/tsi/fake_transport_security.c \ src/core/tsi/fake_transport_security.h \ +src/core/tsi/gts_transport_security.c \ +src/core/tsi/gts_transport_security.h \ src/core/tsi/ssl_transport_security.c \ src/core/tsi/ssl_transport_security.h \ src/core/tsi/ssl_types.h \ diff --git a/tools/run_tests/generated/sources_and_headers.json b/tools/run_tests/generated/sources_and_headers.json index c7cc9cb6945bf5345996db3f73481f3f25ed942f..40650b961a7329fb44cf3b77f070299991f82558 100644 --- a/tools/run_tests/generated/sources_and_headers.json +++ b/tools/run_tests/generated/sources_and_headers.json @@ -8892,10 +8892,12 @@ { "deps": [ "gpr", + "grpc_base", "grpc_trace" ], "headers": [ "src/core/tsi/fake_transport_security.h", + "src/core/tsi/gts_transport_security.h", "src/core/tsi/ssl_transport_security.h", "src/core/tsi/ssl_types.h", "src/core/tsi/transport_security.h", @@ -8908,6 +8910,8 @@ "src": [ "src/core/tsi/fake_transport_security.c", "src/core/tsi/fake_transport_security.h", + "src/core/tsi/gts_transport_security.c", + "src/core/tsi/gts_transport_security.h", "src/core/tsi/ssl_transport_security.c", "src/core/tsi/ssl_transport_security.h", "src/core/tsi/ssl_types.h", diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index dbc148e0f81a6335647798b4bd98a649b1ca0946..41fe1b222b70dde5fe818d2f2ae227336377693e 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -455,6 +455,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\transport\tsi_error.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\security\util\json_util.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\gts_transport_security.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_types.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\tsi\transport_security.h" /> @@ -879,6 +880,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\tsi\gts_transport_security.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\tsi\transport_security.c"> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 45d11933c1a0ccdbd788e80f7df4896d7eeb02c6..00b8705826cd791353d14fdbcd219763bd6d1521 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -538,6 +538,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.c"> <Filter>src\core\tsi</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\tsi\gts_transport_security.c"> + <Filter>src\core\tsi</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.c"> <Filter>src\core\tsi</Filter> </ClCompile> @@ -1319,6 +1322,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\tsi\fake_transport_security.h"> <Filter>src\core\tsi</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\tsi\gts_transport_security.h"> + <Filter>src\core\tsi</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\tsi\ssl_transport_security.h"> <Filter>src\core\tsi</Filter> </ClInclude>