Skip to content

Latest commit

 

History

History
81 lines (75 loc) · 4.49 KB

todo.md

File metadata and controls

81 lines (75 loc) · 4.49 KB

Extended Todo List

Must Have

  • release version 0.2
  • Make a proper readme with features
  • client username in all the logging
  • Indent and format all code
  • Finalise code
  • implement HELP Command for client side - authentication + main loop
  • mark all the log statements by @logging
  • clean all the printing/logging
  • put correct response codes everywhere
  • document all code
    • utils
    • headers
    • commands
    • server
    • client
  • tell to client why this dir cant be changed. server already knows
  • put response code in just major places for now
  • Improve authentication. change authentication handler, such that server class stores ftpUsername. This will be useful for error messages and such.
  • implement authentication via USER and PASS
  • The code right now will not work with NAT. Make a helper utility that help in creating a client to server connection to use as dummy then use that for data transfer.
  • make verbose mode default. Remove this option. Instead silent using /dev/null
  • reimplement sys command
  • Implement quit command
  • find a way to store server/client IP in the OBJECT after forking
  • Implement PORT. Do client's counterpart of PORT
  • TEST LS in current connection first.
  • Implement data connection manager
  • Establist a data connection from Server to Client
  • implement basic pwd
  • implement FORK on new command
  • check if prev command was a port command. if not, use default PORT values. if yes, use new PORT values
  • Semicolon truncated during sanitization
  • sanitize request convert ls to LIST

Good To Have

  • Create a demo video
  • add v0.2 logs
  • Make a proper todolist
  • Remove useless headers
  • Improve makefile to make everything inside a build folder
  • Optimize makefile for minimum building
  • stor / retr supports pathnames, not just filenames. TEST thoroughly.
  • Update LIST command to not use ls system command and use readdir instead.
  • Switch to PORT command's h1,h2,h3,h4,p1,p2 format. Not really required.
  • Implement some more commands. as Listed in server.cpp
    • CDUP
    • STRU, TYPE, MODE
  • argument error checking for all commands
  • Implement client side supported commands
  • implement client side functions (child commands) - !ls, !pwd
  • implement client side - shell builtins - cd for now
  • implement basic signal handling
  • reap off zombie processes on server-client side
  • do graceful exception handling
  • Multi-file transfer Not possible in stream Mode. Block mode is needed. Moved to future scope.
  • Follow exactly as mentioned in RFC 959 3.2. ESTABLISHING DATA CONNECTIONS section. Probably a candidate for v0.3
    • Ideally, we have exact rules for to which port of receiver to send data, and using which port of self to send data.
    • Right now, the only thing considered important is 3.2. ESTABLISHING DATA CONNECTIONS``to which port of receiver should we send data.
    • This mechanics still works, because in reality, only this is important to transfer data.
    • The using which port of self is more about following the spec, and has no visible advantage for which it should be pursued.
    • However, because this implemention is about following the spec as closely as possible, it is good to follow this section as well.
    • For this, the createDataConnection function has to be edited. Consequently leading to createSocketAndConnectToHost, which will then result in formation of a new function doing exactly same as this, but which also lets us specify self port createSocketBindPortAndConnectToHost.
    • This new function will then help createDataConnection in doing things as per spec.

Future scope

  • Resolve all the @todo's
  • Do optimised exception handling
  • Move to precise colored outputs ?? and no extra logging ??
  • make a command buffer to allow simultaneous commands without pressing enter
  • Handle input history and other stuff using ncurses ? Maybe.
  • Implement ABORT and related functionality - refer to branch develop-ABOR
  • implement PASV command. Test with one client & server-to-server transfer
  • Implement BLOCK MODE - not closing the data connection immediately and reusing it in subsequent requests until a TTL.
  • Implement BLOCK MODE to allow transferring of multiple files in a single data connection.
  • add unit tests