internal void SendMessage(SftpMessage sftpMessage) { var messageData = sftpMessage.GetBytes(); var data = new byte[4 + messageData.Length]; ((uint)messageData.Length).GetBytes().CopyTo(data, 0); messageData.CopyTo(data, 4); SendData(data); }
public SftpDataMessage(uint localChannelNumber, SftpMessage sftpMessage) { this.LocalChannelNumber = localChannelNumber; var messageData = sftpMessage.GetBytes(); var data = new byte[4 + messageData.Length]; ((uint)messageData.Length).GetBytes().CopyTo(data, 0); messageData.CopyTo(data, 4); this.Data = data; }
protected override void OnDataReceived(uint dataTypeCode, byte[] data) { // Add channel data to internal data holder _data.AddRange(data); while (_data.Count > 4 + 1) { // Extract packet length var packetLength = (_data[0] << 24 | _data[1] << 16 | _data[2] << 8 | _data[3]); // Check if complete packet data is available if (_data.Count < packetLength + 4) { // Wait for complete message to arrive first break; } _data.RemoveRange(0, 4); // Create buffer to hold packet data var packetData = new byte[packetLength]; // Cope packet data to array _data.CopyTo(0, packetData, 0, packetLength); // Remove loaded data from _data holder _data.RemoveRange(0, packetLength); // Load SFTP Message and handle it var response = SftpMessage.Load(ProtocolVersion, packetData, Encoding); try { var versionResponse = response as SftpVersionResponse; if (versionResponse != null) { ProtocolVersion = versionResponse.Version; _supportedExtensions = versionResponse.Extentions; _sftpVersionConfirmed.Set(); } else { HandleResponse(response as SftpResponse); } } catch (Exception exp) { RaiseError(exp); break; } } }