Commit 4e86f1b1 authored by Heikki Linnakangas's avatar Heikki Linnakangas

Put SSL_pending() call behind the new internal SSL API.

It seems likely that any SSL implementation will need a similar call, not
just OpenSSL.
parent 6d6cade0
...@@ -1054,9 +1054,9 @@ pqSocketCheck(PGconn *conn, int forRead, int forWrite, time_t end_time) ...@@ -1054,9 +1054,9 @@ pqSocketCheck(PGconn *conn, int forRead, int forWrite, time_t end_time)
return -1; return -1;
} }
#ifdef USE_OPENSSL #ifdef USE_SSL
/* Check for SSL library buffering read bytes */ /* Check for SSL library buffering read bytes */
if (forRead && conn->ssl && SSL_pending(conn->ssl) > 0) if (forRead && conn->ssl_in_use && pgtls_read_pending(conn) > 0)
{ {
/* short-circuit the select */ /* short-circuit the select */
return 1; return 1;
......
...@@ -186,6 +186,15 @@ pgtls_open_client(PGconn *conn) ...@@ -186,6 +186,15 @@ pgtls_open_client(PGconn *conn)
return open_client_SSL(conn); return open_client_SSL(conn);
} }
/*
* Is there unread data waiting in the SSL read buffer?
*/
bool
pgtls_read_pending(PGconn *conn)
{
return SSL_pending(conn->ssl);
}
/* /*
* Read data from a secure connection. * Read data from a secure connection.
* *
......
...@@ -641,6 +641,7 @@ extern int pgtls_init(PGconn *conn); ...@@ -641,6 +641,7 @@ extern int pgtls_init(PGconn *conn);
extern PostgresPollingStatusType pgtls_open_client(PGconn *conn); extern PostgresPollingStatusType pgtls_open_client(PGconn *conn);
extern void pgtls_close(PGconn *conn); extern void pgtls_close(PGconn *conn);
extern ssize_t pgtls_read(PGconn *conn, void *ptr, size_t len); extern ssize_t pgtls_read(PGconn *conn, void *ptr, size_t len);
extern bool pgtls_read_pending(PGconn *conn);
extern ssize_t pgtls_write(PGconn *conn, const void *ptr, size_t len); extern ssize_t pgtls_write(PGconn *conn, const void *ptr, size_t len);
/* /*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment