grpc 1.0.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (705) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3696 -867
  3. data/etc/roots.pem +39 -111
  4. data/include/grpc/byte_buffer.h +64 -1
  5. data/include/grpc/census.h +40 -96
  6. data/include/grpc/compression.h +2 -1
  7. data/include/grpc/grpc.h +42 -7
  8. data/include/grpc/grpc_posix.h +8 -5
  9. data/include/grpc/impl/codegen/atm.h +3 -0
  10. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  11. data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
  12. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  13. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
  14. data/include/grpc/impl/codegen/compression_types.h +1 -1
  15. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  16. data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
  17. data/include/grpc/impl/codegen/gpr_slice.h +84 -0
  18. data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
  19. data/include/grpc/impl/codegen/grpc_types.h +91 -9
  20. data/include/grpc/impl/codegen/port_platform.h +25 -92
  21. data/include/grpc/impl/codegen/slice.h +54 -97
  22. data/include/grpc/impl/codegen/sync.h +0 -253
  23. data/include/grpc/module.modulemap +0 -2
  24. data/include/grpc/slice.h +132 -0
  25. data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
  26. data/include/grpc/support/alloc.h +40 -1
  27. data/include/grpc/support/log.h +80 -1
  28. data/include/grpc/support/log_windows.h +2 -0
  29. data/include/grpc/support/string_util.h +1 -1
  30. data/include/grpc/support/sync.h +252 -0
  31. data/include/grpc/support/time.h +67 -1
  32. data/src/boringssl/err_data.c +639 -627
  33. data/src/core/ext/census/base_resources.c +71 -0
  34. data/src/core/ext/census/base_resources.h +39 -0
  35. data/src/core/ext/census/gen/census.pb.c +26 -29
  36. data/src/core/ext/census/gen/census.pb.h +68 -67
  37. data/src/core/ext/census/gen/trace_context.pb.c +81 -0
  38. data/src/core/ext/census/gen/trace_context.pb.h +99 -0
  39. data/src/core/ext/census/grpc_filter.c +22 -16
  40. data/src/core/ext/census/grpc_plugin.c +2 -1
  41. data/src/core/ext/census/initialize.c +16 -4
  42. data/src/core/ext/census/mlog.h +1 -1
  43. data/src/core/ext/census/placeholders.c +0 -45
  44. data/src/core/ext/census/resource.c +312 -0
  45. data/src/core/ext/census/resource.h +63 -0
  46. data/src/core/ext/census/trace_context.c +86 -0
  47. data/src/core/ext/census/trace_context.h +68 -0
  48. data/src/core/ext/census/tracing.c +8 -2
  49. data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
  50. data/src/core/ext/client_channel/client_channel.c +1218 -0
  51. data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
  52. data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
  53. data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
  54. data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
  55. data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
  56. data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
  57. data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
  58. data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
  59. data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
  60. data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
  61. data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
  62. data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
  63. data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
  64. data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
  65. data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
  66. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
  67. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
  68. data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
  69. data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
  70. data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
  71. data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
  72. data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
  73. data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
  74. data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
  75. data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
  76. data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
  77. data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
  78. data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
  79. data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
  80. data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
  81. data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
  82. data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
  83. data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
  84. data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
  85. data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
  86. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
  87. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
  88. data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
  89. data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
  90. data/src/core/ext/load_reporting/load_reporting.c +7 -56
  91. data/src/core/ext/load_reporting/load_reporting.h +41 -28
  92. data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
  93. data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
  94. data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
  95. data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
  96. data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
  98. data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
  100. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
  101. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
  105. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
  106. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
  107. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
  108. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
  109. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
  110. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
  111. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
  112. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
  114. data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
  116. data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
  118. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
  122. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
  123. data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
  124. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
  125. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
  126. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
  131. data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
  132. data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
  133. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
  134. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
  135. data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
  136. data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
  137. data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
  138. data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
  139. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
  140. data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
  141. data/src/core/lib/channel/channel_args.c +70 -13
  142. data/src/core/lib/channel/channel_args.h +28 -2
  143. data/src/core/lib/channel/channel_stack.c +77 -28
  144. data/src/core/lib/channel/channel_stack.h +61 -23
  145. data/src/core/lib/channel/channel_stack_builder.c +33 -25
  146. data/src/core/lib/channel/channel_stack_builder.h +17 -8
  147. data/src/core/lib/channel/compress_filter.c +52 -36
  148. data/src/core/lib/channel/connected_channel.c +20 -12
  149. data/src/core/lib/channel/connected_channel.h +2 -1
  150. data/src/core/lib/channel/context.h +13 -1
  151. data/src/core/lib/channel/deadline_filter.c +344 -0
  152. data/src/core/lib/channel/deadline_filter.h +99 -0
  153. data/src/core/lib/channel/handshaker.c +240 -0
  154. data/src/core/lib/channel/handshaker.h +164 -0
  155. data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
  156. data/src/core/lib/channel/handshaker_factory.h +66 -0
  157. data/src/core/lib/channel/handshaker_registry.c +113 -0
  158. data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
  159. data/src/core/lib/channel/http_client_filter.c +248 -46
  160. data/src/core/lib/channel/http_client_filter.h +3 -0
  161. data/src/core/lib/channel/http_server_filter.c +136 -24
  162. data/src/core/lib/channel/message_size_filter.c +261 -0
  163. data/src/core/lib/channel/message_size_filter.h +39 -0
  164. data/src/core/lib/compression/message_compress.c +43 -37
  165. data/src/core/lib/compression/message_compress.h +7 -5
  166. data/src/core/lib/http/format_request.c +26 -11
  167. data/src/core/lib/http/format_request.h +7 -5
  168. data/src/core/lib/http/httpcli.c +45 -27
  169. data/src/core/lib/http/httpcli.h +4 -4
  170. data/src/core/lib/http/httpcli_security_connector.c +56 -46
  171. data/src/core/lib/http/parser.c +17 -14
  172. data/src/core/lib/http/parser.h +4 -2
  173. data/src/core/lib/iomgr/closure.c +49 -7
  174. data/src/core/lib/iomgr/closure.h +56 -14
  175. data/src/core/lib/iomgr/combiner.c +422 -0
  176. data/src/core/lib/iomgr/combiner.h +64 -0
  177. data/src/core/lib/iomgr/endpoint.c +8 -2
  178. data/src/core/lib/iomgr/endpoint.h +17 -7
  179. data/src/core/lib/iomgr/endpoint_pair.h +3 -2
  180. data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
  181. data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
  182. data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
  183. data/src/core/lib/iomgr/error.c +72 -6
  184. data/src/core/lib/iomgr/error.h +30 -3
  185. data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
  186. data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
  187. data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
  188. data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
  189. data/src/core/lib/iomgr/ev_posix.c +26 -5
  190. data/src/core/lib/iomgr/ev_posix.h +12 -1
  191. data/src/core/lib/iomgr/exec_ctx.c +27 -94
  192. data/src/core/lib/iomgr/exec_ctx.h +19 -22
  193. data/src/core/lib/iomgr/executor.c +29 -8
  194. data/src/core/lib/iomgr/executor.h +2 -4
  195. data/src/core/lib/iomgr/iocp_windows.c +3 -4
  196. data/src/core/lib/iomgr/iomgr.c +14 -10
  197. data/src/core/lib/iomgr/iomgr.h +6 -2
  198. data/src/core/lib/iomgr/iomgr_posix.c +2 -2
  199. data/src/core/lib/iomgr/iomgr_uv.c +49 -0
  200. data/src/core/lib/iomgr/iomgr_windows.c +2 -2
  201. data/src/core/lib/iomgr/load_file.c +3 -3
  202. data/src/core/lib/iomgr/load_file.h +2 -2
  203. data/src/core/lib/iomgr/network_status_tracker.c +1 -1
  204. data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
  205. data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
  206. data/src/core/lib/iomgr/pollset_uv.c +142 -0
  207. data/src/core/lib/iomgr/pollset_uv.h +42 -0
  208. data/src/core/lib/iomgr/pollset_windows.c +5 -6
  209. data/src/core/lib/iomgr/port.h +129 -0
  210. data/src/core/lib/iomgr/resolve_address.h +2 -1
  211. data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
  212. data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
  213. data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
  214. data/src/core/lib/iomgr/resource_quota.c +832 -0
  215. data/src/core/lib/iomgr/resource_quota.h +159 -0
  216. data/src/core/lib/iomgr/sockaddr.h +10 -2
  217. data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
  218. data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
  219. data/src/core/lib/iomgr/socket_mutator.c +98 -0
  220. data/src/core/lib/iomgr/socket_mutator.h +80 -0
  221. data/src/core/lib/iomgr/socket_utils.h +42 -0
  222. data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
  223. data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
  224. data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
  225. data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
  226. data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
  227. data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
  228. data/src/core/lib/iomgr/socket_windows.c +14 -6
  229. data/src/core/lib/iomgr/socket_windows.h +1 -0
  230. data/src/core/lib/iomgr/tcp_client.h +8 -2
  231. data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
  232. data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
  233. data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
  234. data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
  235. data/src/core/lib/iomgr/tcp_posix.c +135 -56
  236. data/src/core/lib/iomgr/tcp_posix.h +2 -2
  237. data/src/core/lib/iomgr/tcp_server.h +14 -6
  238. data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
  239. data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
  240. data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
  241. data/src/core/lib/iomgr/tcp_uv.c +367 -0
  242. data/src/core/lib/iomgr/tcp_uv.h +59 -0
  243. data/src/core/lib/iomgr/tcp_windows.c +65 -48
  244. data/src/core/lib/iomgr/tcp_windows.h +3 -1
  245. data/src/core/lib/iomgr/timer.h +21 -21
  246. data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
  247. data/src/core/lib/iomgr/timer_generic.h +49 -0
  248. data/src/core/lib/iomgr/timer_heap.c +6 -0
  249. data/src/core/lib/iomgr/timer_uv.c +99 -0
  250. data/src/core/lib/iomgr/timer_uv.h +47 -0
  251. data/src/core/lib/iomgr/udp_server.c +116 -98
  252. data/src/core/lib/iomgr/udp_server.h +5 -3
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
  254. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
  256. data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
  257. data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
  258. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
  259. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
  260. data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
  261. data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
  262. data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
  263. data/src/core/lib/iomgr/workqueue.h +12 -20
  264. data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
  265. data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
  266. data/src/core/lib/iomgr/workqueue_windows.c +9 -8
  267. data/src/core/lib/json/json.c +3 -3
  268. data/src/core/lib/json/json.h +11 -11
  269. data/src/core/lib/json/json_reader.c +9 -5
  270. data/src/core/lib/profiling/basic_timers.c +10 -1
  271. data/src/core/lib/profiling/timers.h +2 -0
  272. data/src/core/lib/security/context/security_context.c +13 -3
  273. data/src/core/lib/security/context/security_context.h +20 -0
  274. data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
  275. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  276. data/src/core/lib/security/credentials/credentials.c +48 -19
  277. data/src/core/lib/security/credentials/credentials.h +36 -19
  278. data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
  279. data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
  280. data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
  281. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
  282. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
  283. data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
  284. data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
  285. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  286. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
  287. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
  288. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
  289. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
  290. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
  291. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  292. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
  293. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
  294. data/src/core/lib/security/transport/client_auth_filter.c +33 -27
  295. data/src/core/lib/security/transport/secure_endpoint.c +93 -68
  296. data/src/core/lib/security/transport/secure_endpoint.h +2 -2
  297. data/src/core/lib/security/transport/security_connector.c +133 -168
  298. data/src/core/lib/security/transport/security_connector.h +31 -46
  299. data/src/core/lib/security/transport/security_handshaker.c +501 -0
  300. data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
  301. data/src/core/lib/security/transport/server_auth_filter.c +50 -38
  302. data/src/core/lib/security/util/b64.c +11 -8
  303. data/src/core/lib/security/util/b64.h +5 -4
  304. data/src/core/lib/slice/percent_encoding.c +182 -0
  305. data/src/core/lib/slice/percent_encoding.h +78 -0
  306. data/src/core/lib/{support → slice}/slice.c +81 -50
  307. data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
  308. data/src/core/lib/slice/slice_internal.h +49 -0
  309. data/src/core/lib/slice/slice_string_helpers.c +90 -0
  310. data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
  311. data/src/core/lib/support/backoff.c +24 -13
  312. data/src/core/lib/support/backoff.h +5 -2
  313. data/src/core/lib/support/env.h +0 -2
  314. data/src/core/lib/support/log.c +5 -4
  315. data/src/core/lib/support/log_linux.c +0 -1
  316. data/src/core/lib/support/log_posix.c +1 -1
  317. data/src/core/lib/support/mpscq.c +83 -0
  318. data/src/core/lib/support/mpscq.h +65 -0
  319. data/src/core/lib/support/string.c +58 -49
  320. data/src/core/lib/support/string.h +11 -8
  321. data/src/core/lib/support/subprocess_posix.c +5 -2
  322. data/src/core/lib/support/thd.c +1 -1
  323. data/src/core/lib/support/time.c +43 -79
  324. data/src/core/lib/support/time_posix.c +1 -1
  325. data/src/core/lib/support/tmpfile.h +0 -2
  326. data/src/core/lib/surface/alarm.c +4 -1
  327. data/src/core/lib/surface/byte_buffer.c +17 -11
  328. data/src/core/lib/surface/byte_buffer_reader.c +23 -15
  329. data/src/core/lib/surface/call.c +294 -276
  330. data/src/core/lib/surface/call.h +24 -9
  331. data/src/core/lib/surface/call_log_batch.c +5 -3
  332. data/src/core/lib/surface/channel.c +127 -111
  333. data/src/core/lib/surface/channel.h +14 -5
  334. data/src/core/lib/surface/channel_init.c +1 -1
  335. data/src/core/lib/surface/channel_init.h +10 -1
  336. data/src/core/lib/surface/channel_ping.c +7 -6
  337. data/src/core/lib/surface/completion_queue.c +154 -18
  338. data/src/core/lib/surface/completion_queue.h +5 -0
  339. data/src/core/lib/surface/init.c +40 -6
  340. data/src/core/lib/surface/init.h +1 -0
  341. data/src/core/lib/surface/init_secure.c +5 -2
  342. data/src/core/lib/surface/lame_client.c +28 -18
  343. data/src/core/lib/surface/server.c +134 -87
  344. data/src/core/lib/surface/server.h +8 -0
  345. data/src/core/lib/surface/validate_metadata.c +1 -1
  346. data/src/core/lib/surface/version.c +3 -1
  347. data/src/core/lib/transport/byte_stream.c +7 -4
  348. data/src/core/lib/transport/byte_stream.h +6 -10
  349. data/src/core/lib/transport/connectivity_state.c +21 -12
  350. data/src/core/lib/transport/connectivity_state.h +4 -1
  351. data/src/core/lib/transport/mdstr_hash_table.c +118 -0
  352. data/src/core/lib/transport/mdstr_hash_table.h +77 -0
  353. data/src/core/lib/transport/metadata.c +83 -60
  354. data/src/core/lib/transport/metadata.h +41 -23
  355. data/src/core/lib/transport/metadata_batch.c +17 -11
  356. data/src/core/lib/transport/metadata_batch.h +20 -6
  357. data/src/core/lib/transport/pid_controller.c +57 -0
  358. data/src/core/lib/transport/pid_controller.h +64 -0
  359. data/src/core/lib/transport/service_config.c +251 -0
  360. data/src/core/lib/transport/service_config.h +71 -0
  361. data/src/core/lib/transport/static_metadata.c +18 -16
  362. data/src/core/lib/transport/static_metadata.h +113 -107
  363. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
  364. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
  365. data/src/core/lib/transport/transport.c +84 -23
  366. data/src/core/lib/transport/transport.h +53 -8
  367. data/src/core/lib/transport/transport_impl.h +3 -0
  368. data/src/core/lib/transport/transport_op_string.c +92 -20
  369. data/src/core/lib/tsi/ssl_transport_security.c +3 -1
  370. data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
  371. data/src/ruby/ext/grpc/extconf.rb +0 -1
  372. data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
  373. data/src/ruby/ext/grpc/rb_call.c +15 -5
  374. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  375. data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
  376. data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
  377. data/src/ruby/ext/grpc/rb_grpc.c +3 -1
  378. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
  379. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
  380. data/src/ruby/ext/grpc/rb_server.c +18 -12
  381. data/src/ruby/lib/grpc/errors.rb +154 -2
  382. data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
  383. data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
  384. data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
  385. data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
  386. data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
  387. data/src/ruby/lib/grpc/generic/service.rb +3 -2
  388. data/src/ruby/lib/grpc/version.rb +1 -1
  389. data/src/ruby/pb/grpc/health/checker.rb +3 -1
  390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
  391. data/src/ruby/pb/test/client.rb +307 -7
  392. data/src/ruby/pb/test/server.rb +26 -1
  393. data/src/ruby/spec/compression_options_spec.rb +164 -0
  394. data/src/ruby/spec/error_sanity_spec.rb +64 -0
  395. data/src/ruby/spec/generic/active_call_spec.rb +290 -12
  396. data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
  397. data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
  398. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
  399. data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
  400. data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
  401. data/src/ruby/spec/spec_helper.rb +2 -0
  402. data/third_party/boringssl/crypto/aes/aes.c +12 -12
  403. data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
  404. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
  405. data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
  406. data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
  407. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  408. data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
  409. data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
  410. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
  411. data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
  412. data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
  413. data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
  414. data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
  415. data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
  416. data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
  417. data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
  418. data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
  419. data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
  420. data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
  421. data/third_party/boringssl/crypto/base64/base64.c +249 -285
  422. data/third_party/boringssl/crypto/bio/bio.c +13 -23
  423. data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
  424. data/third_party/boringssl/crypto/bio/connect.c +12 -3
  425. data/third_party/boringssl/crypto/bio/fd.c +22 -15
  426. data/third_party/boringssl/crypto/bio/file.c +2 -38
  427. data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
  428. data/third_party/boringssl/crypto/bio/internal.h +3 -0
  429. data/third_party/boringssl/crypto/bio/pair.c +1 -1
  430. data/third_party/boringssl/crypto/bio/socket.c +10 -2
  431. data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
  432. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
  433. data/third_party/boringssl/crypto/bn/bn.c +38 -0
  434. data/third_party/boringssl/crypto/bn/cmp.c +25 -0
  435. data/third_party/boringssl/crypto/bn/convert.c +73 -76
  436. data/third_party/boringssl/crypto/bn/div.c +136 -70
  437. data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
  438. data/third_party/boringssl/crypto/bn/gcd.c +213 -296
  439. data/third_party/boringssl/crypto/bn/generic.c +0 -80
  440. data/third_party/boringssl/crypto/bn/internal.h +15 -3
  441. data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
  442. data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
  443. data/third_party/boringssl/crypto/bn/mul.c +2 -1
  444. data/third_party/boringssl/crypto/bn/prime.c +24 -8
  445. data/third_party/boringssl/crypto/bn/random.c +47 -33
  446. data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
  447. data/third_party/boringssl/crypto/buf/buf.c +25 -21
  448. data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
  449. data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
  450. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
  451. data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
  452. data/third_party/boringssl/crypto/cipher/aead.c +11 -22
  453. data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
  454. data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
  455. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
  456. data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
  457. data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
  458. data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
  459. data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
  460. data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
  461. data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
  462. data/third_party/boringssl/crypto/cipher/internal.h +8 -10
  463. data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
  464. data/third_party/boringssl/crypto/conf/conf.c +2 -1
  465. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  466. data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
  467. data/third_party/boringssl/crypto/cpu-arm.c +0 -161
  468. data/third_party/boringssl/crypto/cpu-intel.c +5 -3
  469. data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
  470. data/third_party/boringssl/crypto/crypto.c +29 -7
  471. data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
  472. data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
  473. data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
  474. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
  475. data/third_party/boringssl/crypto/dh/check.c +22 -6
  476. data/third_party/boringssl/crypto/dh/dh.c +45 -21
  477. data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
  478. data/third_party/boringssl/crypto/dh/params.c +30 -78
  479. data/third_party/boringssl/crypto/digest/digest.c +3 -3
  480. data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
  481. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
  482. data/third_party/boringssl/crypto/ec/ec.c +84 -140
  483. data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
  484. data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
  485. data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
  486. data/third_party/boringssl/crypto/ec/internal.h +12 -36
  487. data/third_party/boringssl/crypto/ec/oct.c +11 -11
  488. data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
  489. data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
  490. data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
  491. data/third_party/boringssl/crypto/ec/simple.c +81 -201
  492. data/third_party/boringssl/crypto/ec/util-64.c +0 -74
  493. data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
  494. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
  495. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
  496. data/third_party/boringssl/crypto/engine/engine.c +1 -1
  497. data/third_party/boringssl/crypto/err/err.c +3 -3
  498. data/third_party/boringssl/crypto/evp/evp.c +14 -59
  499. data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
  500. data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
  501. data/third_party/boringssl/crypto/evp/internal.h +4 -46
  502. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
  503. data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
  504. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
  505. data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
  506. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
  507. data/third_party/boringssl/crypto/evp/print.c +520 -0
  508. data/third_party/boringssl/crypto/ex_data.c +4 -6
  509. data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
  510. data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
  511. data/third_party/boringssl/crypto/internal.h +57 -77
  512. data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
  513. data/third_party/boringssl/crypto/md4/md4.c +9 -0
  514. data/third_party/boringssl/crypto/mem.c +19 -19
  515. data/third_party/boringssl/crypto/modes/cfb.c +5 -6
  516. data/third_party/boringssl/crypto/modes/ctr.c +10 -18
  517. data/third_party/boringssl/crypto/modes/gcm.c +100 -66
  518. data/third_party/boringssl/crypto/modes/internal.h +15 -27
  519. data/third_party/boringssl/crypto/modes/ofb.c +9 -22
  520. data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
  521. data/third_party/boringssl/crypto/newhope/internal.h +71 -0
  522. data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
  523. data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
  524. data/third_party/boringssl/crypto/newhope/poly.c +183 -0
  525. data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
  526. data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
  527. data/third_party/boringssl/crypto/obj/obj.c +111 -135
  528. data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
  529. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
  530. data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
  531. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
  532. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
  533. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
  534. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
  535. data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
  536. data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
  537. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
  538. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
  539. data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
  540. data/third_party/boringssl/crypto/rand/rand.c +4 -1
  541. data/third_party/boringssl/crypto/rand/urandom.c +5 -7
  542. data/third_party/boringssl/crypto/rand/windows.c +5 -8
  543. data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
  544. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  545. data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
  546. data/third_party/boringssl/crypto/rsa/internal.h +5 -13
  547. data/third_party/boringssl/crypto/rsa/padding.c +64 -63
  548. data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
  549. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
  550. data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
  551. data/third_party/boringssl/crypto/sha/sha256.c +2 -2
  552. data/third_party/boringssl/crypto/sha/sha512.c +7 -7
  553. data/third_party/boringssl/crypto/stack/stack.c +13 -22
  554. data/third_party/boringssl/crypto/thread.c +21 -12
  555. data/third_party/boringssl/crypto/thread_none.c +6 -2
  556. data/third_party/boringssl/crypto/thread_pthread.c +16 -7
  557. data/third_party/boringssl/crypto/thread_win.c +38 -85
  558. data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
  559. data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
  560. data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
  561. data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
  562. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
  563. data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
  564. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  565. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  566. data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
  567. data/third_party/boringssl/crypto/x509/x509.c +5 -0
  568. data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
  569. data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
  570. data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
  571. data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
  572. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  573. data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
  574. data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
  575. data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
  576. data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
  577. data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
  578. data/third_party/boringssl/crypto/x509/x_name.c +14 -17
  579. data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
  580. data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
  581. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
  582. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  583. data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
  584. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
  585. data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
  586. data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
  587. data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
  588. data/third_party/boringssl/include/openssl/aead.h +72 -73
  589. data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
  590. data/third_party/boringssl/include/openssl/asn1.h +103 -235
  591. data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
  592. data/third_party/boringssl/include/openssl/asn1t.h +1 -11
  593. data/third_party/boringssl/include/openssl/base.h +145 -3
  594. data/third_party/boringssl/include/openssl/base64.h +20 -17
  595. data/third_party/boringssl/include/openssl/bio.h +59 -34
  596. data/third_party/boringssl/include/openssl/bn.h +118 -51
  597. data/third_party/boringssl/include/openssl/buf.h +15 -0
  598. data/third_party/boringssl/include/openssl/bytestring.h +52 -4
  599. data/third_party/boringssl/include/openssl/chacha.h +2 -2
  600. data/third_party/boringssl/include/openssl/cipher.h +18 -1
  601. data/third_party/boringssl/include/openssl/cmac.h +11 -0
  602. data/third_party/boringssl/include/openssl/conf.h +13 -2
  603. data/third_party/boringssl/include/openssl/cpu.h +20 -23
  604. data/third_party/boringssl/include/openssl/crypto.h +22 -1
  605. data/third_party/boringssl/include/openssl/curve25519.h +96 -4
  606. data/third_party/boringssl/include/openssl/dh.h +71 -16
  607. data/third_party/boringssl/include/openssl/digest.h +38 -11
  608. data/third_party/boringssl/include/openssl/dsa.h +40 -4
  609. data/third_party/boringssl/include/openssl/ec.h +44 -18
  610. data/third_party/boringssl/include/openssl/ec_key.h +27 -6
  611. data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
  612. data/third_party/boringssl/include/openssl/engine.h +11 -0
  613. data/third_party/boringssl/include/openssl/evp.h +52 -88
  614. data/third_party/boringssl/include/openssl/hkdf.h +24 -4
  615. data/third_party/boringssl/include/openssl/hmac.h +20 -6
  616. data/third_party/boringssl/include/openssl/md4.h +4 -0
  617. data/third_party/boringssl/include/openssl/mem.h +19 -0
  618. data/third_party/boringssl/include/openssl/newhope.h +158 -0
  619. data/third_party/boringssl/include/openssl/nid.h +4166 -0
  620. data/third_party/boringssl/include/openssl/obj.h +31 -3
  621. data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
  622. data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
  623. data/third_party/boringssl/include/openssl/pem.h +5 -0
  624. data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
  625. data/third_party/boringssl/include/openssl/rand.h +6 -0
  626. data/third_party/boringssl/include/openssl/rc4.h +6 -0
  627. data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
  628. data/third_party/boringssl/include/openssl/rsa.h +127 -65
  629. data/third_party/boringssl/include/openssl/sha.h +14 -10
  630. data/third_party/boringssl/include/openssl/ssl.h +561 -275
  631. data/third_party/boringssl/include/openssl/ssl3.h +18 -25
  632. data/third_party/boringssl/include/openssl/stack.h +2 -4
  633. data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
  634. data/third_party/boringssl/include/openssl/thread.h +31 -13
  635. data/third_party/boringssl/include/openssl/time_support.h +1 -0
  636. data/third_party/boringssl/include/openssl/tls1.h +37 -33
  637. data/third_party/boringssl/include/openssl/x509.h +69 -26
  638. data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
  639. data/third_party/boringssl/include/openssl/x509v3.h +23 -2
  640. data/third_party/boringssl/ssl/custom_extensions.c +3 -5
  641. data/third_party/boringssl/ssl/d1_both.c +463 -499
  642. data/third_party/boringssl/ssl/d1_lib.c +38 -109
  643. data/third_party/boringssl/ssl/d1_pkt.c +173 -334
  644. data/third_party/boringssl/ssl/d1_srtp.c +20 -18
  645. data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
  646. data/third_party/boringssl/ssl/dtls_record.c +27 -26
  647. data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
  648. data/third_party/boringssl/ssl/handshake_server.c +1932 -0
  649. data/third_party/boringssl/ssl/internal.h +712 -439
  650. data/third_party/boringssl/ssl/s3_both.c +445 -257
  651. data/third_party/boringssl/ssl/s3_enc.c +53 -36
  652. data/third_party/boringssl/ssl/s3_lib.c +23 -268
  653. data/third_party/boringssl/ssl/s3_pkt.c +168 -364
  654. data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
  655. data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
  656. data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
  657. data/third_party/boringssl/ssl/ssl_cert.c +324 -49
  658. data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
  659. data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
  660. data/third_party/boringssl/ssl/ssl_file.c +21 -68
  661. data/third_party/boringssl/ssl/ssl_lib.c +881 -510
  662. data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
  663. data/third_party/boringssl/ssl/ssl_session.c +324 -103
  664. data/third_party/boringssl/ssl/ssl_stat.c +6 -88
  665. data/third_party/boringssl/ssl/t1_enc.c +23 -39
  666. data/third_party/boringssl/ssl/t1_lib.c +1120 -622
  667. data/third_party/boringssl/ssl/tls13_both.c +440 -0
  668. data/third_party/boringssl/ssl/tls13_client.c +682 -0
  669. data/third_party/boringssl/ssl/tls13_enc.c +391 -0
  670. data/third_party/boringssl/ssl/tls13_server.c +672 -0
  671. data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
  672. data/third_party/boringssl/ssl/tls_record.c +159 -77
  673. data/third_party/nanopb/pb.h +60 -28
  674. data/third_party/nanopb/pb_decode.c +120 -92
  675. data/third_party/nanopb/pb_decode.h +3 -3
  676. data/third_party/nanopb/pb_encode.c +73 -67
  677. data/third_party/nanopb/pb_encode.h +4 -4
  678. metadata +155 -89
  679. data/include/grpc/impl/codegen/byte_buffer.h +0 -122
  680. data/include/grpc/impl/codegen/log.h +0 -118
  681. data/include/grpc/impl/codegen/time.h +0 -130
  682. data/src/core/ext/client_config/client_channel.c +0 -593
  683. data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
  684. data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
  685. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
  686. data/src/core/lib/iomgr/workqueue_posix.c +0 -151
  687. data/src/core/lib/security/transport/handshake.c +0 -368
  688. data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
  689. data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
  690. data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
  691. data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
  692. data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
  693. data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
  694. data/third_party/boringssl/crypto/directory.h +0 -66
  695. data/third_party/boringssl/crypto/directory_posix.c +0 -108
  696. data/third_party/boringssl/crypto/directory_win.c +0 -144
  697. data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
  698. data/third_party/boringssl/include/openssl/pqueue.h +0 -146
  699. data/third_party/boringssl/ssl/d1_clnt.c +0 -561
  700. data/third_party/boringssl/ssl/d1_srvr.c +0 -476
  701. data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
  702. data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
  703. data/third_party/boringssl/ssl/test/async_bio.h +0 -45
  704. data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
  705. data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -13,10 +13,6 @@
