diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-10-01 14:06:42 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-10-01 14:06:42 +0000 |
commit | 33ceb2a2aa62c800db2869a677c9c27d189f4a24 (patch) | |
tree | edc7b3b2d862a5dd87367b2f20896a5e795cda91 /src | |
parent | d74226113a0eb063b0430a9efdea12456fa7d190 (diff) | |
download | gnutls-33ceb2a2aa62c800db2869a677c9c27d189f4a24.tar.gz |
Applied Simos' patch for the SIGALRM triggered handshake.
Diffstat (limited to 'src')
-rw-r--r-- | src/cli.c | 29 | ||||
-rw-r--r-- | src/common.c | 2 |
2 files changed, 30 insertions, 1 deletions
@@ -236,6 +236,12 @@ static int handle_error(socket_st hd, int err) return ret; } +int starttls_alarmed; + +void starttls_alarm (int signum) +{ + starttls_alarmed = 1; +} int main(int argc, char **argv) { @@ -358,6 +364,8 @@ int main(int argc, char **argv) printf("\n- Simple Client Mode:\n\n"); + signal (SIGALRM, &starttls_alarm); + FD_ZERO(&rset); for (;;) { FD_SET(fileno(stdin), &rset); @@ -366,7 +374,26 @@ int main(int argc, char **argv) maxfd = MAX(fileno(stdin), sd); tv.tv_sec = 3; tv.tv_usec = 0; - select(maxfd + 1, &rset, NULL, NULL, &tv); + err = select(maxfd + 1, &rset, NULL, NULL, &tv); + + if (err < 0) { + if (errno == EINTR && starttls_alarmed) { + if (hd.secure == 0) { + fprintf(stderr, + "*** Starting TLS handshake\n"); + ret = do_handshake(&hd); + if (ret < 0) { + fprintf(stderr, + "*** Handshake has failed\n"); + socket_bye(&hd); + user_term = 1; + } + } else { + user_term = 1; + } + } + continue; + } if (FD_ISSET(sd, &rset)) { bzero(buffer, MAX_BUF + 1); diff --git a/src/common.c b/src/common.c index 8149604748..93af1608de 100644 --- a/src/common.c +++ b/src/common.c @@ -362,6 +362,8 @@ int print_info(gnutls_session session, const char* hostname) tmp = gnutls_compression_get_name(gnutls_compression_get(session)); printf("- Compression: %s\n", tmp); + fflush (stdout); + return 0; } |