grpc-ruby40 1.78.0-aarch64-linux-gnu

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. checksums.yaml +7 -0
  2. data/etc/roots.pem +4337 -0
  3. data/grpc_c.32-msvcrt.ruby +0 -0
  4. data/grpc_c.64-ucrt.ruby +0 -0
  5. data/src/ruby/bin/math_client.rb +140 -0
  6. data/src/ruby/bin/math_pb.rb +19 -0
  7. data/src/ruby/bin/math_server.rb +191 -0
  8. data/src/ruby/bin/math_services_pb.rb +51 -0
  9. data/src/ruby/bin/noproto_client.rb +93 -0
  10. data/src/ruby/bin/noproto_server.rb +97 -0
  11. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  12. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  13. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  14. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  15. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  16. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  17. data/src/ruby/ext/grpc/extconf.rb +271 -0
  18. data/src/ruby/ext/grpc/rb_byte_buffer.c +65 -0
  19. data/src/ruby/ext/grpc/rb_byte_buffer.h +35 -0
  20. data/src/ruby/ext/grpc/rb_call.c +1074 -0
  21. data/src/ruby/ext/grpc/rb_call.h +57 -0
  22. data/src/ruby/ext/grpc/rb_call_credentials.c +347 -0
  23. data/src/ruby/ext/grpc/rb_call_credentials.h +32 -0
  24. data/src/ruby/ext/grpc/rb_channel.c +400 -0
  25. data/src/ruby/ext/grpc/rb_channel.h +32 -0
  26. data/src/ruby/ext/grpc/rb_channel_args.c +173 -0
  27. data/src/ruby/ext/grpc/rb_channel_args.h +42 -0
  28. data/src/ruby/ext/grpc/rb_channel_credentials.c +284 -0
  29. data/src/ruby/ext/grpc/rb_channel_credentials.h +36 -0
  30. data/src/ruby/ext/grpc/rb_completion_queue.c +95 -0
  31. data/src/ruby/ext/grpc/rb_completion_queue.h +36 -0
  32. data/src/ruby/ext/grpc/rb_compression_options.c +468 -0
  33. data/src/ruby/ext/grpc/rb_compression_options.h +29 -0
  34. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  35. data/src/ruby/ext/grpc/rb_event_thread.c +167 -0
  36. data/src/ruby/ext/grpc/rb_event_thread.h +22 -0
  37. data/src/ruby/ext/grpc/rb_grpc.c +500 -0
  38. data/src/ruby/ext/grpc/rb_grpc.h +88 -0
  39. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +597 -0
  40. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +902 -0
  41. data/src/ruby/ext/grpc/rb_loader.c +57 -0
  42. data/src/ruby/ext/grpc/rb_loader.h +25 -0
  43. data/src/ruby/ext/grpc/rb_server.c +406 -0
  44. data/src/ruby/ext/grpc/rb_server.h +32 -0
  45. data/src/ruby/ext/grpc/rb_server_credentials.c +258 -0
  46. data/src/ruby/ext/grpc/rb_server_credentials.h +37 -0
  47. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +216 -0
  48. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +36 -0
  49. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
  50. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +37 -0
  51. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  52. data/src/ruby/lib/grpc/core/time_consts.rb +56 -0
  53. data/src/ruby/lib/grpc/errors.rb +277 -0
  54. data/src/ruby/lib/grpc/generic/active_call.rb +679 -0
  55. data/src/ruby/lib/grpc/generic/bidi_call.rb +237 -0
  56. data/src/ruby/lib/grpc/generic/client_stub.rb +503 -0
  57. data/src/ruby/lib/grpc/generic/interceptor_registry.rb +53 -0
  58. data/src/ruby/lib/grpc/generic/interceptors.rb +186 -0
  59. data/src/ruby/lib/grpc/generic/rpc_desc.rb +204 -0
  60. data/src/ruby/lib/grpc/generic/rpc_server.rb +551 -0
  61. data/src/ruby/lib/grpc/generic/service.rb +211 -0
  62. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +40 -0
  63. data/src/ruby/lib/grpc/grpc.rb +22 -0
  64. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  65. data/src/ruby/lib/grpc/logconfig.rb +57 -0
  66. data/src/ruby/lib/grpc/notifier.rb +45 -0
  67. data/src/ruby/lib/grpc/structs.rb +15 -0
  68. data/src/ruby/lib/grpc/version.rb +18 -0
  69. data/src/ruby/lib/grpc.rb +37 -0
  70. data/src/ruby/pb/README.md +42 -0
  71. data/src/ruby/pb/generate_proto_ruby.sh +46 -0
  72. data/src/ruby/pb/grpc/health/checker.rb +75 -0
  73. data/src/ruby/pb/grpc/health/v1/health_pb.rb +21 -0
  74. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +62 -0
  75. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +44 -0
  76. data/src/ruby/pb/grpc/testing/metrics_pb.rb +19 -0
  77. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +49 -0
  78. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +17 -0
  79. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +50 -0
  80. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +19 -0
  81. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +174 -0
  82. data/src/ruby/pb/test/client.rb +785 -0
  83. data/src/ruby/pb/test/server.rb +252 -0
  84. data/src/ruby/pb/test/xds_client.rb +415 -0
  85. data/src/ruby/spec/call_credentials_spec.rb +42 -0
  86. data/src/ruby/spec/call_spec.rb +193 -0
  87. data/src/ruby/spec/channel_connection_spec.rb +126 -0
  88. data/src/ruby/spec/channel_credentials_spec.rb +124 -0
  89. data/src/ruby/spec/channel_spec.rb +209 -0
  90. data/src/ruby/spec/client_auth_spec.rb +152 -0
  91. data/src/ruby/spec/client_server_spec.rb +317 -0
  92. data/src/ruby/spec/compression_options_spec.rb +149 -0
  93. data/src/ruby/spec/core_spec.rb +22 -0
  94. data/src/ruby/spec/debug_message_spec.rb +134 -0
  95. data/src/ruby/spec/error_sanity_spec.rb +49 -0
  96. data/src/ruby/spec/errors_spec.rb +142 -0
  97. data/src/ruby/spec/generic/active_call_spec.rb +670 -0
  98. data/src/ruby/spec/generic/client_interceptors_spec.rb +153 -0
  99. data/src/ruby/spec/generic/client_stub_spec.rb +1079 -0
  100. data/src/ruby/spec/generic/interceptor_registry_spec.rb +65 -0
  101. data/src/ruby/spec/generic/rpc_desc_spec.rb +374 -0
  102. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +127 -0
  103. data/src/ruby/spec/generic/rpc_server_spec.rb +772 -0
  104. data/src/ruby/spec/generic/server_interceptors_spec.rb +218 -0
  105. data/src/ruby/spec/generic/service_spec.rb +263 -0
  106. data/src/ruby/spec/google_rpc_status_utils_spec.rb +282 -0
  107. data/src/ruby/spec/logconfig_spec.rb +30 -0
  108. data/src/ruby/spec/pb/codegen/grpc/testing/package_options.proto +28 -0
  109. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  110. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  111. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +41 -0
  112. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  113. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  114. data/src/ruby/spec/pb/codegen/package_option_spec.rb +98 -0
  115. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +57 -0
  116. data/src/ruby/spec/pb/health/checker_spec.rb +236 -0
  117. data/src/ruby/spec/server_credentials_spec.rb +104 -0
  118. data/src/ruby/spec/server_spec.rb +231 -0
  119. data/src/ruby/spec/spec_helper.rb +61 -0
  120. data/src/ruby/spec/support/helpers.rb +107 -0
  121. data/src/ruby/spec/support/services.rb +163 -0
  122. data/src/ruby/spec/testdata/README +1 -0
  123. data/src/ruby/spec/testdata/ca.pem +20 -0
  124. data/src/ruby/spec/testdata/client.key +28 -0
  125. data/src/ruby/spec/testdata/client.pem +20 -0
  126. data/src/ruby/spec/testdata/server1.key +28 -0
  127. data/src/ruby/spec/testdata/server1.pem +22 -0
  128. data/src/ruby/spec/time_consts_spec.rb +74 -0
  129. data/src/ruby/spec/user_agent_spec.rb +74 -0
  130. metadata +422 -0
