diff -ruN sslsniff-0.6/HTTPSBridge.cpp sslsniff-0.6-sslfix/HTTPSBridge.cpp --- sslsniff-0.6/HTTPSBridge.cpp 2009-09-11 00:38:58.000000000 +0200 +++ sslsniff-0.6-sslfix/HTTPSBridge.cpp 2011-04-18 20:21:49.000000000 +0200 @@ -53,7 +53,8 @@ int bytesWritten; do { - if ((bytesRead = SSL_read(clientSession, buf, sizeof(buf))) <= 0) return false; + if ((bytesRead = SSL_read(clientSession, buf, sizeof(buf))) <= 0) + return SSL_get_error(clientSession, bytesRead) == SSL_ERROR_WANT_READ ? true : false; Logger::logFromClient(serverName, buf, bytesRead); @@ -61,11 +62,11 @@ std::string request; buildRequestFromHeaders(headers, request); - SSL_write(serverSession, request.c_str(), request.length()); + SSL_write(serverSession, request.c_str(), request.length()); // FIXME if (headers.isPost()) Logger::logFromClient(serverName, headers); } - } while (SSL_pending(serverSession)); + } while (SSL_pending(clientSession)); return true; } diff -ruN sslsniff-0.6/SSLBridge.cpp sslsniff-0.6-sslfix/SSLBridge.cpp --- sslsniff-0.6/SSLBridge.cpp 2009-09-11 00:40:57.000000000 +0200 +++ sslsniff-0.6-sslfix/SSLBridge.cpp 2011-04-18 20:17:14.000000000 +0200 @@ -125,7 +125,7 @@ if (isAvailable(fds[0].revents)) if (!readFromClient()) return; if (isAvailable(fds[1].revents)) if (!readFromServer()) return; if (isClosed(fds[0].revents)) return; - if (isClosed(fds[0].revents)) return; + if (isClosed(fds[1].revents)) return; } } @@ -144,12 +144,14 @@ int bytesWritten; do { - if ((bytesRead = SSL_read(clientSession, buf, sizeof(buf))) <= 0) return false; - if ((bytesWritten = SSL_write(serverSession, buf, bytesRead)) <= 0) return false; + if ((bytesRead = SSL_read(clientSession, buf, sizeof(buf))) <= 0) + return SSL_get_error(clientSession, bytesRead) == SSL_ERROR_WANT_READ ? true : false; + if ((bytesWritten = SSL_write(serverSession, buf, bytesRead)) <= 0) + return false; // FIXME Logger::logFromClient(serverName, buf, bytesRead); - } while (SSL_pending(serverSession)); + } while (SSL_pending(clientSession)); return true; } @@ -160,8 +162,10 @@ int bytesWritten; do { - if ((bytesRead = SSL_read(serverSession, buf, sizeof(buf))) <= 0) return false; - if ((bytesWritten = SSL_write(clientSession, buf, bytesRead)) < bytesRead) return false; + if ((bytesRead = SSL_read(serverSession, buf, sizeof(buf))) <= 0) + return SSL_get_error(serverSession, bytesRead) == SSL_ERROR_WANT_READ ? true : false; + if ((bytesWritten = SSL_write(clientSession, buf, bytesRead)) < bytesRead) + return false; // FIXME Logger::logFromServer(serverName, buf, bytesRead); } while (SSL_pending(serverSession));