Quantcast
Channel: SSH.NET Library
Viewing all 2955 articles
Browse latest View live

New Post: SftpClient.Exists and SftpClient.DownloadFile CREATE a file on server if file does not exist

$
0
0
I managed to get it to work last night. In my case, for some reason, when using the pre-compiled .dll downloaded from here, it wasn't working. I ended up removing the reference to the DLL and re-referenced it to the project instead. Hoping that I could troubleshoot further with the project loaded. Once I re-compiled everything, the Exists() function works now.

New Post: Zlib compression support

$
0
0
Will SSH.NET support Zlib compression anytime soon? A SFTP server that I connect to require Zlib compression and SSH.NET gives error "Compression algorithm not found."

Is there a way for client to tell server disabling compression for the connection?

I would be happy to try out if there is an alpha version available. Thanks.

New Post: Strong name

$
0
0
I also want to use the assembly referenced from an assembly that is signed. I'd like to put in a request for you to sign the released assemblies. It allows people like us to download the binary as is and not have to keep a copy of the source code that we build ourselves. Thanks.

Closed Issue: Orphaned threads when port forwarding [1522]

$
0
0
I'm not sure if this is the same issue as [here](http://sshnet.codeplex.com/workitem/1436).

In the situation where a port forward has been established and actively used, therefore a listener thread has been created, if the network is disconnected (by pulling out the cable) and reconnected sometime later then the internal thread will remain there even after everything else has been disposed properly. This causes problems, especially when trying to exit the application since it will hang.

With a fair amount of Console.WriteLineing it was established that the internal listener thread, consisting mostly of the Bind function in ChannelDirectTcpip, eventually exits its main loop correctly but then stalls at this point forever (well at least until a kill -9 is issued):

```
System.Threading.WaitHandle.WaitAny(new WaitHandle[] { this._channelEof });
```

I do not know much about the inner workings of SSH.NET and therefore do not know the best solution to the problem, but a workaround that seems to do the job for us is to simply allow that wait to timeout:

```
System.Threading.WaitHandle.WaitAny(new WaitHandle[] { this._channelEof }, 5000);
```

After that, the inner thread exits properly and no more hangs on exit.

Closed Issue: Process terminated due to unhandled exception in Finalize / Destructor [1514]

$
0
0
__My application encountered the following unhandled exception that caused the process to exit:__

Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: Renci.SshNet.Common.SshConnectionException
Stack:
at Renci.SshNet.Session.SendMessage(Renci.SshNet.Messages.Message)
at Renci.SshNet.Channels.Channel.SendMessage(Renci.SshNet.Messages.Connection.ChannelCloseMessage)
at Renci.SshNet.Channels.Channel.Close(Boolean)
at Renci.SshNet.Channels.ChannelSession.Close(Boolean)
at Renci.SshNet.Channels.Channel.Dispose(Boolean)
at Renci.SshNet.Channels.ChannelSession.Dispose(Boolean)
at Renci.SshNet.Sftp.SubsystemSession.Dispose(Boolean)
at Renci.SshNet.Sftp.SftpSession.Dispose(Boolean)
at Renci.SshNet.Sftp.SubsystemSession.Finalize()

__This occurred just over 60 seconds _after_ the Dispose method on SftpClient was called which generated a very similar exception (handled and logged by my code):__

2013-02-16 15:41:32.9693 Error SftpFileTransfer Renci.SshNet.Common.SshConnectionException,Client not connected., at Renci.SshNet.Session.SendMessage(Message message)
at Renci.SshNet.Channels.Channel.SendMessage(ChannelCloseMessage message)
at Renci.SshNet.Channels.Channel.Close(Boolean wait)
at Renci.SshNet.Channels.ChannelSession.Close(Boolean wait)
at Renci.SshNet.Channels.Channel.Dispose(Boolean disposing)
at Renci.SshNet.Channels.ChannelSession.Dispose(Boolean disposing)
at Renci.SshNet.Sftp.SubsystemSession.Dispose(Boolean disposing)
at Renci.SshNet.Sftp.SftpSession.Dispose(Boolean disposing)
at Renci.SshNet.SftpClient.Dispose(Boolean disposing)
at Renci.SshNet.BaseClient.Dispose()
at BusinessObjects.SftpFileTransfer.DownloadFiles()


