12static int TLS_accept(SSL *
ssl,
void *,
int) {
return SSL_accept(
ssl); };
13static int TLS_connect(SSL *
ssl,
void *,
int) {
return SSL_connect(
ssl); };
14static int TLS_do_handshake(SSL *
ssl,
void *,
int) {
return SSL_do_handshake(
ssl); };
15static int TLS_read(SSL *
ssl,
void *
buf,
int len) {
return SSL_read(
ssl,
buf,len); };
16static int TLS_write(SSL *
ssl,
void *
buf,
int len) {
return SSL_write(
ssl,
buf,len); };
33 tv.tv_sec = (time_t)t; tv.tv_usec = 0;
36 switch (SSL_get_error(
ssl,r)) {
38 case SSL_ERROR_WANT_READ:
39 FD_SET(rfd,&
fds); n = select(rfd + 1,&
fds,NULL,NULL,&tv);
41 case SSL_ERROR_WANT_WRITE:
42 FD_SET(wfd,&
fds); n = select(wfd + 1,NULL,&
fds,NULL,&tv);
49 if (n != -1) errno = ETIMEDOUT;
58 if (ndelay_on(rfd) == -1 || ndelay_on(wfd) == -1)
return -1;
61 if (r <= 0) { ndelay_off(rfd); ndelay_off(wfd); }
62 else SSL_set_mode(
ssl,SSL_MODE_ENABLE_PARTIAL_WRITE);
72 if (ndelay_on(rfd) == -1 || ndelay_on(wfd) == -1)
return -1;
75 if (r <= 0) { ndelay_off(rfd); ndelay_off(wfd); }
76 else SSL_set_mode(
ssl,SSL_MODE_ENABLE_PARTIAL_WRITE);
88 if (SSL_get_state(
ssl) & SSL_ST_CONNECT)
return -2;
91 SSL_set_connect_state(
ssl);
99 if (SSL_pending(
ssl))
return TLS_read(
ssl,
buf,len);
int tls_timeoutconn(int t, int rfd, int wfd, SSL *ssl)
int tls_timeoutwrite(int t, int rfd, int wfd, SSL *ssl, char *buf, int len)
int tls_timeoutaccept(int t, int rfd, int wfd, SSL *ssl)
int tls_timeoutrehandshake(int t, int rfd, int wfd, SSL *ssl)
int tls_timeoutread(int t, int rfd, int wfd, SSL *ssl, char *buf, int len)
int tls_timeoutio(TLS_fun fun, int t, int rfd, int wfd, SSL *ssl, char *buf, int len)
int(* TLS_fun)(SSL *, void *, int)