grpc 1.56.0 → 1.56.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +4 -2
  3. data/include/grpc/grpc_security.h +19 -0
  4. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1 -1
  5. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +10 -1
  6. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +176 -0
  7. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +325 -0
  8. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +567 -543
  9. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +150 -9
  10. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +46 -32
  11. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -5
  12. data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
  13. data/src/core/lib/backoff/random_early_detection.h +5 -0
  14. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -0
  15. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +29 -0
  16. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +3 -0
  17. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -12
  18. data/src/core/lib/iomgr/tcp_server_utils_posix.h +12 -0
  19. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -0
  20. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +8 -0
  21. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +5 -1
  22. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -1
  23. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  24. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -1
  25. data/src/core/lib/surface/validate_metadata.cc +37 -22
  26. data/src/core/lib/surface/validate_metadata.h +13 -3
  27. data/src/core/tsi/ssl_transport_security.cc +5 -2
  28. data/src/core/tsi/ssl_transport_security.h +13 -1
  29. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  30. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  31. data/src/ruby/lib/grpc/version.rb +1 -1
  32. metadata +5 -3
@@ -30,6 +30,7 @@
30
30
  #include "src/core/lib/iomgr/resolve_address.h"
31
31
  #include "src/core/lib/iomgr/socket_utils_posix.h"
32
32
  #include "src/core/lib/iomgr/tcp_server.h"
33
+ #include "src/core/lib/iomgr/timer.h"
33
34
  #include "src/core/lib/resource_quota/memory_quota.h"
34
35
 
35
36
  // one listening port
@@ -52,6 +53,11 @@ typedef struct grpc_tcp_listener {
52
53
  // identified while iterating through 'next'.
53
54
  struct grpc_tcp_listener* sibling;
54
55
  int is_sibling;
56
+ // If an accept4() call fails, a timer is started to drain the accept queue in
57
+ // case no further connection attempts reach the gRPC server.
58
+ grpc_closure retry_closure;
59
+ grpc_timer retry_timer;
60
+ gpr_atm retry_timer_armed;
55
61
  } grpc_tcp_listener;
56
62
 
57
63
  // the overall server
@@ -139,4 +145,10 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
139
145
  // Ruturn true if the platform supports ifaddrs
140
146
  bool grpc_tcp_server_have_ifaddrs(void);
141
147
 
148
+ // Initialize (but don't start) the timer and callback to retry accept4() on a
149
+ // listening socket after file descriptors have been exhausted. This must be
150
+ // called when creating a new listener.
151
+ void grpc_tcp_server_listener_initialize_retry_timer(
152
+ grpc_tcp_listener* listener);
153
+
142
154
  #endif // GRPC_SRC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
@@ -18,6 +18,8 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include <grpc/support/atm.h>
22
+
21
23
  #include "src/core/lib/iomgr/port.h"
22
24
 
23
25
  #ifdef GRPC_POSIX_SOCKET_TCP_SERVER_UTILS_COMMON
@@ -81,6 +83,24 @@ static int get_max_accept_queue_size(void) {
81
83
  return s_max_accept_queue_size;
82
84
  }
83
85
 
86
+ static void listener_retry_timer_cb(void* arg, grpc_error_handle err) {
87
+ // Do nothing if cancelled.
88
+ if (!err.ok()) return;
89
+ grpc_tcp_listener* listener = static_cast<grpc_tcp_listener*>(arg);
90
+ gpr_atm_no_barrier_store(&listener->retry_timer_armed, false);
91
+ if (!grpc_fd_is_shutdown(listener->emfd)) {
92
+ grpc_fd_set_readable(listener->emfd);
93
+ }
94
+ }
95
+
96
+ void grpc_tcp_server_listener_initialize_retry_timer(
97
+ grpc_tcp_listener* listener) {
98
+ gpr_atm_no_barrier_store(&listener->retry_timer_armed, false);
99
+ grpc_timer_init_unset(&listener->retry_timer);
100
+ GRPC_CLOSURE_INIT(&listener->retry_closure, listener_retry_timer_cb, listener,
101
+ grpc_schedule_on_exec_ctx);
102
+ }
103
+
84
104
  static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
