summaryrefslogtreecommitdiff
path: root/storage/ndb/src/cw/cpcc-win32/csharp/telnetclient/telnetClient.cs
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/src/cw/cpcc-win32/csharp/telnetclient/telnetClient.cs')
-rw-r--r--storage/ndb/src/cw/cpcc-win32/csharp/telnetclient/telnetClient.cs408
1 files changed, 408 insertions, 0 deletions
diff --git a/storage/ndb/src/cw/cpcc-win32/csharp/telnetclient/telnetClient.cs b/storage/ndb/src/cw/cpcc-win32/csharp/telnetclient/telnetClient.cs
new file mode 100644
index 00000000000..a7966947e1f
--- /dev/null
+++ b/storage/ndb/src/cw/cpcc-win32/csharp/telnetclient/telnetClient.cs
@@ -0,0 +1,408 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Data;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using System.IO;
+using System.Threading ;
+
+namespace NDB_CPC.telnetclient
+{
+ /// <summary>
+ /// Summary description for telnetClient.
+ /// </summary>
+ public class telnetClient
+ {
+ Char IAC = Convert.ToChar(255);
+ Char DO = Convert.ToChar(253);
+ Char DONT = Convert.ToChar(254);
+ Char WILL = Convert.ToChar(251);
+ Char WONT = Convert.ToChar(252);
+ Char SB = Convert.ToChar(250);
+ Char SE = Convert.ToChar(240);
+ const Char IS = '0';
+ const Char SEND = '1';
+ const Char INFO = '2';
+ const Char VAR = '0';
+ const Char VALUE = '1';
+ const Char ESC = '2';
+ const Char USERVAR = '3';
+ string m_strResp;
+
+ private ArrayList m_ListOptions = new ArrayList();
+ private IPEndPoint iep ;
+ private AsyncCallback callbackProc ;
+ private string address ;
+ private int port ;
+ private Socket s ;
+ private TextBox textBox1;
+ Byte[] m_byBuff = new Byte[32767];
+
+
+ public telnetClient(string ip, int p, TextBox tb)
+ {
+
+ address = ip;
+ port = p;
+ textBox1=tb;
+ IPHostEntry IPHost = Dns.Resolve(address);
+ string []aliases = IPHost.Aliases;
+ IPAddress[] addr = IPHost.AddressList;
+
+ try
+ {
+ // Create New Socket
+ s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ // Create New EndPoint
+ iep = new IPEndPoint(addr[0],port);
+ // This is a non blocking IO
+ s.Blocking = false ;
+ // Assign Callback function to read from Asyncronous Socket
+ callbackProc = new AsyncCallback(ConnectCallback);
+ // Begin Asyncronous Connection
+ s.BeginConnect(iep , callbackProc, s ) ;
+
+ }
+ catch(Exception eeeee )
+ {
+ MessageBox.Show(eeeee.Message , "Application Error!!!" , MessageBoxButtons.OK , MessageBoxIcon.Stop );
+ Application.Exit();
+ }
+ }
+
+ public void ConnectCallback( IAsyncResult ar )
+ {
+ try
+ {
+ // Get The connection socket from the callback
+ Socket sock1 = (Socket)ar.AsyncState;
+ if ( sock1.Connected )
+ {
+ // Define a new Callback to read the data
+ AsyncCallback recieveData = new AsyncCallback( OnRecievedData );
+ // Begin reading data asyncronously
+ sock1.BeginReceive( m_byBuff, 0, m_byBuff.Length, SocketFlags.None, recieveData , sock1 );
+ }
+ }
+ catch( Exception ex )
+ {
+ MessageBox.Show(ex.Message, "Setup Recieve callbackProc failed!" );
+ }
+ }
+
+
+ public void OnRecievedData( IAsyncResult ar )
+ {
+ // Get The connection socket from the callback
+ Socket sock = (Socket)ar.AsyncState;
+ // Get The data , if any
+ int nBytesRec = sock.EndReceive( ar );
+ if( nBytesRec > 0 )
+ {
+ string sRecieved = Encoding.ASCII.GetString( m_byBuff, 0, nBytesRec );
+ string m_strLine="";
+ for ( int i=0; i < nBytesRec;i++)
+ {
+ Char ch = Convert.ToChar(m_byBuff[i]);
+ switch( ch )
+ {
+ case '\r':
+ m_strLine += Convert.ToString("\r\n");
+ break;
+ case '\n':
+ break;
+ default:
+ m_strLine += Convert.ToString(ch);
+ break;
+ }
+ }
+ try
+ {
+ int strLinelen = m_strLine.Length ;
+ if ( strLinelen == 0 )
+ {
+ m_strLine = Convert.ToString("\r\n");
+ }
+
+ Byte[] mToProcess = new Byte[strLinelen];
+ for ( int i=0; i < strLinelen ; i++)
+ mToProcess[i] = Convert.ToByte(m_strLine[i]);
+ // Process the incoming data
+ string mOutText = ProcessOptions(mToProcess);
+ if ( mOutText != "" )
+ textBox1.AppendText(mOutText);
+
+ // Respond to any incoming commands
+ RespondToOptions();
+ }
+ catch( Exception ex )
+ {
+ Object x = this ;
+ MessageBox.Show(ex.Message , "Information!" );
+ }
+ }
+ else
+ {
+ // If no data was recieved then the connection is probably dead
+ Console.WriteLine( "Disconnected", sock.RemoteEndPoint );
+ sock.Shutdown( SocketShutdown.Both );
+ sock.Close();
+ Application.Exit();
+ }
+ }
+
+ private string ProcessOptions(byte[] m_strLineToProcess)
+ {
+ string m_DISPLAYTEXT ="";
+ string m_strTemp ="" ;
+ string m_strOption ="";
+ string m_strNormalText ="";
+ bool bScanDone =false;
+ int ndx =0;
+ int ldx =0;
+ char ch ;
+ try
+ {
+ for ( int i=0; i < m_strLineToProcess.Length ; i++)
+ {
+ Char ss = Convert.ToChar(m_strLineToProcess[i]);
+ m_strTemp = m_strTemp + Convert.ToString(ss);
+ }
+
+ while(bScanDone != true )
+ {
+ int lensmk = m_strTemp.Length;
+ ndx = m_strTemp.IndexOf(Convert.ToString(IAC));
+ if ( ndx > lensmk )
+ ndx = m_strTemp.Length;
+
+ if(ndx != -1)
+ {
+ m_DISPLAYTEXT+= m_strTemp.Substring(0,ndx);
+ ch = m_strTemp[ndx + 1];
+ if ( ch == DO || ch == DONT || ch == WILL || ch == WONT )
+ {
+ m_strOption = m_strTemp.Substring(ndx, 3);
+ string txt = m_strTemp.Substring(ndx + 3);
+ m_DISPLAYTEXT+= m_strTemp.Substring(0,ndx);
+ m_ListOptions.Add(m_strOption);
+ m_strTemp = txt ;
+ }
+ else
+ if ( ch == IAC)
+ {
+ m_DISPLAYTEXT= m_strTemp.Substring(0,ndx);
+ m_strTemp = m_strTemp.Substring(ndx + 1);
+ }
+ else
+ if ( ch == SB )
+ {
+ m_DISPLAYTEXT= m_strTemp.Substring(0,ndx);
+ ldx = m_strTemp.IndexOf(Convert.ToString(SE));
+ m_strOption = m_strTemp.Substring(ndx, ldx);
+ m_ListOptions.Add(m_strOption);
+ m_strTemp = m_strTemp.Substring(ldx);
+ }
+ }
+ else
+ {
+ m_DISPLAYTEXT = m_DISPLAYTEXT + m_strTemp;
+ bScanDone = true ;
+ }
+ }
+ m_strNormalText = m_DISPLAYTEXT;
+ }
+ catch(Exception eP)
+ {
+ MessageBox.Show(eP.Message , "Application Error!!!" , MessageBoxButtons.OK , MessageBoxIcon.Stop );
+ Application.Exit();
+ }
+ return m_strNormalText ;
+ }
+
+ void DispatchMessage(string strText)
+ {
+ try
+ {
+ Byte[] smk = new Byte[strText.Length];
+ for ( int i=0; i < strText.Length ; i++)
+ {
+ Byte ss = Convert.ToByte(strText[i]);
+ smk[i] = ss ;
+ }
+
+ IAsyncResult ar2 = s.BeginSend(smk , 0 , smk.Length , SocketFlags.None , callbackProc , s );
+ s.EndSend(ar2);
+ }
+ catch(Exception ers)
+ {
+ MessageBox.Show("ERROR IN RESPOND OPTIONS");
+ }
+ }
+
+ void RespondToOptions()
+ {
+ try
+ {
+ string strOption;
+ for ( int i=0; i < m_ListOptions.Count; i++)
+ {
+ strOption = (string)m_ListOptions[i];
+ ArrangeReply(strOption);
+ }
+ DispatchMessage(m_strResp);
+ m_strResp ="";
+ m_ListOptions.Clear();
+ }
+ catch(Exception ers)
+ {
+ MessageBox.Show("ERROR IN RESPOND OPTIONS");
+ }
+ }
+ void ArrangeReply(string strOption)
+ {
+ try
+ {
+
+ Char Verb;
+ Char Option;
+ Char Modifier;
+ Char ch;
+ bool bDefined = false;
+
+ if(strOption.Length < 3) return;
+
+ Verb = strOption[1];
+ Option = strOption[2];
+
+ if ( Option == 1 || Option == 3 )
+ {
+ // case 1: // Echo
+ // case 3: // Suppress Go-Ahead
+ bDefined = true;
+ // break;
+ }
+
+ m_strResp += IAC;
+
+ if(bDefined == true )
+ {
+ if ( Verb == DO )
+ {
+ // case DO:
+ ch = WILL;
+ m_strResp += ch;
+ m_strResp += Option;
+ // break;
+ }
+ if ( Verb == DONT )
+ {
+ ch = WONT;
+ m_strResp += ch;
+ m_strResp += Option;
+ // break;
+ }
+ if ( Verb == WILL )
+ {
+ ch = DO;
+ m_strResp += ch;
+ m_strResp += Option;
+ //break;
+ }
+ if ( Verb == WONT)
+ {
+ ch = DONT;
+ m_strResp += ch;
+ m_strResp += Option;
+ // break;
+ }
+ if ( Verb == SB)
+ {
+ Modifier = strOption[3];
+ if(Modifier == SEND)
+ {
+ ch = SB;
+ m_strResp += ch;
+ m_strResp += Option;
+ m_strResp += IS;
+ m_strResp += IAC;
+ m_strResp += SE;
+ }
+ // break;
+ }
+ }
+ else
+ {
+ // switch(Verb)
+ // {
+ if ( Verb == DO )
+ {
+ ch = WONT;
+ m_strResp += ch;
+ m_strResp += Option;
+ // break;
+ }
+ if ( Verb == DONT)
+ {
+ ch = WONT;
+ m_strResp += ch;
+ m_strResp += Option;
+ // break;
+ }
+ if ( Verb == WILL)
+ {
+ ch = DONT;
+ m_strResp += ch;
+ m_strResp += Option;
+ // break;
+ }
+ if ( Verb == WONT)
+ {
+ ch = DONT;
+ m_strResp += ch;
+ m_strResp += Option;
+ // break;
+ }
+ }
+ }
+ catch(Exception eeeee )
+ {
+ MessageBox.Show(eeeee.Message , "Application Error!!!" , MessageBoxButtons.OK , MessageBoxIcon.Stop );
+ Application.Exit();
+ }
+
+ }
+
+ private void textBox1_KeyPress_1(object sender, System.Windows.Forms.KeyPressEventArgs e)
+ {
+ if ( e.KeyChar == 13 )
+ {
+ DispatchMessage("\r\n");
+ }
+ else
+ if ( e.KeyChar == 8 )
+ {
+ try
+ {
+// string mtmp = textBox1.Text.Substring(0,textBox1.Text.Length-1);
+// textBox1.Text = "" ;
+ }
+ catch(Exception ebs)
+ {
+ MessageBox.Show("ERROR IN BACKSPACE");
+ }
+ }
+ else
+ {
+ string str = e.KeyChar.ToString();
+ DispatchMessage(str);
+ }
+ }
+
+
+ }
+}