Exemplo n.º 1
0
        private void ExecuteRequest(IRequestPacket request, IPEndPoint clientEP, CancellationToken cancellationToken)
        {
            switch (request.Op)
            {
            case TftpOperation.ReadRequest:
                ExecuteRead(request.FileName, clientEP, cancellationToken);
                break;

            case TftpOperation.WriteRequest:
                ExecuteWrite(request.FileName, clientEP, cancellationToken);
                break;

            default:
                Console.WriteLine("Requested operation unknown");
                break;
            }
        }
Exemplo n.º 2
0
        // Listen for TFTP request packets on the port specified by bindPort.
        private void Listen(int bindPort, CancellationToken cancellationToken)
        {
            IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);

            using (TftpConnection listener = new TftpConnection(bindPort))
            {
                Func <ITftpPacket, bool> requestFilter = (ITftpPacket packet) =>
                {
                    IRequestPacket rq = packet as IRequestPacket;
                    if (rq != null)
                    {
                        if (rq.Mode == TftpMode.octet)
                        {
                            return(true);
                        }
                        else
                        {
                            Console.WriteLine("Modes other than octet are not supported.");
                        }
                    }
                    else
                    {
                        Console.WriteLine("Main listener recieved non-request TFTP packet.");
                    }
                    return(false);
                };
                while (true)
                {
                    IRequestPacket request = (IRequestPacket)listener.Receive(requestFilter, out remoteEP, cancellationToken);
                    _requestHandlerTasks.Add(Task.Factory.StartNew(
                                                 action: () => ExecuteRequest(request, remoteEP, _cancellationTokenSource.Token),
                                                 cancellationToken: _cancellationTokenSource.Token,
                                                 creationOptions: TaskCreationOptions.LongRunning,
                                                 scheduler: TaskScheduler.Default));
                }
            }
        }