ChatSystem is an Internet chat system, developed to allow secure communication in work groups. The system is not designed to handle big number of users simultaneously (like eg. IRC). The functions and tools are designed to serve the purpose of group communications.
I started to develop the system using a Linux workstation, the Pico editor, the GNU C++ compiler, coffee, food and a few bottles of beer. After forming the protocol package and UNIX applications the system was put under severe testing to entertain 5 critical persons. After many bug fixes, suggestions and added features the 'final' and 'working' protocol base was born, onto which the Windows applications were finally built.
The adaptation to the Windows environment was less painful than I expected. Some changes had to be made to socket handling and I also added some new features to the system. I used Borland C++ Builder 1.0 as the development environment. After some difficulties in the beginning (let's read those manuals...) it has proved to be an excellent tool for Windows application development. I also discovered the Microsoft Visual Source Safe 5.0 version control system to be an outstanding instrument in software development. My former experiences with SCCS and RCS seem quite lame afterwards.
I have tried to use as standard C++ as possible in implementing the Chat protocol. The C++ implementation is entirely object oriented and hopefully quite easily portable to Java architecture. The only really required service is BSD sockets. Luckily they are supported in almost every platform and also supplied in Java environment.
The Chat protocol is secured and encrypted during network transit. Data flow is secured with PDU numbering and stop-and-go-method. The size of a single protocol data unit is limited to 8 kilobytes for security reasons. The protocol includes connection establishment, synchronization, information transport, data transport, secure password change and disconnecting.
The encryption method is more or less the design of my own creative imagination. The method is by no means 100% proof, but I think it is still quite complex and hard to break. The protocol is, however, built so that it is easy to change the encryption module if it appears to be lousy. A course in cryptology might be in order.
The encryption is based on a key taken from the user's password, a constant key and a pseudo-random number. The key is 32 bits long and the XOR method is applied with the data and key. The pseudo-random number generator is initialized with time and the user's password. The corresponding generators in the client and the server must be synchronized in order for the connection to work properly. Client application's clock is synchronized with the server during the connection establishment. The times shown in the client application are therefore shown in the Chat time supplied by the server application. The user's password is never sent as plaintext over the connection. During the connection establishment the username and password are verified by multiphase handshaking. The handshaking also synchronizes the generators.
At the moment there are two versions of ChatClient: a character based UNIX version and a Windows version with a graphical user interface. In the future I may make a client application that runs as a Java applet. Someone has also mentioned making a client supporting X-windowing, but at this point such a project is not a first priority.
The different client versions are implemented on top of the same protocol interface. In the Windows client the user interface is implemented entirely with graphical components and the UNIX client has an entirely character based user interface, although the versions have similar commands and features.
The UNIX client is implemented using the curses library. I had some difficulties getting used to curses and it is still a bit of a curse to me. Finally the interface turned out to be quite usable and it works on different platforms with different versions of curses.
ChatServer is a simple application built on the ChatProtocol. The protocol automatically deals with most of the functions. The different server versions are designed to work in the background and once the configuration parameters have been set, the server software does not require further attention from the user.
The UNIX server is configured with a parameter file. User account management is done by a different program. In the Windows version the configuration, connection and user account management are combined to one graphical user interface at the actual server. In both versions the server management can be done while the server is running. The implementation of the server base does not involve any special libraries.
ChatSystem is a one man project born entirely out of my interest in software technology. My aim has not been to produce a revolutionary Internet chat system, but to make a simple product with which I can try out various programming techniques and environments and learn network and protocol programming. And, of course, I also wanted to make something that works and may be useful to someone. The system has been under very intensive testing by several people since June 1997 and has worked quite well. Many errors and suggestions have come up during the testing.
Below are links to short user manuals for the client applications and a short feature and configuration list for the server.
Below are listed some errors and new features that will possibly be fixed and seen in future versions of ChatSystem.
The ChatClient can also be run on TUT's UNIX machines from the following paths:
- Lintula (cs.tut.fi):
~olammi/bin/chat/chatc
- Proffa (proffa.cc.tut.fi):
~olammi/bin/chat/chatc
Evaluation versions of ChatServer are also runnable from the following paths:
- Lintula (cs.tut.fi):
~olammi/bin/chat/chats_eval
- Proffa (proffa.cc.tut.fi):
~olammi/bin/chat/chats_eval
Fully functional versions of ChatClient (Beta):
The UNIX client can also be compiled to many other platforms. The client requires curses library and BSD sockets. At the moment the client compiles at least in Linux, Solaris and Digital UNIX environments.
Limited evaluation versions of ChatServer. Allows only two simultaneous client connections to the server. No logging, four user accounts (Usernames: chat, chat2, chat3 and chat4, Passwords: chat), fixed configuration (fixed server ports 5666).
If you are interested in fully functional server versions, ask more by e-mail. The server can easily be compiled to any system that supports BSD sockets (the server is written in standard C++).
This system is still under development, so there may still be some errors. New versions will be published from time to time. If you notice anything to fix in the system, please send e-mail to me. Describe the error or your problem and I will see what I can do about it.
Any feedback will be greatly appreciated.