13
13
  /* Enable support for dynamically allocated fields */
14
14
  /* #define PB_ENABLE_MALLOC 1 */
15
15
 
16
- /* Define this if your CPU architecture is big endian, i.e. it
17
- * stores the most-significant byte first. */
18
- /* #define __BIG_ENDIAN__ 1 */
19
-
20
16
  /* Define this if your CPU / compiler combination does not support
21
17
  * unaligned memory access to packed structures. */
22
18
  /* #define PB_NO_PACKED_STRUCTS 1 */
@@ -50,12 +46,12 @@
50
46
 
51
47
  /* Version of the nanopb library. Just in case you want to check it in
52
48
  * your own program. */
53
- #define NANOPB_VERSION nanopb-0.3.5-dev
49
+ #define NANOPB_VERSION nanopb-0.3.7-dev
54
50
 
55
51
  /* Include all the system headers needed by nanopb. You will need the
56
52
  * definitions of the following:
57
53
  * - strlen, memcpy, memset functions
58
- * - [u]int8_t, [u]int16_t, [u]int32_t, [u]int64_t
54
+ * - [u]int_least8_t, uint_fast8_t, [u]int_least16_t, [u]int32_t, [u]int64_t
59
55
  * - size_t
60
56
  * - bool
61
57
  *
@@ -144,7 +140,7 @@
144
140
  * Most-significant 4 bits specify repeated/required/packed etc.
145
141
  */
