#ifndef OPENSSL_NO_SOCK
+#ifdef OPENSSL_SYS_VMS
+# include "vms_term_sock.h"
+#endif
/*
* With IPv6, it looks like Digital has mixed up the proper order of
* recursive header file inclusion, resulting in the compiler complaining
int c_nbio = 0, c_msg = 0, c_ign_eof = 0, c_brief = 0;
int c_tlsextdebug = 0, c_status_req = 0;
BIO *bio_c_msg = NULL;
+#if defined(OPENSSL_SYS_VMS)
+ int stdin_sock;
+ TerminalSocket(TERM_SOCK_CREATE, &stdin_sock);
+#endif
FD_ZERO(&readfds);
FD_ZERO(&writefds);
SSL_set_connect_state(con);
/* ok, lets connect */
+#if defined(OPENSSL_SYS_VMS)
+ if (stdin_sock > SSL_get_fd(con))
+ width = stdin_sock + 1;
+ else
+ width = SSL_get_fd(con) + 1;
+#else
width = SSL_get_fd(con) + 1;
-
+#endif
read_tty = 1;
write_tty = 0;
tty_on = 0;
* and EOF satisfies that. To avoid a CPU-hogging loop,
* set the flag so we exit.
*/
+#if defined(OPENSSL_SYS_VMS)
+ if (read_tty && !at_eof)
+ openssl_fdset(stdin_sock, &readfds);
+#else
if (read_tty && !at_eof)
openssl_fdset(fileno(stdin), &readfds);
if (write_tty)
openssl_fdset(fileno(stdout), &writefds);
+#endif
}
if (read_ssl)
openssl_fdset(SSL_get_fd(con), &readfds);
goto shut;
}
}
-#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
+#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_VMS)
/* Assume Windows/DOS/BeOS can always write */
else if (!ssl_pending && write_tty)
#else
#if defined(OPENSSL_SYS_MSDOS)
else if (has_stdin_waiting())
#else
- else if (FD_ISSET(fileno(stdin), &readfds))
+
+#if defined(OPENSSL_SYS_VMS)
+ else if (FD_ISSET(stdin_sock,&readfds))
+#else
+ else if (FD_ISSET(fileno(stdin),&readfds))
+#endif
+
#endif
{
if (crlf) {
int j, lf_num;
i = raw_read_stdin(cbuf, BUFSIZZ / 2);
+ #if defined(OPENSSL_SYS_VMS)
+ i = recv(stdin_sock, cbuf, BUFSIZZ/2, 0);
+ #else
+ i = raw_read_stdin(cbuf, BUFSIZZ/2);
+ #endif
+
lf_num = 0;
/* both loops are skipped when i <= 0 */
for (j = 0; j < i; j++)
}
assert(lf_num == 0);
} else
- i = raw_read_stdin(cbuf, BUFSIZZ);
-
+ {
+ #if defined(OPENSSL_SYS_VMS)
+ i = recv(stdin_sock, cbuf, BUFSIZZ, 0);
+ #else
+ i = raw_read_stdin(cbuf, BUFSIZZ);
+ #endif
+ }
#if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS)
if (i == 0)
at_eof = 1;
bio_c_out = NULL;
BIO_free(bio_c_msg);
bio_c_msg = NULL;
+#if defined(OPENSSL_SYS_VMS)
+ TerminalSocket(TERM_SOCK_DELETE, &stdin_sock);
+#endif
return (ret);
}