Lines Matching refs:data
52 static CURLcode wssh_connect(struct Curl_easy *data, bool *done);
53 static CURLcode wssh_multi_statemach(struct Curl_easy *data, bool *done);
54 static CURLcode wssh_do(struct Curl_easy *data, bool *done);
56 static CURLcode wscp_done(struct Curl_easy *data,
58 static CURLcode wscp_doing(struct Curl_easy *data,
60 static CURLcode wscp_disconnect(struct Curl_easy *data,
64 static CURLcode wsftp_done(struct Curl_easy *data,
66 static CURLcode wsftp_doing(struct Curl_easy *data,
68 static CURLcode wsftp_disconnect(struct Curl_easy *data,
71 static int wssh_getsock(struct Curl_easy *data,
74 static CURLcode wssh_setup_connection(struct Curl_easy *data,
139 static void state(struct Curl_easy *data, sshstate nowstate)
141 struct connectdata *conn = data->conn;
212 infof(data, "wolfssh %p state change from %s to %s",
220 static ssize_t wscp_send(struct Curl_easy *data, int sockindex,
224 (void)data;
233 static ssize_t wscp_recv(struct Curl_easy *data, int sockindex,
237 (void)data;
247 static ssize_t wsftp_send(struct Curl_easy *data, int sockindex,
250 struct connectdata *conn = data->conn;
277 failf(data, "wolfSSH_SFTP_SendWritePacket returned %d", rc);
281 infof(data, "sent %zu bytes SFTP from offset %" CURL_FORMAT_CURL_OFF_T,
291 static ssize_t wsftp_recv(struct Curl_easy *data, int sockindex,
295 struct connectdata *conn = data->conn;
323 failf(data, "wolfSSH_SFTP_SendReadPacket returned %d", rc);
334 static CURLcode wssh_setup_connection(struct Curl_easy *data,
340 data->req.p.ssh = ssh = calloc(1, sizeof(struct SSHPROTO));
351 struct Curl_easy *data = ctx;
352 DEBUGF(infof(data, "wolfssh callback: type %s",
356 authdata->sf.password.password = (byte *)data->conn->passwd;
357 authdata->sf.password.passwordSz = (word32) strlen(data->conn->passwd);
363 static CURLcode wssh_connect(struct Curl_easy *data, bool *done)
365 struct connectdata *conn = data->conn;
370 /* initialize per-handle data if not already */
371 if(!data->req.p.ssh)
372 wssh_setup_connection(data, conn);
389 failf(data, "No wolfSSH context");
395 failf(data, "No wolfSSH session");
401 failf(data, "wolfSSH failed to set user name");
407 wolfSSH_SetUserAuthCtx(sshc->ssh_session, data);
411 failf(data, "wolfSSH failed to set socket");
421 state(data, SSH_INIT);
423 state(data, SSH_SFTP_INIT);
425 return wssh_multi_statemach(data, done);
434 * blocking and without reaching the end. The data the pointer 'block' points
439 static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block)
442 struct connectdata *conn = data->conn;
444 struct SSHPROTO *sftp_scp = data->req.p.ssh;
452 state(data, SSH_S_STARTUP);
470 state(data, SSH_STOP);
473 infof(data, "wolfssh connected");
474 state(data, SSH_STOP);
494 infof(data, "wolfssh SFTP connected");
495 state(data, SSH_SFTP_REALPATH);
498 failf(data, "wolfssh SFTP connect error %d", rc);
520 state(data, SSH_STOP);
523 failf(data, "wolfssh SFTP realpath %d", rc);
527 result = Curl_getworkingpath(data, sshc->homedir, &sftp_scp->path);
530 state(data, SSH_STOP);
534 if(data->set.quote) {
535 infof(data, "Sending quote commands");
536 sshc->quote_item = data->set.quote;
537 state(data, SSH_SFTP_QUOTE);
540 state(data, SSH_SFTP_GETINFO);
544 if(data->set.get_filetime) {
545 state(data, SSH_SFTP_FILETIME);
548 state(data, SSH_SFTP_TRANS_INIT);
552 if(data->state.upload)
553 state(data, SSH_SFTP_UPLOAD_INIT);
556 state(data, SSH_SFTP_READDIR_INIT);
558 state(data, SSH_SFTP_DOWNLOAD_INIT);
564 if(data->state.resume_from) {
566 if(data->state.resume_from < 0) {
573 data->state.resume_from = 0;
578 failf(data, "Bad file size (%" CURL_FORMAT_CURL_OFF_T ")", size);
581 data->state.resume_from = size;
586 if(data->set.remote_append)
589 else if(data->state.resume_from > 0)
597 createattrs.per = (word32)data->set.new_file_perms;
615 infof(data, "wolfssh SFTP open succeeded");
618 failf(data, "wolfssh SFTP upload open failed: %d", rc);
621 state(data, SSH_SFTP_DOWNLOAD_STAT);
625 if(data->state.resume_from > 0) {
629 Curl_set_in_callback(data, true);
630 seekerr = conn->seek_func(conn->seek_client, data->state.resume_from,
632 Curl_set_in_callback(data, false);
639 failf(data, "Could not seek stream");
646 (data->state.resume_from - passed >
648 sizeof(scratch) : curlx_sotouz(data->state.resume_from - passed);
651 Curl_set_in_callback(data, true);
652 actuallyread = data->state.fread_func(scratch, 1,
654 data->state.in);
655 Curl_set_in_callback(data, false);
661 failf(data, "Failed to read data");
664 } while(passed < data->state.resume_from);
668 if(data->state.infilesize > 0) {
669 data->state.infilesize -= data->state.resume_from;
670 data->req.size = data->state.infilesize;
671 Curl_pgrsSetUploadSize(data, data->state.infilesize);
674 sshc->offset += data->state.resume_from;
676 if(data->state.infilesize > 0) {
677 data->req.size = data->state.infilesize;
678 Curl_pgrsSetUploadSize(data, data->state.infilesize);
680 /* upload data */
681 Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET);
687 state(data, SSH_SFTP_CLOSE);
693 sshc->orig_waitfor = data->req.keepon;
698 data->state.select_bits = CURL_CSELECT_OUT;
703 Curl_expire(data, 0, EXPIRE_RUN_NOW);
705 state(data, SSH_STOP);
727 infof(data, "wolfssh SFTP open succeeded");
728 state(data, SSH_SFTP_DOWNLOAD_STAT);
732 failf(data, "wolfssh SFTP open failed: %d", rc);
753 infof(data, "wolfssh STAT succeeded");
756 failf(data, "wolfssh SFTP open failed: %d", rc);
757 data->req.size = -1;
758 data->req.maxdownload = -1;
759 Curl_pgrsSetDownloadSize(data, -1);
765 data->req.size = size;
766 data->req.maxdownload = size;
767 Curl_pgrsSetDownloadSize(data, size);
769 infof(data, "SFTP download %" CURL_FORMAT_CURL_OFF_T " bytes", size);
773 if(data->state.use_range || data->state.resume_from) {
774 infof(data, "wolfSSH cannot do range/seek on SFTP");
779 if(data->req.size == 0) {
780 /* no data to transfer */
781 Curl_setup_transfer(data, -1, -1, FALSE, -1);
782 infof(data, "File already completely downloaded");
783 state(data, SSH_STOP);
786 Curl_setup_transfer(data, FIRSTSOCKET, data->req.size, FALSE, -1);
794 data->state.select_bits = CURL_CSELECT_IN;
799 state(data, SSH_SFTP_CLOSE);
803 state(data, SSH_STOP);
824 state(data, SSH_STOP);
828 failf(data, "wolfssh SFTP CLOSE failed: %d", rc);
832 Curl_pgrsSetDownloadSize(data, -1);
833 if(data->req.no_body) {
834 state(data, SSH_STOP);
837 state(data, SSH_SFTP_READDIR);
862 data->set.list_only ?
865 state(data, SSH_SFTP_CLOSE);
869 result = Curl_client_write(data, CLIENTWRITE_BODY,
879 state(data, SSH_STOP);
882 failf(data, "wolfssh SFTP ls failed: %d", rc);
889 state(data, SSH_STOP);
899 static CURLcode wssh_multi_statemach(struct Curl_easy *data, bool *done)
901 struct connectdata *conn = data->conn;
907 result = wssh_statemach_act(data, &block);
912 DEBUGF(infof(data, "wssh_statemach_act says DONE"));
920 CURLcode wscp_perform(struct Curl_easy *data,
924 (void)data;
931 CURLcode wsftp_perform(struct Curl_easy *data,
937 DEBUGF(infof(data, "DO phase starts"));
942 state(data, SSH_SFTP_QUOTE_INIT);
945 result = wssh_multi_statemach(data, dophase_done);
947 *connected = Curl_conn_is_connected(data->conn, FIRSTSOCKET);
950 DEBUGF(infof(data, "DO phase is complete"));
959 static CURLcode wssh_do(struct Curl_easy *data, bool *done)
963 struct connectdata *conn = data->conn;
967 data->req.size = -1; /* make sure this is unknown at this point */
972 Curl_pgrsSetUploadCounter(data, 0);
973 Curl_pgrsSetDownloadCounter(data, 0);
974 Curl_pgrsSetUploadSize(data, -1);
975 Curl_pgrsSetDownloadSize(data, -1);
978 result = wscp_perform(data, &connected, done);
980 result = wsftp_perform(data, &connected, done);
985 static CURLcode wssh_block_statemach(struct Curl_easy *data,
988 struct connectdata *conn = data->conn;
997 result = wssh_statemach_act(data, &block);
1002 if(Curl_pgrsUpdate(data))
1005 result = Curl_speedcheck(data, now);
1009 left = Curl_timeleft(data, NULL, FALSE);
1011 failf(data, "Operation timed out");
1037 static CURLcode wssh_done(struct Curl_easy *data, CURLcode status)
1040 struct SSHPROTO *sftp_scp = data->req.p.ssh;
1044 result = wssh_block_statemach(data, FALSE);
1051 if(Curl_pgrsDone(data))
1054 data->req.keepon = 0; /* clear all bits */
1059 static CURLcode wscp_done(struct Curl_easy *data,
1070 static CURLcode wscp_doing(struct Curl_easy *data,
1080 static CURLcode wscp_disconnect(struct Curl_easy *data,
1084 (void)data;
1092 static CURLcode wsftp_done(struct Curl_easy *data,
1096 state(data, SSH_SFTP_CLOSE);
1098 return wssh_done(data, code);
1101 static CURLcode wsftp_doing(struct Curl_easy *data,
1104 CURLcode result = wssh_multi_statemach(data, dophase_done);
1107 DEBUGF(infof(data, "DO phase is complete"));
1112 static CURLcode wsftp_disconnect(struct Curl_easy *data,
1119 DEBUGF(infof(data, "SSH DISCONNECT starts now"));
1123 state(data, SSH_SFTP_SHUTDOWN);
1124 result = wssh_block_statemach(data, TRUE);
1127 DEBUGF(infof(data, "SSH DISCONNECT is done"));
1131 static int wssh_getsock(struct Curl_easy *data,
1137 (void)data;