@@ -0,0 +1,271 @@
1
+ # Copyright 2015 gRPC authors.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'etc'
16
+ require 'mkmf'
17
+ require_relative '../../lib/grpc/version.rb'
18
+
19
+ windows = RUBY_PLATFORM =~ /mingw|mswin/
20
+ windows_ucrt = RUBY_PLATFORM =~ /(mingw|mswin).*ucrt/
21
+ bsd = RUBY_PLATFORM =~ /bsd/
22
+ darwin = RUBY_PLATFORM =~ /darwin/
23
+ linux = RUBY_PLATFORM =~ /linux/
24
+ cross_compiling = ENV['RCD_HOST_RUBY_VERSION'] # set by rake-compiler-dock in build containers
25
+ # TruffleRuby uses the Sulong LLVM runtime, which is different from Apple's.
26
+ apple_toolchain = darwin && RUBY_ENGINE != 'truffleruby'
27
+
28
+ grpc_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..'))
29
+
30
+ grpc_config = ENV['GRPC_CONFIG'] || 'opt'
31
+
32
+ ENV['MACOSX_DEPLOYMENT_TARGET'] = '11.0'
33
+
34
+ def debug_symbols_output_dir
35
+ d = ENV['GRPC_RUBY_DEBUG_SYMBOLS_OUTPUT_DIR']
36
+ return nil if d.nil? or d.size == 0
37
+ d
38
+ end
39
+
40
+ def maybe_remove_strip_all_linker_flag(flags)
41
+ if debug_symbols_output_dir
42
+ # Hack to prevent automatic stripping during shared library linking.
43
+ # rake-compiler-dock sets the -s LDFLAG when building rubies for
44
+ # cross compilation, and this -s flag propagates into RbConfig. Stripping
45
+ # during the link is problematic because it prevents us from saving
46
+ # debug symbols. We want to first link our shared library, then save
47
+ # debug symbols, and only after that strip.
48
+ flags = flags.split(' ')
49
+ flags = flags.reject {|flag| flag == '-s'}
50
+ flags = flags.join(' ')
51
+ end
52
+ flags
53
+ end
54
+
55
+ def env_unset?(name)
56
+ ENV[name].nil? || ENV[name].size == 0
57
+ end
58
+
59
+ def inherit_env_or_rbconfig(name)
60
+ ENV[name] = inherit_rbconfig(name) if env_unset?(name)
61
+ end
62
+
63
+ def inherit_rbconfig(name, linker_flag: false)
64
+ value = RbConfig::CONFIG[name] || ''
65
+ if linker_flag
66
+ value = maybe_remove_strip_all_linker_flag(value)
67
+ end
68
+ p "extconf.rb setting ENV[#{name}] = #{value}"
69
+ ENV[name] = value
70
+ end
71
+
72
+ def env_append(name, string)
73
+ ENV[name] += ' ' + string
74
+ end
75
+
76
+ # build grpc C-core
77
+ inherit_env_or_rbconfig 'AR'
78
+ inherit_env_or_rbconfig 'CC'
79
+ inherit_env_or_rbconfig 'CXX'
80
+ inherit_env_or_rbconfig 'RANLIB'
81
+ inherit_env_or_rbconfig 'STRIP'
82
+ inherit_rbconfig 'CPPFLAGS'
83
+ inherit_rbconfig('LDFLAGS', linker_flag: true)
84
+
85
+ ENV['LD'] = ENV['CC'] if env_unset?('LD')
86
+ ENV['LDXX'] = ENV['CXX'] if env_unset?('LDXX')
87
+
88
+ if RUBY_ENGINE == 'truffleruby'
89
+ # ensure we can find the system's OpenSSL
90
+ env_append 'CPPFLAGS', RbConfig::CONFIG['cppflags']
91
+ end
92
+
93
+ if apple_toolchain && !cross_compiling
94
+ ENV['AR'] = 'libtool'
95
+ ENV['ARFLAGS'] = '-o'
96
+ end
97
+
98
+ # Don't embed on TruffleRuby (constant-time crypto is unsafe with Sulong, slow build times)
99
+ ENV['EMBED_OPENSSL'] = (RUBY_ENGINE != 'truffleruby').to_s
100
+ # Don't embed on TruffleRuby (the system zlib is already linked for the zlib C extension, slow build times)
101
+ ENV['EMBED_ZLIB'] = (RUBY_ENGINE != 'truffleruby').to_s
102
+
103
+ ENV['ARCH_FLAGS'] = RbConfig::CONFIG['ARCH_FLAG']
104
+ if apple_toolchain && !cross_compiling
105
+ if RUBY_PLATFORM =~ /arm64/
106
+ ENV['ARCH_FLAGS'] = '-arch arm64'
107
+ else
108
+ ENV['ARCH_FLAGS'] = '-arch i386 -arch x86_64'
109
+ end
110
+ end
111
+
112
+ env_append 'CPPFLAGS', '-DGRPC_XDS_USER_AGENT_NAME_SUFFIX="\"RUBY\""'
113
+
114
+ require_relative '../../lib/grpc/version'
115
+ env_append 'CPPFLAGS', '-DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="\"' + GRPC::VERSION + '\""'
116
+ env_append 'CPPFLAGS', '-DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1'
117
+ env_append 'CPPFLAGS', '-DGRPC_ENABLE_FORK_SUPPORT=1'
118
+ env_append 'CPPFLAGS', '-DGRPC_ENABLE_FORK_SUPPORT_DEFAULT=false'
119
+
120
+ output_dir = File.expand_path(RbConfig::CONFIG['topdir'])
121
+ grpc_lib_dir = File.join(output_dir, 'libs', grpc_config)
122
+ ENV['BUILDDIR'] = output_dir
123
+
124
+ strip_tool = RbConfig::CONFIG['STRIP']
125
+ strip_tool += ' -x' if apple_toolchain
126
+
127
+ unless windows
128
+ puts 'Building internal gRPC into ' + grpc_lib_dir
129
+ nproc = 4
130
+ nproc = Etc.nprocessors if Etc.respond_to? :nprocessors
131
+ nproc_override = ENV['GRPC_RUBY_BUILD_PROCS']
132
+ unless nproc_override.nil? or nproc_override.size == 0
133
+ nproc = nproc_override
134
+ puts "Overriding make parallelism to #{nproc}"
135
+ end
136
+ make = bsd ? 'gmake' : 'make'
137
+ cmd = "#{make} -j#{nproc} -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config} Q="
138
+ puts "Building grpc native library: #{cmd}"
139
+ system(cmd)
140
+ exit 1 unless $? == 0
141
+ end
142
+
143
+ # C-core built, generate Makefile for ruby extension
144
+ $LDFLAGS = maybe_remove_strip_all_linker_flag($LDFLAGS)
145
+ $DLDFLAGS = maybe_remove_strip_all_linker_flag($DLDFLAGS)
146
+
147
+ $CFLAGS << ' -DGRPC_RUBY_WINDOWS_UCRT' if windows_ucrt
148
+ $CFLAGS << ' -I' + File.join(grpc_root, 'include')
149
+ $CFLAGS << ' -g'
150
+
151
+ def have_ruby_abi_version()
152
+ return true if RUBY_ENGINE == 'truffleruby'
153
+ # ruby_abi_version is only available in development versions: https://github.com/ruby/ruby/pull/6231
154
+ # See also discussion for Ruby 3.4 in https://github.com/grpc/grpc/pull/38338 and https://github.com/grpc/grpc/pull/38487
155
+ return false if RUBY_PATCHLEVEL >= 0
156
+
157
+ min_version = Gem::Version.new('3.2')
158
+
159
+ begin
160
+ current_version = Gem::Version.new(RUBY_VERSION)
161
+ if current_version >= min_version
162
+ puts "Ruby version #{RUBY_VERSION} >= 3.2. Assuming ruby_abi_version symbol is present."
163
+ true
164
+ else
165
+ puts "Ruby version #{RUBY_VERSION} < 3.2. Assuming ruby_abi_version symbol is NOT present."
166
+ false
167
+ end
168
+ rescue ArgumentError
169
+ puts "Failed to parse ruby version #{RUBY_VERSION}. Assuming ruby_abi_version symbol is NOT present."
170
+ false
171
+ end
172
+ end
173
+
174
+ def ext_export_filename()
175
+ name = 'ext-export'
176
+ name += '-truffleruby' if RUBY_ENGINE == 'truffleruby'
177
+ name += '-with-ruby-abi-version' if have_ruby_abi_version()
178
+ name
179
+ end
180
+
181
+ ext_export_file = File.join(grpc_root, 'src', 'ruby', 'ext', 'grpc', ext_export_filename())
182
+ $LDFLAGS << ' -Wl,--version-script="' + ext_export_file + '.gcc"' if linux
183
+ if apple_toolchain
184
+ $LDFLAGS << ' -weak_framework CoreFoundation'
185
+ $LDFLAGS << ' -Wl,-exported_symbols_list,"' + ext_export_file + '.clang"'
186
+ end
187
+
188
+ $LDFLAGS << ' ' + File.join(grpc_lib_dir, 'libgrpc.a') unless windows
189
+ if grpc_config == 'gcov'
190
+ $CFLAGS << ' -O0 -fprofile-arcs -ftest-coverage'
191
+ $LDFLAGS << ' -fprofile-arcs -ftest-coverage -rdynamic'
192
+ end
193
+
194
+ if grpc_config == 'dbg'
195
+ $CFLAGS << ' -O0'
196
+ end
197
+
198
+ # Do not statically link standard libraries on TruffleRuby as this does not work when compiling to bitcode
199
+ if linux && RUBY_ENGINE != 'truffleruby'
200
+ $LDFLAGS << ' -static-libgcc -static-libstdc++'
201
+ end
202
+ $LDFLAGS << ' -static' if windows
203
+
204
+ $CFLAGS << ' -std=c11 '
205
+ $CFLAGS << ' -Wall '
206
+ $CFLAGS << ' -Wextra '
207
+ $CFLAGS << ' -pedantic '
208
+
209
+ output = File.join('grpc', 'grpc_c')
210
+ puts "extconf.rb $LDFLAGS: #{$LDFLAGS}"
211
+ puts "extconf.rb $DLDFLAGS: #{$DLDFLAGS}"
212
+ puts "extconf.rb $CFLAGS: #{$CFLAGS}"
213
+ puts 'Generating Makefile for ' + output
214
+ create_makefile(output)
215
+
216
+ ruby_major_minor = /(\d+\.\d+)/.match(RUBY_VERSION).to_s
217
+ debug_symbols = "grpc-#{GRPC::VERSION}-#{RUBY_PLATFORM}-ruby-#{ruby_major_minor}.dbg"
218
+
219
+ File.open('Makefile.new', 'w') do |o|
220
+ o.puts 'hijack_remove_unused_artifacts: all remove_unused_artifacts'
221
+ o.puts
222
+ o.write(File.read('Makefile'))
223
+ o.puts
224
+ o.puts 'remove_unused_artifacts: $(DLLIB)'
225
+ # Now that the extension library has been linked, we can remove unused artifacts
226
+ # that take up a lot of disk space.
227
+ rm_obj_cmd = "rm -rf #{File.join(output_dir, 'objs')}"
228
+ o.puts "\t$(ECHO) Removing unused object artifacts: #{rm_obj_cmd}"
229
+ o.puts "\t$(Q) #{rm_obj_cmd}"
230
+ rm_grpc_core_libs = "rm -f #{grpc_lib_dir}/*.a"
231
+ o.puts "\t$(ECHO) Removing unused grpc core libraries: #{rm_grpc_core_libs}"
232
+ o.puts "\t$(Q) #{rm_grpc_core_libs}"
233
+ end
234
+ File.rename('Makefile.new', 'Makefile')
235
+
236
+ if grpc_config == 'opt'
237
+ File.open('Makefile.new', 'w') do |o|
238
+ o.puts 'hijack: all strip remove_unused_artifacts'
239
+ o.puts
240
+ o.write(File.read('Makefile'))
241
+ o.puts
242
+ o.puts 'strip: $(DLLIB)'
243
+ if debug_symbols_output_dir
244
+ o.puts "\t$(ECHO) Saving debug symbols in #{debug_symbols_output_dir}/#{debug_symbols}"
245
+ o.puts "\t$(Q) objcopy --only-keep-debug $(DLLIB) #{debug_symbols_output_dir}/#{debug_symbols}"
246
+ end
247
+ o.puts "\t$(ECHO) Stripping $(DLLIB)"
248
+ o.puts "\t$(Q) #{strip_tool} $(DLLIB)"
249
+ end
250
+ File.rename('Makefile.new', 'Makefile')
251
+ end
252
+
253
+ if ENV['GRPC_RUBY_TEST_ONLY_WORKAROUND_MAKE_INSTALL_BUG']
254
+ # Note: this env var setting is intended to work around a problem observed
255
+ # with the ginstall command on grpc's macos automated test infrastructure,
256
+ # and is not guaranteed to work in the wild.
257
+ # Also see https://github.com/rake-compiler/rake-compiler/issues/210.
258
+ puts 'Overriding the generated Makefile install target to use cp'
259
+ File.open('Makefile.new', 'w') do |o|
260
+ File.foreach('Makefile') do |i|
261
+ if i.start_with?('INSTALL_PROG = ')
262
+ override = 'INSTALL_PROG = cp'
263
+ puts "Replacing generated Makefile line: |#{i}|, with: |#{override}|"
264
+ o.puts override
265
+ else
266
+ o.puts i
267
+ end
268
+ end
269
+ end
270
+ File.rename('Makefile.new', 'Makefile')
271
+ end
@@ -0,0 +1,65 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #include <ruby/ruby.h>
20
+
21
+ #include "rb_byte_buffer.h"
22
+
23
+ #include <grpc/byte_buffer_reader.h>
24
+ #include <grpc/grpc.h>
25
+ #include <grpc/slice.h>
26
+
27
+ #include "rb_grpc.h"
28
+ #include "rb_grpc_imports.generated.h"
29
+
30
+ grpc_byte_buffer* grpc_rb_s_to_byte_buffer(char* string, size_t length) {
31
+ grpc_slice slice = grpc_slice_from_copied_buffer(string, length);
32
+ grpc_byte_buffer* buffer = grpc_raw_byte_buffer_create(&slice, 1);
33
+ grpc_slice_unref(slice);
34
+ return buffer;
35
+ }
36
+
37
+ VALUE grpc_rb_byte_buffer_to_s(grpc_byte_buffer* buffer) {
38
+ VALUE rb_string;
39
+ grpc_byte_buffer_reader reader;
40
+ grpc_slice next;
41
+ if (buffer == NULL) {
42
+ return Qnil;
43
+ }
44
+ rb_string = rb_str_buf_new(grpc_byte_buffer_length(buffer));
45
+ if (!grpc_byte_buffer_reader_init(&reader, buffer)) {
46
+ rb_raise(rb_eRuntimeError, "Error initializing byte buffer reader.");
47
+ return Qnil;
48
+ }
49
+ while (grpc_byte_buffer_reader_next(&reader, &next) != 0) {
50
+ rb_str_cat(rb_string, (const char*)GRPC_SLICE_START_PTR(next),
51
+ GRPC_SLICE_LENGTH(next));
52
+ grpc_slice_unref(next);
53
+ }
54
+ grpc_byte_buffer_reader_destroy(&reader);
55
+ return rb_string;
56
+ }
57
+
58
+ VALUE grpc_rb_slice_to_ruby_string(grpc_slice slice) {
59
+ if (GRPC_SLICE_START_PTR(slice) == NULL) {
60
+ rb_raise(rb_eRuntimeError,
61
+ "attempt to convert uninitialized grpc_slice to ruby string");
62
+ }
63
+ return rb_str_new((char*)GRPC_SLICE_START_PTR(slice),
64
+ GRPC_SLICE_LENGTH(slice));
65
+ }
@@ -0,0 +1,35 @@
1
+ /*
2
+ *
3
+ * Copyright 2015 gRPC authors.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_RB_BYTE_BUFFER_H_
20
+ #define GRPC_RB_BYTE_BUFFER_H_
21
+
22
+ #include <ruby/ruby.h>
23
+
24
+ #include <grpc/grpc.h>
25
+
26
+ /* Converts a char* with a length to a grpc_byte_buffer */
27
+ grpc_byte_buffer* grpc_rb_s_to_byte_buffer(char* string, size_t length);
28
+
29
+ /* Converts a grpc_byte_buffer to a ruby string */
30
+ VALUE grpc_rb_byte_buffer_to_s(grpc_byte_buffer* buffer);
31
+
32
+ /* Converts a grpc_slice to a ruby string */
33
+ VALUE grpc_rb_slice_to_ruby_string(grpc_slice slice);
34
+
35
+ #endif /* GRPC_RB_BYTE_BUFFER_H_ */