Click here to Skip to main content
6,595,444 members and growing! (17,903 online)
Email Password   helpLost your password?
General Programming » Internet / Network » General     Intermediate License: The Code Project Open License (CPOL)

Terminal Control Library (C# VT100/ANSI/XTERM SSH Telnet)

By Sardaan Frostreaver

This is based on Poderosa Project http://sourceforge.net/projects/poderosa/
C#, VB.NET 2.0, WinXP, Vista, WinForms, VS2005, Dev
Version:2 (See All)
Posted:6 Oct 2007
Updated:2 Jan 2009
Views:37,558
Bookmarked:36 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
14 votes for this article.
Popularity: 4.48 Rating: 3.91 out of 5
1 vote, 7.1%
1

2
3 votes, 21.4%
3
3 votes, 21.4%
4
7 votes, 50.0%
5

Introduction

My original project can be found here.

I've been trying for a while to come up with a .NET control that would handle VT100/ANSI formatting and connect to SSH2 servers.

I've been through the commercial ones and still haven't found one that suited me.

My last project was based on Granados SSH library (open source SSH .NET implementation) and AckTerm (open source partially completed VT100 control).

Background

This library is an attempt at creating a library based on the "Poderosa" project which can be found here.

Poderosa IMO is the best terminal emulator. It's open source, and is better than the commercial clients. Go check it out for yourself, it's worth it. You can find the original Poderosa CSV source there.

I tried for a couple of weeks to encapsulate components of Poderosa, but the code comments are all in Japanese and I couldn't find any good docs that described the source code. The developer community for Poderosa also appears to be all Japanese, so I felt pretty much on my own.

Using the Code

What I pretty much did here was encapsulate the entire Poderosa application into a library. Then I exposed certain elements so an application developer can simply drop the "Terminal Control.dll" into his/her app and have a control that acts like you would expect any .NET control to act.

This code was written using Visual Studio .NET 2005 Professional and requires .NET Framework 2.0.

Points of Interest

The Poderosa solution is made up of 5 projects:

  1. Container - This is the actual Poderosa application
  2. Terminal - A library providing Telnet capabilities as well as the Terminal Emulation
  3. Common - Code that is shared between the Poderosa application and the Port Forwarding Tool
  4. Granados - SSH library that supports just about every feature of SSH
  5. Portforwarding - A standalone application (uses Terminal, Common, and Granados libraries) that provides SSH portforwarding functionality

First Step

What I've done with my library, was to change "Container" into a Library output, and implement a public class based on System.Windows.Forms.Control.

Second Step

The first time my class ("WalburySoftware.TerminalControl") is instanced, it runs Poderosa code:

GApp.Run(args); GApp._frame._multiPaneControl.InitUI(null, GApp.Options);
GEnv.InterThreadUIService.MainFrameHandle = GApp._frame.Handle; 

Poderosa has lots and lots and lots of static variables. Until I can get the time and motivation to go through them and make the appropriate changes, these variables will need to be initialized before you can use any of Poderosa's classes.

Third Step

If you look at the method Poderosa.ConnectionCommandTarget.Resize, you'll see the line:

if(GEnv.Connections.FindTag(_connection).ModalTerminalTask!=null) 
	return CommandResult.Denied 

This throws an exception. I took it out because it doesn't do anything for my library. I'm not sure what the ModalTerminalTask variable is used for. If you include that line, the terminal will not resize properly.

Final Step

Now we are free to create and use TerminalPanes as we need.

You'll see the steps in WalburySoftware.TerminalControl.Connect() that connect the TerminalPane to an SSH2 connection.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Sardaan Frostreaver


Member

Location: United States United States

Other popular Internet / Network articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 39 (Total in Forum: 39) (Refresh)FirstPrevNext
GeneralUnable to connect to SSH session Pinmemberagohil23:57 11 Oct '09  
GeneralHow to get the information in the terminal into a strin PinmemberMember 338263812:38 4 Sep '09  
QuestionVT100 - PF1 to PF4 key PinmemberJean-Christophe GOFFIN23:39 31 Aug '09  
Generalcontrol graphic with terminal Pinmemberparabole3:41 3 Aug '09  
QuestionRun Command Without UI Pinmembermahdavi5:40 26 Jun '09  
GeneralHow export content to file Pinmemberprcjunior19:44 14 Jun '09  
GeneralRead output from the terminal Pinmembernamalpk11:03 10 Jun '09  
Generalproblem while drawing RightToLeft Chars [modified] PinmemberTamer Fahmy0:57 26 Apr '09  
GeneralVI error message. PinmemberWMBWMB8:21 5 Feb '09  
GeneralVI editor via this Terminal Control PinmemberWMBWMB4:31 5 Feb '09  
QuestionNullReferenceException while running C-Sharp Example Pinmembergvcrash4:13 3 Feb '09  
AnswerRe: NullReferenceException while running C-Sharp Example Pinmemberjbeersm7:46 10 Feb '09  
AnswerRe: NullReferenceException while running C-Sharp Example Pinmembergvcrash0:15 20 Feb '09  
QuestionRe: NullReferenceException while running C-Sharp Example PinmemberPCBuilder18:19 8 Mar '09  
QuestionFont PinmemberScotty Couturier10:31 21 Oct '08  
AnswerRe: Font PinmemberSardaan Frostreaver5:54 26 Dec '08  
AnswerRe: Font PinmemberSardaan Frostreaver2:55 2 Jan '09  
QuestionVT100 or 3270 App to do some tests PinmemberManuel6423:51 8 Jul '08  
AnswerRe: VT100 or 3270 App to do some tests PinmemberSardaan Frostreaver5:50 26 Dec '08  
GeneralPonderosa version 4.0.2 PinmemberWMBWMB7:37 12 Jun '08  
GeneralRe: Ponderosa version 4.0.2 PinmemberSardaan Frostreaver6:01 26 Dec '08  
GeneralWait for reply from Server Pinmembercode30058:33 30 May '08  
GeneralRe: Wait for reply from Server PinmemberKevin James7:28 17 Sep '08  
GeneralRe: Wait for reply from Server PinmemberSardaan Frostreaver5:46 26 Dec '08  
GeneralRe: Wait for reply from Server Pinmembercarlsiy3:05 13 Sep '09  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 2 Jan 2009
Editor: Deeksha Shenoy
Copyright 2007 by Sardaan Frostreaver
Everything else Copyright © CodeProject, 1999-2009
Web19 | Advertise on the Code Project