MCPcopy Create free account
hub / github.com/chrxh/alien / initialize_ssl

Method initialize_ssl

external/cpp-httplib/httplib.h:7693–7750  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7691 }
7692
7693 inline bool SSLClient::initialize_ssl(Socket & socket, Error & error) {
7694 auto ssl = detail::ssl_new(
7695 socket.sock, ctx_, ctx_mutex_,
7696 [&](SSL* ssl2) {
7697 if (server_certificate_verification_) {
7698 if (!load_certs()) {
7699 error = Error::SSLLoadingCerts;
7700 return false;
7701 }
7702 SSL_set_verify(ssl2, SSL_VERIFY_NONE, nullptr);
7703 }
7704
7705 if (!detail::ssl_connect_or_accept_nonblocking(
7706 socket.sock, ssl2, SSL_connect, connection_timeout_sec_,
7707 connection_timeout_usec_)) {
7708 error = Error::SSLConnection;
7709 return false;
7710 }
7711
7712 if (server_certificate_verification_) {
7713 verify_result_ = SSL_get_verify_result(ssl2);
7714
7715 if (verify_result_ != X509_V_OK) {
7716 error = Error::SSLServerVerification;
7717 return false;
7718 }
7719
7720 auto server_cert = SSL_get_peer_certificate(ssl2);
7721
7722 if (server_cert == nullptr) {
7723 error = Error::SSLServerVerification;
7724 return false;
7725 }
7726
7727 if (!verify_host(server_cert)) {
7728 X509_free(server_cert);
7729 error = Error::SSLServerVerification;
7730 return false;
7731 }
7732 X509_free(server_cert);
7733 }
7734
7735 return true;
7736 },
7737 [&](SSL* ssl2) {
7738 SSL_set_tlsext_host_name(ssl2, host_.c_str());
7739 return true;
7740 });
7741
7742 if (ssl) {
7743 socket.ssl = ssl;
7744 return true;
7745 }
7746
7747 shutdown_socket(socket);
7748 close_socket(socket);
7749 return false;
7750 }

Callers 1

sendMethod · 0.80

Calls 4

ssl_newFunction · 0.85
shutdown_socketFunction · 0.85
close_socketFunction · 0.85

Tested by

no test coverage detected