This includes both OSI and TCP/IP models theory, internals of HTTP protocol, and Python networking libraries (socket, httplib, urllib, requests etc). For this task you need to create a simple Skype-like REST chat web service and a client for this. A server application need not keep state in some storage, it is enough to keep it in memory for simplicity. A REST protocol should allow to: - Register a new named client (user); - Create, enter, delete a chat room; - Post, update, delete messages into a specific chat room; - Get messages for a chat room (all or only updates since the last known state); Please, develop a simple *nix client-server application in Python that imitates sending short news messages from multiple contributors to a single server. The application has the following requirements. Server must: · Listen on multiple ports simultaneously (configurable) to process messages from multiple clients at the same time; · Support multiple message transmission protocols (TCP and UDP for now, but easily extendable for other protocols; UDP may be implemented as stubs that don’t do anything); · Write down each incoming message to a log (together with all significant info about this message) and send delivery confirmation back to the client. Client must: · Have a possibility for user to enter: o Server IP/port; o The message to be sent; o Protocol to use to send each message (TCP or UDP; UDP may be implemented as stubs that don’t do anything); · Output the information about all sent messages and their delivery status; · If a server is not reachable at the moment of sending a client should retry sending the message. A nice-to-have feature is a command-line user interface.