Go to the documentation of this file.
22 #ifdef GRPC_POSIX_SOCKET_TCP
24 #include <arpa/inet.h>
27 #include <sys/socket.h>
35 #include "absl/strings/str_cat.h"
49 #define SSL_CERT_PATH "src/core/tsi/test_creds/server1.pem"
50 #define SSL_KEY_PATH "src/core/tsi/test_creds/server1.key"
51 #define SSL_CA_PATH "src/core/tsi/test_creds/ca.pem"
55 class SslLibraryInfo {
82 SslLibraryInfo* ssl_library_info;
90 struct sockaddr_in
addr;
94 addr.sin_family = AF_INET;
96 addr.sin_addr.s_addr = htonl(INADDR_ANY);
98 s =
socket(AF_INET, SOCK_STREAM, 0);
100 perror(
"Unable to create socket");
104 if (bind(s,
reinterpret_cast<struct sockaddr*
>(&
addr),
sizeof(
addr)) < 0) {
105 perror(
"Unable to bind");
112 perror(
"Unable to listen");
117 addr_len =
sizeof(
addr);
118 if (getsockname(s,
reinterpret_cast<struct sockaddr*
>(&
addr), &addr_len) !=
120 addr_len >
sizeof(
addr)) {
121 perror(
"getsockname");
127 *out_port = ntohs(
addr.sin_port);
137 *
out = alpn_preferred;
138 *out_len =
static_cast<uint8_t>(
139 strlen(
reinterpret_cast<const char*
>(alpn_preferred)));
143 bool grpc_exp_seen =
false;
144 bool h2_seen =
false;
145 const char*
inp =
reinterpret_cast<const char*
>(
in);
146 const char* in_end =
inp + in_len;
147 while (
inp < in_end) {
148 const size_t length =
static_cast<size_t>(*
inp++);
149 if (
length == strlen(
"grpc-exp") && strncmp(
inp,
"grpc-exp",
length) == 0) {
150 grpc_exp_seen =
true;
169 if ((where &
flag) &&
176 static void ssl_server_info_callback(
const SSL* ssl,
int where,
int ret) {
184 "Server: HANDSHAKE START");
186 "Server: HANDSHAKE DONE");
193 const server_args*
args =
static_cast<server_args*
>(
arg);
197 args->ssl_library_info->Notify();
202 perror(
"Unable to create SSL context");
209 perror(
"Unable to use certificate file.");
214 perror(
"Unable to use private key file.");
219 perror(
"Check private key failed.");
226 const char* cipher_list =
227 "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-"
228 "SHA384:ECDHE-RSA-AES256-GCM-SHA384";
247 const int sock =
args->socket;
249 struct sockaddr_in
addr;
252 accept(sock,
reinterpret_cast<struct sockaddr*
>(&
addr), &
len);
254 perror(
"Unable to accept");
271 const char settings_frame[] =
"\x00\x00\x00\x04\x00\x00\x00\x00\x00";
272 SSL_write(ssl, settings_frame,
sizeof(settings_frame) - 1);
289 static bool client_ssl_test(
char* server_alpn_preferred) {
297 int server_socket = -1;
298 int socket_retries = 30;
299 while (server_socket == -1 && socket_retries-- > 0) {
301 if (server_socket == -1) {
308 SslLibraryInfo ssl_library_info;
309 server_args
args = {server_socket, server_alpn_preferred, &ssl_library_info};
314 ssl_library_info.Await();
325 const char* ca_cert =
332 ca_cert, &pem_key_cert_pair,
nullptr,
nullptr);
340 {
const_cast<char*
>(
"foo.test.google.fr")}};
343 grpc_args.
args = &ssl_name_override;
387 int main(
int argc,
char* argv[]) {
390 GPR_ASSERT(client_ssl_test(
const_cast<char*
>(
"grpc-exp")));
393 GPR_ASSERT(client_ssl_test(
const_cast<char*
>(
"h2")));
397 GPR_ASSERT(!client_ssl_test(
const_cast<char*
>(
"foo")));
405 int main(
int argc,
char** argv) {
return 1; }
#define SSL_CB_HANDSHAKE_START
GPRAPI void grpc_slice_unref(grpc_slice s)
gpr_timespec grpc_timeout_seconds_to_deadline(int64_t time_s)
grpc_error_handle grpc_load_file(const char *filename, int add_null_terminator, grpc_slice *output)
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
#define SSL_CTX_set_ecdh_auto(ctx, onoff)
std::condition_variable cv_
#define SSL_CB_HANDSHAKE_DONE
void server_thread(void *vargs)
GRPCAPI grpc_connectivity_state grpc_channel_check_connectivity_state(grpc_channel *channel, int try_to_connect)
#define SSL_TLSEXT_ERR_OK
#define ERR_print_errors_fp
#define ABSL_GUARDED_BY(x)
#define GRPC_LOG_IF_ERROR(what, error)
#define SSL_load_error_strings
#define TLSv1_2_server_method
#define GRPC_TRACE_FLAG_ENABLED(f)
#define OpenSSL_add_ssl_algorithms()
GRPCAPI grpc_channel_credentials * grpc_ssl_credentials_create(const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair, const verify_peer_options *verify_options, void *reserved)
wrapped_grpc_channel * channel
#define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
int main(int argc, char **argv)
#define GRPC_SLICE_START_PTR(slice)
int create_socket(const char *socket_type, fd_pair *client_fds, fd_pair *server_fds)
#define SSL_set_info_callback
#define SSL_CTX_use_certificate_file
GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials *creds)
#define SSL_CTX_set_cipher_list
GRPCAPI grpc_channel * grpc_channel_create(const char *target, grpc_channel_credentials *creds, const grpc_channel_args *args)
GRPCAPI void grpc_completion_queue_destroy(grpc_completion_queue *cq)
def listen(endpoint, test_case)
UniquePtr< SSL_SESSION > ret
GRPCAPI grpc_event grpc_completion_queue_next(grpc_completion_queue *cq, gpr_timespec deadline, void *reserved)
GRPCAPI void grpc_channel_destroy(grpc_channel *channel)
#define SSL_CTX_use_PrivateKey_file
struct grpc_channel grpc_channel
GRPCAPI void grpc_channel_watch_connectivity_state(grpc_channel *channel, grpc_connectivity_state last_observed_state, gpr_timespec deadline, grpc_completion_queue *cq, void *tag)
#define SSL_CTX_check_private_key
GRPCAPI grpc_completion_queue * grpc_completion_queue_create_for_next(void *reserved)
grpc_completion_type type
GRPCAPI void grpc_init(void)
static void ssl_log_where_info(const SSL *ssl, int where, int flag, const char *msg)
#define SSL_state_string_long
#define SSL_CTX_set_alpn_select_cb
GRPCAPI void grpc_shutdown(void)
static grpc_completion_queue * cq
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:47