本文整理汇总了C#中Renci.SshNet.Channels.ChannelSession类的典型用法代码示例。如果您正苦于以下问题:C# ChannelSession类的具体用法?C# ChannelSession怎么用?C# ChannelSession使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
ChannelSession类属于Renci.SshNet.Channels命名空间,在下文中一共展示了ChannelSession类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ShellStream
internal ShellStream(Session session, string terminalName, uint columns, uint rows, uint width, uint height, int maxLines, PrivateKeyAgent forwardedPrivateKeyAgent, params KeyValuePair<TerminalModes, uint>[] terminalModeValues)
{
this._encoding = new Renci.SshNet.Common.ASCIIEncoding();
this._session = session;
this._incoming = new Queue<byte>();
this._outgoing = new Queue<byte>();
this._channel = this._session.CreateChannel<ChannelSession>();
this._channel.DataReceived += new EventHandler<ChannelDataEventArgs>(Channel_DataReceived);
this._channel.Closed += new EventHandler<ChannelEventArgs>(Channel_Closed);
this._session.Disconnected += new EventHandler<EventArgs>(Session_Disconnected);
this._session.ErrorOccured += new EventHandler<ExceptionEventArgs>(Session_ErrorOccured);
this.forwardedPrivateKeyAgent = forwardedPrivateKeyAgent;
this._channel.Open();
if (this.forwardedPrivateKeyAgent != null)
{
if (this._channel.SendPrivateKeyAgentForwardingRequest())
{
this._session.RegisterMessage("SSH_MSG_CHANNEL_OPEN");
this._session.ChannelOpenReceived += OnChannelOpen;
}
}
this._channel.SendPseudoTerminalRequest(terminalName, columns, rows, width, height, terminalModeValues);
this._channel.SendShellRequest();
}
示例2: Arrange
private void Arrange()
{
var random = new Random();
_localChannelNumber = (uint)random.Next(0, int.MaxValue);
_localWindowSize = (uint)random.Next(0, int.MaxValue);
_localPacketSize = (uint)random.Next(0, int.MaxValue);
_remoteChannelNumber = (uint)random.Next(0, int.MaxValue);
_remoteWindowSize = (uint)random.Next(0, int.MaxValue);
_remotePacketSize = (uint)random.Next(0, int.MaxValue);
_channelClosedRegister = new List<ChannelEventArgs>();
_channelExceptionRegister = new List<ExceptionEventArgs>();
_initialSessionSemaphoreCount = random.Next(10, 20);
_sessionSemaphore = new SemaphoreLight(_initialSessionSemaphoreCount);
_sessionMock = new Mock<ISession>(MockBehavior.Strict);
_connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict);
_sequence = new MockSequence();
_sessionMock.InSequence(_sequence).Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object);
_connectionInfoMock.InSequence(_sequence).Setup(p => p.RetryAttempts).Returns(1);
_sessionMock.Setup(p => p.SessionSemaphore).Returns(_sessionSemaphore);
_sessionMock.InSequence(_sequence)
.Setup(
p =>
p.SendMessage(
It.Is<ChannelOpenMessage>(
m =>
m.LocalChannelNumber == _localChannelNumber &&
m.InitialWindowSize == _localWindowSize && m.MaximumPacketSize == _localPacketSize &&
m.Info is SessionChannelOpenInfo)));
_sessionMock.InSequence(_sequence)
.Setup(p => p.WaitOnHandle(It.IsNotNull<WaitHandle>()))
.Callback<WaitHandle>(
w =>
{
_sessionMock.Raise(
s => s.ChannelOpenConfirmationReceived += null,
new MessageEventArgs<ChannelOpenConfirmationMessage>(
new ChannelOpenConfirmationMessage(
_localChannelNumber,
_remoteWindowSize,
_remotePacketSize,
_remoteChannelNumber)));
w.WaitOne();
});
_sessionMock.Setup(p => p.IsConnected).Returns(false);
_channel = new ChannelSession(_sessionMock.Object, _localChannelNumber, _localWindowSize, _localPacketSize);
_channel.Closed += (sender, args) => _channelClosedRegister.Add(args);
_channel.Exception += (sender, args) => _channelExceptionRegister.Add(args);
_channel.Open();
_sessionMock.Raise(
p => p.ChannelEofReceived += null,
new MessageEventArgs<ChannelEofMessage>(new ChannelEofMessage(_localChannelNumber)));
_sessionMock.Raise(
p => p.ChannelCloseReceived += null,
new MessageEventArgs<ChannelCloseMessage>(new ChannelCloseMessage(_localChannelNumber)));
}
开发者ID:delfinof,项目名称:ssh.net,代码行数:59,代码来源:ChannelSessionTest_Close_SessionIsNotConnectedAndChannelIsOpen_ChannelCloseAndChannelEofReceived.cs
示例3: Connect
/// <summary>
/// Connects subsystem on SSH channel.
/// </summary>
public void Connect()
{
this._channel = this._session.CreateClientChannel<ChannelSession>();
this._session.ErrorOccured += Session_ErrorOccured;
this._session.Disconnected += Session_Disconnected;
this._channel.DataReceived += Channel_DataReceived;
this._channel.Closed += Channel_Closed;
this._channel.Open();
this._channel.SendSubsystemRequest(_subsystemName);
this.OnChannelOpen();
}
示例4: ShellStream
internal ShellStream(Session session, string terminalName, uint columns, uint rows, uint width, uint height, int maxLines, IDictionary<TerminalModes, uint> terminalModeValues)
{
this._encoding = session.ConnectionInfo.Encoding;
this._session = session;
this._incoming = new Queue<byte>();
this._outgoing = new Queue<byte>();
this._channel = this._session.CreateChannel<ChannelSession>();
this._channel.DataReceived += new EventHandler<ChannelDataEventArgs>(Channel_DataReceived);
this._channel.Closed += new EventHandler<ChannelEventArgs>(Channel_Closed);
this._session.Disconnected += new EventHandler<EventArgs>(Session_Disconnected);
this._session.ErrorOccured += new EventHandler<ExceptionEventArgs>(Session_ErrorOccured);
this._channel.Open();
this._channel.SendPseudoTerminalRequest(terminalName, columns, rows, width, height, terminalModeValues);
this._channel.SendShellRequest();
}
示例5: Arrange
private void Arrange()
{
var random = new Random();
_localChannelNumber = (uint)random.Next(0, int.MaxValue);
_localWindowSize = (uint)random.Next(2000, 3000);
_localPacketSize = (uint)random.Next(1000, 2000);
_initialSessionSemaphoreCount = random.Next(10, 20);
_sessionSemaphore = new SemaphoreLight(_initialSessionSemaphoreCount);
_channelClosedRegister = new List<ChannelEventArgs>();
_channelExceptionRegister = new List<ExceptionEventArgs>();
_waitOnConfirmationException = new SystemException();
_sessionMock = new Mock<ISession>(MockBehavior.Strict);
_connectionInfoMock = new Mock<IConnectionInfo>(MockBehavior.Strict);
var sequence = new MockSequence();
_sessionMock.InSequence(sequence).Setup(p => p.ConnectionInfo).Returns(_connectionInfoMock.Object);
_connectionInfoMock.InSequence(sequence).Setup(p => p.RetryAttempts).Returns(2);
_sessionMock.Setup(p => p.SessionSemaphore).Returns(_sessionSemaphore);
_sessionMock.InSequence(sequence)
.Setup(
p =>
p.SendMessage(
It.Is<ChannelOpenMessage>(
m =>
m.LocalChannelNumber == _localChannelNumber &&
m.InitialWindowSize == _localWindowSize && m.MaximumPacketSize == _localPacketSize &&
m.Info is SessionChannelOpenInfo)));
_sessionMock.InSequence(sequence)
.Setup(p => p.WaitOnHandle(It.IsNotNull<WaitHandle>()))
.Throws(_waitOnConfirmationException);
_channel = new ChannelSession(_sessionMock.Object, _localChannelNumber, _localWindowSize, _localPacketSize);
_channel.Closed += (sender, args) => _channelClosedRegister.Add(args);
_channel.Exception += (sender, args) => _channelExceptionRegister.Add(args);
}
开发者ID:REALTOBIZ,项目名称:SSH.NET,代码行数:36,代码来源:ChannelSessionTest_Open_ExceptionWaitingOnOpenConfirmation.cs
示例6: SendData
partial void SendData(ChannelSession channel, string command)
{
channel.SendData(System.Text.Encoding.Default.GetBytes(command));
}
示例7: InternalUpload
private void InternalUpload(ChannelSession channel, Stream input, FileInfo fileInfo, string filename)
{
this.InternalSetTimestamp(channel, input, fileInfo.LastWriteTimeUtc, fileInfo.LastAccessTimeUtc);
using (var source = fileInfo.OpenRead())
{
this.InternalUpload(channel, input, source, filename);
}
}
示例8: SendData
private void SendData(ChannelSession channel, byte[] buffer)
{
channel.SendData(buffer);
}
示例9: Start
/// <summary>
/// Starts this shell.
/// </summary>
/// <exception cref="SshException">Shell is started.</exception>
public void Start()
{
if (this.IsStarted)
{
throw new SshException("Shell is started.");
}
if (this.Starting != null)
{
this.Starting(this, new EventArgs());
}
this._channel = this._session.CreateChannel<ChannelSession>();
this._channel.DataReceived += Channel_DataReceived;
this._channel.ExtendedDataReceived += Channel_ExtendedDataReceived;
this._channel.Closed += Channel_Closed;
this._session.Disconnected += Session_Disconnected;
this._session.ErrorOccured += Session_ErrorOccured;
this._channel.Open();
// TODO: Terminal mode is ignored as this functionality will be obsolete
this._channel.SendPseudoTerminalRequest(this._terminalName, this._columns, this._rows, this._width, this._height);
this._channel.SendShellRequest();
this._channelClosedWaitHandle = new AutoResetEvent(false);
// Start input stream listener
this._dataReaderTaskCompleted = new ManualResetEvent(false);
this.ExecuteThread(() =>
{
try
{
var buffer = new byte[this._bufferSize];
while (this._channel.IsOpen)
{
var asyncResult = this._input.ReadAsync(buffer, 0, buffer.Length);
bool waitingFinished = true;
while (!waitingFinished)
{
// Is it possible to WaitAny() on a Task and a WaitHandle?
//EventWaitHandle.WaitAny(new WaitHandle[] { asyncResult.AsyncWaitHandle, this._channelClosedWaitHandle });
// this is a workaround:
waitingFinished = asyncResult.Wait(100);
if (!waitingFinished)
{
waitingFinished = this._channelClosedWaitHandle.WaitOne(100);
}
}
if (asyncResult.IsCompleted)
{
// If input stream is closed and disposed already dont finish reading the stream
if (this._input == null)
return;
var read = asyncResult.Result;
if (read > 0)
{
this._channel.SendData(buffer.Take(read).ToArray());
}
continue;
}
else
break;
}
}
catch (Exception exp)
{
this.RaiseError(new ExceptionEventArgs(exp));
}
finally
{
this._dataReaderTaskCompleted.Set();
}
});
this.IsStarted = true;
if (this.Started != null)
{
this.Started(this, new EventArgs());
}
}
示例10: SendConfirmation
private void SendConfirmation(ChannelSession channel)
{
this.SendData(channel, new byte[] { 0 });
}
示例11: CreateChannel
private void CreateChannel()
{
this._channel = this._session.CreateChannel<ChannelSession>();
this._channel.DataReceived += Channel_DataReceived;
this._channel.ExtendedDataReceived += Channel_ExtendedDataReceived;
this._channel.RequestReceived += Channel_RequestReceived;
this._channel.Closed += Channel_Closed;
// Dispose of streams if already exists
if (this.OutputStream != null)
{
this.OutputStream.Dispose();
this.OutputStream = null;
}
if (this.ExtendedOutputStream != null)
{
this.ExtendedOutputStream.Dispose();
this.ExtendedOutputStream = null;
}
// Initialize output streams and StringBuilders
this.OutputStream = new PipeStream();
this.ExtendedOutputStream = new PipeStream();
this._result = null;
this._error = null;
}
示例12: Start
/// <summary>
/// Starts this shell.
/// </summary>
/// <exception cref="SshException">Shell is started.</exception>
public void Start()
{
if (this.IsStarted)
{
throw new SshException("Shell is started.");
}
if (this.Starting != null)
{
this.Starting(this, new EventArgs());
}
this._channel = this._session.CreateClientChannel<ChannelSession>();
this._channel.DataReceived += Channel_DataReceived;
this._channel.ExtendedDataReceived += Channel_ExtendedDataReceived;
this._channel.Closed += Channel_Closed;
this._session.Disconnected += Session_Disconnected;
this._session.ErrorOccured += Session_ErrorOccured;
this._channel.Open();
this._channel.SendPseudoTerminalRequest(this._terminalName, this._columns, this._rows, this._width, this._height, this._terminalModes);
this._channel.SendShellRequest();
this._channelClosedWaitHandle = new AutoResetEvent(false);
// Start input stream listener
this._dataReaderTaskCompleted = new ManualResetEvent(false);
this.ExecuteThread(() =>
{
try
{
var buffer = new byte[this._bufferSize];
while (this._channel.IsOpen)
{
var asyncResult = this._input.BeginRead(buffer, 0, buffer.Length, delegate(IAsyncResult result)
{
// If input stream is closed and disposed already dont finish reading the stream
if (this._input == null)
return;
var read = this._input.EndRead(result);
if (read > 0)
{
this._channel.SendData(buffer.Take(read).ToArray());
}
}, null);
EventWaitHandle.WaitAny(new WaitHandle[] { asyncResult.AsyncWaitHandle, this._channelClosedWaitHandle });
if (asyncResult.IsCompleted)
continue;
break;
}
}
catch (Exception exp)
{
this.RaiseError(new ExceptionEventArgs(exp));
}
finally
{
this._dataReaderTaskCompleted.Set();
}
});
this.IsStarted = true;
if (this.Started != null)
{
this.Started(this, new EventArgs());
}
}
示例13: InternalDownload
private void InternalDownload(ChannelSession channel, Stream input, FileSystemInfo fileSystemInfo)
{
DateTime modifiedTime = DateTime.Now;
DateTime accessedTime = DateTime.Now;
var startDirectoryFullName = fileSystemInfo.FullName;
var currentDirectoryFullName = startDirectoryFullName;
var directoryCounter = 0;
while (true)
{
var message = ReadString(input);
if (message == "E")
{
this.SendConfirmation(channel); // Send reply
directoryCounter--;
currentDirectoryFullName = new DirectoryInfo(currentDirectoryFullName).Parent.FullName;
if (directoryCounter == 0)
break;
continue;
}
var match = _directoryInfoRe.Match(message);
if (match.Success)
{
this.SendConfirmation(channel); // Send reply
// Read directory
var mode = long.Parse(match.Result("${mode}"));
var filename = match.Result("${filename}");
DirectoryInfo newDirectoryInfo;
if (directoryCounter > 0)
{
newDirectoryInfo = Directory.CreateDirectory(string.Format("{0}{1}{2}", currentDirectoryFullName, Path.DirectorySeparatorChar, filename));
newDirectoryInfo.LastAccessTime = accessedTime;
newDirectoryInfo.LastWriteTime = modifiedTime;
}
else
{
// Dont create directory for first level
newDirectoryInfo = fileSystemInfo as DirectoryInfo;
}
directoryCounter++;
currentDirectoryFullName = newDirectoryInfo.FullName;
continue;
}
match = _fileInfoRe.Match(message);
if (match.Success)
{
// Read file
this.SendConfirmation(channel); // Send reply
var mode = match.Result("${mode}");
var length = long.Parse(match.Result("${length}"));
var fileName = match.Result("${filename}");
var fileInfo = fileSystemInfo as FileInfo;
if (fileInfo == null)
fileInfo = new FileInfo(string.Format("{0}{1}{2}", currentDirectoryFullName, Path.DirectorySeparatorChar, fileName));
using (var output = fileInfo.OpenWrite())
{
this.InternalDownload(channel, input, output, fileName, length);
}
fileInfo.LastAccessTime = accessedTime;
fileInfo.LastWriteTime = modifiedTime;
if (directoryCounter == 0)
break;
continue;
}
match = _timestampRe.Match(message);
if (match.Success)
{
// Read timestamp
this.SendConfirmation(channel); // Send reply
var mtime = long.Parse(match.Result("${mtime}"));
var atime = long.Parse(match.Result("${atime}"));
var zeroTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
modifiedTime = zeroTime.AddSeconds(mtime);
accessedTime = zeroTime.AddSeconds(atime);
continue;
}
this.SendConfirmation(channel, 1, string.Format("\"{0}\" is not valid protocol message.", message));
}
}
示例14: Dispose
/// <summary>
/// Releases the unmanaged resources used by the <see cref="T:System.IO.Stream"/> and optionally releases the managed resources.
/// </summary>
/// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param>
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (this._channel != null)
{
this._channel.Dispose();
this._channel = null;
}
if (this._dataReceived != null)
{
this._dataReceived.Dispose();
this._dataReceived = null;
}
if (this._session != null)
{
this._session.Disconnected -= new EventHandler<EventArgs>(Session_Disconnected);
this._session.ErrorOccured -= new EventHandler<ExceptionEventArgs>(Session_ErrorOccured);
}
}
示例15: Dispose
/// <summary>
/// Releases unmanaged and - optionally - managed resources
/// </summary>
/// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged ResourceMessages.</param>
protected virtual void Dispose(bool disposing)
{
// Check to see if Dispose has already been called.
if (!this._isDisposed)
{
// If disposing equals true, dispose all managed
// and unmanaged ResourceMessages.
if (disposing)
{
this._session.Disconnected -= Session_Disconnected;
this._session.ErrorOccured -= Session_ErrorOccured;
// Dispose managed ResourceMessages.
if (this.OutputStream != null)
{
this.OutputStream.Dispose();
this.OutputStream = null;
}
// Dispose managed ResourceMessages.
if (this.ExtendedOutputStream != null)
{
this.ExtendedOutputStream.Dispose();
this.ExtendedOutputStream = null;
}
// Dispose managed ResourceMessages.
if (this._sessionErrorOccuredWaitHandle != null)
{
this._sessionErrorOccuredWaitHandle.Dispose();
this._sessionErrorOccuredWaitHandle = null;
}
// Dispose managed ResourceMessages.
if (this._channel != null)
{
this._channel.DataReceived -= Channel_DataReceived;
this._channel.ExtendedDataReceived -= Channel_ExtendedDataReceived;
this._channel.RequestReceived -= Channel_RequestReceived;
this._channel.Closed -= Channel_Closed;
this._channel.Dispose();
this._channel = null;
}
}
// Note disposing has been done.
this._isDisposed = true;
}
}