85
105
  const grpc_resolved_address* addr,
86
106
  unsigned port_index,
@@ -112,6 +132,7 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
112
132
  sp->server = s;
113
133
  sp->fd = fd;
114
134
  sp->emfd = grpc_fd_create(fd, name.c_str(), true);
135
+ grpc_tcp_server_listener_initialize_retry_timer(sp);
115
136
 
116
137
  // Check and set fd as prellocated
117
138
  if (grpc_tcp_server_pre_allocated_fd(s) == fd) {
@@ -120,3 +120,11 @@ void grpc_tls_credentials_options_set_tls_session_key_log_file_path(
120
120
  }
121
121
  options->set_tls_session_key_log_file_path(path != nullptr ? path : "");
122
122
  }
123
+
124
+ void grpc_tls_credentials_options_set_send_client_ca_list(
125
+ grpc_tls_credentials_options* options, bool send_client_ca_list) {
126
+ if (options == nullptr) {
127
+ return;
128
+ }
129
+ options->set_send_client_ca_list(send_client_ca_list);
130
+ }
@@ -61,6 +61,7 @@ struct grpc_tls_credentials_options
61
61
  const std::string& identity_cert_name() const { return identity_cert_name_; }
62
62
  const std::string& tls_session_key_log_file_path() const { return tls_session_key_log_file_path_; }
63
63
  const std::string& crl_directory() const { return crl_directory_; }
64
+ bool send_client_ca_list() const { return send_client_ca_list_; }
64
65
 
65
66
  // Setters for member fields.
66
67
  void set_cert_request_type(grpc_ssl_client_certificate_request_type cert_request_type) { cert_request_type_ = cert_request_type; }
@@ -81,6 +82,7 @@ struct grpc_tls_credentials_options
81
82
  void set_tls_session_key_log_file_path(std::string tls_session_key_log_file_path) { tls_session_key_log_file_path_ = std::move(tls_session_key_log_file_path); }
82
83
  // gRPC will enforce CRLs on all handshakes from all hashed CRL files inside of the crl_directory. If not set, an empty string will be used, which will not enable CRL checking. Only supported for OpenSSL version > 1.1.
83
84
  void set_crl_directory(std::string crl_directory) { crl_directory_ = std::move(crl_directory); }
85
+ void set_send_client_ca_list(bool send_client_ca_list) { send_client_ca_list_ = send_client_ca_list; }
84
86
 
85
87
  bool operator==(const grpc_tls_credentials_options& other) const {
86
88
  return cert_request_type_ == other.cert_request_type_ &&
@@ -95,7 +97,8 @@ struct grpc_tls_credentials_options
95
97
  watch_identity_pair_ == other.watch_identity_pair_ &&
96
98
  identity_cert_name_ == other.identity_cert_name_ &&
97
99
  tls_session_key_log_file_path_ == other.tls_session_key_log_file_path_ &&
98
- crl_directory_ == other.crl_directory_;
100
+ crl_directory_ == other.crl_directory_ &&
101
+ send_client_ca_list_ == other.send_client_ca_list_;
99
102
  }
100
103
 
101
104
  private:
@@ -112,6 +115,7 @@ struct grpc_tls_credentials_options
112
115
  std::string identity_cert_name_;
113
116
  std::string tls_session_key_log_file_path_;
114
117
  std::string crl_directory_;
118
+ bool send_client_ca_list_ = false;
115
119
  };
116
120
 
117
121
  #endif // GRPC_SRC_CORE_LIB_SECURITY_CREDENTIALS_TLS_GRPC_TLS_CREDENTIALS_OPTIONS_H
@@ -465,7 +465,7 @@ grpc_security_status grpc_ssl_tsi_server_handshaker_factory_init(
465
465
  grpc_ssl_client_certificate_request_type client_certificate_request,
466
466
  tsi_tls_version min_tls_version, tsi_tls_version max_tls_version,
467
467
  tsi::TlsSessionKeyLoggerCache::TlsSessionKeyLogger* tls_session_key_logger,
468
- const char* crl_directory,
468
+ const char* crl_directory, bool send_client_ca_list,
469
469
  tsi_ssl_server_handshaker_factory** handshaker_factory) {
470
470
  size_t num_alpn_protocols = 0;
471
471
  const char** alpn_protocol_strings =
@@ -483,6 +483,7 @@ grpc_security_status grpc_ssl_tsi_server_handshaker_factory_init(
483
483
  options.max_tls_version = max_tls_version;
484
484
  options.key_logger = tls_session_key_logger;
485
485
  options.crl_directory = crl_directory;
486
+ options.send_client_ca_list = send_client_ca_list;
486
487
  const tsi_result result =
487
488
  tsi_create_ssl_server_handshaker_factory_with_options(&options,
488
489
  handshaker_factory);
@@ -93,7 +93,7 @@ grpc_security_status grpc_ssl_tsi_server_handshaker_factory_init(
93
93
  grpc_ssl_client_certificate_request_type client_certificate_request,
94
94
  tsi_tls_version min_tls_version, tsi_tls_version max_tls_version,
95
95
  tsi::TlsSessionKeyLoggerCache::TlsSessionKeyLogger* tls_session_key_logger,
96
- const char* crl_directory,
96
+ const char* crl_directory, bool send_client_ca_list,
97
97
  tsi_ssl_server_handshaker_factory** handshaker_factory);
98
98
 
99
99
  // Free the memory occupied by key cert pairs.
@@ -830,7 +830,7 @@ TlsServerSecurityConnector::UpdateHandshakerFactoryLocked() {
830
830
  grpc_get_tsi_tls_version(options_->min_tls_version()),
831
831
  grpc_get_tsi_tls_version(options_->max_tls_version()),
832
832
  tls_session_key_logger_.get(), options_->crl_directory().c_str(),
833
- &server_handshaker_factory_);
833
+ options_->send_client_ca_list(), &server_handshaker_factory_);
834
834
  // Free memory.
835
835
  grpc_tsi_ssl_pem_key_cert_pairs_destroy(pem_key_cert_pairs,
836
836
  num_key_cert_pairs);
@@ -21,8 +21,6 @@
21
21
  #include "src/core/lib/surface/validate_metadata.h"
22
22
 
23
23
  #include "absl/status/status.h"
24
- #include "absl/strings/escaping.h"
25
- #include "absl/strings/str_cat.h"
26
24
  #include "absl/strings/string_view.h"
27
25
 
28
26
  #include <grpc/grpc.h>
@@ -46,32 +44,49 @@ class LegalHeaderKeyBits : public BitSet<256> {
46
44
  };
47
45
  constexpr LegalHeaderKeyBits g_legal_header_key_bits;
48
46
 
49
- GPR_ATTRIBUTE_NOINLINE
50
- absl::Status DoesNotConformTo(absl::string_view x, const char* err_desc) {
51
- return absl::InternalError(absl::StrCat(err_desc, ": ", x, " (hex ",
52
- absl::BytesToHexString(x), ")"));
53
- }
54
-
55
- absl::Status ConformsTo(absl::string_view x, const BitSet<256>& legal_bits,
56
- const char* err_desc) {
47
+ ValidateMetadataResult ConformsTo(absl::string_view x,
48
+ const BitSet<256>& legal_bits,
49
+ ValidateMetadataResult error) {
57
50
  for (uint8_t c : x) {
58
51
  if (!legal_bits.is_set(c)) {
59
- return DoesNotConformTo(x, err_desc);
52
+ return error;
60
53
  }
61
54
  }
62
- return absl::OkStatus();
55
+ return ValidateMetadataResult::kOk;
56
+ }
57
+
58
+ absl::Status UpgradeToStatus(ValidateMetadataResult result) {
59
+ if (result == ValidateMetadataResult::kOk) return absl::OkStatus();
60
+ return absl::InternalError(ValidateMetadataResultToString(result));
63
61
  }
62
+
64
63
  } // namespace
65
64
 
66
- absl::Status ValidateHeaderKeyIsLegal(absl::string_view key) {
65
+ ValidateMetadataResult ValidateHeaderKeyIsLegal(absl::string_view key) {
67
66
  if (key.empty()) {
68
- return absl::InternalError("Metadata keys cannot be zero length");
67
+ return ValidateMetadataResult::kCannotBeZeroLength;
69
68
  }
70
69
  if (key.size() > UINT32_MAX) {
71
- return absl::InternalError(
72
- "Metadata keys cannot be larger than UINT32_MAX");
70
+ return ValidateMetadataResult::kTooLong;
71
+ }
72
+ return ConformsTo(key, g_legal_header_key_bits,
73
+ ValidateMetadataResult::kIllegalHeaderKey);
74
+ }
75
+
76
+ const char* ValidateMetadataResultToString(ValidateMetadataResult result) {
77
+ switch (result) {
78
+ case ValidateMetadataResult::kOk:
79
+ return "Ok";
80
+ case ValidateMetadataResult::kCannotBeZeroLength:
81
+ return "Metadata keys cannot be zero length";
82
+ case ValidateMetadataResult::kTooLong:
83
+ return "Metadata keys cannot be larger than UINT32_MAX";
84
+ case ValidateMetadataResult::kIllegalHeaderKey:
85
+ return "Illegal header key";
86
+ case ValidateMetadataResult::kIllegalHeaderValue:
87
+ return "Illegal header value";
73
88
  }
74
- return ConformsTo(key, g_legal_header_key_bits, "Illegal header key");
89
+ GPR_UNREACHABLE_CODE(return "Unknown");
75
90
  }
76
91
 
77
92
  } // namespace grpc_core
@@ -82,8 +97,8 @@ static int error2int(grpc_error_handle error) {
82
97
  }
83
98
 
84
99
  grpc_error_handle grpc_validate_header_key_is_legal(const grpc_slice& slice) {
85
- return grpc_core::ValidateHeaderKeyIsLegal(
86
- grpc_core::StringViewFromSlice(slice));
100
+ return grpc_core::UpgradeToStatus(grpc_core::ValidateHeaderKeyIsLegal(
101
+ grpc_core::StringViewFromSlice(slice)));
87
102
  }
88
103
 
89
104
  int grpc_header_key_is_legal(grpc_slice slice) {
@@ -104,9 +119,9 @@ constexpr LegalHeaderNonBinValueBits g_legal_header_non_bin_value_bits;
104
119
 
105
120
  grpc_error_handle grpc_validate_header_nonbin_value_is_legal(
106
121
  const grpc_slice& slice) {
107
- return grpc_core::ConformsTo(grpc_core::StringViewFromSlice(slice),
108
- g_legal_header_non_bin_value_bits,
109
- "Illegal header value");
122
+ return grpc_core::UpgradeToStatus(grpc_core::ConformsTo(
123
+ grpc_core::StringViewFromSlice(slice), g_legal_header_non_bin_value_bits,
124
+ grpc_core::ValidateMetadataResult::kIllegalHeaderValue));
110
125
  }
111
126
 
112
127
  int grpc_header_nonbin_value_is_legal(grpc_slice slice) {
@@ -25,7 +25,6 @@
25
25
 
26
26
  #include <cstring>
27
27
 
28
- #include "absl/status/status.h"
29
28
  #include "absl/strings/string_view.h"
30
29
 
31
30
  #include <grpc/slice.h>
@@ -35,9 +34,20 @@
35
34
 
36
35
  namespace grpc_core {
37
36
 
38
- absl::Status ValidateHeaderKeyIsLegal(absl::string_view key);
37
+ enum class ValidateMetadataResult : uint8_t {
38
+ kOk,
39
+ kCannotBeZeroLength,
40
+ kTooLong,
41
+ kIllegalHeaderKey,
42
+ kIllegalHeaderValue
43
+ };
39
44
 
40
- }
45
+ const char* ValidateMetadataResultToString(ValidateMetadataResult result);
46
+
47
+ // Returns nullopt if the key is legal, otherwise returns an error message.
48
+ ValidateMetadataResult ValidateHeaderKeyIsLegal(absl::string_view key);
49
+
50
+ } // namespace grpc_core
41
51
 
42
52
  grpc_error_handle grpc_validate_header_key_is_legal(const grpc_slice& slice);
43
53
  grpc_error_handle grpc_validate_header_nonbin_value_is_legal(
@@ -2202,12 +2202,15 @@ tsi_result tsi_create_ssl_server_handshaker_factory_with_options(
2202
2202
  STACK_OF(X509_NAME)* root_names = nullptr;
2203
2203
  result = ssl_ctx_load_verification_certs(
2204
2204
  impl->ssl_contexts[i], options->pem_client_root_certs,
2205
- strlen(options->pem_client_root_certs), &root_names);
2205
+ strlen(options->pem_client_root_certs),
2206
+ options->send_client_ca_list ? &root_names : nullptr);
2206
2207
  if (result != TSI_OK) {
2207
2208
  gpr_log(GPR_ERROR, "Invalid verification certs.");
2208
2209
  break;
2209
2210
  }
2210
- SSL_CTX_set_client_CA_list(impl->ssl_contexts[i], root_names);
2211
+ if (options->send_client_ca_list) {
2212
+ SSL_CTX_set_client_CA_list(impl->ssl_contexts[i], root_names);
2213
+ }
2211
2214
  }
2212
2215
  switch (options->client_certificate_request) {
2213
2216
  case TSI_DONT_REQUEST_CLIENT_CERTIFICATE:
@@ -325,6 +325,17 @@ struct tsi_ssl_server_handshaker_options {
325
325
  // crl checking. Only OpenSSL version > 1.1 is supported for CRL checking
326
326
  const char* crl_directory;
327
327
 
328
+ // If true, the SSL server sends a list of CA names to the client in the
329
+ // ServerHello. This list of CA names is extracted from the server's trust
330
+ // bundle, and the client may use this lint as a hint to decide which
331
+ // certificate it should send to the server.
332
+ //
333
+ // WARNING: This is an extremely dangerous option. If the server's trust
334
+ // bundle is sufficiently large, then setting this bit to true will result in
335
+ // the server being unable to generate a ServerHello, and hence the server
336
+ // will be unusable.
337
+ bool send_client_ca_list;
338
+
328
339
  tsi_ssl_server_handshaker_options()
329
340
  : pem_key_cert_pairs(nullptr),
330
341
  num_key_cert_pairs(0),
@@ -338,7 +349,8 @@ struct tsi_ssl_server_handshaker_options {
338
349
  min_tls_version(tsi_tls_version::TSI_TLS1_2),
339
350
  max_tls_version(tsi_tls_version::TSI_TLS1_3),
340
351
  key_logger(nullptr),
341
- crl_directory(nullptr) {}
352
+ crl_directory(nullptr),
353
+ send_client_ca_list(true) {}
342
354
  };
343
355
 
344
356
  // Creates a server handshaker factory.
@@ -188,6 +188,7 @@ grpc_tls_credentials_options_set_identity_cert_name_type grpc_tls_credentials_op
188
188
  grpc_tls_credentials_options_set_cert_request_type_type grpc_tls_credentials_options_set_cert_request_type_import;
189
189
  grpc_tls_credentials_options_set_crl_directory_type grpc_tls_credentials_options_set_crl_directory_import;
190
190
  grpc_tls_credentials_options_set_verify_server_cert_type grpc_tls_credentials_options_set_verify_server_cert_import;
191
+ grpc_tls_credentials_options_set_send_client_ca_list_type grpc_tls_credentials_options_set_send_client_ca_list_import;
191
192
  grpc_tls_credentials_options_set_check_call_host_type grpc_tls_credentials_options_set_check_call_host_import;
192
193
  grpc_insecure_credentials_create_type grpc_insecure_credentials_create_import;
193
194
  grpc_insecure_server_credentials_create_type grpc_insecure_server_credentials_create_import;
@@ -474,6 +475,7 @@ void grpc_rb_load_imports(HMODULE library) {
474
475
  grpc_tls_credentials_options_set_cert_request_type_import = (grpc_tls_credentials_options_set_cert_request_type_type) GetProcAddress(library, "grpc_tls_credentials_options_set_cert_request_type");
475
476
  grpc_tls_credentials_options_set_crl_directory_import = (grpc_tls_credentials_options_set_crl_directory_type) GetProcAddress(library, "grpc_tls_credentials_options_set_crl_directory");
476
477
  grpc_tls_credentials_options_set_verify_server_cert_import = (grpc_tls_credentials_options_set_verify_server_cert_type) GetProcAddress(library, "grpc_tls_credentials_options_set_verify_server_cert");
478
+ grpc_tls_credentials_options_set_send_client_ca_list_import = (grpc_tls_credentials_options_set_send_client_ca_list_type) GetProcAddress(library, "grpc_tls_credentials_options_set_send_client_ca_list");
477
479
  grpc_tls_credentials_options_set_check_call_host_import = (grpc_tls_credentials_options_set_check_call_host_type) GetProcAddress(library, "grpc_tls_credentials_options_set_check_call_host");
478
480
  grpc_insecure_credentials_create_import = (grpc_insecure_credentials_create_type) GetProcAddress(library, "grpc_insecure_credentials_create");
479
481
  grpc_insecure_server_credentials_create_import = (grpc_insecure_server_credentials_create_type) GetProcAddress(library, "grpc_insecure_server_credentials_create");
@@ -539,6 +539,9 @@ extern grpc_tls_credentials_options_set_crl_directory_type grpc_tls_credentials_
539
539
  typedef void(*grpc_tls_credentials_options_set_verify_server_cert_type)(grpc_tls_credentials_options* options, int verify_server_cert);
540
540
  extern grpc_tls_credentials_options_set_verify_server_cert_type grpc_tls_credentials_options_set_verify_server_cert_import;
541
541
  #define grpc_tls_credentials_options_set_verify_server_cert grpc_tls_credentials_options_set_verify_server_cert_import
542
+ typedef void(*grpc_tls_credentials_options_set_send_client_ca_list_type)(grpc_tls_credentials_options* options, bool send_client_ca_list);
543
+ extern grpc_tls_credentials_options_set_send_client_ca_list_type grpc_tls_credentials_options_set_send_client_ca_list_import;
544
+ #define grpc_tls_credentials_options_set_send_client_ca_list grpc_tls_credentials_options_set_send_client_ca_list_import
542
545
  typedef void(*grpc_tls_credentials_options_set_check_call_host_type)(grpc_tls_credentials_options* options, int check_call_host);
543
546
  extern grpc_tls_credentials_options_set_check_call_host_type grpc_tls_credentials_options_set_check_call_host_import;
544
547
  #define grpc_tls_credentials_options_set_check_call_host grpc_tls_credentials_options_set_check_call_host_import
@@ -14,5 +14,5 @@
14
14
 
15
15
  # GRPC contains the General RPC module.
16
16
  module GRPC
17
- VERSION = '1.56.0'
17
+ VERSION = '1.56.2'
18
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.56.0
4
+ version: 1.56.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - gRPC Authors
8
8
  autorequire:
9
9
  bindir: src/ruby/bin
10
10
  cert_chain: []
11
- date: 2023-06-14 00:00:00.000000000 Z
11
+ date: 2023-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-protobuf
@@ -465,6 +465,8 @@ files:
465
465
  - src/core/ext/transport/chttp2/transport/hpack_encoder.h
466
466
  - src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc
467
467
  - src/core/ext/transport/chttp2/transport/hpack_encoder_table.h
468
+ - src/core/ext/transport/chttp2/transport/hpack_parse_result.cc
469
+ - src/core/ext/transport/chttp2/transport/hpack_parse_result.h
468
470
  - src/core/ext/transport/chttp2/transport/hpack_parser.cc
469
471
  - src/core/ext/transport/chttp2/transport/hpack_parser.h
470
472
  - src/core/ext/transport/chttp2/transport/hpack_parser_table.cc
@@ -3244,7 +3246,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
3244
3246
  - !ruby/object:Gem::Version
3245
3247
  version: '0'
3246
3248
  requirements: []
3247
- rubygems_version: 3.4.14
3249
+ rubygems_version: 3.4.17
3248
3250
  signing_key:
3249
3251
  specification_version: 4
3250
3252
  summary: GRPC system in Ruby