}
/*
+ * In Plink our selects are synchronous, so these functions are
+ * empty stubs.
+ */
+int uxsel_input_add(int fd, int rwx) { return 0; }
+void uxsel_input_remove(int id) { }
+
+/*
* Short description of parameters.
*/
static void usage(void)
printf(" -batch disable all interactive prompts\n");
printf("The following options only apply to SSH connections:\n");
printf(" -pw passw login with specified password\n");
+ printf(" -D listen-port Dynamic SOCKS-based port forwarding\n");
printf(" -L listen-port:host:port Forward local port to "
"remote address\n");
printf(" -R listen-port:host:port Forward remote port to"
{
int sending;
int portnumber = -1;
- int *sklist;
- int socket;
- int i, skcount, sksize, socketstate;
+ int *fdlist;
+ int fd;
+ int i, fdcount, fdsize, fdstate;
int connopen;
int exitcode;
int errors;
ssh_get_line = console_get_line;
- sklist = NULL;
- skcount = sksize = 0;
+ fdlist = NULL;
+ fdcount = fdsize = 0;
/*
* Initialise port and protocol to sensible defaults. (These
* will be overridden by more or less anything.)
putty_signal(SIGWINCH, sigwinch);
sk_init();
+ uxsel_init();
/*
* Start up the connection.
FD_SET_MAX(2, maxfd, wset);
}
- /* Count the currently active sockets. */
+ /* Count the currently active fds. */
i = 0;
- for (socket = first_socket(&socketstate, &rwx); socket >= 0;
- socket = next_socket(&socketstate, &rwx)) i++;
+ for (fd = first_fd(&fdstate, &rwx); fd >= 0;
+ fd = next_fd(&fdstate, &rwx)) i++;
- /* Expand the sklist buffer if necessary. */
- if (i > sksize) {
- sksize = i + 16;
- sklist = sresize(sklist, sksize, int);
+ /* Expand the fdlist buffer if necessary. */
+ if (i > fdsize) {
+ fdsize = i + 16;
+ fdlist = sresize(fdlist, fdsize, int);
}
/*
- * Add all currently open sockets to the select sets, and
- * store them in sklist as well.
+ * Add all currently open fds to the select sets, and store
+ * them in fdlist as well.
*/
- skcount = 0;
- for (socket = first_socket(&socketstate, &rwx); socket >= 0;
- socket = next_socket(&socketstate, &rwx)) {
- sklist[skcount++] = socket;
+ fdcount = 0;
+ for (fd = first_fd(&fdstate, &rwx); fd >= 0;
+ fd = next_fd(&fdstate, &rwx)) {
+ fdlist[fdcount++] = fd;
if (rwx & 1)
- FD_SET_MAX(socket, maxfd, rset);
+ FD_SET_MAX(fd, maxfd, rset);
if (rwx & 2)
- FD_SET_MAX(socket, maxfd, wset);
+ FD_SET_MAX(fd, maxfd, wset);
if (rwx & 4)
- FD_SET_MAX(socket, maxfd, xset);
+ FD_SET_MAX(fd, maxfd, xset);
}
do {
exit(1);
}
- for (i = 0; i < skcount; i++) {
- socket = sklist[i];
+ for (i = 0; i < fdcount; i++) {
+ fd = fdlist[i];
/*
* We must process exceptional notifications before
* ordinary readability ones, or we may go straight
* past the urgent marker.
*/
- if (FD_ISSET(socket, &xset))
- select_result(socket, 4);
- if (FD_ISSET(socket, &rset))
- select_result(socket, 1);
- if (FD_ISSET(socket, &wset))
- select_result(socket, 2);
+ if (FD_ISSET(fd, &xset))
+ select_result(fd, 4);
+ if (FD_ISSET(fd, &rset))
+ select_result(fd, 1);
+ if (FD_ISSET(fd, &wset))
+ select_result(fd, 2);
}
if (FD_ISSET(signalpipe[0], &rset)) {