| 774 | } |
| 775 | |
| 776 | static int connTLSRead(connection *conn_, void *buf, size_t buf_len) { |
| 777 | tls_connection *conn = (tls_connection *) conn_; |
| 778 | int ret; |
| 779 | int ssl_err; |
| 780 | |
| 781 | if (conn->c.state != CONN_STATE_CONNECTED) return -1; |
| 782 | ERR_clear_error(); |
| 783 | ret = SSL_read(conn->ssl, buf, buf_len); |
| 784 | if (ret <= 0) { |
| 785 | WantIOType want = 0; |
| 786 | if (!(ssl_err = handleSSLReturnCode(conn, ret, &want))) { |
| 787 | if (want == WANT_WRITE) conn->flags |= TLS_CONN_FLAG_READ_WANT_WRITE; |
| 788 | updateSSLEvent(conn); |
| 789 | |
| 790 | errno = EAGAIN; |
| 791 | return -1; |
| 792 | } else { |
| 793 | if (ssl_err == SSL_ERROR_ZERO_RETURN || |
| 794 | ((ssl_err == SSL_ERROR_SYSCALL) && !errno)) { |
| 795 | conn->c.state = CONN_STATE_CLOSED; |
| 796 | return 0; |
| 797 | } else { |
| 798 | conn->c.state = CONN_STATE_ERROR; |
| 799 | return -1; |
| 800 | } |
| 801 | } |
| 802 | } |
| 803 | |
| 804 | return ret; |
| 805 | } |
| 806 | |
| 807 | static const char *connTLSGetLastError(connection *conn_) { |
| 808 | tls_connection *conn = (tls_connection *) conn_; |
nothing calls this directly
no test coverage detected