COMS3200 Assignment 1 2023S1 100 total marks, 25% overall course mark Due: 15:00 19 April 2023 1 Preface 1.1 Notes • This document is subject to change for the purposes of clarification. Changes made since the original release will be highlighted in red. • Please post any questions on the course Ed stem page. • It is strongly recommended that all programming tasks are done in Python 3.6.8 or C. 1.2 Revision History • 20 March, 2023: Version 1.0 Released. • 24March, 2023: Version 1.1 Clarifications to startup behaviour, malformed commands and python version. • 29 March, 2023: Version 1.2 Clarifications to commands and queue behaviour. • 31 March, 2023: Version 1.3 Clarifications to commands 2 Part A: Problem Solving Questions This section is worth 25% of the assignment. The scope of this section is chapters 1-3. Show full working for all questions. Marks may be withheld if working is not provided. The question set is located on Blackboard under Assessment =⇒ Assignment 1 =⇒ Part A: Problem solving questions. There is no time limit to submit these answers and multiple resubmissions are permitted. Only the last submitted attempt will be marked. 3 Part B: Wireshark Questions This section is worth 20% of the assignment. This section covers ICMP, HTTP, DNS and DHCP. The question set is located on Blackboard under Assessment =⇒ Assignment 1 =⇒ Part B:Wireshark questions and the capture file is located under Assessment =⇒ Assignment 1 =⇒ Part B: Packet capture File. There is no time limit to submit these answers and multiple resubmissions are permitted. Only the last submitted attempt will be marked. 4 Part C: Socket Programming This section is worth 55% of the assignment. 4.1 Goals You will implement a multi-channel chat application using socket programming in Python 3 or C. You will create two programs; a chat client and a chat server. 4.2 Programs You must use socket and multithreading libraries. The use of any other third-party libraries is not allowed. You must implement all chat logic yourself. If you choose to use Python then you must name your programs chatclient.py and chatserver.py. If you choose to use C then you must name your programs chatclient and chatserver. 4.3 Report You must also submit a plaintext README file named readme.txt. This file must contain: • A brief and high-level abstract detailing your overall approach. • A list of functions you implemented with their respective descriptions. • An overview to how you tested your code. • IEEE references to any code you used and was not written by you. This includes generative AI. 4.4 Requirements 4.4.1 High-level Requirements You must implement a server program which can support concurrent communication between multiple clients across multiple channels. The server must be able to maintain at least three distinct chat channels simultaneously, each of which may contain at least five simultaneous connections. The exact operation of the server’s channels will be specified in an external config file. As clients connect to a channel within the server, they are to be placed in a waiting queue until there is room available for them to join the channel. Once in a channel, clients are able to send messages to other clients within that same channel. Clients are able to specify the username which will be used to identify them within the channel. Your client and server programs must rely on socket and multithreading libraries in either Python or C. If you wish to use another programming language, you must get written permission from the course coordinator. You may use any transport layer protocol but it is highly recommended you use TCP. 2 4.4.2 Functional Requirements The server must be able to be started by one of the two below commands: $ ./ chatserver configfile $ python3 chatserver.py configfile where configfile is the path to the server configuration file. The client must be able to be started by one of the two below commands: $ ./ chatclient port username $ python3 chatclient.py port username where port is the port of the desired channel and username is the name which should be used to identify the client in the chat channel. All lines in the server configuration file must follow the below format: channel where is the name of the channel, is the port that channel should use and is the maximum number of users who can be active at once within a channel. The below requirements must be met: • Each channel must operate on independent sockets. • No two channels can have the same name or port. • No channel should use the ephemeral port. • Channel names cannot begin with a number. • There must be at least three channels in the config file. • Each channel’s capacity must be at least five. If the configuration file is missing, invalid or not specified, then the server process should exit im- mediately with status code 1. Similarly, if the client cannot connect to the server due to malformed arguments or an invalid port number, then the client process should also exit immediately with status code 1. Once the server is running, it will accept incoming client connections. Before clients are permitted to enter their requested channel, they will be entered into a first-in-first-out waiting queue specific to that channel. Once there is a free position in the channel, the longest-waiting client may be removed from the waiting queue and entered into the channel. Upon entering the waiting queue, the below should be displayed on the client’s stdout: [Server message (