I've set up some code to read a shell stream back from OpenVMS, and this has been working perfectly, that is until I respond to the VMS requests for information.
For example VMS will output: <ESC>[c]
This is VMS basically asking what sort of terminal I am, so I respond with: <ESC>[?1;2c
Which means im a VT100
Great its working so far, but then VMS prompts with: <ESC>[6n
This is asking which line im on, so I respond with: <ESC>[24;80R
Which means im on row 24 column 80.
This is where the problem occures, now it simply repeats the same line over and over in the stream reader:
Anyway here's the code im using:
If I omit using: writer.WriteLine((char)27 + "[24;80R"); then the terminal waits around 8 seconds then it will output "Automation Test" just the once and its the end of the stream.
Thanks
For example VMS will output: <ESC>[c]
This is VMS basically asking what sort of terminal I am, so I respond with: <ESC>[?1;2c
Which means im a VT100
Great its working so far, but then VMS prompts with: <ESC>[6n
This is asking which line im on, so I respond with: <ESC>[24;80R
Which means im on row 24 column 80.
This is where the problem occures, now it simply repeats the same line over and over in the stream reader:
12/03/2015 08:13 []: Last interactive login on Wednesday, 11-MAR-2015 16:31:21.44
12/03/2015 08:13 []: Last non-interactive login on Wednesday, 11-MAR-2015 09:44:28.67
12/03/2015 08:13 []: System Detective is monitoring activity on this system.
12/03/2015 08:13 []: [c7[255;255H[6n8[c\Z[0c
12/03/2015 08:13 []: %SET-W-NOTSET, error modifying FTA1885:
12/03/2015 08:13 []: -SET-I-UNKTERM, unknown terminal type
12/03/2015 08:13 []: testdir is COUNTERDEV
12/03/2015 08:13 []: Initialising TEST Environment to COUNTERDEV
12/03/2015 08:13 []: [(0qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
12/03/2015 08:13 []: qq(B
12/03/2015 08:13 []: [#3 Using Test Search rules COUNTERDEV [0m
12/03/2015 08:13 []: [#4 Using Test Search rules COUNTERDEV [0m
12/03/2015 08:13 []: [(0qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
12/03/2015 08:13 []: qq(B
12/03/2015 08:13 []:
12/03/2015 08:13 []: Automation Test
12/03/2015 08:13 []: Automation Test
12/03/2015 08:13 []: Automation Test
12/03/2015 08:13 []: Automation Test
12/03/2015 08:13 []: Automation Test
12/03/2015 08:13 []: Automation Test
12/03/2015 08:13 []: Automation Test
12/03/2015 08:13 []: Automation Test
12/03/2015 08:13 []: Automation Test
12/03/2015 08:13 []: Automation Test
So basically "Automation Test" is the home directory when you look in. So kinda like C:\ where you go into command prompt.Anyway here's the code im using:
PasswordAuthenticationMethod authMethod = new PasswordAuthenticationMethod(username, password);
ConnectionInfo connectionInfo = new ConnectionInfo(session, username, authMethod);
client = new SshClient(connectionInfo);
client.Connect();
stream = client.CreateShellStream(@"vt100", 80, 24, 800, 600, 1024);
reader = new StreamReader(stream);
writer = new StreamWriter(stream);
writer.AutoFlush = true;
line = line + reader.ReadToEnd();
output = line.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
or (int i = startPoint; i < output.Length; i++)
{
//Server is asking which terminal type we are
if (output[i].Contains((char)27 + "[c")&termSet==false)
{
//we reply VT100
writer.WriteLine((char)27 + "[?1;2c");
termSet=true;
break;
}
if (value.Contains("[6n", StringComparison.CurrentCultureIgnoreCase))
{
//we reply
writer.WriteLine((char)27 + "[24;80R");
break;
}
}
//Its at this point which the reader will just continue to grow.
foreach(string line in output)
{
Console.WriteLine(line);
}
Does anyone know why this might be?If I omit using: writer.WriteLine((char)27 + "[24;80R"); then the terminal waits around 8 seconds then it will output "Automation Test" just the once and its the end of the stream.
Thanks