grpc 1.56.0 → 1.56.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Makefile +4 -2
- data/include/grpc/grpc_security.h +19 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +10 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +176 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +325 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +567 -543
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +150 -9
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +46 -32
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -5
- data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
- data/src/core/lib/backoff/random_early_detection.h +5 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +29 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +3 -0
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +12 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +8 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +5 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -1
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -1
- data/src/core/lib/surface/validate_metadata.cc +37 -22
- data/src/core/lib/surface/validate_metadata.h +13 -3
- data/src/core/tsi/ssl_transport_security.cc +5 -2
- data/src/core/tsi/ssl_transport_security.h +13 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- 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
|
-
|
50
|
-
|
51
|
-
|
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
|
52
|
+
return error;
|
60
53
|
}
|
61
54
|
}
|
62
|
-
return
|
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
|
-
|
65
|
+
ValidateMetadataResult ValidateHeaderKeyIsLegal(absl::string_view key) {
|
67
66
|
if (key.empty()) {
|
68
|
-
return
|
67
|
+
return ValidateMetadataResult::kCannotBeZeroLength;
|
69
68
|
}
|
70
69
|
if (key.size() > UINT32_MAX) {
|
71
|
-
return
|
72
|
-
|
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
|
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::
|
108
|
-
|
109
|
-
|
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
|
-
|
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),
|
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
|
-
|
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
|
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.
|
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-
|
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.
|
3249
|
+
rubygems_version: 3.4.17
|
3248
3250
|
signing_key:
|
3249
3251
|
specification_version: 4
|
3250
3252
|
summary: GRPC system in Ruby
|