146
142
 
147
- typedef uint8_t pb_type_t;
143
+ typedef uint_least8_t pb_type_t;
148
144
 
149
145
  /**** Field data types ****/
150
146
 
@@ -174,8 +170,14 @@ typedef uint8_t pb_type_t;
174
170
  * The field contains a pointer to pb_extension_t */
175
171
  #define PB_LTYPE_EXTENSION 0x08
176
172
 
173
+ /* Byte array with inline, pre-allocated byffer.
174
+ * data_size is the length of the inline, allocated buffer.
175
+ * This differs from PB_LTYPE_BYTES by defining the element as
176
+ * pb_byte_t[data_size] rather than pb_bytes_array_t. */
177
+ #define PB_LTYPE_FIXED_LENGTH_BYTES 0x09
178
+
177
179
  /* Number of declared LTYPES */
178
- #define PB_LTYPES_COUNT 9
180
+ #define PB_LTYPES_COUNT 0x0A
179
181
  #define PB_LTYPE_MASK 0x0F
180
182
 
181
183
  /**** Field repetition rules ****/
@@ -201,18 +203,22 @@ typedef uint8_t pb_type_t;
201
203
  * and array counts.
202
204
  */
203
205
  #if defined(PB_FIELD_32BIT)
204
- #define PB_SIZE_MAX ((uint32_t)-1)
205
206
  typedef uint32_t pb_size_t;
