-
Notifications
You must be signed in to change notification settings - Fork 21
sunaku/simple-ftp
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Suraj Kurapati <skurapat@ucsc.edu>
CMPE-150, Spring 2004
Network Programming Project
CONTENTS:
files
instructions
specification
known problems
comments
references
FILES:
html/
API documentation generated by Doxygen tool.
Makefile
Compilation script.
README
General project overview.
siftp.[ch]
Provide syntax & semantics for the SimpleFTP protocol. They also
provide transport level services such as sending and receiving
messages.
service.[ch]
Provide a common interface for mainly session level services. They
also provide some application level services that are common to both
server & client.
client.[ch]
The SimpleFTP client.
server.[ch]
The SimpleFTP server. Is able to handle multiple connections and has a
simple authorization system via a common password.
INSTRUCTIONS:
Compiling the programs.
Run the command 'make all'.
To view debugging messages, enable the debugging flag in the Makefile.
Using the SimpleFTP client.
Usage:
siftp <server name or IP> <port number>
Info:
Once connected to the server, the user will be presented with a
password prompt. The default password is "ce150".
Once authorized, the user will be presented with an application
prompt, at which the command 'help' can be issued for details on
supported commands.
Using the SimpleFTP server.
Usage:
siftpd <starting directory> <port number>
Info:
Connected users will have their initial current working directory
set to <starting directory>.
The server should only be terminated when no users are connected
in order to prevent stale sockets.
SPECIFICATION:
The SimpleFTP protocol.
The purpose of this protocol is to allow for file transfer between a
file server and authorized clients.
This is a request and response based protocol which is largely derived
from the FTP protocol (RFC 959).
The notion of request and response are implicit, and are not
specifically tied to the client nor server. For example, in some cases
the server sends a request to the client and expects a response.
Message format.
A message consists of a 'Verb' and a 'Parameter' (see Figure 1). The
Verb specifies the subject, action, or intent of the message. The
Parameter specifies information pertaining to the Verb. For a full
list of Verbs and their use of the Parameter field, see file
'siftp.h'.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_____________________________________________
| VERB | PARAMETER |
|________________|____________________________|
|<------------- 1024 bytes ------------------>|
|<-- 4 bytes --->|<-------- 1020 bytes ------>|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Figure 1. The message format. Note that these sizes are defined in
the file <siftp.h> and can be changed.
When sent over the network, the message is serialized into a string of
contiguous bytes. The format of the serialized message is: the Verb
followed by the Parameter. The sizes of these fields are defined in
'siftp.h'.
Command & Status dialogue.
The client issues commands to the server and expects a response
message containing the status of the command. This status is then used
to decide the next action. For example if a client requests a file for
download, the server can respond with a failed status (because it
doesn't have read access to the requested file). Now the client
doesn't have to wait for data because it knows of the command's
status.
Authentication dialogue.
After the client establishes a TCP connection to the server, the
client must be authorized before being allowed access to the files on
the server.
Client: I want to connect.
Server: Identify yourself.
Client: My user name is <name>.
Server: Accepted/Denied.
Client: My password is <pass>.
Server: Accepted/Denied.
- session established -
File upload dialogue.
Client: I want to upload a file named <filename>.
Server: Proceed/Abort.
Client: I am sending <length> number of bytes.
Client: Here is some data.
.
.
.
Client: I have finished sending data.
- transfer complete -
File download dialogue.
Client: I want to download a file named <filename>.
Server: Proceed/Abort.
Server: I am sending <length> number of bytes.
Server: Here is some data.
.
.
.
Server: I have finished sending data.
- transfer complete -
KNOWN PROBLEMS:
In the SimpleFTP client, the application prompt initially is displayed
twice.
Stale sockets are present if the SimpleFTP server process is forcibly
terminated while there are connected clients.
COMMENTS:
Caveat: although I use the layer terminology of the OSI network model in
describing the components of this program, they all really belong to OSI
application layer.
I have some network programming experience in Java, but this was the first
time I worked on a network programming project in C.
I originally planned to use the frame transmission strategies of using
flags to delimit start and end of a frame [1], for performing Message
transmissions. This model allows the transport layer to take care of
breaking, say, a huge data file, into IP packets. However, I chose later
on to use a fixed length message model, where this application took on the
role of splitting, say, a huge data file into discrete Messages because it
was easier to implement.
I relied heavily on [2] for socket initialization in both server and
client programs, as I was unfamiliar with BSD sockets.
REFERENCES (in MLA citation format):
1. Tanenbaum, Andrew. Computer Networks. Fourth edition. New Delhi, India:
Prentice Hall of India, 2003.
2. Hall, Brian. "Beej's Guide to Network Programming". 8 October 2001. 22
May 2004 <http://www.ecst.csuchico.edu/~beej/guide/net/>.
About
My final project for CMPE-150 at UCSC during Spring 2004.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published