grpc 1.21.0 → 1.22.0.pre1
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.
- checksums.yaml +4 -4
- data/Makefile +422 -62
- data/include/grpc/grpc_security.h +61 -5
- data/include/grpc/grpc_security_constants.h +1 -1
- data/include/grpc/impl/codegen/gpr_types.h +1 -1
- data/include/grpc/slice.h +2 -2
- data/src/core/ext/filters/client_channel/backup_poller.cc +2 -3
- data/src/core/ext/filters/client_channel/backup_poller.h +5 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +260 -122
- data/src/core/ext/filters/client_channel/client_channel.h +0 -8
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -84
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +2 -28
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +2 -8
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +5 -4
- data/src/core/ext/filters/client_channel/lb_policy.cc +16 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +92 -98
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +63 -87
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +35 -87
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +18 -74
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +167 -217
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +216 -190
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -7
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +28 -64
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -12
- data/src/core/ext/filters/client_channel/server_address.cc +4 -6
- data/src/core/ext/filters/client_channel/server_address.h +1 -3
- data/src/core/ext/filters/client_channel/service_config.cc +20 -22
- data/src/core/ext/filters/client_channel/service_config.h +26 -28
- data/src/core/ext/filters/client_channel/subchannel.cc +261 -160
- data/src/core/ext/filters/client_channel/subchannel.h +97 -23
- data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +12 -12
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +50 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +31 -36
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +71 -52
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +18 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +5 -12
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +3 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +39 -57
- data/src/core/lib/channel/channelz.cc +136 -19
- data/src/core/lib/channel/channelz.h +36 -40
- data/src/core/lib/channel/channelz_registry.cc +74 -106
- data/src/core/lib/channel/channelz_registry.h +10 -28
- data/src/core/lib/channel/context.h +1 -1
- data/src/core/lib/channel/handshaker.cc +6 -0
- data/src/core/lib/compression/compression.cc +13 -8
- data/src/core/lib/compression/compression_internal.cc +14 -10
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/stream_compression.cc +3 -2
- data/src/core/lib/compression/stream_compression.h +2 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
- data/src/core/lib/gpr/env.h +1 -1
- data/src/core/lib/gpr/string.cc +8 -1
- data/src/core/lib/gpr/string.h +6 -1
- data/src/core/lib/gprpp/fork.cc +1 -1
- data/src/core/lib/gprpp/fork.h +5 -1
- data/src/core/lib/gprpp/global_config.h +9 -0
- data/src/core/lib/gprpp/global_config_custom.h +1 -1
- data/src/core/lib/gprpp/inlined_vector.h +8 -0
- data/src/core/lib/gprpp/map.h +38 -21
- data/src/core/lib/gprpp/memory.h +2 -2
- data/src/core/lib/gprpp/orphanable.h +1 -1
- data/src/core/lib/gprpp/ref_counted.h +9 -4
- data/src/core/lib/http/httpcli.cc +3 -3
- data/src/core/lib/iomgr/buffer_list.h +1 -1
- data/src/core/lib/iomgr/call_combiner.cc +1 -1
- data/src/core/lib/iomgr/call_combiner.h +1 -1
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
- data/src/core/lib/iomgr/cfstream_handle.h +4 -0
- data/src/core/lib/iomgr/error.cc +3 -3
- data/src/core/lib/iomgr/error.h +9 -3
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +1 -1
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.h +3 -2
- data/src/core/lib/iomgr/ev_windows.cc +2 -2
- data/src/core/lib/iomgr/iomgr.cc +4 -4
- data/src/core/lib/iomgr/lockfree_event.cc +1 -1
- data/src/core/lib/iomgr/port.h +5 -1
- data/src/core/lib/iomgr/tcp_posix.cc +1 -3
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +24 -0
- data/src/core/lib/iomgr/tcp_server_custom.cc +11 -9
- data/src/core/lib/iomgr/tcp_server_posix.cc +72 -11
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +11 -9
- data/src/core/lib/iomgr/tcp_uv.cc +5 -6
- data/src/core/lib/iomgr/timer.h +2 -1
- data/src/core/lib/iomgr/udp_server.cc +2 -2
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
- data/src/core/lib/security/transport/auth_filters.h +3 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +13 -0
- data/src/core/lib/security/transport/security_handshaker.cc +7 -7
- data/src/core/lib/slice/b64.h +2 -2
- data/src/core/lib/slice/slice.cc +82 -10
- data/src/core/lib/slice/slice_buffer.cc +49 -21
- data/src/core/lib/slice/slice_hash_table.h +2 -2
- data/src/core/lib/slice/slice_intern.cc +15 -16
- data/src/core/lib/slice/slice_internal.h +52 -0
- data/src/core/lib/slice/slice_string_helpers.cc +10 -1
- data/src/core/lib/slice/slice_string_helpers.h +3 -1
- data/src/core/lib/slice/slice_utils.h +50 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +2 -2
- data/src/core/lib/surface/call.cc +14 -8
- data/src/core/lib/surface/channel.cc +89 -97
- data/src/core/lib/surface/channel.h +60 -6
- data/src/core/lib/surface/completion_queue.cc +49 -36
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/server.cc +8 -8
- data/src/core/lib/surface/validate_metadata.cc +14 -8
- data/src/core/lib/surface/validate_metadata.h +13 -2
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/metadata.cc +56 -26
- data/src/core/lib/transport/metadata.h +91 -75
- data/src/core/lib/transport/static_metadata.cc +262 -176
- data/src/core/lib/transport/static_metadata.h +272 -180
- data/src/core/lib/transport/transport.cc +1 -1
- data/src/core/lib/transport/transport.h +8 -2
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +5 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- metadata +37 -35
@@ -92,6 +92,9 @@ struct grpc_tcp_server {
|
|
92
92
|
|
93
93
|
/* channel args for this server */
|
94
94
|
grpc_channel_args* channel_args;
|
95
|
+
|
96
|
+
/* a handler for external connections, owned */
|
97
|
+
grpc_core::TcpServerFdHandler* fd_handler;
|
95
98
|
};
|
96
99
|
|
97
100
|
/* If successful, add a listener to \a s for \a addr, set \a dsmode for the
|
@@ -372,6 +372,7 @@ static void on_accept(void* arg, grpc_error* error) {
|
|
372
372
|
acceptor->from_server = sp->server;
|
373
373
|
acceptor->port_index = sp->port_index;
|
374
374
|
acceptor->fd_index = 0;
|
375
|
+
acceptor->external_connection = false;
|
375
376
|
sp->server->on_accept_cb(sp->server->on_accept_cb_arg, ep, NULL, acceptor);
|
376
377
|
}
|
377
378
|
/* As we were notified from the IOCP of one and exactly one accept,
|
@@ -545,16 +546,17 @@ static int tcp_server_port_fd(grpc_tcp_server* s, unsigned port_index,
|
|
545
546
|
return -1;
|
546
547
|
}
|
547
548
|
|
549
|
+
static grpc_core::TcpServerFdHandler* tcp_server_create_fd_handler(
|
550
|
+
grpc_tcp_server* s) {
|
551
|
+
return nullptr;
|
552
|
+
}
|
553
|
+
|
548
554
|
static void tcp_server_shutdown_listeners(grpc_tcp_server* s) {}
|
549
555
|
|
550
556
|
grpc_tcp_server_vtable grpc_windows_tcp_server_vtable = {
|
551
|
-
tcp_server_create,
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
tcp_server_ref,
|
557
|
-
tcp_server_shutdown_starting_add,
|
558
|
-
tcp_server_unref,
|
559
|
-
tcp_server_shutdown_listeners};
|
557
|
+
tcp_server_create, tcp_server_start,
|
558
|
+
tcp_server_add_port, tcp_server_create_fd_handler,
|
559
|
+
tcp_server_port_fd_count, tcp_server_port_fd,
|
560
|
+
tcp_server_ref, tcp_server_shutdown_starting_add,
|
561
|
+
tcp_server_unref, tcp_server_shutdown_listeners};
|
560
562
|
#endif /* GRPC_WINSOCK_SOCKET */
|
@@ -53,7 +53,7 @@ typedef struct uv_socket_t {
|
|
53
53
|
char* read_buf;
|
54
54
|
size_t read_len;
|
55
55
|
|
56
|
-
|
56
|
+
int pending_connections;
|
57
57
|
grpc_custom_socket* accept_socket;
|
58
58
|
grpc_error* accept_error;
|
59
59
|
|
@@ -206,7 +206,7 @@ static grpc_error* uv_socket_init_helper(uv_socket_t* uv_socket, int domain) {
|
|
206
206
|
// Node uses a garbage collector to call destructors, so we don't
|
207
207
|
// want to hold the uv loop open with active gRPC objects.
|
208
208
|
uv_unref((uv_handle_t*)uv_socket->handle);
|
209
|
-
uv_socket->
|
209
|
+
uv_socket->pending_connections = 0;
|
210
210
|
uv_socket->accept_socket = nullptr;
|
211
211
|
uv_socket->accept_error = GRPC_ERROR_NONE;
|
212
212
|
return GRPC_ERROR_NONE;
|
@@ -243,14 +243,14 @@ static grpc_error* uv_socket_getsockname(grpc_custom_socket* socket,
|
|
243
243
|
|
244
244
|
static void accept_new_connection(grpc_custom_socket* socket) {
|
245
245
|
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
246
|
-
if (
|
246
|
+
if (uv_socket->pending_connections == 0 || !uv_socket->accept_socket) {
|
247
247
|
return;
|
248
248
|
}
|
249
249
|
grpc_custom_socket* new_socket = uv_socket->accept_socket;
|
250
250
|
grpc_error* error = uv_socket->accept_error;
|
251
251
|
uv_socket->accept_socket = nullptr;
|
252
252
|
uv_socket->accept_error = GRPC_ERROR_NONE;
|
253
|
-
uv_socket->
|
253
|
+
uv_socket->pending_connections -= 1;
|
254
254
|
if (uv_socket->accept_error != GRPC_ERROR_NONE) {
|
255
255
|
uv_stream_t dummy_handle;
|
256
256
|
uv_accept((uv_stream_t*)uv_socket->handle, &dummy_handle);
|
@@ -270,8 +270,6 @@ static void accept_new_connection(grpc_custom_socket* socket) {
|
|
270
270
|
static void uv_on_connect(uv_stream_t* server, int status) {
|
271
271
|
grpc_custom_socket* socket = (grpc_custom_socket*)server->data;
|
272
272
|
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
273
|
-
GPR_ASSERT(!uv_socket->pending_connection);
|
274
|
-
uv_socket->pending_connection = true;
|
275
273
|
if (status < 0) {
|
276
274
|
switch (status) {
|
277
275
|
case UV_EINTR:
|
@@ -281,6 +279,7 @@ static void uv_on_connect(uv_stream_t* server, int status) {
|
|
281
279
|
uv_socket->accept_error = tcp_error_create("accept failed", status);
|
282
280
|
}
|
283
281
|
}
|
282
|
+
uv_socket->pending_connections += 1;
|
284
283
|
accept_new_connection(socket);
|
285
284
|
}
|
286
285
|
|
data/src/core/lib/iomgr/timer.h
CHANGED
@@ -29,7 +29,8 @@
|
|
29
29
|
|
30
30
|
typedef struct grpc_timer {
|
31
31
|
grpc_millis deadline;
|
32
|
-
|
32
|
+
// Uninitialized if not using heap, or INVALID_HEAP_INDEX if not in heap.
|
33
|
+
uint32_t heap_index;
|
33
34
|
bool pending;
|
34
35
|
struct grpc_timer* next;
|
35
36
|
struct grpc_timer* prev;
|
@@ -332,7 +332,7 @@ void GrpcUdpListener::OnFdAboutToOrphan() {
|
|
332
332
|
GRPC_CLOSURE_INIT(&destroyed_closure_, destroyed_port, server_,
|
333
333
|
grpc_schedule_on_exec_ctx);
|
334
334
|
if (!orphan_notified_ && udp_handler_ != nullptr) {
|
335
|
-
/*
|
335
|
+
/* Signals udp_handler that the FD is about to be closed and
|
336
336
|
* should no longer be used. */
|
337
337
|
GRPC_CLOSURE_INIT(&orphan_fd_closure_, shutdown_fd, this,
|
338
338
|
grpc_schedule_on_exec_ctx);
|
@@ -645,7 +645,7 @@ int grpc_udp_server_add_port(grpc_udp_server* s,
|
|
645
645
|
grpc_sockaddr_set_port(addr, allocated_port1);
|
646
646
|
port = allocated_port1;
|
647
647
|
} else if (allocated_port1 >= 0) {
|
648
|
-
/* The following
|
648
|
+
/* The following successfully created socket should have same port as
|
649
649
|
* the first one. */
|
650
650
|
GPR_ASSERT(port == allocated_port1);
|
651
651
|
}
|
@@ -85,7 +85,7 @@ static grpc_error* process_plugin_result(
|
|
85
85
|
grpc_validate_header_key_is_legal(md[i].key))) {
|
86
86
|
seen_illegal_header = true;
|
87
87
|
break;
|
88
|
-
} else if (!
|
88
|
+
} else if (!grpc_is_binary_header_internal(md[i].key) &&
|
89
89
|
!GRPC_LOG_IF_ERROR(
|
90
90
|
"validate_metadata_from_plugin",
|
91
91
|
grpc_validate_header_nonbin_value_is_legal(md[i].value))) {
|
@@ -46,7 +46,7 @@ void grpc_tsi_ssl_pem_key_cert_pairs_destroy(tsi_ssl_pem_key_cert_pair* kp,
|
|
46
46
|
|
47
47
|
grpc_ssl_credentials::grpc_ssl_credentials(
|
48
48
|
const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
|
49
|
-
const
|
49
|
+
const grpc_ssl_verify_peer_options* verify_options)
|
50
50
|
: grpc_channel_credentials(GRPC_CHANNEL_CREDENTIALS_TYPE_SSL) {
|
51
51
|
build_config(pem_root_certs, pem_key_cert_pair, verify_options);
|
52
52
|
}
|
@@ -94,7 +94,7 @@ grpc_ssl_credentials::create_security_connector(
|
|
94
94
|
|
95
95
|
void grpc_ssl_credentials::build_config(
|
96
96
|
const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
|
97
|
-
const
|
97
|
+
const grpc_ssl_verify_peer_options* verify_options) {
|
98
98
|
config_.pem_root_certs = gpr_strdup(pem_root_certs);
|
99
99
|
if (pem_key_cert_pair != nullptr) {
|
100
100
|
GPR_ASSERT(pem_key_cert_pair->private_key != nullptr);
|
@@ -117,6 +117,8 @@ void grpc_ssl_credentials::build_config(
|
|
117
117
|
}
|
118
118
|
}
|
119
119
|
|
120
|
+
/* Deprecated in favor of grpc_ssl_credentials_create_ex. Will be removed
|
121
|
+
* once all of its call sites are migrated to grpc_ssl_credentials_create_ex. */
|
120
122
|
grpc_channel_credentials* grpc_ssl_credentials_create(
|
121
123
|
const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
|
122
124
|
const verify_peer_options* verify_options, void* reserved) {
|
@@ -128,6 +130,22 @@ grpc_channel_credentials* grpc_ssl_credentials_create(
|
|
128
130
|
4, (pem_root_certs, pem_key_cert_pair, verify_options, reserved));
|
129
131
|
GPR_ASSERT(reserved == nullptr);
|
130
132
|
|
133
|
+
return grpc_core::New<grpc_ssl_credentials>(
|
134
|
+
pem_root_certs, pem_key_cert_pair,
|
135
|
+
reinterpret_cast<const grpc_ssl_verify_peer_options*>(verify_options));
|
136
|
+
}
|
137
|
+
|
138
|
+
grpc_channel_credentials* grpc_ssl_credentials_create_ex(
|
139
|
+
const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
|
140
|
+
const grpc_ssl_verify_peer_options* verify_options, void* reserved) {
|
141
|
+
GRPC_API_TRACE(
|
142
|
+
"grpc_ssl_credentials_create(pem_root_certs=%s, "
|
143
|
+
"pem_key_cert_pair=%p, "
|
144
|
+
"verify_options=%p, "
|
145
|
+
"reserved=%p)",
|
146
|
+
4, (pem_root_certs, pem_key_cert_pair, verify_options, reserved));
|
147
|
+
GPR_ASSERT(reserved == nullptr);
|
148
|
+
|
131
149
|
return grpc_core::New<grpc_ssl_credentials>(pem_root_certs, pem_key_cert_pair,
|
132
150
|
verify_options);
|
133
151
|
}
|
@@ -28,7 +28,7 @@ class grpc_ssl_credentials : public grpc_channel_credentials {
|
|
28
28
|
public:
|
29
29
|
grpc_ssl_credentials(const char* pem_root_certs,
|
30
30
|
grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
|
31
|
-
const
|
31
|
+
const grpc_ssl_verify_peer_options* verify_options);
|
32
32
|
|
33
33
|
~grpc_ssl_credentials() override;
|
34
34
|
|
@@ -41,7 +41,7 @@ class grpc_ssl_credentials : public grpc_channel_credentials {
|
|
41
41
|
private:
|
42
42
|
void build_config(const char* pem_root_certs,
|
43
43
|
grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
|
44
|
-
const
|
44
|
+
const grpc_ssl_verify_peer_options* verify_options);
|
45
45
|
|
46
46
|
grpc_ssl_config config_;
|
47
47
|
};
|
@@ -102,7 +102,7 @@ class grpc_channel_security_connector : public grpc_security_connector {
|
|
102
102
|
grpc_auth_context* auth_context,
|
103
103
|
grpc_closure* on_call_host_checked,
|
104
104
|
grpc_error** error) GRPC_ABSTRACT;
|
105
|
-
/// Cancels a pending
|
105
|
+
/// Cancels a pending asynchronous call to
|
106
106
|
/// grpc_channel_security_connector_check_call_host() with
|
107
107
|
/// \a on_call_host_checked as its callback.
|
108
108
|
virtual void cancel_check_call_host(grpc_closure* on_call_host_checked,
|
@@ -310,7 +310,7 @@ class grpc_ssl_server_security_connector
|
|
310
310
|
private:
|
311
311
|
/* Attempts to fetch the server certificate config if a callback is available.
|
312
312
|
* Current certificate config will continue to be used if the callback returns
|
313
|
-
* an error. Returns true if new credentials were
|
313
|
+
* an error. Returns true if new credentials were successfully loaded. */
|
314
314
|
bool try_fetch_ssl_server_credentials() {
|
315
315
|
grpc_ssl_server_certificate_config* certificate_config = nullptr;
|
316
316
|
bool status;
|
@@ -32,6 +32,9 @@ void grpc_auth_metadata_context_build(
|
|
32
32
|
const grpc_slice& call_method, grpc_auth_context* auth_context,
|
33
33
|
grpc_auth_metadata_context* auth_md_context);
|
34
34
|
|
35
|
+
void grpc_auth_metadata_context_copy(grpc_auth_metadata_context* from,
|
36
|
+
grpc_auth_metadata_context* to);
|
37
|
+
|
35
38
|
void grpc_auth_metadata_context_reset(grpc_auth_metadata_context* context);
|
36
39
|
|
37
40
|
#endif /* GRPC_CORE_LIB_SECURITY_TRANSPORT_AUTH_FILTERS_H */
|
@@ -112,6 +112,19 @@ struct call_data {
|
|
112
112
|
|
113
113
|
} // namespace
|
114
114
|
|
115
|
+
void grpc_auth_metadata_context_copy(grpc_auth_metadata_context* from,
|
116
|
+
grpc_auth_metadata_context* to) {
|
117
|
+
grpc_auth_metadata_context_reset(to);
|
118
|
+
to->channel_auth_context = from->channel_auth_context;
|
119
|
+
if (to->channel_auth_context != nullptr) {
|
120
|
+
const_cast<grpc_auth_context*>(to->channel_auth_context)
|
121
|
+
->Ref(DEBUG_LOCATION, "grpc_auth_metadata_context_copy")
|
122
|
+
.release();
|
123
|
+
}
|
124
|
+
to->service_url = gpr_strdup(from->service_url);
|
125
|
+
to->method_name = gpr_strdup(from->method_name);
|
126
|
+
}
|
127
|
+
|
115
128
|
void grpc_auth_metadata_context_reset(
|
116
129
|
grpc_auth_metadata_context* auth_md_context) {
|
117
130
|
if (auth_md_context->service_url != nullptr) {
|
@@ -144,11 +144,11 @@ size_t SecurityHandshaker::MoveReadBufferIntoHandshakeBuffer() {
|
|
144
144
|
}
|
145
145
|
size_t offset = 0;
|
146
146
|
while (args_->read_buffer->count > 0) {
|
147
|
-
grpc_slice next_slice =
|
148
|
-
memcpy(handshake_buffer_ + offset, GRPC_SLICE_START_PTR(next_slice),
|
149
|
-
GRPC_SLICE_LENGTH(next_slice));
|
150
|
-
offset += GRPC_SLICE_LENGTH(next_slice);
|
151
|
-
|
147
|
+
grpc_slice* next_slice = grpc_slice_buffer_peek_first(args_->read_buffer);
|
148
|
+
memcpy(handshake_buffer_ + offset, GRPC_SLICE_START_PTR(*next_slice),
|
149
|
+
GRPC_SLICE_LENGTH(*next_slice));
|
150
|
+
offset += GRPC_SLICE_LENGTH(*next_slice);
|
151
|
+
grpc_slice_buffer_remove_first(args_->read_buffer);
|
152
152
|
}
|
153
153
|
return bytes_in_read_buffer;
|
154
154
|
}
|
@@ -195,7 +195,7 @@ void SecurityHandshaker::HandshakeFailedLocked(grpc_error* error) {
|
|
195
195
|
void SecurityHandshaker::OnPeerCheckedInner(grpc_error* error) {
|
196
196
|
MutexLock lock(&mu_);
|
197
197
|
if (error != GRPC_ERROR_NONE || is_shutdown_) {
|
198
|
-
HandshakeFailedLocked(
|
198
|
+
HandshakeFailedLocked(error);
|
199
199
|
return;
|
200
200
|
}
|
201
201
|
// Create zero-copy frame protector, if implemented.
|
@@ -255,7 +255,7 @@ void SecurityHandshaker::OnPeerCheckedInner(grpc_error* error) {
|
|
255
255
|
|
256
256
|
void SecurityHandshaker::OnPeerCheckedFn(void* arg, grpc_error* error) {
|
257
257
|
RefCountedPtr<SecurityHandshaker>(static_cast<SecurityHandshaker*>(arg))
|
258
|
-
->OnPeerCheckedInner(error);
|
258
|
+
->OnPeerCheckedInner(GRPC_ERROR_REF(error));
|
259
259
|
}
|
260
260
|
|
261
261
|
grpc_error* SecurityHandshaker::CheckPeerLocked() {
|
data/src/core/lib/slice/b64.h
CHANGED
@@ -23,7 +23,7 @@
|
|
23
23
|
|
24
24
|
#include <grpc/slice.h>
|
25
25
|
|
26
|
-
/* Encodes data using base64. It is the caller's
|
26
|
+
/* Encodes data using base64. It is the caller's responsibility to free
|
27
27
|
the returned char * using gpr_free. Returns NULL on NULL input.
|
28
28
|
TODO(makdharma) : change the flags to bool from int */
|
29
29
|
char* grpc_base64_encode(const void* data, size_t data_size, int url_safe,
|
@@ -35,7 +35,7 @@ size_t grpc_base64_estimate_encoded_size(size_t data_size, int url_safe,
|
|
35
35
|
int multiline);
|
36
36
|
|
37
37
|
/* Encodes data using base64 and write it to memory pointed to by result. It is
|
38
|
-
* the caller's
|
38
|
+
* the caller's responsibility to allocate enough memory in |result| to fit the
|
39
39
|
* encoded data. */
|
40
40
|
void grpc_base64_encode_core(char* result, const void* vdata, size_t data_size,
|
41
41
|
int url_safe, int multiline);
|
data/src/core/lib/slice/slice.cc
CHANGED
@@ -68,7 +68,8 @@ void grpc_slice_unref(grpc_slice slice) {
|
|
68
68
|
|
69
69
|
/* grpc_slice_from_static_string support structure - a refcount that does
|
70
70
|
nothing */
|
71
|
-
static grpc_slice_refcount NoopRefcount
|
71
|
+
static grpc_slice_refcount NoopRefcount =
|
72
|
+
grpc_slice_refcount(grpc_slice_refcount::Type::NOP);
|
72
73
|
|
73
74
|
size_t grpc_slice_memory_usage(grpc_slice s) {
|
74
75
|
if (s.refcount == nullptr || s.refcount == &NoopRefcount) {
|
@@ -101,18 +102,19 @@ class NewSliceRefcount {
|
|
101
102
|
}
|
102
103
|
|
103
104
|
NewSliceRefcount(void (*destroy)(void*), void* user_data)
|
104
|
-
:
|
105
|
+
: base_(grpc_slice_refcount::Type::REGULAR, &refs_, Destroy, this,
|
106
|
+
&base_),
|
105
107
|
user_destroy_(destroy),
|
106
108
|
user_data_(user_data) {}
|
107
109
|
|
108
|
-
|
110
|
+
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
109
111
|
|
110
|
-
grpc_slice_refcount* base_refcount() { return &
|
112
|
+
grpc_slice_refcount* base_refcount() { return &base_; }
|
111
113
|
|
112
114
|
private:
|
113
115
|
~NewSliceRefcount() { user_destroy_(user_data_); }
|
114
116
|
|
115
|
-
grpc_slice_refcount
|
117
|
+
grpc_slice_refcount base_;
|
116
118
|
RefCount refs_;
|
117
119
|
void (*user_destroy_)(void*);
|
118
120
|
void* user_data_;
|
@@ -140,7 +142,6 @@ grpc_slice grpc_slice_new(void* p, size_t len, void (*destroy)(void*)) {
|
|
140
142
|
namespace grpc_core {
|
141
143
|
/* grpc_slice_new_with_len support structures - we create a refcount object
|
142
144
|
extended with the user provided data pointer & destroy function */
|
143
|
-
|
144
145
|
class NewWithLenSliceRefcount {
|
145
146
|
public:
|
146
147
|
static void Destroy(void* arg) {
|
@@ -149,25 +150,48 @@ class NewWithLenSliceRefcount {
|
|
149
150
|
|
150
151
|
NewWithLenSliceRefcount(void (*destroy)(void*, size_t), void* user_data,
|
151
152
|
size_t user_length)
|
152
|
-
:
|
153
|
+
: base_(grpc_slice_refcount::Type::REGULAR, &refs_, Destroy, this,
|
154
|
+
&base_),
|
153
155
|
user_data_(user_data),
|
154
156
|
user_length_(user_length),
|
155
157
|
user_destroy_(destroy) {}
|
156
158
|
|
157
|
-
|
159
|
+
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
158
160
|
|
159
|
-
grpc_slice_refcount* base_refcount() { return &
|
161
|
+
grpc_slice_refcount* base_refcount() { return &base_; }
|
160
162
|
|
161
163
|
private:
|
162
164
|
~NewWithLenSliceRefcount() { user_destroy_(user_data_, user_length_); }
|
163
165
|
|
164
|
-
grpc_slice_refcount
|
166
|
+
grpc_slice_refcount base_;
|
165
167
|
RefCount refs_;
|
166
168
|
void* user_data_;
|
167
169
|
size_t user_length_;
|
168
170
|
void (*user_destroy_)(void*, size_t);
|
169
171
|
};
|
170
172
|
|
173
|
+
/** grpc_slice_from_moved_(string|buffer) ref count .*/
|
174
|
+
class MovedStringSliceRefCount {
|
175
|
+
public:
|
176
|
+
MovedStringSliceRefCount(grpc_core::UniquePtr<char>&& str)
|
177
|
+
: base_(grpc_slice_refcount::Type::REGULAR, &refs_, Destroy, this,
|
178
|
+
&base_),
|
179
|
+
str_(std::move(str)) {}
|
180
|
+
|
181
|
+
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
182
|
+
|
183
|
+
grpc_slice_refcount* base_refcount() { return &base_; }
|
184
|
+
|
185
|
+
private:
|
186
|
+
static void Destroy(void* arg) {
|
187
|
+
Delete(static_cast<MovedStringSliceRefCount*>(arg));
|
188
|
+
}
|
189
|
+
|
190
|
+
grpc_slice_refcount base_;
|
191
|
+
grpc_core::RefCount refs_;
|
192
|
+
grpc_core::UniquePtr<char> str_;
|
193
|
+
};
|
194
|
+
|
171
195
|
} // namespace grpc_core
|
172
196
|
|
173
197
|
grpc_slice grpc_slice_new_with_len(void* p, size_t len,
|
@@ -192,6 +216,29 @@ grpc_slice grpc_slice_from_copied_string(const char* source) {
|
|
192
216
|
return grpc_slice_from_copied_buffer(source, strlen(source));
|
193
217
|
}
|
194
218
|
|
219
|
+
grpc_slice grpc_slice_from_moved_buffer(grpc_core::UniquePtr<char> p,
|
220
|
+
size_t len) {
|
221
|
+
uint8_t* ptr = reinterpret_cast<uint8_t*>(p.get());
|
222
|
+
grpc_slice slice;
|
223
|
+
if (len <= sizeof(slice.data.inlined.bytes)) {
|
224
|
+
slice.refcount = nullptr;
|
225
|
+
slice.data.inlined.length = len;
|
226
|
+
memcpy(GRPC_SLICE_START_PTR(slice), ptr, len);
|
227
|
+
} else {
|
228
|
+
slice.refcount =
|
229
|
+
grpc_core::New<grpc_core::MovedStringSliceRefCount>(std::move(p))
|
230
|
+
->base_refcount();
|
231
|
+
slice.data.refcounted.bytes = ptr;
|
232
|
+
slice.data.refcounted.length = len;
|
233
|
+
}
|
234
|
+
return slice;
|
235
|
+
}
|
236
|
+
|
237
|
+
grpc_slice grpc_slice_from_moved_string(grpc_core::UniquePtr<char> p) {
|
238
|
+
const size_t len = strlen(p.get());
|
239
|
+
return grpc_slice_from_moved_buffer(std::move(p), len);
|
240
|
+
}
|
241
|
+
|
195
242
|
namespace {
|
196
243
|
|
197
244
|
class MallocRefCount {
|
@@ -410,6 +457,31 @@ int grpc_slice_eq(grpc_slice a, grpc_slice b) {
|
|
410
457
|
return grpc_slice_default_eq_impl(a, b);
|
411
458
|
}
|
412
459
|
|
460
|
+
int grpc_slice_differs_refcounted(const grpc_slice& a,
|
461
|
+
const grpc_slice& b_not_inline) {
|
462
|
+
size_t a_len;
|
463
|
+
const uint8_t* a_ptr;
|
464
|
+
if (a.refcount) {
|
465
|
+
a_len = a.data.refcounted.length;
|
466
|
+
a_ptr = a.data.refcounted.bytes;
|
467
|
+
} else {
|
468
|
+
a_len = a.data.inlined.length;
|
469
|
+
a_ptr = &a.data.inlined.bytes[0];
|
470
|
+
}
|
471
|
+
if (a_len != b_not_inline.data.refcounted.length) {
|
472
|
+
return true;
|
473
|
+
}
|
474
|
+
if (a_len == 0) {
|
475
|
+
return false;
|
476
|
+
}
|
477
|
+
// This check *must* occur after the a_len == 0 check
|
478
|
+
// to retain compatibility with grpc_slice_eq.
|
479
|
+
if (a_ptr == nullptr) {
|
480
|
+
return true;
|
481
|
+
}
|
482
|
+
return memcmp(a_ptr, b_not_inline.data.refcounted.bytes, a_len);
|
483
|
+
}
|
484
|
+
|
413
485
|
int grpc_slice_cmp(grpc_slice a, grpc_slice b) {
|
414
486
|
int d = static_cast<int>(GRPC_SLICE_LENGTH(a) - GRPC_SLICE_LENGTH(b));
|
415
487
|
if (d != 0) return d;
|