MCPcopy Create free account
hub / github.com/KangLin/RabbitRemoteControl / Process

Method Process

Plugins/FileTransfer/ChannelSFTP.cpp:44–99  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42}
43
44int CChannelSFTP::Process()
45{
46 int nRet = 0;
47
48 struct timeval timeout = {0, DEFAULT_TIMEOUT};
49 ssh_channel channels[2], channel_out[2];
50 channels[0] = nullptr; //m_SessionSftp->channel;
51 channels[1] = nullptr;
52
53 fd_set set;
54 FD_ZERO(&set);
55 socket_t fdEvent = SSH_INVALID_SOCKET;
56 if(m_pEvent)
57 fdEvent = m_pEvent->GetFd();
58 if(SSH_INVALID_SOCKET != fdEvent)
59 FD_SET(fdEvent, &set);
60
61 socket_t sshFd = ssh_get_fd(m_Session);
62 if(SSH_INVALID_SOCKET != sshFd)
63 FD_SET(sshFd, &set);
64
65 socket_t f = qMax(sshFd, fdEvent);
66 //qDebug(log) << "ssh_select:" << fdEvent;
67 nRet = ssh_select(channels, channel_out, f + 1, &set, &timeout);
68 //qDebug(log) << "ssh_select end:" << nRet;
69 if(EINTR == nRet)
70 return 0;
71
72 if(SSH_OK != nRet) {
73 QString szErr;
74 szErr = "ssh_channel_select failed: " + QString::number(nRet);
75 szErr += ssh_get_error(m_Session);
76 qCritical(log) << szErr;
77 setErrorString(szErr);
78 return -3;
79 }
80
81 if(SSH_INVALID_SOCKET != fdEvent && FD_ISSET(fdEvent, &set)) {
82 //qDebug(log) << "fires event";
83 if(m_pEvent) {
84 nRet = m_pEvent->Reset();
85 if(nRet) {
86 QString szErr = "Reset event fail";
87 qCritical(log) << szErr;
88 setErrorString(szErr);
89 return -4;
90 }
91 }
92 }
93
94 AsyncReadDir();
95
96 AsyncFile();
97
98 return 0;
99}
100
101QSharedPointer<CRemoteFileSystem> CChannelSFTP::GetFileNode(

Callers 2

OnProcessMethod · 0.45
OnProcessMethod · 0.45

Calls 2

GetFdMethod · 0.80
ResetMethod · 0.80

Tested by

no test coverage detected