__It looks like ~SubsystemSession() is causing an attempt to send a message over the channel(!) due to the chaining of calls to the various Dispose() methods.__

Closed Issue: SCP Can't Upload Rooted Directories [1511]

$
0
0
As per the discussion [here](http://sshnet.codeplex.com/discussions/284021), SCP doesn't currently work when uploading rooted folders.

Closed Issue: Invalid handling of http proxy server response [1509]

$
0
0
Hi,

I did find a problem when testing the assembly with our squid 3.0 proxy. I receive the message, that Result cannot be called on a failed match. Therefore I've extended the code in Session.cs a little bit:

if (statusCode == 200 && string.IsNullOrEmpty(response))
{
// Once all HTTP header information is read, exit
break;
}
else
{
string reasonPhrase = string.Empty;

try
{
if (match.Success)
reasonPhrase = match.Result("${reasonPhrase}");
}
catch (Exception ex)
{
reasonPhrase = string.Empty;
}

Now the following line

throw new ProxyException(string.Format("HTTP: Status code {0}, Reason \"{1}\"", statusCode, reasonPhrase));

Does at least return the error code (not yet the fault reason; in this case ERR_ACCESS_DENIED)

In fact the code received a 403 status code from the proxy:

SshNet.Logging Verbose: 1 : Initiating connect to 'yyy.xxx.zzz.ww:22'.

HTTP/1.0 403 Forbidden
Server: squid/3.0.STABLE16-RC1
Mime-Version: 1.0
Date: Wed, 13 Feb 2013 14:15:06 GMT
Content-Type: text/html
Content-Length: 1008
Expires: Wed, 13 Feb 2013 14:15:06 GMT
X-Squid-Error: ERR_ACCESS_DENIED 0
X-Cache: MISS from app-proxy-3.xxxx.xxx
Via: 1.0 app-proxy-3.xxxx.xxx (squid/3.0.STABLE16-RC1)
Proxy-Connection: close

The thread 0xa2c has exited with code 0 (0x0).

Kind regards

Johannes

Closed Issue: Dispose() should not leave running threads behind! [1436]

$
0
0
Hi. I have found a really hard to find bug that is very consistently repeatable. Before getting into the details, I think it should be noted that this issue will be resolved if the Renci.SshNet.SshClient.Dispose() and the Renci.SshNet.ForwardedPortLocal.Dispose() (and anything else) actually and honestly dispose everything. But the problem is that after calling those, there are still threads hanging around doing stuff and sometimes they get stuck badly. It looks like someone went crazy with anonymous methods and launching Thread Tasks without leaving a handle to the Thread for management by the parents to kill them when disposed. And I found in Session.NET40.cs this line: Task.Factory.StartNew(action, TaskCreationOptions.LongRunning);which I changed to: Task.Factory.StartNew(action, TaskCreationOptions.AttachedToParent);but it had no positive impact.I have seen posts on this site about Disconnect doing funny stuff and also about the Timeouts not seeming to disconnect things, and some other things like that. I bet they are related to getting over your head in multi-threading or events.The result is that sometimes I still have the process listening on the local port way after the Dispose() is called. And also the Connection is sitting there too. Usually this happens when eliminating both the Forwards and the Connection, but sometimes even just the Forwards. The call to the Forward's Disconnect() and Dispose() when the problem happens will take a much longer time, but then sadly continue going after seemingly giving up.When I pause I can see 2 Renci threads hanging around and stuck at these points:ForwardedPortLocal.NET.cs line 34: var socket = this._listener.AcceptSocket();Session.cs line 1575: var message = this.ReceiveMessage();I have tested this A LOT!!! trying to find ways around it. It happens in the code base (pulled today 12/5/12), it happens in .Net 4.0 DLL from a month ago, and it happens from .Net 3.5 DLL pulled today also. Another result is that sometimes the situation causes the app to die a horrible death with:System.AggregateException was unhandled Message=A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread. Source=mscorlib StackTrace: at System.Threading.Tasks.TaskExceptionHolder.Finalize() InnerException: System.NullReferenceException Message=Object reference not set to an instance of an object. Source=Renci.SshNet StackTrace: at Renci.SshNet.ForwardedPortLocal.b__0() at System.Threading.Tasks.Task.InnerInvoke() at System.Threading.Tasks.Task.Execute()WHEN DOES THIS HAPPEN:Here is the kicker. I wrote an app to manage SSH tunnels. And when I first was having problems with Renci, I made it so I can implement other libraries and other means. Via a config file I can add and remove tunnels and have multiple connections. The process reads the config file periodically and applies the changes found. So I can have a connection using Renci, another using Chilkat, another using Plink, Tunnelier, and that's all I finished implementing so far.If I have all Renci connections, it seems that I can add and remove tunnels and connections a bunch of times and not have an issue. (however usually there is a Connection (SshClient) that hangs around in CLOSE_WAIT state). If I bring say Chilkat into the mix, things still are OK.. and I can replace all active connections to one of the other implementations.The problems start happening when I bring in Plink or Tunnelier. They are launched using System.Process. They close themselves properly from what I see in memory and via TCP connections and SSH server. When I have a Renci and Plink (let's say) connection, it is then that if I start removing tunnels from Renci I might have issues. If I start removing the Connection, I almost always have an issue.The issue is that when Renci is told to close up shop, it stalls for a while, and then the code moves on while leaving the listeners in place (though of course not working). And they stay there it seems indefinitely. And I'm also using System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners() to look at the listeners and it's there. It's because there are those silly Renci threads that are hanging around for some reason trying to read from the socket.And I have verified that the Connection replacement (like Plink) is not actually opening up that tunnel. I have my app now specifically checks for the Active listeners before moving tunnels to another connection.This may be a very complicated specific bug to find, but I think the real root of the problem and the much easier one to fix, is that when you Dispose(), it really should be DISPOSED, leaving no threads behind. I have also verified that calling SshClient.Dispose() does not DISCONNECT, so you have to call both. I think also similar thing with the Forward.. if you don't call Stop().This is how I stop the connections and port forwards: foreach (ForwardedPort forward in this.sshConnection.ForwardedPorts.ToList()) { this.sshConnection.RemoveForwardedPort(forward); Console.WriteLine("just finished removing tunnel"); } this.sshConnection.Disconnect(); Console.WriteLine("just finished conn Disconnect()"); this.sshConnection.Dispose(); Console.WriteLine("just finished conn Dispose()"); public void Dispose() { if (this.localForward != null) { this.localForward.Stop(); Console.WriteLine("just finished tunnel Stop()"); this.localForward.Dispose(); Console.WriteLine("just finished tunnel Disconnect()"); //System.Threading.Thread.Sleep(2000); } }

Closed Issue: SCP : Missing files when using DirectoryUpload [1382]

$
0
0
Hi,I have the following environment:- Win7 / 64- .NET 3.5- MPC-Target :OpenSSH_6.0p1, OpenSSL 1.0.0j 10 May 2012- SSH.NET commit 19813I want to upload a directory structure (recursive, depth = 2) from the PC to a MPC basedLinux remote system. The total amount of data is about 8MB with 23 files from55 bytes to 4MB.Calling mScp.Upload(new DirectoryInfo(localDir), remoteDir) does not result anyerror and the Uploading event shoes uploading all files. But after Upload() returnedThere are a random number of missing files on the target (between 1 and 5).It tried the same with a PC based Linux as target what resulted in the same behaviour(OpenSSH_5.8p1 Debian-7ubuntu1, OpenSSL 1.0.0e 6 Sep 2011). It seems theproblem is caused anywhere within SSH.NET.Does anyone have a solution?Extension:I tried to workaround by replacing Upload(new DirectoryInfo(...)) by several singlecalls of Upload(new FileInfo(...)). This worked but is too slow for my application.

Closed Feature: File Transfer Progress [1324]

$
0
0
** Added Issue as status PROPOSED type FEATURE **This is a discussion thread. Is there any interest in including a way to expose current transfer progress to an application? For example, imagine a user wanting to upload a file could pass in an implementation of:    public interface IFileTransferHandler{ ulong BytesRead { get; }  void IncrementBytesRead(ulong bytes);  void TransferCompleted();}    Whenever the callback for Write returns confirming that the bytes were written, IncrementReadBytes would be called and whenever the file is fully uploaded TransferCompleted gets called. Since we're passing in streams, there's no objective way to determine the file size so that would have to be provided in the implementation, if at all. All you really need to do is add a field for that interface in SftpFileStream and then pass it to all calls to RequestWrite and then create some new constructors so that the interface can be passed along from the publicly exposed methods (I've managed to build a sample implementation for sftp upload, so this method works). The only issue is if the handler throws an exception. Since it's asynchronous the debugger displays the stack trace in the wrong place and could confuse developers.

Closed Issue: Unobserved exception rethrown by finalizer thread [1298]

$
0
0
Hi, There is an unhandled System.AggregateException in a worker thread within SSH.NET version 18974 that causes the container application to crash. The exception should be caught and rethrown to the caller. This error occurs when the connection between the SHH client and server is flaky, i.e. it comes on and off. I added an AppDomain unhandled exception handler to log the exception. Here is the stack trace of the exception: ERROR: SubsystemSession.cs(128): Object reference not set to an instance of an object.ERROR: SubsystemSession.cs(169): Renci.SshNet.Sftp.SubsystemSession.Session_ErrorOccured(Object sender, ExceptionEventArgs e) failed.ERROR: System.EventHandler`1.Invoke(Object sender, TEventArgs e) failed.ERROR: Session.cs(1929): Renci.SshNet.Session.RaiseError(Exception exp) failed.ERROR: Session.cs(1592): Renci.SshNet.Session.MessageListener() failed.ERROR: Session.cs(522): Renci.SshNet.Session.b__14() failed.ERROR: System.Threading.Tasks.Task.InnerInvoke() failed.ERROR: System.Threading.Tasks.Task.Execute() failed.ERROR: A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.ERROR: Application domain unhandled exception. I am not too familar with Tasks, but I suspect the error could be fixed by adding a catch block to the try block at Session.cs, line 520, and rethrow the exception. I am posting this while I am trying to fix the issue in case someone else can help. Thanks, Robert

New Post: Zlib compression support

$
0
0
I followed the last comment mentioned in Issue 219, and I am able to get zlib compression working. Thanks olegkap! By the way, in addition to uncommenting lines in Zlibstream.cs, I also have to update variable CompressionAlgorithms in ConnectionInfo.cs.

Commented Issue: Exception thrown on disconnect [1561]

$
0
0
If SshClient.Disconnect() is called just after the connected server is no longer available an exception occurs. Looks like there is a race condition on calling Disconnect. Checks are made for a connection before a DisconnectMessage is sent to the server but the server could be disconnected in between the time that the connection check is done and the message is sent. I have a scenario where this can happen quite easily.

I understand that I could put a try catch around the SshClient.Disconnect call but it seems like the better place for the try catch would be in the session class where the disconnect message is being sent. If an exception is thrown during a disconnect it could just be ignored.
Comments: ** Comment from web user: Mister_Goodcat **

Hi.

I seem to have the same or at least a related problem, however the consequences are a lot more fatal on my end. Scenario here:

* I connect to a remote server to invoke a command that gracefully shuts down the services there and then turns off the device (it's a NAS). That means that the SSH service is shut down on the server side when I'm still connected.
* On the client, I see two things: first of all the callback of the asynchronously executed command is never invoked, which I think is not expected. I would expect the command to finish and throw an exception when I invoke the EndExecute method in my callback. The only possibility to get notified about the disconnect is to hook the ErrorOccurred event on the client.
* When I try to Disconnect() or Dispose() in that event handler, I seem to get the same race condition, however in my case execution simply hangs and never continues (looks like a dead lock to me, haven't looked at the actual code).

This behavior is fatal on my dev machine when I debug my code in Visual Studio 2012: execution hangs as soon as I invoke Disconnect(), and when I then stop debugging (Shift+F5) __Windows 8 crashes with a BSOD__ telling me the process has still locked pages. I could reproduce this behavior three times in a row after clean reboots.

Running the application outside of Visual Studio does not result in a BSOD, however the thread my code executes on simply dies and never recovers until the process is shut down.

I still think your library is an excellent project and would like to thank you for it; if you could fix that problem, it would be perfect for my use case.

-Peter

Commented Issue: Unhandled exception during SftpClient Dispose [1581]

$
0
0
We are facing an unhandled exception during Dispose of the SftpClient.

2013-05-13 12:54:22,711 [2] FATAL - AppDomain.UnhandledException
Renci.SshNet.Common.SshConnectionException: Client not connected.
at Renci.SshNet.Session.SendMessage(Message message)
at Renci.SshNet.Channels.Channel.Close(Boolean wait)
at Renci.SshNet.Channels.ChannelSession.Close(Boolean wait)
at Renci.SshNet.Channels.Channel.Dispose(Boolean disposing)
at Renci.SshNet.Sftp.SubsystemSession.Dispose(Boolean disposing)
at Renci.SshNet.Sftp.SftpSession.Dispose(Boolean disposing)
at Renci.SshNet.SftpClient.Dispose(Boolean disposing)
at Renci.SshNet.BaseClient.Finalize()

This happens when the connection to the Ssh server is lost and affects our ability to gracefully handle situations when servers/connectivity goes down. O

The solution I suggest to swallow any exceptions coming from SftpClient.Dispose() as follows. Not pretty but as a general rule, Dispose shouldnt be throwing exceptions, unless such exceptions are symtomatic of a more serious problem.

Cheers

protected override void Dispose(bool disposing)
{
try
{
if (this._sftpSession != null)
{
this._sftpSession.Dispose();
this._sftpSession = null;
}

if (this._disposeConnectionInfo)
((IDisposable)this.ConnectionInfo).Dispose();

base.Dispose(disposing);
}
catch
{
// swallow it
}
}
Comments: ** Comment from web user: Mister_Goodcat **

Hi. I think your problem, that of user "pmilin" and mine are similar and/or related, see:

https://sshnet.codeplex.com/workitem/1561

In my case, I am _not_ able to solve the problem with catching exceptions (for details see the above work item).

New Post: ExpectAction Problem

$
0
0
Is it correct to assume that only two "choice" can be used in an ExpectAction?

I'm trying to issue a traceroute command on a cisco router without the host specified. This causes the CLI to ask for additional information, including target and source host. A total of 10 questions are asked before the command is successfully executed.

I thought I could just chain ExpectActions as so:
 ss.Expect(
                            new ExpectAction(@"Protocol \[ip\]: ", (s) =>
                                {
                                    ss.WriteLine("ip");
                                    _reply += s;
                                }),
                            new ExpectAction(@"Target IP address: ", (s) =>
                                {
                                    ss.WriteLine(dIpAddress);
                                    _reply += s;
                                }),
                            new ExpectAction(@"Source address: ", (s) =>
                                {
                                    ss.WriteLine(sIpAddress);
                                    _reply += s;
                                }),
                            new ExpectAction(@"Numeric display \[n\]: ", (s) =>
                                {
                                    ss.WriteLine("n");
                                    _reply += s;
                                }),
                            new ExpectAction(@"Timeout in seconds [3]: ", (s) =>
                                {
                                    ss.WriteLine("3");
                                    _reply += s;
                                }),
                            new ExpectAction(@"Probe count [3]: ", (s) =>
                                {
                                    ss.WriteLine("3");
                                    _reply += s;
                                }),
                            new ExpectAction(@"Minimum Time to Live [1]: ", (s) =>
                                {
                                    ss.WriteLine("1");
                                    _reply += s;
                                }),
                            new ExpectAction(@"Maximum Time to Live [30]: ", (s) =>
                                {
                                    ss.WriteLine("30");
                                    _reply += s;
                                }),
                            new ExpectAction(@"Port Number [33434]: ", (s) =>
                                {
                                    ss.WriteLine("33434");
                                    _reply += s;
                                }),
                            new ExpectAction(@"Loose, Strict, Record, Timestamp, Verbose[none]: ", (s) =>
                                {
                                    ss.WriteLine(" ");
                                    _reply += s;
                                }),
                            new ExpectAction(new Regex(@"\\*  \\*  \\*"), (s) =>
                                {
                                    _reply = s;
                                    _reply += s;
                                })
                            );
However, only the first two are ever processed.

I assume I'm doing this wrong. I appreciate any input.

Commented Issue: Exception thrown on disconnect [1561]

$
0
0
If SshClient.Disconnect() is called just after the connected server is no longer available an exception occurs. Looks like there is a race condition on calling Disconnect. Checks are made for a connection before a DisconnectMessage is sent to the server but the server could be disconnected in between the time that the connection check is done and the message is sent. I have a scenario where this can happen quite easily.

I understand that I could put a try catch around the SshClient.Disconnect call but it seems like the better place for the try catch would be in the session class where the disconnect message is being sent. If an exception is thrown during a disconnect it could just be ignored.
Comments: ** Comment from web user: winkledumpling **

I believe this is the same issue as
https://sshnet.codeplex.com/workitem/1581

New Post: Odd reoccurring exception

$
0
0
Apologies for digging up an old thread, but I'm getting a similar issue.. but only when running on 64-bit (havent seen it on 32-bit OS so far). It's 100% reproducible on 64-bit, so hopefully we can track it down:

Application: NodeService.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
at Renci.SshNet.ShellStream.Channel_DataReceived(System.Object, Renci.SshNet.Common.ChannelDataEventArgs)
at Renci.SshNet.Channels.Channel.OnData(Byte[])
at Renci.SshNet.Channels.Channel.OnChannelData(System.Object, Renci.SshNet.MessageEventArgs`1<Renci.SshNet.Messages.Connection.ChannelDataMessage>)
at Renci.SshNet.Session.OnChannelDataReceived(Renci.SshNet.Messages.Connection.ChannelDataMessage)
at Renci.SshNet.Session.HandleMessage(Renci.SshNet.Messages.Connection.ChannelDataMessage)
at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Runtime.CompilerServices.CallSite, System.__Canon, System.__Canon)
at Renci.SshNet.Session.HandleMessageCore(Renci.SshNet.Messages.Message)
at Renci.SshNet.Session.MessageListener()
at Renci.SshNet.Session.<Connect>b__4()
at Renci.SshNet.Session+<>c__DisplayClass3d.<ExecuteThread>b__3c(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()

Machine was running Windows 7 64-bit, with .Net 4.5.

I'll try installing VS on the machine and see if I can get any insight.

thx
Steve

Created Unassigned: Infinite loop in SocketReadLine Method [1582]

$
0
0
First of all you are doing a great job, Thank's for that.
Where was an infinite loop ,do {..} while {.. buffer[buffer.Count - 1] == 0x0A ...} condition wasn't true, and a i get exception SshOperationTimeoutException("Socket read operation has timed out"), that was strange, i changed condition to
while (!(buffer.Count > 0 && (buffer[buffer.Count - 1].Equals(0x0A) || buffer[buffer.Count - 1].Equals(0x00) )));
and now everything works great. Thank one more time for your library.

New Post: Pageant integration?

$
0
0
I tried to create a 64bit build of my application with SshNet+Pageant, but could only get the Pageant API to work when building as a 32 bit application. Not knowing the details of the Pageant protocol, I suspect the Pageant API is arch dependent.

Are there any suggestions for detecting which Pageant build is running and adapting to the API appropriately for this patch?

New Post: ExpectAction Problem

$
0
0
Never mind, I found the issue that had been plaguing me.

The root cause of my problem was that I didn't realize that WriteLine was sending "\r\n". Cisco routers don't line the linefeed. This had worked with SharpSSH, but it was only sending "\r".

So I changed everything to Write and added the \r to my data. Now everything works.
Viewing all 2955 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>