206
207
  typedef int32_t pb_ssize_t;
207
208
  #elif defined(PB_FIELD_16BIT)
208
- #define PB_SIZE_MAX ((uint16_t)-1)
209
- typedef uint16_t pb_size_t;
210
- typedef int16_t pb_ssize_t;
209
+ typedef uint_least16_t pb_size_t;
210
+ typedef int_least16_t pb_ssize_t;
211
211
  #else
212
- #define PB_SIZE_MAX ((uint8_t)-1)
213
- typedef uint8_t pb_size_t;
214
- typedef int8_t pb_ssize_t;
212
+ typedef uint_least8_t pb_size_t;
213
+ typedef int_least8_t pb_ssize_t;
215
214
  #endif
215
+ #define PB_SIZE_MAX ((pb_size_t)-1)
216
+
217
+ /* Data type for storing encoded data and other byte streams.
218
+ * This typedef exists to support platforms where uint8_t does not exist.
219
+ * You can regard it as equivalent on uint8_t on other platforms.
220
+ */
221
+ typedef uint_least8_t pb_byte_t;
216
222
 
217
223
  /* This structure is used in auto-generated constants
218
224
  * to specify struct fields.
@@ -240,30 +246,24 @@ struct pb_field_s {
240
246
  PB_PACKED_STRUCT_END
241
247
 
242
248
  /* Make sure that the standard integer types are of the expected sizes.
243
- * All kinds of things may break otherwise.. atleast all fixed* types.
249
+ * Otherwise fixed32/fixed64 fields can break.
244
250
  *
245
251
  * If you get errors here, it probably means that your stdint.h is not
246
252
  * correct for your platform.
247
253
  */
