SSL* SSLManager::accept(int fd) { SSL* ssl = _secure(fd); int ret = SSL_accept(ssl); if (ret != 1) _handleSSLError(SSL_get_error(ssl, ret)); return ssl; }
SSL* SSLManager::accept(int fd) { SSL* ssl = _secure(fd); ScopeGuard guard = MakeGuard(::SSL_free, ssl); int ret = SSL_accept(ssl); if (ret != 1) _handleSSLError(SSL_get_error(ssl, ret)); guard.Dismiss(); return ssl; }
int SSLManager::SSL_shutdown(SSLConnection* conn) { int status; do { status = ::SSL_shutdown(conn->ssl); } while(!_doneWithSSLOp(conn, status)); if (status < 0) _handleSSLError(SSL_get_error(conn, status)); return status; }
int SSLManager::SSL_write(SSLConnection* conn, const void* buf, int num) { int status; do { status = ::SSL_write(conn->ssl, buf, num); } while(!_doneWithSSLOp(conn, status)); if (status <= 0) _handleSSLError(SSL_get_error(conn, status)); return status; }
SSLConnection* SSLManager::accept(Socket* socket) { SSLConnection* sslConn = new SSLConnection(_serverContext, socket); ScopeGuard sslGuard = MakeGuard(::SSL_free, sslConn->ssl); ScopeGuard bioGuard = MakeGuard(::BIO_free, sslConn->networkBIO); int ret; do { ret = ::SSL_accept(sslConn->ssl); } while(!_doneWithSSLOp(sslConn, ret)); if (ret != 1) _handleSSLError(SSL_get_error(sslConn, ret)); sslGuard.Dismiss(); bioGuard.Dismiss(); return sslConn; }