Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[dsdp-tm-dev] RE: Target Management Project - Undergraduate Level thesis to Politecnico di Milano

Hi Francesco,
 
Now, could I get outputStream and InputStream of the process (with getOutputStream and getInputStream respectively) and join them to my VT100Terminal through getOutputStream and getInputStream of new IhostShell interface?
Yes this seems exactly like the right thing to do!
 
The one thing to consider or decide will be, who should do the character
encoding: The Service (LocalHostShell / TelnetHostShell / SshHostShell)
or the Terminal.
 
You may know that the plain OutputStream just writes bytes and byte
arrays, whereas Java uses Unicode representation of characters internally.
At some point, a conversion needs to be made to convert Unicode into
the Shell's understanding of how characters are represented by bytes.
In the LocalHostShell, the OutputStreamWriter does exactly that: It is
the bridge between the Unicode characters and the shell's bytes.
 
If you look at the SshHostShell constructor, you see how it constructs
the OutputStreamWriter based on the specfied encoding, and passes
it into the SshShellWriterThread.
 
I'm not yet exactly sure whether it's better to surface the internal
(byte-oriented) outoutStream through the new IHostShell interface,
or better surface the (character-oriented) Writer. My feeling is that
the outputStream will be better, because this allows for verbatim
characters to be sent, which is necessary when using a program
like lrzsz to transfer files to the remote through x/y/zmodem protocol.
 
The downside of surfacing the outputStream is that the Terminal
needs to care for proper encoding itself, both on the input and
on the output. Currently, the terminal does not care for encodings,
so that would be another small feature to be added to the Terminal
when it's not provided from RSE.
Probably it would even make sense to surface _both_ the byte/streams
based interface _and_ the character/writer based interface.
 

Cheers,
--
Martin Oberhuber
Wind River Systems, Inc.
Target Management Project Lead, DSDP PMC Member
http://www.eclipse.org/dsdp/tm

 


From: Francesco Crivelli [mailto:francescocriv@xxxxxxxxxxx]
Sent: Wednesday, December 05, 2007 11:13 AM
To: Oberhuber, Martin
Subject: RE: Target Management Project - Undergraduate Level thesis to Politecnico di Milano

Hi martin

in the LocalHostShell class which extends IHostShell there's a writeToShell method:


public void writeToShell(String command)
    {
        _shellThread.sendInput(command);
    }

where _shellThread is a LocalShellThread istance. Well, in the _shellThread there's  a "Process"

Process _theProcess = Runtime.getRuntime().exec(....);

and "writeToShell" directly writes into its outputStream:

public void sendInput(String input)
    {
        if (!_isDone)
        {
            OutputStream output = _theProcess.getOutputStream();

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));

            try
            {

                writer.write(input);
                writer.write('\n');
                writer.flush();
.....

Now, could I get outputStream and InputStream of the process (with getOutputStream and getInputStream respectively) and join them to my VT100Terminal through getOutputStream and getInputStream of new IhostShell interface?

I am studying the other classes such as SshHostShell, DStoreHostShell and TelnetHostShell to find a way to modify their wiriteToShell method. 


Thanks and greetings,

Crivelli Francesco



> Date: Thu, 29 Nov 2007 09:31:21 +0100
> From: martin.oberhuber@xxxxxxxxxxxxx
> To: francescocriv@xxxxxxxxxxx
> Subject: Re: Target Management Project - Undergraduate Level thesis to Politecnico di Milano
>
> You have to change existing RSE code, i.e. change the current IHostShell
> interface
> as well as SshHostShell / DStoreHostShell / TelnetHostShell implementations.
> Perhaps I was not clear on that when saying that an API change is required.
>
> You'll need to check out RSE Source Code from CVS, see
> http://www.eclipse.org/dsdp/tm/development/cvs_setup.php
>
> I was aware of that from the very beginning, and I think having to change
> existing API is one important part of learning for your thesis.
>
> Cheers,
> Martin
>

Back to the top