grpc 1.56.0.pre3 → 1.56.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +7 -5
@@ -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.pre3'
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.pre3
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-13 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
@@ -3240,11 +3242,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
3240
3242
  version: 2.5.0
3241
3243
  required_rubygems_version: !ruby/object:Gem::Requirement
3242
3244
  requirements:
3243
- - - ">"
3245
+ - - ">="
3244
3246
  - !ruby/object:Gem::Version
3245
- version: 1.3.1
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