private static void StartTransfer(ITftpTransfer transfer, Stream stream) { transfer.OnProgress += new TftpProgressHandler(transfer_OnProgress); transfer.OnError += new TftpErrorHandler(transfer_OnError); transfer.OnFinished += new TftpEventHandler(transfer_OnFinished); transfer.Start(stream); }
private void serverSocket_OnCommandReceived(ITftpCommand command, EndPoint endpoint) { //Ignore all other commands if (!(command is ReadOrWriteRequest)) { return; } //Open a connection to the client ITransferChannel channel = TransferChannelFactory.CreateConnection(endpoint, new IPEndPoint(localInterface, 0)); //Create a wrapper for the transfer request ReadOrWriteRequest request = (ReadOrWriteRequest)command; ITftpTransfer transfer = request is ReadRequest ? (ITftpTransfer) new LocalReadTransfer(channel, request.Filename, request.Options) : new LocalWriteTransfer(channel, request.Filename, request.Options); if (command is ReadRequest) { RaiseOnReadRequest(transfer, endpoint); } else if (command is WriteRequest) { RaiseOnWriteRequest(transfer, endpoint); } else { throw new Exception("Unexpected tftp transfer request: " + command); } }
void TransferStub_OnError(ITftpTransfer transfer, TftpTransferError error) { if (error is TimeoutError) { HadNetworkTimeout = true; } }
private void OnReadRequest( ITftpTransfer transfer, EndPoint client ) { var connectionString = Startup.Configuration.GetValue <string>("Data:DefaultConnection:ConnectionString"); var dbOptions = new DbContextOptionsBuilder <PnPServerContext>(); dbOptions.UseSqlServer(connectionString); var dbContext = new PnPServerContext(dbOptions.Options); string ipAddress = ""; if (client.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { ipAddress = (client as IPEndPoint).Address.ToString(); } else if (client.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) { ipAddress = (client as IPEndPoint).Address.ToString(); } var networkDevice = dbContext.NetworkDevices.Where(x => x.IPAddress == ipAddress).FirstOrDefault(); if (networkDevice == null) { transfer.Cancel(TftpErrorPacket.FileNotFound); } else { var config = Task.Run <string>(() => { return(ConfigurationGenerator.Generator.Generate(ipAddress, dbContext)); }).Result; var data = new MemoryStream(Encoding.ASCII.GetBytes(config)); transfer.Start(data); } }
void transfer_OnProgress(ITftpTransfer transfer, TftpTransferProgress progress) { BeginInvoke((new EventHandler(delegate(object o, EventArgs e) { skinProgressBar1.Value = progress.TransferredBytes; }))); TransferFinishedEvent.Set(); }
static void server_OnReadRequest(ITftpTransfer transfer, EndPoint client) { if (s_instance == null) { throw new Exception("Invalid state, no static instance of TFTP Server"); } s_instance.OnReadRequest(transfer, client); }
internal static void Trace(String message, ITftpTransfer transfer) { if (!Enabled) { return; } System.Diagnostics.Trace.WriteLine(message, transfer.ToString()); }
private void OnFinished(ITftpTransfer transfer) { Console.WriteLine("Done"); if (transfer.Filename == Path.GetFileName(m_Path)) { m_TransferHasFinished = true; } }
private void RaiseOnReadRequest(ITftpTransfer transfer, EndPoint client) { if (OnReadRequest != null) { OnReadRequest(transfer, client); } else { transfer.Cancel(new TftpErrorPacket(0, "Server did not provide a OnReadRequest handler.")); } }
void transfer_OnFinshed(ITftpTransfer transfer) { Console.WriteLine("Transfer succeeded."); BeginInvoke((new EventHandler(delegate(object o, EventArgs e) { skinProgressBar1.Value = skinProgressBar1.Maximum; }))); TransferFinishedEvent.Reset(); MessageBox.Show("升级设备:" + transfer.UserContext + "成功", "提示"); }
public IPixeyTftpTransfer CreateTftpTransfer(ITftpTransfer underlyingTransfer, EndPoint client) { var logger = _loggerFactory.CreateLogger <PixeyTftpTransfer>(); return(new PixeyTftpTransfer( underlyingTransfer, client, _logService, _bootLoaderService, _clock, logger)); }
private void HandleTransferFinished(ITftpTransfer transfer) { _logger.LogInformation( "Transfer {0} has been finished successfully.", _transferId); var evt = new TftpDownloadFinishedEvent( _clientInfo, _clock.GetOffsetNow(), _transferId, transfer.Filename); _logService.LogEvent(evt); }
static void server_OnWriteRequest(ITftpTransfer transfer, EndPoint client) { String file = Path.Combine(ServerDirectory, transfer.Filename); if (File.Exists(file)) { CancelTransfer(transfer, TftpErrorPacket.FileAlreadyExists); } else { OutputTransferStatus(transfer, "Accepting write request from " + client); StartTransfer(transfer, new FileStream(file, FileMode.CreateNew)); } }
private void HandleTransferError(ITftpTransfer transfer, TftpTransferError error) { _logger.LogWarning( "Transfer {0} has failed with an error: {1}.", _transferId, error.ToString()); var evt = new TftpDownloadFailedEvent( _clientInfo, _clock.GetOffsetNow(), _transferId, transfer.Filename, error.ToString()); _logService.LogEvent(evt); }
private void OnReadRequest(ITftpTransfer transfer, EndPoint client) { if (transfer.Filename == UBootName || transfer.Filename == UImageName || transfer.Filename == InitrdName) { SetUpTransfer(transfer); transfer.Start(Assembly.GetExecutingAssembly().GetManifestResourceStream(ResourcePath + transfer.Filename)); } else if (transfer.Filename == Path.GetFileName(m_Path)) { SetUpTransfer(transfer); transfer.Start(new FileStream(m_Path, FileMode.Open)); } else { transfer.Cancel(TftpErrorPacket.AccessViolation); } }
private void HandleTransferProgress(ITftpTransfer transfer, TftpTransferProgress progress) { _logger.LogDebug( "Transfer {0} progress changed to {1}/{2} bytes.", _transferId, progress.TransferredBytes, progress.TotalBytes); var evt = new TftpDownloadProgressChangedEvent( _clientInfo, _clock.GetOffsetNow(), _transferId, transfer.Filename, progress.TotalBytes, progress.TransferredBytes); _logService.LogEvent(evt); }
public void ClientsReadsFromServer() { using (TftpServer server = new TftpServer(new IPEndPoint(IPAddress.Loopback, 69))) { server.OnReadRequest += new TftpServerEventHandler(server_OnReadRequest); server.Start(); TftpClient client = new TftpClient(new IPEndPoint(IPAddress.Loopback, 69)); using (ITftpTransfer transfer = client.Download("Demo File")) { MemoryStream ms = new MemoryStream(); transfer.OnFinished += new TftpEventHandler(transfer_OnFinished); transfer.Start(ms); Thread.Sleep(500); Assert.IsTrue(TransferHasFinished); } } }
static void server_OnReadRequest(ITftpTransfer transfer, EndPoint client) { String path = Path.Combine(ServerDirectory, transfer.Filename); FileInfo file = new FileInfo(path); //Is the file within the server directory? if (!file.FullName.StartsWith(ServerDirectory, StringComparison.InvariantCultureIgnoreCase)) { CancelTransfer(transfer, TftpErrorPacket.AccessViolation); } else if (!file.Exists) { CancelTransfer(transfer, TftpErrorPacket.FileNotFound); } else { OutputTransferStatus(transfer, "Accepting request from " + client); StartTransfer(transfer, new FileStream(file.FullName, FileMode.Open)); } }
public PixeyTftpTransfer( ITftpTransfer transfer, EndPoint client, ILogService logService, IBootLoaderService bootLoaderService, IClock clock, ILogger <PixeyTftpTransfer> logger) { _transferId = Guid.NewGuid(); _transfer = transfer; _logService = logService; _bootLoaderService = bootLoaderService; _clock = clock; _logger = logger; _clientInfo = new ClientInfo(GetIpAddress(client)); _transfer.OnError += HandleTransferError; _transfer.OnProgress += HandleTransferProgress; _transfer.OnFinished += HandleTransferFinished; }
private static void Server_OnReadRequest(ITftpTransfer transfer, System.Net.EndPoint client) { var path = Utils.CheckFileInRootDir(ServerDirectory, transfer.Filename); FileInfo file = new FileInfo(path); //Is the file within the server directory? if (!file.FullName.StartsWith(ServerDirectory, StringComparison.InvariantCultureIgnoreCase)) { CancelTransfer(transfer, TftpErrorPacket.AccessViolation); } else if (!file.Exists) { CancelTransfer(transfer, TftpErrorPacket.FileNotFound); } else { OutputTransferStatus(transfer, "Accepting request from " + client); StartTransfer(transfer, new FileStream(file.FullName, FileMode.Open, FileAccess.Read, FileShare.Read)); //StartTransfer(transfer, new MemoryStream(File.ReadAllBytes(file.FullName))); ; } }
private static void OutputTransferStatus(ITftpTransfer transfer, string message) { Console.WriteLine("[" + transfer.Filename + "] " + message); }
static void transfer_OnProgress(ITftpTransfer transfer, TftpTransferProgress progress) { OutputTransferStatus(transfer, "Progress " + progress); }
static void transfer_OnFinished(ITftpTransfer transfer) { OutputTransferStatus(transfer, "Finished"); }
static void transfer_OnError(ITftpTransfer transfer, TftpTransferError error) { OutputTransferStatus(transfer, "Error: " + error); }
private static void CancelTransfer(ITftpTransfer transfer, TftpErrorPacket reason) { OutputTransferStatus(transfer, "Cancelling transfer: " + reason.ErrorMessage); transfer.Cancel(reason); }
static void transfer_OnError(ITftpTransfer transfer, TftpTransferError error) { Console.WriteLine("Transfer failed: " + error); TransferFinishedEvent.Set(); }
static void transfer_OnFinshed(ITftpTransfer transfer) { Console.WriteLine("Transfer succeeded."); TransferFinishedEvent.Set(); }
private void OutputTransferStatus(ITftpTransfer transfer, string message) { form.Log.Invoke("[" + transfer.Filename + "] " + message); Debug.Write("[" + transfer.Filename + "] " + message); }
private void HandleWriteRequest(ITftpTransfer transfer, EndPoint client) { _logger.LogInformation("Write request attempted on TFTP server from {0}. Cancelling request.", client?.AddressFamily); transfer.Cancel(TftpErrorPacket.IllegalOperation); }
private void HandleReadRequest(ITftpTransfer transfer, EndPoint client) { var pixeyTransfer = _transferFactory.CreateTftpTransfer(transfer, client); pixeyTransfer.Process(); }