248
- PB_STATIC_ASSERT(sizeof(int8_t) == 1, INT8_T_WRONG_SIZE)
249
- PB_STATIC_ASSERT(sizeof(uint8_t) == 1, UINT8_T_WRONG_SIZE)
250
- PB_STATIC_ASSERT(sizeof(int16_t) == 2, INT16_T_WRONG_SIZE)
251
- PB_STATIC_ASSERT(sizeof(uint16_t) == 2, UINT16_T_WRONG_SIZE)
252
- PB_STATIC_ASSERT(sizeof(int32_t) == 4, INT32_T_WRONG_SIZE)
253
- PB_STATIC_ASSERT(sizeof(uint32_t) == 4, UINT32_T_WRONG_SIZE)
254
- PB_STATIC_ASSERT(sizeof(int64_t) == 8, INT64_T_WRONG_SIZE)
255
- PB_STATIC_ASSERT(sizeof(uint64_t) == 8, UINT64_T_WRONG_SIZE)
254
+ PB_STATIC_ASSERT(sizeof(int64_t) == 2 * sizeof(int32_t), INT64_T_WRONG_SIZE)
255
+ PB_STATIC_ASSERT(sizeof(uint64_t) == 2 * sizeof(uint32_t), UINT64_T_WRONG_SIZE)
256
256
 
257
257
  /* This structure is used for 'bytes' arrays.
258
258
  * It has the number of bytes in the beginning, and after that an array.
259
259
  * Note that actual structs used will have a different length of bytes array.
260
260
  */
261
- #define PB_BYTES_ARRAY_T(n) struct { pb_size_t size; uint8_t bytes[n]; }
261
+ #define PB_BYTES_ARRAY_T(n) struct { pb_size_t size; pb_byte_t bytes[n]; }
262
262
  #define PB_BYTES_ARRAY_T_ALLOCSIZE(n) ((size_t)n + offsetof(pb_bytes_array_t, bytes))
263
263
 
264
264
  struct pb_bytes_array_s {
265
265
  pb_size_t size;
266
- uint8_t bytes[1];
266
+ pb_byte_t bytes[1];
267
267
  };
268
268
  typedef struct pb_bytes_array_s pb_bytes_array_t;
269
269
 
@@ -421,6 +421,19 @@ struct pb_extension_s {
421
421
  pb_membersize(st, m[0]), \
422
422
  pb_arraysize(st, m), ptr}
423
423
 
