#define X509_getm_notBefore X509_get_notBefore
#define X509_getm_notAfter X509_get_notAfter
#define X509_STORE_CTX_get0_chain X509_STORE_CTX_get_chain
+#define SSL_has_pending SSL_pending
#endif
/* This is ugly, but as RAND_status came in on OpenSSL version 0.9.5
conn->conn_read = raw_socket_read;
conn->conn_write = raw_socket_write;
conn->conn_close = raw_socket_close;
+ conn->conn_poll = raw_socket_poll;
return rc;
}
return -1;
}
+/**
+ * ssl_socket_poll - Check whether a socket read would block - Implements Connection::conn_poll()
+ */
+static int ssl_socket_poll(struct Connection *conn, time_t wait_secs)
+{
+ struct SslSockData *data = conn->sockdata;
+
+ if (SSL_has_pending(data->ssl))
+ return 1;
+ else
+ return raw_socket_poll(conn, wait_secs);
+}
+
/**
* ssl_socket_open - Open an SSL socket - Implements Connection::conn_open()
*/
conn->conn_read = ssl_socket_read;
conn->conn_write = ssl_socket_write;
conn->conn_close = ssl_socket_close_and_restore;
+ conn->conn_poll = ssl_socket_poll;
return rc;
}
conn->conn_open = ssl_socket_open;
conn->conn_read = ssl_socket_read;
conn->conn_write = ssl_socket_write;
- conn->conn_poll = raw_socket_poll;
+ conn->conn_poll = ssl_socket_poll;
conn->conn_close = ssl_socket_close;
return 0;
conn->conn_read = raw_socket_read;
conn->conn_write = raw_socket_write;
conn->conn_close = raw_socket_close;
+ conn->conn_poll = raw_socket_poll;
return rc;
}
return -1;
}
+/**
+ * tls_socket_poll - Check whether a socket read would block - Implements Connection::conn_poll()
+ */
+static int tls_socket_poll(struct Connection *conn, time_t wait_secs)
+{
+ struct TlsSockData *data = conn->sockdata;
+
+ if (gnutls_record_check_pending(data->state))
+ return 1;
+ else
+ return raw_socket_poll(conn, wait_secs);
+}
+
/**
* tls_socket_open - Open a TLS socket - Implements Connection::conn_open()
*/
conn->conn_read = tls_socket_read;
conn->conn_write = tls_socket_write;
conn->conn_close = tls_socket_close;
- conn->conn_poll = raw_socket_poll;
+ conn->conn_poll = tls_socket_poll;
return 0;
}
conn->conn_read = tls_socket_read;
conn->conn_write = tls_socket_write;
conn->conn_close = tls_starttls_close;
+ conn->conn_poll = tls_socket_poll;
return 0;
}