- Error strings were being constructed incorrectly.
- Client-side handshake errors were treated as recoverable.
- TLS errors were being displayed as debug messages, not errors.
This commit is contained in:
Paul Beckingham 2013-09-15 01:55:03 -04:00
parent 10c626b18c
commit 2a5bf05590
2 changed files with 15 additions and 16 deletions

View file

@ -127,7 +127,7 @@ void TLSClient::connect (const std::string& host, const std::string& port)
struct addrinfo* res; struct addrinfo* res;
if (::getaddrinfo (host.c_str (), port.c_str (), &hints, &res) != 0) if (::getaddrinfo (host.c_str (), port.c_str (), &hints, &res) != 0)
throw "ERROR: " + std::string (::gai_strerror (errno)); throw std::string ("ERROR: ") + ::gai_strerror (errno);
// Try them all, stop on success. // Try them all, stop on success.
struct addrinfo* p; struct addrinfo* p;
@ -145,7 +145,7 @@ void TLSClient::connect (const std::string& host, const std::string& port)
SO_REUSEADDR, SO_REUSEADDR,
(const void*) &on, (const void*) &on,
sizeof (on)) == -1) sizeof (on)) == -1)
throw "ERROR: " + std::string (::strerror (errno)); throw std::string ("ERROR: ") + ::strerror (errno);
if (::connect (_socket, p->ai_addr, p->ai_addrlen) == -1) if (::connect (_socket, p->ai_addr, p->ai_addrlen) == -1)
continue; continue;
@ -156,23 +156,22 @@ void TLSClient::connect (const std::string& host, const std::string& port)
free (res); free (res);
if (p == NULL) if (p == NULL)
throw "ERROR: Could not connect to " + host + " " + port; throw std::string ("ERROR: Could not connect to ") + host + " " + port;
gnutls_transport_set_ptr (_session, (gnutls_transport_ptr_t) (long) _socket); gnutls_transport_set_ptr (_session, (gnutls_transport_ptr_t) (long) _socket);
// Perform the TLS handshake // Perform the TLS handshake
int ret = gnutls_handshake (_session); int ret;
do
{
ret = gnutls_handshake (_session);
}
while (ret < 0 && gnutls_error_is_fatal (ret) == 0);
if (ret < 0) if (ret < 0)
{ throw std::string ("ERROR: Handshake failed. ") + gnutls_strerror (ret);
if (_debug)
std::cout << "c: ERROR Handshake failed\n"; if (_debug)
gnutls_perror (ret); std::cout << "c: INFO Handshake was completed\n";
}
else
{
if (_debug)
std::cout << "c: INFO Handshake was completed\n";
}
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -274,7 +273,7 @@ void TLSClient::recv (std::string& data)
// Something happened. // Something happened.
if (received < 0) if (received < 0)
throw "ERROR: " + std::string (gnutls_strerror (received)); throw std::string ("ERROR: ") + gnutls_strerror (received);
buffer [received] = '\0'; buffer [received] = '\0';
data += buffer; data += buffer;

View file

@ -337,7 +337,7 @@ bool CmdSync::send (
catch (std::string& error) catch (std::string& error)
{ {
context.debug (error); context.error (error);
} }
// Indicate message failed. // Indicate message failed.