⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sshtest.cpp

📁 大名鼎鼎的远程登录软件putty的Symbian版源码
💻 CPP
字号:
#include <e32std.h>#include <e32base.h>#include <e32cons.h>#include <stdlib.h>#include <stdarg.h>extern "C" {#define PUTTY_DO_GLOBALS#include "putty.h"}#include "epocnet.h"#include "epocmemory.h"#include "epocnoise.h"#include "sshtestconsole.h"struct backend_list backends[] = {    {Config::PROT_SSH, "ssh", &ssh_backend},    {0, NULL}};static char errorFmtBuf[1024];void fatalbox(char *p, ...){    va_list ap = 0;    va_start(ap, p);    vsprintf(errorFmtBuf, p, ap);    va_end(ap);    console->Printf(_L("\nFATAL ERROR: %s\nPress a key to exit\n"), errorFmtBuf);    if ( reader ) {        reader->Cancel();    }    console->Getch();    exit(1);}void connection_fatal(char *p, ...){    va_list ap = 0;    va_start(ap, p);    vsprintf(errorFmtBuf, p, ap);    va_end(ap);    console->Printf(_L("\nCONNECTION FATAL ERROR: %s\nPress a key to exit\n"), errorFmtBuf);    if ( reader ) {        reader->Cancel();    }    console->Getch();    exit(1);}int term_ldisc(int /*mode*/){    return FALSE;}extern "C" void ldisc_update(int /*echo*/, int /*edit*/){}void logevent(char * /*string*/) {}void log_packet(int /*direction*/, int /*type*/, char * /*texttype*/,                void * /*data*/, int /*len*/) {}int from_backend(int /*is_stderr*/, char *data, int len){    #define BUFSIZE 32    TBuf<BUFSIZE> buf;    char *c = data;        while ( len > 0 ) {        TInt doNow = BUFSIZE;        if ( doNow > len ) {            doNow = len;        }        len -= doNow;        buf.SetLength(doNow);        int p = 0;        while ( doNow-- ) {            buf[p++] = *c++;        }        console->Write(buf);    }    return 0;}char *do_select(RSocketS * /*skt*/, int /*startup*/){    return NULL;}class CSocketWatcher : public CBase, public MSocketWatcher {public:    CSocketWatcher();    ~CSocketWatcher();    void ConstructL();    void SocketOpened();    void SocketClosed();private:    TInt numOpen;};CSocketWatcher::CSocketWatcher() {    numOpen = 0;}CSocketWatcher::~CSocketWatcher() {}void CSocketWatcher::ConstructL() {}void CSocketWatcher::SocketOpened() {    numOpen++;}void CSocketWatcher::SocketClosed() {    numOpen--;    if ( numOpen < 1 ) {        CActiveScheduler::Stop();    }}static void doTestL() {    epoc_memory_init();    epoc_noise_init();        // A stripped-down version of main() from plink.c    int connopen;    reader = 0;    default_protocol = Config::PROT_SSH;    default_port = 22;        flags = FLAG_INTERACTIVE;    /*     * Process the command line.     */    do_defaults(NULL, &cfg);    default_protocol = cfg.protocol;    default_port = cfg.port;//    strcpy(cfg.host, "10.1.1.1");    strcpy(cfg.host, "unix.saunalahti.fi");        /*     * Select protocol. This is farmed out into a table in a     * separate file to enable an ssh-free variant.     */    {	int i;	back = NULL;	for (i = 0; backends[i].backend != NULL; i++)	    if (backends[i].protocol == cfg.protocol) {		back = backends[i].backend;		break;	    }	if (back == NULL) {	    fprintf(stderr,		    "Internal fault: Unsupported protocol found\n");            exit(1);	}    }    // Create a new active scheduler    CActiveScheduler *scheduler = new (ELeave) CActiveScheduler;    CleanupStack::PushL(scheduler);    CActiveScheduler::Install(scheduler);    /*     * Initialise WinSock.     */    sk_init();    // Create socket watcher    CSocketWatcher *watcher = new CSocketWatcher();    watcher->ConstructL();    CleanupStack::PushL(watcher);    sk_set_watcher(watcher);    /*     * Start up the connection.     */    {	char *error;	char *realhost;	/* nodelay is only useful if stdin is a character device (console) */	int nodelay = cfg.tcp_nodelay;        console->Printf(_L("back->init..."));	error = back->init(cfg.host, cfg.port, &realhost, nodelay);        console->Printf(_L("done\n"));	if (error) {	    fprintf(stderr, "Unable to open connection:\n%s", error);	    exit(1);	}	sfree(realhost);    }    connopen = 1;    InitConsoleReaderL();    while ( connopen ) {        CActiveScheduler::Start();        if ( ((!connopen) || (back->socket() == NULL)) &&             (sk_num_active_sockets() == 0) ) {            break;        }        //         if ((!connopen || back->socket() == NULL) &&//             bufchain_size(&stdout_data) == 0 &&//             bufchain_size(&stderr_data) == 0)//             break;		       /* we closed the connection */    }    sk_set_watcher(NULL);    CleanupStack::PopAndDestroy(); // watcher    FreeConsoleReader();    CleanupStack::PopAndDestroy(); // scheduler    sk_close_networking();    epoc_noise_free();    epoc_memory_free();}static void doMainL() {    InitConsoleL();    __UHEAP_MARK;    TRAPD(error, doTestL());    if ( error ) {        console->Printf(_L("\nLeave %d\n"), error);        console->Getch();    }    CloseSTDLIB();    __UHEAP_MARKEND;    FreeConsole();}GLDEF_C TInt E32Main() {        CTrapCleanup *cleanup = CTrapCleanup::New();    TRAPD(error, doMainL());    if ( error != KErrNone ) {        User::Panic(_L("SSHTest"), error);    }    delete cleanup;        return 0;}#if defined(__WINS__)EXPORT_C TInt WinsMain(TAny *){	E32Main();	return(KErrNone);}GLDEF_C TInt E32Dll(TDllReason){	return(KErrNone);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -