Esempio n. 1
0
 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);
 }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
 void TransferStub_OnError(ITftpTransfer transfer, TftpTransferError error)
 {
     if (error is TimeoutError)
     {
         HadNetworkTimeout = true;
     }
 }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
 void transfer_OnProgress(ITftpTransfer transfer, TftpTransferProgress progress)
 {
     BeginInvoke((new EventHandler(delegate(object o, EventArgs e)
     {
         skinProgressBar1.Value = progress.TransferredBytes;
     })));
     TransferFinishedEvent.Set();
 }
Esempio n. 6
0
 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);
 }
Esempio n. 7
0
        internal static void Trace(String message, ITftpTransfer transfer)
        {
            if (!Enabled)
            {
                return;
            }

            System.Diagnostics.Trace.WriteLine(message, transfer.ToString());
        }
Esempio n. 8
0
        private void OnFinished(ITftpTransfer transfer)
        {
            Console.WriteLine("Done");

            if (transfer.Filename == Path.GetFileName(m_Path))
            {
                m_TransferHasFinished = true;
            }
        }
Esempio n. 9
0
 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."));
     }
 }
Esempio n. 10
0
        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 + "成功", "提示");
        }
Esempio n. 11
0
        public IPixeyTftpTransfer CreateTftpTransfer(ITftpTransfer underlyingTransfer, EndPoint client)
        {
            var logger = _loggerFactory.CreateLogger <PixeyTftpTransfer>();

            return(new PixeyTftpTransfer(
                       underlyingTransfer,
                       client,
                       _logService,
                       _bootLoaderService,
                       _clock,
                       logger));
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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));
            }
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
 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);
     }
 }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
        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);
                }
            }
        }
Esempio n. 18
0
        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));
            }
        }
Esempio n. 19
0
        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;
        }
Esempio n. 20
0
        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))); ;
            }
        }
Esempio n. 21
0
 private static void OutputTransferStatus(ITftpTransfer transfer, string message)
 {
     Console.WriteLine("[" + transfer.Filename + "] " + message);
 }
Esempio n. 22
0
 static void transfer_OnProgress(ITftpTransfer transfer, TftpTransferProgress progress)
 {
     OutputTransferStatus(transfer, "Progress " + progress);
 }
Esempio n. 23
0
 static void transfer_OnFinished(ITftpTransfer transfer)
 {
     OutputTransferStatus(transfer, "Finished");
 }
Esempio n. 24
0
 static void transfer_OnError(ITftpTransfer transfer, TftpTransferError error)
 {
     OutputTransferStatus(transfer, "Error: " + error);
 }
Esempio n. 25
0
 private static void CancelTransfer(ITftpTransfer transfer, TftpErrorPacket reason)
 {
     OutputTransferStatus(transfer, "Cancelling transfer: " + reason.ErrorMessage);
     transfer.Cancel(reason);
 }
Esempio n. 26
0
 static void transfer_OnError(ITftpTransfer transfer, TftpTransferError error)
 {
     Console.WriteLine("Transfer failed: " + error);
     TransferFinishedEvent.Set();
 }
Esempio n. 27
0
 static void transfer_OnFinshed(ITftpTransfer transfer)
 {
     Console.WriteLine("Transfer succeeded.");
     TransferFinishedEvent.Set();
 }
Esempio n. 28
0
 private void OutputTransferStatus(ITftpTransfer transfer, string message)
 {
     form.Log.Invoke("[" + transfer.Filename + "] " + message);
     Debug.Write("[" + transfer.Filename + "] " + message);
 }
Esempio n. 29
0
        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);
        }
Esempio n. 30
0
        private void HandleReadRequest(ITftpTransfer transfer, EndPoint client)
        {
            var pixeyTransfer = _transferFactory.CreateTftpTransfer(transfer, client);

            pixeyTransfer.Process();
        }