[prev in list] [next in list] [prev in thread] [next in thread] 

List:       libssh2-devel
Subject:    Re: [libssh2] (no subject)
From:       Mark Erikson <mark () isquaredsoftware ! com>
Date:       2007-09-09 5:13:37
Message-ID: 46E38101.2060106 () isquaredsoftware ! com
[Download RAW message or body]

> From: "Paul Thomas" <thomaspu@gmail.com>
> Subject: [libssh2] Interacting with a shell how?
> 
> So I've been reading through the docs and I've got a working example that
> can get to the point where it can open up a shell on a pty, but after that
> suceeds what do I do now?
> 
> The guides all say
>     /* At this point the shell can be interacted with using
>      * libssh2_channel_read()
>      * libssh2_channel_read_stderr()
>      * libssh2_channel_write()
>      * libssh2_channel_write_stderr()
> 
> Thats nice, but I expected that after I requested a shell that there would
> be some data on the socket ready to be read that contained something like:
>    paul@computerName ~ $
> 
> What am I missing here? I've been unable to find much help online in the
> form of docs talking about ssh with the exception of the RFCs and these talk
> about the protocol, not what do do when its already connected.
> 
> Help? Advice?
> Paul

I've also been working on a project which uses libssh2 to create a 
shell.  I don't have a good, simple example to give you, since it's a 
GUI program that contains code adapted from several different sources, 
and things are ugly right now.  But, let me see if I can give an 
overview of how I've got things working.

I have an SSHConnection class that encapsulates the socket IO.  Whenever 
the socket reports that there's input available, I call 
SSHConnection->Read(void * buffer, uint nbytes).  Read() does some 
calculations to figure out exactly how much to read from the channel, 
does a libssh2_poll() to confirm that it's ready to read, then creates a 
new char[] buffer and calls libssh2_channel_read(channel, buffer, 
actualNBytes).  From there, you should be able to do whatever you want 
with the data.

Writing's pretty simple.  Whenever the user types, I call 
SSHConnection->Write(char* data, int len), which passes it on to 
libssh2_channel_write(channel, data, len).

My project is still pretty much a throwaway test with a lot of glitches, 
so I don't claim to have this perfected.  Still, hopefully that will 
give you a bit of an idea where to head.

Mark Erikson
http://www.isquaredsoftware.com

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
libssh2-devel mailing list
libssh2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libssh2-devel
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic