summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2013-04-06 13:14:43 +0200
committerPaul Buetow <paul@buetow.org>2013-04-06 13:14:43 +0200
commitf038883a6e004eb4312ba1e761da06b596e14d3f (patch)
tree358f989cac07885cfa913c66a0d563d18c021b26 /README
parent98eac951f8087b213f5850bd126dcb279db360a8 (diff)
tagging ychat-0.7.7.0ychat-0.7.7.0
Diffstat (limited to 'README')
-rwxr-xr-xREADME478
1 files changed, 332 insertions, 146 deletions
diff --git a/README b/README
index af88206..038c4f6 100755
--- a/README
+++ b/README
@@ -1,7 +1,8 @@
-yChat++; Homepage: www.yChat.org; Version 0.6
+yChat; Homepage: www.yChat.org; Version 0.7.7-RELEASE
+
Copyright (C) 2003 Paul C. Buetow, Volker Richter
+Copyright (C) 2004, 2005 Paul C. Buetow
-----------------------------------------------------------------
-
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
@@ -15,94 +16,297 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-----------------------------------------------------------------
-0.0.0 YCHAT++ TABLE OF CONTENTS
+YCHAT TABLE OF CONTENTS:
+
+0.0.0 YCHAT FEATURES //<<
1.0.0 REQUIREMENTS
1.1.0 TESTED PLATFORMS
-1.2.0 IMPORTANT NOTES
-1.3.0 HOW TO OBTAIN YCHAT++
+1.2.0 IMPORTANT NOTICES
+1.3.0 HOW TO OBTAIN YCHAT
1.3.1 INSTALLATION
-1.4.0 HOW TO USE SCREEN WITH YCHAT++
+1.3.2 INSTALLATION QUICK-START
+1.3.3 MYSQL SETUP //<<
+1.4.0 HOW TO USE SCREEN WITH YCHAT
1.5.0 CUSTOMIZATION
1.6.0 FILES
+1.7.0 WRITING BUG REPORTS
1.8.0 CONTACT
+1.9.0 YHTTPD CODE BASE GENERATION //<<
+
+//<<*
+0.0.0 YCHAT FEATURES
+
+- Its free & portable -
+yChat is developed under the GNU general public license and is based on GNU
+tools (gcc, gmake), other open source library stuff (such as libncurses etc.)
+and should run on any POSIX capable operating system (such as all Linux based
+systems, FreeBSD, NetBSD, OpenBSD and other BSD-Systems and on UNICES like
+IRIX, HP-UX, Solaris etc.).
+
+- There is no need for special chat clients -
+yChat is web based, that means clients may only connect to the chat server
+with an normal web browser such as Microsoft Internet Explorer or any Gecko-
+Engine powerd browsers like Mozilla, Firefox, Camino etc.
+
+- It has features of a real HTTP webserver -
+yChat runs completely stand alone and does not need another webserver to build
+on like Apache and does not need to be run via any kind of CGI. yChat creates
+its own socket on a customized port (standard port: 2000) and seems to be a full
+featured HTTP web server to the clients (web browsers).
+
+The yChat code base can be converted to an yhttpd code base automaticaly. yhttpd
+is the webserver subset of yChat which runs completely stand alone and provides
+normal websites to the net. It also supports Common Gateway Interface (CGI)
+scripting.
+
+- Its fast and secure -
+yChat is written in C++ which is faster than any Java based Chat-Server or any
+server written in a scripting language like PHP, Python or Perl. As the
+internal data structures hash maps are used to garuantee searching certain
+values in O(1) amount of time. If a hash maps gets full, it will be rehashed.
+Currently, yChat has been measured providing over 1000 hits/requests per second
+on a FreeBSD based server box while using less than 2% of CPU usage
+on a Athlon XP 1900+. Performance seems to be limited by your bandwith only.
+Also, each user gets its own session id (random string) with a standard length
+of 50 chars to authenticate each logged in user. The length of the session id
+can be redefined as well. Also, the session id will get md5-hashed optionally
+so thats even harder to reverse engineering the session ids of other users.
+
+- Its HTML template based and easy to customize via XML based configuration -
+All HTML sites are predefined as HTML-Template files and can be easily modified
+to use with an customized web design. Also, a lot of yChat preferences can be
+set in the main configuration file (ychat.conf). ychat.conf is completely written
+in XML 1.0 which makes it easier to use the configuration options in programs of
+3rd persons which may want to write some usefull tools for yChat.
+yChat caches all HTML and web images to improve overall performance. If needed, the
+cache can be cleared to recache new versions of the template files.
+
+- Its language template based -
+The administrator can easily create a new language in which all system messages
+appear to the Chat-User. The predefined languages is english but others can be
+added easily. The language can be edited in the XML based configuration file.
+
+- MySQL based database -
+Registered users are stored in a MySQL database. C++ Programmers may feel free
+to replace the database wrapper class (data.h) with another database routines
+to use other databases such as PostgreSQL, SQLite or a text based database etc.
+If wished, you can disable database support in the pre-compile options.
+
+- It has an administration interface -
+yChat includes an ncurses based administration interface which tracks some
+interesting statistics and system messages and enables you to do certain
+administrative tasks. In addition, you can switch to the CLI (command line
+interface) mode of the administration interface in order to be provided with
+more available functions (like keeping track of the current system usage etc.).
+If you dont like ncurses and/or the CLI you can disable both options in the pre-
+compile options.
+
+- It has logging capabilities -
+The logging manager keeps track to all yChat system messages (such as users
+wich log in and out, modules which are loaded, MySQL queries etc.). Also, an
+Apache-Style combined log file format is created by yChat (you can parse this
+logfile with any Apache logfile parser like awstats etc.). And last but not
+least, all public messages of all available rooms will be logged to disk as
+well . To improve performance, you can define the logging puffer (standardly
+new logs will be written to disk after each 20 lines). If you want to log
+everything immediately, you can reset this option to 1 in ychat.conf.
+
+- Its modular through own command and dynamic HTML engine -
+All chat commands are realized through dynamic loadable module files which can
+be recompiled and reloaded without restarting the whole yChat server. Also
+HTML-Sites with certain tasks can be compiled as a module like
+mods/html/yc_register.so, mods/html/yc_options.so and mods/html/yc_colors.so
+etc. so you can also program your dynamic yChat websites in C++.
+
+- Its multi threaded (POSIX threads) -
+There is only one main process which spawns several threads, each for its own
+unique task. For example one thread is used to handle the socket manager which
+waits for incoming TCP/IP requests, another thread schedules the system timer
+which proves if clients are still active or frees not needed memory in certain
+time intervals (see also "Garbage collector"). Also, each Chat-User gets it own
+thread. There is no need of memory wastage by creating for each task a new
+process. All User-Threads are managed by a thread pool to avoid CPU wastage
+creating every time a new thread by reusing thread objects which have done its
+jobs already and have been readded into the queue of the thread pool. The
+standard sizes of the queue and the total pool size can be set in ychat.conf.
+
+- Its using a smart garbage collection engine -
+All users and rooms which dont have to be kept in the main memory (because the
+user has logged out or the room has been destroyed because it was empty) will
+not be deleted immediately but be placed for about 10 minutes in the yChat
+garbage collector. Each time a new room is created the systems checks the
+garbage to reuse an inactive room object. If a certain user wants to log in, the
+system checks if he is already present in the garbage collector. If yes, he will
+be reactivated without wasting expensive database queries to fetch the user's
+options. This improves overall performance on heavily loaded yChat servers if a
+lot of user and room objects are created and destroyed frequently.
+//*>>
1.0.0 REQUIREMENTS:
-- gcc 3.2
- The GNU C++ compiler.
+- GNU GCC G++ 3.4 or 3.3 or 3.2 or 3.1
+ The GNU C++ compiler. G++ version 3.0 or 2.x does NOT work.
+
+- GNU make 3.80 (gmake) or higher
+ If you dont have a gmake executable but make is gnu make then you need
+ to add a symlink or alias from gmake to make.
+ yChat Makefiles only have been tested with GNU make and may not work with
+ other make versions.
+
+- SGI STL extension
+ Includes ext/hash_map which may be already default on every Linux distro.
+ On *BSD you have to install it first before compiling. On FreeBSD
+ /usr/ports/devel/stlport is your friend.
-- mysql-client 4.x ( 3.x may do too )
+//<<*
+- mysql-client 4.x (3.x may do too but is not supported)
Includes libmysqlclient and the mysql.h header files.
+//*>>
- ncurses 5.x
Includes libncurses and the ncurses.h header files.
-- screen
+- Screen
Only needed if yChat should run in background with
- ncurses enabled.
+ ncurses or CLI enabled.
+
+- Perl 5.x
+ Is needed for some scripts. Is not needed if you use precompiled binaries.
1.1.0 TESTED PLATFORMS:
-The following platforms have been tested with success:
+The following platforms have been tested with success. If you find out that
+a listed platform did not work at all please contact me:
+
+ Operating system (arch) GNU G++ GNU make
+- FreeBSD 5.3-RELEASE (i386) 3.4.2 3.80
+- FreeBSD 5.2.1-RELEASE (i386) 3.3.3 3.80
+- FreeBSD 4.10-RELEASE (i386) 3.4.1 3.80
+- FreeBSD 4.9-RELEASE (i386) 3.3.4 3.80
+- Gentoo Linux 2004 (i386) 3.3.2 3.80
+- OpenBSD 3.6 SMP (i386) 3.3.2 3.80
+- Red Hat Linux 8.0 SMP (i386) 3.2-7 3.79
+- Slackware Linux 10.0 (i386) 3.4.0 3.80
+- SUSE Linux 9.0 (i386) 3.3.1 3.80
+- SUSE Linux 8.1 (i386) 3.2 3.79.1
-- Linux with GCC 3.2.0, GNU make 3.79.1
-- FreeBSD 5.1-RELEASE-p2, GCC 3.2.2, GNU make 3.80 ( standard make does not seem work on FreeBSD ).
+Other platforms like Linux based systems, other BSD-Systems or UNICES
+are very likely to work too.
-1.2.0 IMPORTANT NOTES:
+1.2.0 IMPORTANT NOTICES:
Before you compile the source you have to be sure to use at least GCC
-version 3.x with pthreads enabled. ( Type gcc -v to check it ).
-GCC 2.95 did not work while testing on linux and WON'T BE SUPPORTED!
-If you like to support yChat++, please write us an email and tell what
-you can/like/would help ;-]. Please also take a look at the yChat++
+version 3.1 with pthreads enabled. ( Type gcc -v to check it ).
+GCC 2.95 and 3.0 did not work while testing and WON'T BE SUPPORTED!
+If you like to support yChat, please write us an email and tell what
+you can/like/would help ;-]. Please also take a look at the yChat
homepage which is located at http://www.yChat.org.
-1.3.0 HOW TO OBTAIN YCHAT++:
+1.3.0 HOW TO OBTAIN YCHAT:
yChat can be downloaded as a source package or through CVS.
The packages are located at http://www.yChat.org -> Sourcecode ->
-Packages or go to http://programming.buetow.org/CPP-yChat .
+Packages or go to http://pub.buetow.org/yChat/CPP-yChat .
For CVS download type:
-cvs -d:pserver:anonymous@cvs.ychat.berlios.de:/cvsroot/ychat login
+cvs -d:pserver:anonymous@buetow.org:/usr/home/cvs/cvsroot login
( You will be asked for a password. Use "just enter" ).
-cvs -z3 -d:pserver:anonymous@cvs.ychat.berlios.de:/cvsroot/ychat co \
- ychat
-( The sources will be copied into your local folder. However, if you
- want to obtain the yChat++ Basic sources then replace "ychat"
- "ychat-basic" ).
+vs -z3 -d:pserver:anonymous@buetow.org:/usr/home/cvs/cvsroot co ychat
+( The sources will be copied into your local folder )
-cvs -d:pserver:anonymous@cvs.ychat.berlios.de:/cvsroot/ychat logout
+cvs -d:pserver:anonymous@buetow.org:/usr/home/cvs/cvsroot logout
( Logs your CVS session out ).
Now you may continue with the installation.
1.3.1 INSTALLATION:
-If you dont want to use yChat's ncurses based administration interface
-you may remove the #define NCURSES line in the glob.h and enable
-#define SERVMSG and #define VERBOSE instead.
+Invoke "./configure". Afterwards you will get prompted with the before-compile
+options of yChat. After choosing those options you are ready to type "gmake"
+afterwards. See below what gmake is doing.
+
+//<<*
+If you have choosen MySQL database support, then take a look at section 1.3.2
+how to setup a valid database table. Be also sure to enter the valid MySQL
+accessing data in the yChat configuration file which is normally located in
+the etc/ychat.conf file if not changed by you with the yChat configurator.
+//*>>
+
+You may also invoke gmake with the following options (the PREFIX can be set
+in the yChat configurator which will be launched by the top configure script
+or gmake config):
+
+ gmake or gmake all (compiles everything, also modules and runs "gmake mail")
+ gmake base (only compiles the base)
+ gmake base_start (only compiles the base and starts the server)
+ gmake clean (cleans everything)
+ gmake clean_base (only cleans the base obj and rpo files)
+ gmake clean_modules (only cleans the modules .so files)
+ gmake config (runs yChat configurator)
+ gmake gpl (shows the GNU General Public License)
+ gmake help (shows all available ychat gmake targets)
+ gmake mail (sends a mail to the yChat developers containing build opts.)
+ gmake modules (only compiles modules)
+ gmake mrproper (same as gmake clean plus removing all temp files)
+ gmake setup (runs all configure scripts and afterwards gmake all)
+ gmake start (compiles everything and starts the server)
+ gmake stats (generates ychat statistics)
+ gmake version (shows the current version of yChat)
+//<<*
+ gmake yhttpdbase (generates an yhttpd code base)
+//*>> (See section 1.9 to read about this marks)
+
+Example: "gmake all install clean" compiles everything, installs it to PREFIX
+and cleans the source directories.
+
+Now its time to run the server with ./bin/ychat.
+
+Aferwards point your webbrowser to http://yourip:port !
+
+... have fun :-).
-Now invoke "./configure" and afterwards "make", edit the conf.txt ( be
-sure to enter a valid mysql account ) host.
+1.3.2 INSTALLATION QUICK START:
-Now we want to compile all the dynamic loadable modules of ychat.
-Invoke "cd mods && ./compile.sh && cd -". All modules should get
-compiled.
+If you in hury, then you may just type gmake setup. In the yChat configurator
+you may just choose all the default values. If done, yChat will get compiled
+and is ready to run with ./bin/ychat!
-Now its time to run the server with ./ychat.
-Then point your webbrowser to http://yourip:port/index.html ( ignoring
-the index.html on the end of the url will not work! ).
-... have fun :-).
+//<<*
+1.3.3 MYSQL SETUP
+
+If you chose to use MySQL database support you have to create a valid database
+to use with yChat.
-1.4.0 HOW TO USE SCREEN WITH YCHAT++:
+Create a new MySQL database called 'ychat' and type the following command into
+a MySQL command line client of your choice:
+
+USE ychat
+CREATE TABLE `user` (
+ `uid` int(10) NOT NULL auto_increment,
+ `nick` varchar(30) NOT NULL default '',
+ `password` varchar(30) NOT NULL default '',
+ `color1` varchar(30),
+ `color2` varchar(30),
+ `email` varchar(50) default '-',
+ `registerdate` varchar(30) default '-',
+ `logincounter` varchar(10) default '0',
+ `status` char(1) default '3',
+ PRIMARY KEY (`uid`),
+ KEY `uid` (`uid`)
+) TYPE=MyISAM;
+GRANT ALL PRIVILEGES ON ychat.* to ychat@localhost IDENTIFIED BY "yctest";
+
+This database uses the default MySQL access informations which are stored in the
+ychat.conf file.
+//*>>
+
+1.4.0 HOW TO USE SCREEN WITH YCHAT:
If you are running yChat in ncurses mode you might want to install
the tool which is called "screen". This will enable you putting the
@@ -111,11 +315,11 @@ and reusing the interface later through another terminal.
Just do:
- screen -S ychat ./ychat ( creates a new session and starts ychat in it )
- strg+d+a ( will detach the ychat session )
+ screen -S ychat ./bin/ychat ( creates a new session and starts yChat in it )
+ ctrl+d+a ( will detach the yChat session )
( closing the terminal )
( opening a new terminal )
- screen -r ychat ( will return you to the ychat process )
+ screen -r ychat ( will return you to the yChat process )
Screen will terminate automaticaly if all processes in its sessions are
terminated.
@@ -125,131 +329,107 @@ For a closer look read the screen manual page ( man screen ).
1.5.0 CUSTOMIZATION:
If you like to customize the design/layout/language of yChat, you will have
-to edit msgs.h and glob.h before you compile the sources. Afterwards you can
-change the html-template files which are placed in the html/ subdirectory and
-the language-template files which are placed in the lang/ subdirectory.
-Dynamic loadable modules can be found in the mods/ subdirectory. ( chat
-commands are realized through modules too ).
-
-1.6.0 FILES: ( This list is not complete )
-
-conf.txt - The yChat configuration file. ( read by conf.cpp ).
-
-base.cpp - Encapsulates vector fields of room's or user ( may be later
- hash_maps ) and provides methods for manipulating data
- objects.
+to edit src/msgs.h and src/glob.h before you compile the sources. Afterwards
+you can change the html-template files which are placed in the html/
+subdirectory and the language-templates which are placed in the XML config
+file (etc/ychat.conf).
-hmap.cpp - The hash map implementation which is a very fast data
- structure. is needed for saving users, rooms and so on.
+Notice, that you dont have to edit the src/glob.h file by hand any more, its
+already done by the top ./configure script for you.
-main.cpp - This includes the required manager headers for starting
- the server and finally regulates the correct starting.
+You can edit the etc/ychat.conf to fit your needs. If you dont want to change
+the config file, then you also can use ychat start parameters.
-modl.cpp - The module loader. Stores pointers of all dynamic loaded
- yChat modules in a hash map object and loads new modules
- if desired or returns their pointers.
+Exmpl: ./bin/ychat -o chat.database.password secretpassword
-pool.cpp - The implementation of the thread pool. all threads are stored
- in a queue. Each thread will be reused if the assigned job is
- finished.
+You can also use multiple words for a specific option.
-reqp.cpp - This class implements the http request parser. If a client
- starts a request to the server the reqp class will be
- invoked.
+Exmpl: ./bin/ychat -o ychat.version "word1 word2 word3"
-room.cpp - Specifies a chat room. For each chat room an instance of
- this class exists.
+will overwrite the default database password value of the ychat.conf. You can
+do this with every configuration element by adding several -o option value
+arguments to the start command.
-thrd.cpp - This class is needed by sock.cpp while creating a POSIX thread.
- All data which a thread needs to do its tasks are stored in a
- thrd object and then a pointer to it will be passed to the
- POSIX thread function.
+Dynamic loadable modules can be found in the mods/ subdirectory. (chat
+commands are realized through modules too). Sources of modules can be found
+in src/mods instead. If you want to create a new module just create a new
+.cpp file and run in src/mods the ./configure script again. Next time
+you run gmake your new module gets compiled.
-user.cpp - Specifies a chat user. For each chat user an instance of
- this class exists.
+All messages defined in the msgs.h file contain server messages only ( a chat
+user never wont read them, only the administrator will get to see them ).
-Abstract classes:
+1.6.0 FILES:
-cont.cpp - All classes which need to store "key - value" data sets
- inherit from this class. ( cont for content ).
+etc/ychat.conf - The yChat configuration file
+html/* - The html template files
+src/* - The yChat base sources
+src/mods/* - The dynamic loadable modules sources
+scripts/* - Some nice scripts needed for building & co.
-name.cpp - All classes which own a private member string name inherit
- from this class. It also provides public get_name and
- set_name methods.
+The following is created by building yChat:
+obj/* - The object files of the compiled yChat base
+mods/* - The compiled dynamic loadable modules
+bin/ychat - The yChat binary (linked by the object files)
-As described ( main.cpp ), there are so called managers. Managers are
-accessible through their assigned wrapper classes and may be
-instanciated only once.
+Customizable source files (if changed you need to run gmake clean all)
+src/glob.h - Contains some global building options
+src/msgs.h - Defines some server side messages
-chat.cpp - The chat manager. Is responsible for managing the internal
- data structure of the system and also covers a lot of
- important methods of the system.
-conf.cpp - The config manager. Parses the config file specified in
- glob.h and stores all the values of it in a map.
+1.7 WRITING BUG REPORTS
-html.cpp - The html-template manager. Reads the requested html-template
- files, stores them in an internal cache ( averts reading
- template-files from hd twice or more ) and parses the
- partivular template in order to substituate dynamic values
- of it.
+How to submit a good bug report?
-mutx.cpp - The mutex manager. Contains all global mutex handlers for
- synchronizing POSIX thread shared data. until now only the
- stdout is synchronized by mutx.cpp because most of objects
- use their own mutex'.
+Send them to Bug@yChat.org.
-sock.cpp - The socket manager. Manages the socket connections. There
- are multiplexed sockets. For each requests a new POSIX thread
- will be created.
+First you should give the following information:
+- yChat version, if CVS (or devel. tarball) then which day?
+- operating system / distribution and it's version
+- when did it crash? did you do something? can you reproduce the crash?
-Files with a leading s_ contain static C++ classes
+Getting backtrace of the crash also helps a lot, especially if yChat crashes
+randomly. If after crash you see text:
-s_chat.cpp - Static wrapper for the dynamic chat class. holds one global
- reachable instance of chat until the program shuts down.
+ "segmentation fault (core dumped)"
-s_conf.cpp - Static wrapper for the dynamic conf class. holds one global
- reachable instance of conf until the program shuts down.
+It writes a file named "core" or "ychat.core" depending on your OS to directory
+where you started yChat. If it doesn't print the "(core dumped)" or you can't
+find the core file, you'll have to raise the limit for max. core file size
+before running yChat. To do this, say:
-s_html.cpp - Static wrapper for the dynamic html class. holds one global
- reachable instance of conf until the program shuts down.
+ ulimit -c unlimited
-s_mutx.cpp - Static wrapper for the dynamic mutx class. holds one global
- reachable instance of conf until the program shuts down.
+So, if you have the core file and GNU debugger (gdb), you can get the
+backtrace with:
-s_sock.cpp - Static wrapper for the dynamic sock class. holds one global
- reachable instance of conf until the program shuts down.
+ gdb ./bin/ychat ychat.core
+ bt
-s_tool.cpp - Static class which includes some usefull global reachable
- methods which are not integraded in independent classes.
+Paste all the lines starting from line having #0 at the beginning.
-Special header files ( all other header files which are not listed here
-belong to their respective .cpp files ):
+Here's an example session:
-glob.h - Defines global variables which are known by compilation
- time.
+ in reqp::parse(thrd*, std::string, std::map<std::string, std::string,
+ std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > >&) ()
+ (gdb) bt
+ #0 0x0805c287 in reqp::parse(thrd*, std::string, std::map<std::string,
+ std::string, std::less<std::string>, std::allocator<std::pair<std::string
+ const, std::string> > >&) ()
+ #1 0x0806060f in sock::read_write(thrd*, int) ()
+ #2 0x080612ba in thrd::run() ()
+ #3 0x0805a3b8 in pool::run_func(void*) ()
+ #4 0x0805a375 in pool::tpool_thread(void*) ()
+ #5 0x281d44ae in _thread_start () from /usr/lib/libc_r.so.5
+ (gdb)
-incl.h - This file is included from every other header file and
- includes a set of headers which every class should be able
- to use.
+If you dont get such a gdb output, you need to recompile the yChat using
+debuggig symbols. You can do it this way:
-msgs.h - Defines console output messages for verbosity level 0 ( see
- glob.h for setting up verbosity levels ). and also defines
- all the system messages. you may edit this file for translating
- the system user language.
-
-The basic class structure:
-
- base<room> base<user>
- | | name
- | | / \
- | | / \
- chat room user
-
- cont
- / \
- / \
-conf html
+cd ychat
+gmake mrproper
+./configure -g3 -ggdb
+gmake start
1.8 CONTACT:
@@ -259,12 +439,18 @@ You may contact us through the following addresses:
The yChat homepage is located at http://www.yChat.org
- E-Mail
- Paul C. Buetow: Snooper@yChat.org ( core developer )
- Volker Richter: Rover@yChat.org ( core developer )
- Mail@yChat.org ( reaches everybody of yChat )
+ Paul C. Buetow: Snooper at yChat point org ( core developer )
+ Volker Richter: Rover at yChat dot org ( core developer )
+ Mail at yChat dot org ( reaches everybody of yChat )
- ICQ
Paul C. Buetow: 11655527
- IRC
- #ychat at irc.german-elite.net
+ #Ychat and #Coding at irc.german-elite.net
+
+//<<*
+1.9 YHTTPD CODE BASE GENERATION
+
+See docs/yhttpd.txt
+//*>>