Skip to content

Latest commit

 

History

History
150 lines (90 loc) · 7.19 KB

readme.md

File metadata and controls

150 lines (90 loc) · 7.19 KB

Contents:

o source code, included in sshell.cc o modules tokenize and tcp-utils as provided previously (note: the module tcp-utils is included because of the function `readline') o a makefile (the default target builds the executable, there are no other targets of interest) o a small file used for testing of file operations from client side(test) o a log file (serverlog.log) which contains the detailed description of server logs. (this file is auto generated for the first time and it will be used by the server for logging purposes)

Change the makefile and compile with -DDEBUG option for an executable that prints debugging output to the standard error stream.

User guide and program description:

The server accepts two kind of clients (that request connections on two different ports), and runs 2 services namely shell server and file server.

There are few command line arguments for the executable. They are:

-s : o This argument takes the port number of shell server. On startup, server takes this argument and creates a socket at this port numer. o When this argument is not supplied, shell server will run on 9002 port by default

-f : o This argument takes the port number of file server. On startup, server takes this argument and creates a socket at this port numer. o When this argument is not supplied, shell server will run on 9001 port by default

-d : o detach mode. o This argument makes the server to log its status and its output,error to console (Terminal) o When this argument is not supplied, server logging will be done into a log file(serverlog.log)

-D : o When this argument is supplied, server runs in debug mode. it sleeps for read and write operations

Once launched, the executable behaves as follows:

o The server on startup, creates a log file (if it is not available/ created before)

o The server is not interactive, any commands entered on server's terminal are ignored and no response will be sent back

o Server runs two services, and listens on two ports. Whenever a new client connection arrives, server creates a posix thread which is solely responsible for serving client requests

NOTE: All responses from file server and shell server will be of the following form

	status code message

where o status : which is one of (OK/ERR/FAIL), used to determine if the command was a success or failure o code : check for respective code of each command in the below section o message: readable description of code.

FILE server:

o Below are few commands which are recognised by file server

FOPEN: o This command takes in file name (can be relative path and absolute path) as argument and opens the file at server side

ARGUMENTS    : o filename (can be relative or absolute)

RETURN VALUE : o  returns file descriptor of opened file as response to client if it is opened successfully.
	       o   returns -1 / Error code  and appropriate message if it encounters any error	

TESTS       :  o 1) FOPEN test (test is the file name which is at root folder of submission)
		 2) FOPEN blah (blah an unkown file which doesnt exist anywhere)

OUTPUT      :  o 1) OK 3 success (OK - command executes successfully, 3 - file descriptor, sucess - success)
		 2) ERR 2 no such file/directory

FREAD o This command takes in file descriptor as argument and attempts to read the file at server

ARGUMENTS    :o file descriptor of previosly opened file

RETURN VALUE: o  returns number of bytes read and actual bytes read if read operation is successful.
	      o  returns -1 / Error code  and appropriate message if it encounters any error	
	      o  Returns ERR -1 no such file/ directory if the specified file descriptor is not opened at server.

TESTS       :  o 1) FREAD 3 10(3 is descriptor of file name "test" which is opened in above step)
		 2) FREAD 9 10(9 is random value which doent relate to any opened file descriptor)

OUTPUT      :  o 1) OK 10 hello Ajay(OK - command executes successfully, 10 - number of bytes read, hello Ajay- 			            10 bytes of data from file)
		 2) ERR 2 no such file/directory	

FWRITE o This command takes in file descriptor as argument and attempts to write data in the file at server

ARGUMENTS    :o file descriptor of previosly opened file

RETURN VALUE: o  returns o on successful execution.
	      o  returns -1 / Error code  and appropriate message if it encounters any error	
	      o  Returns ERR -1 no such file/ directory if the specified file descriptor is not opened at server.

TESTS       :  o 1) FWRITE 3 10(3 is descriptor of file name "test" which is opened in above step)
		 2) FWRITE 9 10(9 is random value which doent relate to any opened file descriptor)

OUTPUT      :  o 1) OK 0 success (OK - command executes successfully, 0 - successfull, sucess - success)
		 2) ERR 2 no such file/directory

FSEEK o This command takes in file descriptor as argument and attempts to seek data in the file at server

ARGUMENTS    :o file descriptor of previosly opened file

RETURN VALUE: o  returns o on successful execution.
	      o  returns -1 / Error code and appropriate message if it encounters any error	
	      o  Returns ERR -1 no such file/ directory if the specified file descriptor is not opened at server.

TESTS       :  o 1) FSEEK 3 10(3 is descriptor of file name "test" which is opened in above step)
		 2) FSEEK 9 10(9 is random value which doent relate to any opened file descriptor)

OUTPUT      :  o 1) OK 10 success (OK - command executes successfully, 10 - advanced position of file pointer, 			    sucess - success)
		 2) ERR 2 no such file/directory

FCLOSE o This command takes in file descriptor as argument and attempts to close file at server

ARGUMENTS    :o file descriptor of previosly opened file

RETURN VALUE: o  returns o on successful execution.
	      o  returns -1 / Error code  and appropriate message if it encounters any error	
	      o  Returns ERR -1 no such file/ directory if the specified file descriptor is not opened at server.

TESTS       :  o 1) FCLOSE 3(3 is descriptor of file name "test" which is opened in above step)
		 2) FCLOSE 9 (9 is random value which doent relate to any opened file descriptor)

OUTPUT      :  o 1) OK 0 success (OK - command executes successfully, 0 - success, success - success)
		 2) ERR 2 no such file/directory

SHELL server:

o This typical shell server takes in a command from client and then executes the command at server and doesnt send 	  back the actual response of the excuted command, but client can still request output of previous command by using
  CPRINT. 

TESTS       :  o 1) ls 
		 2) CPRINT (if ther is no command in current session it returns "ERR 5 input/output error")

OUTPUT      :  o 1) OK 0 success
		 2) list of all files at server location

A typical zombie reaper is set up as signal handler for SIGCHLD. This reaper is inhibited temporarily when we actually want to wait for child completion (in function run_it) by setting an empty function as SIGCHLD handler in the master process. As soon as the child responds we restore the normal handler. (Note: we do need the dummy, empty handler as the behaviour of setting SIG_IGN as handler for SIGCHLD is undefined according to the POSIX standard.)