- 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
toLIST
- 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 usels
system command and usereaddir
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 forv0.3
- Ideally, we have exact rules for
to which port of receiver
to send data, andusing 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 tocreateSocketAndConnectToHost
, which will then result in formation of a new function doing exactly same as this, but which also lets us specify self portcreateSocketBindPortAndConnectToHost
. - This new function will then help
createDataConnection
in doing things as per spec.
- Ideally, we have exact rules for
- 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 usingncurses
? 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