<html> <head> <title>GAEN</title> </head> <body text="#FFFFFF" bgcolor="#000000" link="#C0C0C0" vlink="#C0C000"> <hr> <h1>GAEN - An Advanced Concurrent Teleconferencing System</h1> <h2><a href="http://www.infoiasi.ro/~busaco">Sabin Corneliu Buraga</a></h2> <p align=right>(<i>"Symposium on Automatic Control and Computer Science - SACCS'98 Proceedings"</i> - November 1998, Iasi)</p> <hr> <h4>Abstract:</h4> <ul> GAEN is an advanced concurrent teleconferencing system which facilitate easy and real-time communications between multiple persons. In fact, GAEN is a network of talkers based on Internet TCP/IP protocols suite (implemented with sockets). GAEN system is based on NUTS original program written by Neil Robertson. After two years of experiments and work, it accumulates many important and useful additions: GSL script internal language, a minimal shell, response to events, support for natural talk: voice tones, socials and macros. GAEN is implemented in standard C language under UNIX and it is distributed freely on Internet. There are many operational GAEN talkers used by students, researchers and other persons. In the present, GAEN systems are running on Linux PC machines and they became very popular in in the academical environments. </ul> <h4>Keywords: teleconference, concurrency, UNIX, event-driven talker, Internet, scripts</h4> <h2>General presentation</h2> <p align=justify> Like any other Internet services, GAEN uses the TCP/IP protocols, implemented with BSD sockets. The most important GAEN services are: <ul> <li> <b>support for real-time and concurrent communications</b> between a variable number of persons, with facilities like private messages, multiple conferencing (private or public) rooms, an users ranks (levels) based system <li><b> electronic mail</b>: sending and receiving of electronic messages (texts) between the users and talkers via GAEN systems <li><b> remote procedures calls</b>: an user can call commands which will be executed on the GAEN host machine <li> <b>GAEN network</b>: multiple GAEN systems can be interconnected respecting a special protocol </ul> <p align=justify> GAEN's philosophy is simple: in fact GAEN is a server (daemon) which provide easy to use and powerful commands to facilitate the conversation between users connected to talker via clients, like telnet programs. GAEN needs three open ports: the main port and the auxiliary port (for the administrators) are using to connect users to this teleconferencing service and a netlink port is used for connections between similar GAEN systems. GAEN provides its own communication protocol used by interconnected talkers. This protocol is based on a message passing interface (via netlink ports). GAEN has conferencing rooms and dimensions (collections) of rooms and gives to each user the possibility to execute a set of commands/actions such as .say, .think, .tell, .whisper, .smail etc. to express common natural human behaviour or to move to another room or dimension and so on (all commands are prefixed by a period). Of course, an user can talk to a particular person or a group of persons and he/she can use customizable macros or a built-in set of macros and social commands (e.g. shake hands, smiles, huggles, kisses etc.). <h2>Connecting</h2> <p align=justify> The users have a free access, but after connecting they must use .set to complete their personal information (real name, age, gender, e-mail address, country). <p align=justify> Also, the users can enter a profile with additional information. To connect, the users must use telnet and they must type the talker's address followed by a port (e.g. telnet vela.uaic.ro 7000). <p align=justify> At the connecting time, the user must type a name and a password (each user has an account, very similar with UNIX accounts). To avoid the hackers attacks, we use a sophisticated and efficient system to deny insecure (easy to guess and too simple) passwords. The users have the possibility to change their own passwords. The talker's administrators can change other users' passwords, too. <p align=justify> Following the society model, each user has a level (GUEST, SOUL, ..., SPIRIT, SAINT, GOD). The number of levels is nine, but it can be modified. For each level, there are some commands available to use. Of course, a higher level offers more commands and posibilities than an inferior one. <p align=justify> In addition, each user has a short description, some status flags (colour, muzzled, visibility, banned, ignoring other users and so on). Some flags and other information (total login time, last login time, last connecting site) are stored in files. For superior levels, an user has one or more clones (to hear the conversation in multiple rooms). <p align=justify> Like in UNIX environments, there are commands to list all connected users (.who and .people), their status and profiles (.status and .examine), their remote host address etc. We written a command to get the real identity (the account and the real name) of the user, if it's possible. <p align=justify> Also, the talker provides a robuste system to send and receive mail from local or remote (from another linked talker) users. The users may have a number of restrictions (concerning the execution of certain commands: to get help, to review the room conversation, to be promoted or to create clones etc.) and a number of run commands files (a sort of scripts) which contain GAEN commands. These commands files can be executed by user (with .run) or when an event occurs. <h2>Rooms</h2> <p align=justify> Each room has a description, a short topic of conversation, the messages board, a review buffer of the conversation, an access: public or private and a state of visibility: hidden or not. Each room has links to another rooms or to an external talker. The rooms' names and descriptions are loaded from configuration files at the boot time. We don't need to recompile the sources to modify the rooms links, dimensions or descriptions of rooms. We can specify a default topic for each room (all of these information are stored in text files and loaded at the booting time). <h2>Administration</h2> <p align=justify> A GAEN system has one or more administrators ('superior' users of highest level). Powerful commands assure the clever management of users: promotions and demotions, the possibility to ban/unban sites and users or to delete users using certain criteria, allowing users to use some facilities etc. Also, the administrators can view and modify the internal parameters of the talker using certain commands or changing the configuration files. The superior users can consult the talker log files, too. <h2>Original concepts and development</h2> <p align=justify> The list of all original and advanced implemented concepts is long. We'll enumerate only the most important of them: <ul> <li><b> GSL (GAEN Simple Language)</b> <ul><p align=justify> GAEN includes a high-level scripting programming language which offer run commands files executed by the logged on users, user private variables, test (.if) and cycle (.for) statements. Using the flexible .if command we can test the presence of an user, some status flags of an user or talker's flags etc. It's possible to iterate the execution of a command using .for and .execute commands. </ul> <li><b> gsh (GAEN SHell)</b> <ul><p align=justify> A minimal set of UNIX operating system commands is available: ls, more, tail, grep, mkdir, cd, chmod, who, last, cp, mv etc. </ul> <li><b> events</b> <ul><p align=justify> Some actions of the users generate an event: log-in, log-out, shout, broadcast of an important message and so on. For each event, the users are able to associate a command to be executed when that event will occur. </ul> <li><b> user's environment</b> <ul><p align=justify> The possibility to save/restore some user information flags (such as ignoring all tells flag, ignoring sending of pictures, the tone of the voice etc.) in a special file. </ul> <li><b> internal hosts file</b> <ul><p align=justify> To avoid the waiting of response from name servers to obtain host name of a connected user, we have the facility to consult an internal file with IPs and host names (in the present, the hosts file counts more than 300 entries). </ul> <li><b> fun</b> <ul> <li>three interesting popular games: Hangman (two (Romanian and English) dictionaries of more than 7000 words each), Puzzle and Paintball <li>prayers, guessing, kill fun methods <li>quotes <li>greetings at pre/post login time <li>ASCII pictures <li>renaming users and substitution of true level/site <li>blackhole simulation </ul> </ul> <h2>Examples</h2> <p align=justify> Some examples of commands files using GSL and gsh facilities will follow: <oL> <li>This script file is useful to delete all users without profiles: <pre> .set =} userfiles .gsh scan } .if !entpro { : .delete { </pre> <p align=justify> The .gsh scan command scans all entries of a directory (in this case, the directory name is stored in a variable). <li> A script to send mail only to users who are not playing Puzzle: <pre> .arun 0 .if !puzzle { : .smail { You don't like to play Puzzle? .for 0 users </pre> <li> A backup utility script to save the user(s) files to another location: <pre> .arun 1 .note This script expects in { the user name .arun 1 .set =} { .arun 1 .note Copy in } variable because { is modified by .gsh scan .arun 1 .gsh scan userfiles .run 2 .arun 2 .note Copy the filename stored in { into backup directory... .arun 2 .note ...if filename contains the username stored in } .arun 2 .gsh cd userfiles .arun 2 .if in{ } : .gsh cp { ../backup .arun 2 .gsh cd .. </pre> <p align=justify> We can run the commands file 1 only to backup the files of Sabin, Mituc and Beavis: <pre> .for 1 Sabin Mituc Beavis </pre> <p align=justify> To backup files of all connected users we just are writing: <pre> .for 1 users </pre> <p align=justify> To run the script only for an user: <pre> .set ={ Lumi .run 1 </pre> <li> Some actions automatically executed when an event occurs: <pre> .event shout .run 7 .arun 7 .social shake * .arun 7 .tell * I'm happy, but it's not necessary to shout too much! .arun 7 .macro cga </pre> <p align=justify> The * variable contains the name of user who commit an event and .macro cga means a colorful 'Congratulations!' message. </ol> <h2>Users and distribution </h2> <p align=justify> Without users, GAEN cannot exists. Since august 1996, we are continuing to experiment with some versions of GAEN. In the present, the GAEN teleconferencing systems are running on the sites of 'A.I.Cuza' University of Iasi, at the Faculty of Computer Science (<tt>fenrir.infoiasi.ro 3300</tt>) and the Faculty of Geography and Geology (<tt>vela.uaic.ro 7000</tt>) and the sites of 'G.Asachi' Technical University of Iasi, at the Faculty of Automatic Control and Computer Science (<tt>hal.cs.tuiasi.ro 7777</tt>) and the Faculty of Electronics and Telecommunications (<tt>zeta.etc.tuiasi.ro 7000</tt>). The enumerated talkers build the GAEN system network, very popular among students and professors. <p align=justify> The researchers of the Institute for Information Science - Iasi branch are using a version of GAEN system, too (on <tt>iit.iit.tuiasi.ro 7000</tt>). <p align=justify> We do not have a strict control of number of installed GAEN systems because the sources and the additional files are distributed freely on Internet at this Web address: <a href="http://www.infoiasi.ro/~busaco/gaen/">http://www.infoiasi.ro/~busaco/gaen/</a>. GAEN distribution package includes the source files (more than 15000 lines of code) written in standard C for UNIX systems (to compile them we are using the GNU C compilers), configuration, additional (quotes, pictures etc.) and help files. The OS/2 version of GAEN is available on request. <p align=justify> There are more than 700 frequent 15-50 aged users from Romania (Iasi, Bucuresti, Craiova, Brasov, Cluj, Bacau, Galati, Suceava), United States of America, Great Britain, Finland, Denmark, Moldova Republic, Israel etc. <p align=justify> The current version of the teleconferencing system is GAEN Goya 12, which includes the changed logs files notify facility. In the future, we intend to develop an AI support tool to extract the conclusions from the conversation lines based on some predefined keywords. <h2>Slides</h2> <ul> <li><a href="slide1.html">Slide 1 - GAEN's services</a> <li><a href="slide2.html">Slide 2 - Original concepts and development</a> <li><a href="slide3.html">Slide 3 - Examples of GSL scripts using gsh facilities</a> <li><a href="slide4.html">Slide 4 - Capture of a OS/2 telnet session of GAEN</a> </ul> <h2>REFERENCES</h2> <p align=justify> [1] W.Richard Stevens, Advanced Programming in the UNIX Environments, Addison-Wesley, 1992 <p align=justify> [2] Marc J.Rochkind, Advanced UNIX Programming, Prentice-Hall, New Jersey, 1985 <p align=justify> [3] K.Blakeslee, I.Sugarbread, The Evolution of Personal Computing and Communication, IFIP, 1994 <p align=justify> [4] Andrew S.Tanenbaum, Retele de calculatoare, Computer Press Agora, Tg.Mures, 1997 <p align=justify> [5] Charles L.Hedrick, Introduction to the Internet Protocols, CSFG, Rutgers University, 1987 <p align=justify> [6] Jean-Marie Rifflet, UNIX - 99 exercices corigees, Ediscience, Paris, 1996 <p> <hr> </body> </html>