SFTP Progress Monitoring in C++
This C++ example demonstrates how to derive a class from the CkSFtpProgress base class to implement progress monitoring and abort for SFTP:
// To monitor SFTP progress, derive a class from CkSFtpProgress and
// provide implementations for AbortCheck and PercentDone:
class MySFtpProgress : public CkSFtpProgress
{
public:
MySFtpProgress() { }
virtual ~MySFtpProgress() { }
// Called periodically during any SFTP method that communicates with
// the server. The HeartbeatMs property controls the frequency
// of callbacks. The default HeartbeatMs value = 0, which disables
// AbortCheck callbacks.
void AbortCheck(bool *abort)
{
printf("SFTP abort check...\n");
// To abort any operation while in progress, set the "abort" argument
// equal to true, like this: (uncomment the line below to abort)
//*abort = true;
}
// The PercentDone callbacks is called for any method where it it is possible
// to monitor a percentage completion, such as uploading and downloading files.
void PercentDone(int pctDone, bool *abort)
{
printf("SFTP percent done: %d\n", pctDone);
// To abort an operation while in progress, set the "abort" argument
// equal to true, like this: (uncomment the line below to abort)
//*abort = true;
}
};
void TestSftp(void)
{
CkSFtp sftp;
bool success = sftp.UnlockComponent("Anything for 30-day trial");
if (success != true) {
printf("%s\n",sftp.lastErrorText());
return;
}
// Set the event callback object:
MySFtpProgress myProgress;
sftp.put_EventCallbackObject(&myProgress);
// Set HeartbeatMs so that AbortCheck events are called once every 100 milliseconds.
sftp.put_HeartbeatMs(100);
const char *hostname = "192.168.1.107";
long port = 22;
sftp.put_ConnectTimeoutMs(8000);
sftp.put_IdleTimeoutMs(8000);
printf("calling Connect...\n");
success = sftp.Connect(hostname,port);
if (success != true) {
printf("%s\n",sftp.lastErrorText());
return;
}
// Authenticate using login/password:
printf("calling AuthenticatePw...\n");
success = sftp.AuthenticatePw("myLogin","myPassword");
if (success != true) {
printf("%s\n",sftp.lastErrorText());
return;
}
printf("calling InitializeSftp...\n");
success = sftp.InitializeSftp();
if (success != true) {
printf("%s\n",sftp.lastErrorText());
return;
}
printf("calling DownloadFileByName...\n");
success = sftp.DownloadFileByName("hamlet.xml","out.txt");
if (success != true) {
printf("%s\n",sftp.lastErrorText());
return;
}
printf("Download successful!\n");
admin
0
Tags :