summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2003-10-01 14:06:42 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2003-10-01 14:06:42 +0000
commit33ceb2a2aa62c800db2869a677c9c27d189f4a24 (patch)
treeedc7b3b2d862a5dd87367b2f20896a5e795cda91
parentd74226113a0eb063b0430a9efdea12456fa7d190 (diff)
downloadgnutls-33ceb2a2aa62c800db2869a677c9c27d189f4a24.tar.gz
Applied Simos' patch for the SIGALRM triggered handshake.
-rw-r--r--src/cli.c29
-rw-r--r--src/common.c2
2 files changed, 30 insertions, 1 deletions
diff --git a/src/cli.c b/src/cli.c
index 16d919a1cc..bb64b850a2 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -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;
}