static unsigned outlen; /* how much data required */
static unsigned char *pending = NULL; /* any spare data */
static unsigned pendlen = 0, pendsize = 0; /* length and phys. size of buffer */
-int from_backend(int is_stderr, char *data, int datalen)
+int from_backend(void *frontend, int is_stderr, char *data, int datalen)
{
unsigned char *p = (unsigned char *) data;
unsigned len = (unsigned) datalen;
{
if (scp_ssh_socket == INVALID_SOCKET)
return;
- while (!back->sendok()) {
+ while (!back->sendok(backhandle)) {
fd_set readfds;
FD_ZERO(&readfds);
FD_SET(scp_ssh_socket, &readfds);
return; /* doom */
select_result((WPARAM) scp_ssh_socket, (LPARAM) FD_READ);
}
- using_sftp = !ssh_fallback_cmd;
+ using_sftp = !ssh_fallback_cmd(backhandle);
}
/*
tell_str(stderr, str);
errs++;
- if (back != NULL && back->socket() != NULL) {
+ if (back != NULL && back->socket(backhandle) != NULL) {
char ch;
- back->special(TS_EOF);
+ back->special(backhandle, TS_EOF);
ssh_scp_recv(&ch, 1);
}
back = &ssh_backend;
- err = back->init(cfg.host, cfg.port, &realhost, 0);
+ err = back->init(NULL, &backhandle, cfg.host, cfg.port, &realhost, 0);
if (err != NULL)
bump("ssh_init: %s", err);
ssh_scp_init();
}
int sftp_senddata(char *buf, int len)
{
- back->send((unsigned char *) buf, len);
+ back->send(backhandle, (unsigned char *) buf, len);
return 1;
}
if (!fxp_init()) {
tell_user(stderr, "unable to initialise SFTP: %s", fxp_error());
errs++;
- return 1;
+ return;
}
if (!fxp_stat(target, &attrs) ||
if (using_sftp) {
/* do nothing; we never need to send our errors to the server */
} else {
- back->send("\001", 1); /* scp protocol error prefix */
- back->send(str, strlen(str));
+ back->send(backhandle, "\001", 1);/* scp protocol error prefix */
+ back->send(backhandle, str, strlen(str));
}
return 0; /* can't fail */
}
} else {
char buf[80];
sprintf(buf, "T%lu 0 %lu 0\n", mtime, atime);
- back->send(buf, strlen(buf));
+ back->send(backhandle, buf, strlen(buf));
return response();
}
}
} else {
char buf[40];
sprintf(buf, "C%04o %lu ", modes, size);
- back->send(buf, strlen(buf));
- back->send(name, strlen(name));
- back->send("\n", 1);
+ back->send(backhandle, buf, strlen(buf));
+ back->send(backhandle, name, strlen(name));
+ back->send(backhandle, "\n", 1);
return response();
}
}
scp_sftp_fileoffset = uint64_add32(scp_sftp_fileoffset, len);
return 0;
} else {
- int bufsize = back->send(data, len);
+ int bufsize = back->send(backhandle, data, len);
/*
* If the network transfer is backing up - that is, the
while (bufsize > MAX_SCP_BUFSIZE) {
if (!scp_process_network_event())
return 1;
- bufsize = back->sendbuffer();
+ bufsize = back->sendbuffer(backhandle);
}
return 0;
scp_has_times = 0;
return 0;
} else {
- back->send("", 1);
+ back->send(backhandle, "", 1);
return response();
}
}
} else {
char buf[40];
sprintf(buf, "D%04o 0 ", modes);
- back->send(buf, strlen(buf));
- back->send(name, strlen(name));
- back->send("\n", 1);
+ back->send(backhandle, buf, strlen(buf));
+ back->send(backhandle, name, strlen(name));
+ back->send(backhandle, "\n", 1);
return response();
}
}
sfree(scp_sftp_remotepath);
return 0;
} else {
- back->send("E\n", 2);
+ back->send(backhandle, "E\n", 2);
return response();
}
}
int scp_sink_init(void)
{
if (!using_sftp) {
- back->send("", 1);
+ back->send(backhandle, "", 1);
}
return 0;
}
case '\02': /* fatal error */
bump("%s", act->buf);
case 'E':
- back->send("", 1);
+ back->send(backhandle, "", 1);
act->action = SCP_SINK_ENDDIR;
return 0;
case 'T':
if (sscanf(act->buf, "%ld %*d %ld %*d",
&act->mtime, &act->atime) == 2) {
act->settime = 1;
- back->send("", 1);
+ back->send(backhandle, "", 1);
continue; /* go round again */
}
bump("Protocol error: Illegal time format");
sfree(scp_sftp_currentname);
return 0;
} else {
- back->send("", 1);
+ back->send(backhandle, "", 1);
return 0; /* can't fail */
}
}
fxp_close(scp_sftp_filehandle);
return 0;
} else {
- back->send("", 1);
+ back->send(backhandle, "", 1);
return response();
}
}
tolocal(argc, argv);
}
- if (back != NULL && back->socket() != NULL) {
+ if (back != NULL && back->socket(backhandle) != NULL) {
char ch;
- back->special(TS_EOF);
+ back->special(backhandle, TS_EOF);
ssh_scp_recv(&ch, 1);
}
WSACleanup();