@@ -120,9 +120,9 @@ SSL_CTX * SSLContext::getContext() {
120120}
121121
122122// Allows caller to use returned value of `statement` if there was no error, throws exception otherwise.
123- #define HANDLE_SSL_ERROR (statement ) [&] { \
123+ #define HANDLE_SSL_ERROR (SSL_PTR, statement ) [&] { \
124124 if (const auto ret_code = (statement); ret_code <= 0 ) { \
125- throwSSLError (ssl_ , SSL_get_error (ssl_ , ret_code), LOCATION, #statement); \
125+ throwSSLError (SSL_PTR , SSL_get_error (SSL_PTR , ret_code), LOCATION, #statement); \
126126 return static_cast <decltype (ret_code)>(0 ); \
127127 } \
128128 else \
@@ -137,25 +137,25 @@ SSL_CTX * SSLContext::getContext() {
137137*/
138138SSLSocket::SSLSocket (const NetworkAddress& addr, const SSLParams & ssl_params, SSLContext& context)
139139 : Socket(addr)
140- , ssl_ptr_(SSL_new(context.getContext()), &SSL_free)
141- , ssl_(ssl_ptr_.get())
140+ , ssl_(SSL_new(context.getContext()), &SSL_free)
142141{
143- if (!ssl_)
142+ auto ssl = ssl_.get ();
143+ if (!ssl)
144144 throw std::runtime_error (" Failed to create SSL instance" );
145145
146- HANDLE_SSL_ERROR (SSL_set_fd (ssl_ , handle_));
146+ HANDLE_SSL_ERROR (ssl, SSL_set_fd (ssl , handle_));
147147 if (ssl_params.use_SNI )
148- HANDLE_SSL_ERROR (SSL_set_tlsext_host_name (ssl_ , addr.Host ().c_str ()));
148+ HANDLE_SSL_ERROR (ssl, SSL_set_tlsext_host_name (ssl , addr.Host ().c_str ()));
149149
150- SSL_set_connect_state (ssl_ );
151- HANDLE_SSL_ERROR (SSL_connect (ssl_ ));
152- HANDLE_SSL_ERROR (SSL_set_mode (ssl_ , SSL_MODE_AUTO_RETRY));
153- auto peer_certificate = SSL_get_peer_certificate (ssl_ );
150+ SSL_set_connect_state (ssl );
151+ HANDLE_SSL_ERROR (ssl, SSL_connect (ssl ));
152+ HANDLE_SSL_ERROR (ssl, SSL_set_mode (ssl , SSL_MODE_AUTO_RETRY));
153+ auto peer_certificate = SSL_get_peer_certificate (ssl );
154154
155155 if (!peer_certificate)
156156 throw std::runtime_error (" Failed to verify SSL connection: server provided no ceritificate." );
157157
158- if (const auto verify_result = SSL_get_verify_result (ssl_ ); verify_result != X509_V_OK) {
158+ if (const auto verify_result = SSL_get_verify_result (ssl ); verify_result != X509_V_OK) {
159159 auto error_message = X509_verify_cert_error_string (verify_result);
160160 throw std::runtime_error (" Failed to verify SSL connection, X509_v error: "
161161 + std::to_string (verify_result)
@@ -170,23 +170,23 @@ SSLSocket::SSLSocket(const NetworkAddress& addr, const SSLParams & ssl_params, S
170170 std::unique_ptr<ASN1_OCTET_STRING, decltype (&ASN1_OCTET_STRING_free)> addr (a2i_IPADDRESS (hostname.c_str ()), &ASN1_OCTET_STRING_free);
171171 if (addr) {
172172 // if hostname is actually an IP address
173- HANDLE_SSL_ERROR (X509_check_ip (
173+ HANDLE_SSL_ERROR (ssl, X509_check_ip (
174174 peer_certificate,
175175 ASN1_STRING_get0_data (addr.get ()),
176176 ASN1_STRING_length (addr.get ()),
177177 0 ));
178178 } else {
179- HANDLE_SSL_ERROR (X509_check_host (peer_certificate, hostname.c_str (), hostname.length (), 0 , &out_name));
179+ HANDLE_SSL_ERROR (ssl, X509_check_host (peer_certificate, hostname.c_str (), hostname.length (), 0 , &out_name));
180180 }
181181 }
182182}
183183
184184std::unique_ptr<InputStream> SSLSocket::makeInputStream () const {
185- return std::make_unique<SSLSocketInput>(ssl_);
185+ return std::make_unique<SSLSocketInput>(ssl_. get () );
186186}
187187
188188std::unique_ptr<OutputStream> SSLSocket::makeOutputStream () const {
189- return std::make_unique<SSLSocketOutput>(ssl_);
189+ return std::make_unique<SSLSocketOutput>(ssl_. get () );
190190}
191191
192192SSLSocketInput::SSLSocketInput (SSL *ssl)
@@ -195,7 +195,7 @@ SSLSocketInput::SSLSocketInput(SSL *ssl)
195195
196196size_t SSLSocketInput::DoRead (void * buf, size_t len) {
197197 size_t actually_read;
198- HANDLE_SSL_ERROR (SSL_read_ex (ssl_, buf, len, &actually_read));
198+ HANDLE_SSL_ERROR (ssl_, SSL_read_ex (ssl_, buf, len, &actually_read));
199199 return actually_read;
200200}
201201
@@ -204,7 +204,9 @@ SSLSocketOutput::SSLSocketOutput(SSL *ssl)
204204{}
205205
206206void SSLSocketOutput::DoWrite (const void * data, size_t len) {
207- HANDLE_SSL_ERROR (SSL_write (ssl_, data, len));
207+ HANDLE_SSL_ERROR (ssl_, SSL_write (ssl_, data, len));
208208}
209209
210+ #undef HANDLE_SSL_ERROR
211+
210212}
0 commit comments