ChatLogo

ChatSystem

The Ultimate Way to Improve Your Work Performance

Olli Lammi <olammi@iki.fi>

(Last updated 7.1.1999)

[English version] [Finnish version]

[Information] [Features] [User manuals] [Errors and future prospects] [Download] [Feedback]

General information

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.

Development tools and methods

The starting point for the system was a client-server architecture with multiple multi-platform clients connected to a single server. The system is based on a platform-independent protocol package implemented with C++. Different client and server versions are implemented using the protocol package. At the moment the UNIX and Windows 95/NT clients and servers are ready for use. If I have enough time, I also intend to develop a client working as a Java applet. In order to make the Java client work, the protocol package has to be ported to Java.

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.

Chat protocol

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.

ChatClient application

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 application

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.

Finally

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.


Features


User manuals (under construction)

Below are links to short user manuals for the client applications and a short feature and configuration list for the server.


Errors and future prospects

Below are listed some errors and new features that will possibly be fixed and seen in future versions of ChatSystem.

Found errors

New features


Download

ATTENTION!

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

ChatClient:

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.

ChatServer:

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++).


Feedback

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.


Olli Lammi LeHTori - HTML OK