424
+ #define PB_REQUIRED_INLINE(tag, st, m, fd, ltype, ptr) \
425
+ {tag, PB_ATYPE_STATIC | PB_HTYPE_REQUIRED | PB_LTYPE_FIXED_LENGTH_BYTES, \
426
+ fd, 0, pb_membersize(st, m), 0, ptr}
427
+
428
+ /* Optional fields add the delta to the has_ variable. */
429
+ #define PB_OPTIONAL_INLINE(tag, st, m, fd, ltype, ptr) \
430
+ {tag, PB_ATYPE_STATIC | PB_HTYPE_OPTIONAL | PB_LTYPE_FIXED_LENGTH_BYTES, \
431
+ fd, \
432
+ pb_delta(st, has_ ## m, m), \
433
+ pb_membersize(st, m), 0, ptr}
434
+
435
+ /* INLINE does not support REPEATED fields. */
436
+
424
437
  /* Allocated fields carry the size of the actual data, not the pointer */
425
438
  #define PB_REQUIRED_POINTER(tag, st, m, fd, ltype, ptr) \
426
439
  {tag, PB_ATYPE_POINTER | PB_HTYPE_REQUIRED | ltype, \
@@ -460,6 +473,8 @@ struct pb_extension_s {
460
473
  #define PB_OPTEXT_POINTER(tag, st, m, fd, ltype, ptr) \
461
474
  PB_OPTIONAL_POINTER(tag, st, m, fd, ltype, ptr)
462
475
 
476
+ /* INLINE does not support OPTEXT. */
477
+
463
478
  #define PB_OPTEXT_CALLBACK(tag, st, m, fd, ltype, ptr) \
464
479
  PB_OPTIONAL_CALLBACK(tag, st, m, fd, ltype, ptr)
465
480
 
@@ -491,7 +506,7 @@ struct pb_extension_s {
491
506
  * FLOAT, INT32, INT64, MESSAGE, SFIXED32, SFIXED64
492
507
  * SINT32, SINT64, STRING, UINT32, UINT64 or EXTENSION
493
508
  * - Field rules: REQUIRED, OPTIONAL or REPEATED
494
- * - Allocation: STATIC or CALLBACK
509
+ * - Allocation: STATIC, INLINE, or CALLBACK
495
510
  * - Placement: FIRST or OTHER, depending on if this is the first field in structure.
496
511
  * - Message name
497
512
  * - Field name
@@ -517,11 +532,28 @@ struct pb_extension_s {
517
532
  fd, pb_delta(st, which_ ## u, u.m), \
518
533
  pb_membersize(st, u.m[0]), 0, ptr}
519
534
 
535
+ /* INLINE does not support ONEOF. */
536
+
520
537
  #define PB_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \
521
- PB_ ## rules ## _ ## allocation(union_name, tag, message, field, \
538
+ PB_ONEOF_ ## allocation(union_name, tag, message, field, \
522
539
  PB_DATAOFFSET_ ## placement(message, union_name.field, prevfield), \
523
540
  PB_LTYPE_MAP_ ## type, ptr)
524
541
 
542
+ #define PB_ANONYMOUS_ONEOF_STATIC(u, tag, st, m, fd, ltype, ptr) \
543
+ {tag, PB_ATYPE_STATIC | PB_HTYPE_ONEOF | ltype, \
544
+ fd, pb_delta(st, which_ ## u, m), \
545
+ pb_membersize(st, m), 0, ptr}
546
+
547
+ #define PB_ANONYMOUS_ONEOF_POINTER(u, tag, st, m, fd, ltype, ptr) \
548
+ {tag, PB_ATYPE_POINTER | PB_HTYPE_ONEOF | ltype, \
549
+ fd, pb_delta(st, which_ ## u, m), \
550
+ pb_membersize(st, m[0]), 0, ptr}
551
+
552
+ #define PB_ANONYMOUS_ONEOF_FIELD(union_name, tag, type, rules, allocation, placement, message, field, prevfield, ptr) \
553
+ PB_ANONYMOUS_ONEOF_ ## allocation(union_name, tag, message, field, \
554
+ PB_DATAOFFSET_ ## placement(message, field, prevfield), \
555
+ PB_LTYPE_MAP_ ## type, ptr)
556
+
525
557
  /* These macros are used for giving out error messages.
526
558
  * They are mostly a debugging aid; the main error information
527
559
  * is the true/false return value from functions.
@@ -23,9 +23,9 @@
23
23
 
24
24
  typedef bool (*pb_decoder_t)(pb_istream_t *stream, const pb_field_t *field, void *dest) checkreturn;
25
25
 
26
- static bool checkreturn buf_read(pb_istream_t *stream, uint8_t *buf, size_t count);
26
+ static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count);
27
27
  static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest);
28
- static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, uint8_t *buf, size_t *size);
28
+ static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size);
29
29
  static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter);
30
30
  static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter);
31
31
  static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_type, pb_field_iter_t *iter);
@@ -65,17 +65,18 @@ static const pb_decoder_t PB_DECODERS[PB_LTYPES_COUNT] = {
65
65
  &pb_dec_bytes,
66
66
  &pb_dec_string,
67
67
  &pb_dec_submessage,
68
- NULL /* extensions */
68
+ NULL, /* extensions */
69
+ &pb_dec_bytes /* PB_LTYPE_FIXED_LENGTH_BYTES */
69
70
  };
70
71
 
71
72
  /*******************************
72
73
  * pb_istream_t implementation *
73
74
  *******************************/
74
75
 
75
- static bool checkreturn buf_read(pb_istream_t *stream, uint8_t *buf, size_t count)
76
+ static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t count)
76
77
  {
77
- uint8_t *source = (uint8_t*)stream->state;
78
- stream->state = source + count;
78
+ const pb_byte_t *source = (const pb_byte_t*)stream->state;
79
+ stream->state = (pb_byte_t*)stream->state + count;
79
80
 
80
81
  if (buf != NULL)
81
82
  {
@@ -86,13 +87,13 @@ static bool checkreturn buf_read(pb_istream_t *stream, uint8_t *buf, size_t coun
86
87
  return true;
87
88
  }
88
89
 
89
- bool checkreturn pb_read(pb_istream_t *stream, uint8_t *buf, size_t count)
90
+ bool checkreturn pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count)
90
91
  {
91
92
  #ifndef PB_BUFFER_ONLY
92
93
  if (buf == NULL && stream->callback != buf_read)
93
94
  {
94
95
  /* Skip input bytes */
95
- uint8_t tmp[16];
96
+ pb_byte_t tmp[16];
96
97
  while (count > 16)
97
98
  {
98
99
  if (!pb_read(stream, tmp, 16))
@@ -122,7 +123,7 @@ bool checkreturn pb_read(pb_istream_t *stream, uint8_t *buf, size_t count)
122
123
 
123
124
  /* Read a single byte from input stream. buf may not be NULL.
124
125
  * This is an optimization for the varint decoding. */
125
- static bool checkreturn pb_readbyte(pb_istream_t *stream, uint8_t *buf)
126
+ static bool checkreturn pb_readbyte(pb_istream_t *stream, pb_byte_t *buf)
126
127
  {
127
128
  if (stream->bytes_left == 0)
128
129
  PB_RETURN_ERROR(stream, "end-of-stream");
@@ -131,8 +132,8 @@ static bool checkreturn pb_readbyte(pb_istream_t *stream, uint8_t *buf)
131
132
  if (!stream->callback(stream, buf, 1))
132
133
  PB_RETURN_ERROR(stream, "io error");
133
134
  #else
134
- *buf = *(uint8_t*)stream->state;
135
- stream->state = (uint8_t*)stream->state + 1;
135
+ *buf = *(const pb_byte_t*)stream->state;
136
+ stream->state = (pb_byte_t*)stream->state + 1;
136
137
  #endif
137
138
 
138
139
  stream->bytes_left--;
@@ -140,15 +141,23 @@ static bool checkreturn pb_readbyte(pb_istream_t *stream, uint8_t *buf)
140
141
  return true;
141
142
  }
142
143
 
143
- pb_istream_t pb_istream_from_buffer(uint8_t *buf, size_t bufsize)
144
+ pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t bufsize)
144
145
  {
145
146
  pb_istream_t stream;
147
+ /* Cast away the const from buf without a compiler error. We are
148
+ * careful to use it only in a const manner in the callbacks.
149
+ */
150
+ union {
151
+ void *state;
152
+ const void *c_state;
153
+ } state;
146
154
  #ifdef PB_BUFFER_ONLY
147
155
  stream.callback = NULL;
148
156
  #else
149
157
  stream.callback = &buf_read;
150
158
  #endif
151
- stream.state = buf;
159
+ state.c_state = buf;
160
+ stream.state = state.state;
152
161
  stream.bytes_left = bufsize;
153
162
  #ifndef PB_NO_ERRMSG
154
163
  stream.errmsg = NULL;
@@ -162,7 +171,7 @@ pb_istream_t pb_istream_from_buffer(uint8_t *buf, size_t bufsize)
162
171
 
163
172
  static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest)
164
173
  {
165
- uint8_t byte;
174
+ pb_byte_t byte;
166
175
  uint32_t result;
167
176
 
168
177
  if (!pb_readbyte(stream, &byte))
@@ -176,7 +185,7 @@ static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest)
176
185
  else
177
186
  {
178
187
  /* Multibyte case */
179
- uint8_t bitpos = 7;
188
+ uint_fast8_t bitpos = 7;
180
189
  result = byte & 0x7F;
181
190
 
182
191
  do
@@ -188,7 +197,7 @@ static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest)
188
197
  return false;
189
198
 
190
199
  result |= (uint32_t)(byte & 0x7F) << bitpos;
191
- bitpos = (uint8_t)(bitpos + 7);
200
+ bitpos = (uint_fast8_t)(bitpos + 7);
192
201
  } while (byte & 0x80);
193
202
  }
194
203
 
@@ -198,8 +207,8 @@ static bool checkreturn pb_decode_varint32(pb_istream_t *stream, uint32_t *dest)
198
207
 
199
208
  bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest)
200
209
  {
201
- uint8_t byte;
202
- uint8_t bitpos = 0;
210
+ pb_byte_t byte;
211
+ uint_fast8_t bitpos = 0;
203
212
  uint64_t result = 0;
204
213
 
205
214
  do
@@ -211,7 +220,7 @@ bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest)
211
220
  return false;
212
221
 
213
222
  result |= (uint64_t)(byte & 0x7F) << bitpos;
214
- bitpos = (uint8_t)(bitpos + 7);
223
+ bitpos = (uint_fast8_t)(bitpos + 7);
215
224
  } while (byte & 0x80);
216
225
 
217
226
  *dest = result;
@@ -220,7 +229,7 @@ bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest)
220
229
 
221
230
  bool checkreturn pb_skip_varint(pb_istream_t *stream)
222
231
  {
223
- uint8_t byte;
232
+ pb_byte_t byte;
224
233
  do
225
234
  {
226
235
  if (!pb_read(stream, &byte, 1))
@@ -279,7 +288,7 @@ bool checkreturn pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type)
279
288
  /* Read a raw value to buffer, for the purpose of passing it to callback as
280
289
  * a substream. Size is maximum size on call, and actual size on return.
281
290
  */
282
- static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, uint8_t *buf, size_t *size)
291
+ static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire_type, pb_byte_t *buf, size_t *size)
283
292
  {
284
293
  size_t max_size = *size;
285
294
  switch (wire_type)
@@ -367,7 +376,7 @@ static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t
367
376
 
368
377
  while (substream.bytes_left > 0 && *size < iter->pos->array_size)
369
378
  {
370
- void *pItem = (uint8_t*)iter->pData + iter->pos->data_size * (*size);
379
+ void *pItem = (char*)iter->pData + iter->pos->data_size * (*size);
371
380
  if (!func(&substream, iter->pos, pItem))
372
381
  {
373
382
  status = false;
@@ -386,7 +395,7 @@ static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t
386
395
  {
387
396
  /* Repeated field */
388
397
  pb_size_t *size = (pb_size_t*)iter->pSize;
389
- void *pItem = (uint8_t*)iter->pData + iter->pos->data_size * (*size);
398
+ void *pItem = (char*)iter->pData + iter->pos->data_size * (*size);
390
399
  if (*size >= iter->pos->array_size)
391
400
  PB_RETURN_ERROR(stream, "array overflow");
392
401
 
@@ -540,7 +549,7 @@ static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_
540
549
  }
541
550
 
542
551
  /* Decode the array entry */
543
- pItem = *(uint8_t**)iter->pData + iter->pos->data_size * (*size);
552
+ pItem = *(char**)iter->pData + iter->pos->data_size * (*size);
544
553
  initialize_pointer_field(pItem, iter);
545
554
  if (!func(&substream, iter->pos, pItem))
546
555
  {
@@ -576,7 +585,7 @@ static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_
576
585
  if (!allocate_field(stream, iter->pData, iter->pos->data_size, *size))
577
586
  return false;
578
587
 
579
- pItem = *(uint8_t**)iter->pData + iter->pos->data_size * (*size - 1);
588
+ pItem = *(char**)iter->pData + iter->pos->data_size * (*size - 1);
580
589
  initialize_pointer_field(pItem, iter);
581
590
  return func(stream, iter->pos, pItem);
582
591
  }
@@ -623,7 +632,7 @@ static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type
623
632
  * which in turn allows to use same callback for packed and
624
633
  * not-packed fields. */
625
634
  pb_istream_t substream;
626
- uint8_t buffer[10];
635
+ pb_byte_t buffer[10];
627
636
  size_t size = sizeof(buffer);
628
637
 
629
638
  if (!read_raw_value(stream, wire_type, buffer, &size))
@@ -830,7 +839,8 @@ static void pb_message_set_to_defaults(const pb_field_t fields[], void *dest_str
830
839
 
831
840
  bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct)
832
841
  {
833
- uint8_t fields_seen[(PB_MAX_REQUIRED_FIELDS + 7) / 8] = {0, 0, 0, 0, 0, 0, 0, 0};
842
+ uint32_t fields_seen[(PB_MAX_REQUIRED_FIELDS + 31) / 32] = {0, 0};
843
+ const uint32_t allbits = ~(uint32_t)0;
834
844
  uint32_t extension_range_start = 0;
835
845
  pb_field_iter_t iter;
836
846
 
@@ -886,8 +896,8 @@ bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[
886
896
  if (PB_HTYPE(iter.pos->type) == PB_HTYPE_REQUIRED
887
897
  && iter.required_field_index < PB_MAX_REQUIRED_FIELDS)
888
898
  {
889
- uint8_t tmp = (uint8_t)(1 << (iter.required_field_index & 7));
890
- fields_seen[iter.required_field_index >> 3] |= tmp;
899
+ uint32_t tmp = ((uint32_t)1 << (iter.required_field_index & 31));
900
+ fields_seen[iter.required_field_index >> 5] |= tmp;
891
901
  }
892
902
 
893
903
  if (!decode_field(stream, wire_type, &iter))
@@ -912,16 +922,19 @@ bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[
912
922
  if (PB_HTYPE(last_type) == PB_HTYPE_REQUIRED && iter.pos->tag != 0)
913
923
  req_field_count++;
914
924
 
915
- /* Check the whole bytes */
916
- for (i = 0; i < (req_field_count >> 3); i++)
925
+ if (req_field_count > 0)
917
926
  {
918
- if (fields_seen[i] != 0xFF)
927
+ /* Check the whole words */
928
+ for (i = 0; i < (req_field_count >> 5); i++)
929
+ {
930
+ if (fields_seen[i] != allbits)
931
+ PB_RETURN_ERROR(stream, "missing required field");
932
+ }
933
+
934
+ /* Check the remaining bits */
935
+ if (fields_seen[req_field_count >> 5] != (allbits >> (32 - (req_field_count & 31))))
919
936
  PB_RETURN_ERROR(stream, "missing required field");
920
937
  }
921
-
922
- /* Check the remaining bits */
923
- if (fields_seen[req_field_count >> 3] != (0xFF >> (8 - (req_field_count & 7))))
924
- PB_RETURN_ERROR(stream, "missing required field");
925
938
  }
926
939
 
927
940
  return true;
@@ -1023,6 +1036,12 @@ static void pb_release_single_field(const pb_field_iter_t *iter)
1023
1036
  if (PB_HTYPE(type) == PB_HTYPE_REPEATED)
1024
1037
  {
1025
1038
  count = *(pb_size_t*)iter->pSize;
1039
+
1040
+ if (PB_ATYPE(type) == PB_ATYPE_STATIC && count > iter->pos->array_size)
1041
+ {
1042
+ /* Protect against corrupted _count fields */
1043
+ count = iter->pos->array_size;
1044
+ }
1026
1045
  }
1027
1046
 
1028
1047
  if (pItem)
@@ -1030,7 +1049,7 @@ static void pb_release_single_field(const pb_field_iter_t *iter)
1030
1049
  while (count--)
1031
1050
  {
1032
1051
  pb_release((const pb_field_t*)iter->pos->ptr, pItem);
1033
- pItem = (uint8_t*)pItem + iter->pos->data_size;
1052
+ pItem = (char*)pItem + iter->pos->data_size;
1034
1053
  }
1035
1054
  }
1036
1055
  }
@@ -1067,6 +1086,9 @@ void pb_release(const pb_field_t fields[], void *dest_struct)
1067
1086
  {
1068
1087
  pb_field_iter_t iter;
1069
1088
 
1089
+ if (!dest_struct)
1090
+ return; /* Ignore NULL pointers, similar to free() */
1091
+
1070
1092
  if (!pb_field_iter_begin(&iter, fields, dest_struct))
1071
1093
  return; /* Empty message type */
1072
1094
 
@@ -1095,44 +1117,35 @@ bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest)
1095
1117
 
1096
1118
  bool pb_decode_fixed32(pb_istream_t *stream, void *dest)
1097
1119
  {
1098
- #ifdef __BIG_ENDIAN__
1099
- uint8_t *bytes = (uint8_t*)dest;
1100
- uint8_t lebytes[4];
1101
-
1102
- if (!pb_read(stream, lebytes, 4))
1120
+ pb_byte_t bytes[4];
1121
+
1122
+ if (!pb_read(stream, bytes, 4))
1103
1123
  return false;
1104
1124
 
1105
- bytes[0] = lebytes[3];
1106
- bytes[1] = lebytes[2];
1107
- bytes[2] = lebytes[1];
1108
- bytes[3] = lebytes[0];
1125
+ *(uint32_t*)dest = ((uint32_t)bytes[0] << 0) |
1126
+ ((uint32_t)bytes[1] << 8) |
1127
+ ((uint32_t)bytes[2] << 16) |
1128
+ ((uint32_t)bytes[3] << 24);
1109
1129
  return true;
1110
- #else
1111
- return pb_read(stream, (uint8_t*)dest, 4);
1112
- #endif
1113
1130
  }
1114
1131
 
1115
1132
  bool pb_decode_fixed64(pb_istream_t *stream, void *dest)
1116
1133
  {
1117
- #ifdef __BIG_ENDIAN__
1118
- uint8_t *bytes = (uint8_t*)dest;
1119
- uint8_t lebytes[8];
1120
-
1121
- if (!pb_read(stream, lebytes, 8))
1134
+ pb_byte_t bytes[8];
1135
+
1136
+ if (!pb_read(stream, bytes, 8))
1122
1137
  return false;
1123
1138
 
1124
- bytes[0] = lebytes[7];
1125
- bytes[1] = lebytes[6];
1126
- bytes[2] = lebytes[5];
1127
- bytes[3] = lebytes[4];
1128
- bytes[4] = lebytes[3];
1129
- bytes[5] = lebytes[2];
1130
- bytes[6] = lebytes[1];
1131
- bytes[7] = lebytes[0];
1139
+ *(uint64_t*)dest = ((uint64_t)bytes[0] << 0) |
1140
+ ((uint64_t)bytes[1] << 8) |
1141
+ ((uint64_t)bytes[2] << 16) |
1142
+ ((uint64_t)bytes[3] << 24) |
1143
+ ((uint64_t)bytes[4] << 32) |
1144
+ ((uint64_t)bytes[5] << 40) |
1145
+ ((uint64_t)bytes[6] << 48) |
1146
+ ((uint64_t)bytes[7] << 56);
1147
+
1132
1148
  return true;
1133
- #else
1134
- return pb_read(stream, (uint8_t*)dest, 8);
1135
- #endif
1136
1149
  }
1137
1150
 
1138
1151
  static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *field, void *dest)
@@ -1149,19 +1162,22 @@ static bool checkreturn pb_dec_varint(pb_istream_t *stream, const pb_field_t *fi
1149
1162
  * not break decoding of such messages, we cast <=32 bit fields to
1150
1163
  * int32_t first to get the sign correct.
1151
1164
  */
1152
- if (field->data_size == 8)
1165
+ if (field->data_size == sizeof(int64_t))
1153
1166
  svalue = (int64_t)value;
1154
1167
  else
1155
1168
  svalue = (int32_t)value;
1156
1169
 
1157
- switch (field->data_size)
1158
- {
1159
- case 1: clamped = *(int8_t*)dest = (int8_t)svalue; break;
1160
- case 2: clamped = *(int16_t*)dest = (int16_t)svalue; break;
1161
- case 4: clamped = *(int32_t*)dest = (int32_t)svalue; break;
1162
- case 8: clamped = *(int64_t*)dest = svalue; break;
1163
- default: PB_RETURN_ERROR(stream, "invalid data_size");
1164
- }
1170
+ /* Cast to the proper field size, while checking for overflows */
1171
+ if (field->data_size == sizeof(int64_t))
1172
+ clamped = *(int64_t*)dest = svalue;
1173
+ else if (field->data_size == sizeof(int32_t))
1174
+ clamped = *(int32_t*)dest = (int32_t)svalue;
1175
+ else if (field->data_size == sizeof(int_least16_t))
1176
+ clamped = *(int_least16_t*)dest = (int_least16_t)svalue;
1177
+ else if (field->data_size == sizeof(int_least8_t))
1178
+ clamped = *(int_least8_t*)dest = (int_least8_t)svalue;
1179
+ else
1180
+ PB_RETURN_ERROR(stream, "invalid data_size");
1165
1181
 
1166
1182
  if (clamped != svalue)
1167
1183
  PB_RETURN_ERROR(stream, "integer too large");
@@ -1175,14 +1191,17 @@ static bool checkreturn pb_dec_uvarint(pb_istream_t *stream, const pb_field_t *f
1175
1191
  if (!pb_decode_varint(stream, &value))
1176
1192
  return false;
1177
1193
 
1178
- switch (field->data_size)
1179
- {
1180
- case 1: clamped = *(uint8_t*)dest = (uint8_t)value; break;
1181
- case 2: clamped = *(uint16_t*)dest = (uint16_t)value; break;
1182
- case 4: clamped = *(uint32_t*)dest = (uint32_t)value; break;
1183
- case 8: clamped = *(uint64_t*)dest = value; break;
1184
- default: PB_RETURN_ERROR(stream, "invalid data_size");
1185
- }
1194
+ /* Cast to the proper field size, while checking for overflows */
1195
+ if (field->data_size == sizeof(uint64_t))
1196
+ clamped = *(uint64_t*)dest = value;
1197
+ else if (field->data_size == sizeof(uint32_t))
1198
+ clamped = *(uint32_t*)dest = (uint32_t)value;
1199
+ else if (field->data_size == sizeof(uint_least16_t))
1200
+ clamped = *(uint_least16_t*)dest = (uint_least16_t)value;
1201
+ else if (field->data_size == sizeof(uint_least8_t))
1202
+ clamped = *(uint_least8_t*)dest = (uint_least8_t)value;
1203
+ else
1204
+ PB_RETURN_ERROR(stream, "invalid data_size");
1186
1205
 
1187
1206
  if (clamped != value)
1188
1207
  PB_RETURN_ERROR(stream, "integer too large");
@@ -1196,14 +1215,17 @@ static bool checkreturn pb_dec_svarint(pb_istream_t *stream, const pb_field_t *f
1196
1215
  if (!pb_decode_svarint(stream, &value))
1197
1216
  return false;
1198
1217
 
1199
- switch (field->data_size)
1200
- {
1201
- case 1: clamped = *(int8_t*)dest = (int8_t)value; break;
1202
- case 2: clamped = *(int16_t*)dest = (int16_t)value; break;
1203
- case 4: clamped = *(int32_t*)dest = (int32_t)value; break;
1204
- case 8: clamped = *(int64_t*)dest = value; break;
1205
- default: PB_RETURN_ERROR(stream, "invalid data_size");
1206
- }
1218
+ /* Cast to the proper field size, while checking for overflows */
1219
+ if (field->data_size == sizeof(int64_t))
1220
+ clamped = *(int64_t*)dest = value;
1221
+ else if (field->data_size == sizeof(int32_t))
1222
+ clamped = *(int32_t*)dest = (int32_t)value;
1223
+ else if (field->data_size == sizeof(int_least16_t))
1224
+ clamped = *(int_least16_t*)dest = (int_least16_t)value;
1225
+ else if (field->data_size == sizeof(int_least8_t))
1226
+ clamped = *(int_least8_t*)dest = (int_least8_t)value;
1227
+ else
1228
+ PB_RETURN_ERROR(stream, "invalid data_size");
1207
1229
 
1208
1230
  if (clamped != value)
1209
1231
  PB_RETURN_ERROR(stream, "integer too large");
@@ -1251,6 +1273,12 @@ static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_t *fie
1251
1273
  }
1252
1274
  else
1253
1275
  {
1276
+ if (PB_LTYPE(field->type) == PB_LTYPE_FIXED_LENGTH_BYTES) {
1277
+ if (size != field->data_size)
1278
+ PB_RETURN_ERROR(stream, "incorrect inline bytes size");
1279
+ return pb_read(stream, (pb_byte_t*)dest, field->data_size);
1280
+ }
1281
+
1254
1282
  if (alloc_size > field->data_size)
1255
1283
  PB_RETURN_ERROR(stream, "bytes overflow");
1256
1284
  bdest = (pb_bytes_array_t*)dest;
@@ -1290,8 +1318,8 @@ static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_t *fi
1290
1318
  PB_RETURN_ERROR(stream, "string overflow");
1291
1319
  }
1292
1320
 
1293
- status = pb_read(stream, (uint8_t*)dest, size);
1294
- *((uint8_t*)dest + size) = 0;
1321
+ status = pb_read(stream, (pb_byte_t*)dest, size);
1322
+ *((pb_byte_t*)dest + size) = 0;
1295
1323
  return status;
1296
1324
  }
1297
1325