Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » U++ Library support » U++ MT-multithreading and servers » SSH package for U++ (A feature-rich ilbssh2 wrapper for Ultimate++)
Re: SSH package for U++ [message #48982 is a reply to message #48973] Fri, 17 November 2017 22:15 Go to previous messageGo to previous message
Oblivion is currently offline  Oblivion
Messages: 1226
Registered: August 2007
Senior Contributor
Hello,

I am currenty writing a simple SFTP (GUI) browser example, which I will include in the package, and upload it to GIT repo.
In the meantime, for those who wonder how to do non-blocking operations with SFtp, here is a simple example (it is a real example which can be compiled.):

#include <Core/Core.h>
#include <SSH/SSH.h>

using namespace Upp;

CONSOLE_APP_MAIN
{
    // This example demonstrates (in non-blocking mode):
    // 1) Reading the size of a file.
    // 2) Reading the content of a file (into a String).
    // 3) Reading the content of a directory as XML.

    int CMD_GET = 0, CMD_LIST = 0, CMD_SIZE = 0;
    const char *file = "/readme.txt";
    SFtp::DirList ls;

    Ssh::Trace();
    SshSession session;
    if(session.Timeout(30000).Connect("test.rebex.net", 22, "demo", "password")) {
        Array<SFtp> sftps;
        for(int i = 0; i < 3; i++) {
            auto& sftp = sftps.Add(new SFtp(session));
            sftp.NonBlocking();
            switch(i) {
                case 0: sftp.Get(file);  CMD_GET = sftp.GetId(); break;
                case 1: sftp.GetSize(file);  CMD_SIZE = sftp.GetId(); break;
                case 2: sftp.ListDir("/pub/example/", ls); CMD_LIST = sftp.GetId(); break;
                default: NEVER();
            }
        }
        while(!sftps.IsEmpty()) {
            for(int i = 0 ; i < sftps.GetCount(); i++) {
                SocketWaitEvent we;
                auto& sftp = sftps[i];
                sftp.AddTo(we);
                we.Wait(10);
                if(!sftp.Do()) {
                    if(sftp.IsError())
                        Cerr() << sftp.GetErrorDesc() << '\n';
                    else {
                        if(sftp.GetId() == CMD_GET) {
                            Cout() << sftp.GetResult();
                        }
                        else
                        if(sftp.GetId() == CMD_SIZE) {
                            Cout() << Format("Size of %s is %d bytes\n", file, sftp.GetResult());
                        }
                        else
                        if(sftp.GetId() == CMD_LIST) {
                            for(auto& e : ls)
                                Cout() << e.ToXml() << '\n';
                        }
                    }
                    sftps.Remove(i);
                    break;
                }
            }
        }
    }
    else
        Cerr() << session.GetErrorDesc();

}


Best regards,
Oblivion


[Updated on: Fri, 17 November 2017 22:19]

Report message to a moderator

 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: WebSockets client in javascript connected to an U++ server sending binary messages
Next Topic: TURTLE high cpu usage, potential security flaw, and client handling problem
Goto Forum:
  


Current Time: Mon Aug 25 10:51:18 CEST 2025

Total time taken to generate the page: 0.01221 seconds