diff options
| -rw-r--r--[-rwxr-xr-x] | COPYING | 0 | ||||
| -rw-r--r-- | CVS/Entries | 66 | ||||
| -rw-r--r-- | CVS/Entries.Log | 2 | ||||
| -rw-r--r-- | CVS/Root | 2 | ||||
| -rw-r--r--[-rwxr-xr-x] | Makefile | 108 | ||||
| -rwxr-xr-x | Makefile.in | 2 | ||||
| -rwxr-xr-x | README | 664 | ||||
| -rwxr-xr-x | base.cpp | 22 | ||||
| -rwxr-xr-x | base.h | 21 | ||||
| -rwxr-xr-x | chat.cpp | 9 | ||||
| -rwxr-xr-x | chat.h | 7 | ||||
| -rw-r--r-- | cmnd/CVS/Entries | 4 | ||||
| -rw-r--r-- | cmnd/CVS/Root | 2 | ||||
| -rwxr-xr-x | conf.cpp | 4 | ||||
| -rwxr-xr-x | conf.txt | 29 | ||||
| -rwxr-xr-x | configure | 1618 | ||||
| -rw-r--r-- | gfx/CVS/Entries | 2 | ||||
| -rw-r--r-- | gfx/CVS/Root | 2 | ||||
| -rwxr-xr-x | gfx/y_ani_black.gif | bin | 0 -> 61100 bytes | |||
| -rwxr-xr-x | gfx/y_ani_white.gif | bin | 0 -> 53536 bytes | |||
| -rwxr-xr-x | glob.h | 14 | ||||
| -rw-r--r-- | hmap.cpp | 9 | ||||
| -rw-r--r-- | hmap.h | 6 | ||||
| -rwxr-xr-x | html.cpp | 1 | ||||
| -rw-r--r-- | html/CVS/Entries | 1 | ||||
| -rw-r--r-- | html/CVS/Root | 2 | ||||
| -rwxr-xr-x | html/frameset.html | 12 | ||||
| -rwxr-xr-x | html/index.html | 46 | ||||
| -rwxr-xr-x | html/input.html | 52 | ||||
| -rwxr-xr-x | html/notfound.html | 4 | ||||
| -rwxr-xr-x | html/online.html | 21 | ||||
| -rwxr-xr-x | html/stream.html | 42 | ||||
| -rw-r--r--[-rwxr-xr-x] | html/style.css | 45 | ||||
| -rwxr-xr-x | main.cpp | 14 | ||||
| -rwxr-xr-x | msgs.h | 11 | ||||
| -rwxr-xr-x | pool.cpp | 2 | ||||
| -rwxr-xr-x | reqp.cpp | 59 | ||||
| -rwxr-xr-x | reqp.h | 5 | ||||
| -rw-r--r-- | s_conf.h | 2 | ||||
| -rw-r--r-- | s_tool.cpp | 28 | ||||
| -rw-r--r-- | s_tool.h | 1 | ||||
| -rwxr-xr-x | sock.cpp | 38 | ||||
| -rwxr-xr-x | sock.h | 4 | ||||
| -rwxr-xr-x | user.cpp | 23 | ||||
| -rwxr-xr-x | user.h | 7 |
45 files changed, 1846 insertions, 1167 deletions
diff --git a/CVS/Entries b/CVS/Entries index 9382269..749e7b2 100644 --- a/CVS/Entries +++ b/CVS/Entries @@ -1,70 +1,56 @@ /COPYING/1.1/Fri Mar 28 00:27:16 2003// -/Makefile.in/1.7/Sat Apr 19 16:16:14 2003// -/README/1.4/Sun Sep 14 14:48:45 2003// -/base.cpp/1.8/Wed Apr 2 10:50:18 2003// -/base.h/1.5/Wed Apr 2 10:50:18 2003// -/chat.cpp/1.12/Sat Apr 19 19:39:17 2003// -/chat.h/1.8/Sat Apr 19 16:16:14 2003// +/Makefile.in/1.2/Fri Mar 28 01:38:07 2003// +/README/1.1/Sun Mar 30 00:26:42 2003// +/base.cpp/1.7/Sun Mar 30 01:35:21 2003// +/base.h/1.4/Sun Mar 30 00:14:09 2003// +/chat.cpp/1.8/Tue Mar 25 23:03:14 2003// +/chat.h/1.4/Fri Mar 28 02:51:03 2003// /cmnd.cpp/1.3/Tue Mar 25 14:54:07 2003// /cmnd.h/1.1.1.1/Fri Mar 21 15:54:56 2003// -/conf.cpp/1.5/Fri Apr 4 21:35:59 2003// +/conf.cpp/1.3/Tue Mar 25 14:54:07 2003// /conf.h/1.2/Tue Mar 25 14:54:07 2003// -/conf.txt/1.19/Sun Sep 14 14:31:49 2003// +/conf.txt/1.13/Sun Mar 30 01:35:21 2003// /configure/1.4/Fri Mar 28 02:02:00 2003// /configure.in/1.5/Fri Mar 28 02:02:00 2003// /cont.cpp/1.3/Tue Mar 25 14:54:07 2003// /cont.h/1.2/Sun Mar 30 00:26:42 2003// -/glob.h/1.6/Sun Sep 14 14:31:49 2003// -/hmap.cpp/1.8/Mon Apr 7 13:24:09 2003// -/hmap.h/1.8/Wed Apr 2 10:50:18 2003// -/html.cpp/1.7/Wed Apr 2 10:50:18 2003// +/dltest.cpp/1.1/Thu Mar 27 16:14:44 2003// +/glob.h/1.3/Tue Mar 25 14:54:07 2003// +/hmap.cpp/1.6/Sun Mar 30 01:35:21 2003// +/hmap.h/1.6/Sun Mar 30 01:35:21 2003// +/html.cpp/1.6/Sat Mar 29 23:18:11 2003// /html.h/1.3/Tue Mar 25 14:54:07 2003// /incl.h/1.1.1.1/Fri Mar 21 15:54:56 2003// -/lang.cpp/1.1/Fri Apr 4 22:14:35 2003// -/lang.h/1.1/Fri Apr 4 22:14:35 2003// -/logd.cpp/1.2/Thu Apr 10 15:36:10 2003// -/logd.h/1.1/Fri Apr 4 15:19:11 2003// -/main.cpp/1.11/Sat Apr 19 16:16:14 2003// -/modl.cpp/1.2/Wed Apr 2 21:57:34 2003// -/modl.h/1.1/Wed Apr 2 13:23:09 2003// -/msgs.h/1.12/Sun Sep 14 14:48:45 2003// +/main.cpp/1.8/Sat Mar 29 23:21:52 2003// +/msgs.h/1.8/Tue Mar 25 22:41:35 2003// /mutx.cpp/1.3/Tue Mar 25 14:54:07 2003// /mutx.h/1.2/Tue Mar 25 14:54:08 2003// /name.cpp/1.3/Tue Mar 25 22:19:51 2003// /name.h/1.3/Tue Mar 25 22:21:26 2003// -/pool.cpp/1.8/Sun Sep 7 12:49:46 2003// +/pool.cpp/1.6/Tue Mar 25 14:54:08 2003// /pool.h/1.1/Sun Mar 23 04:55:58 2003// -/reqp.cpp/1.18/Sun Sep 14 14:31:49 2003// -/reqp.h/1.10/Fri Apr 4 15:19:11 2003// +/reqp.cpp/1.11/Sun Mar 30 00:06:57 2003// +/reqp.h/1.7/Sun Mar 30 00:06:57 2003// /room.cpp/1.2/Sun Mar 23 05:41:19 2003// /room.h/1.2/Fri Mar 28 02:51:03 2003// /s_chat.cpp/1.1/Tue Mar 25 14:54:08 2003// /s_chat.h/1.1/Tue Mar 25 14:54:08 2003// /s_conf.cpp/1.1/Tue Mar 25 14:54:08 2003// -/s_conf.h/1.2/Fri Apr 4 21:35:59 2003// +/s_conf.h/1.1/Tue Mar 25 14:54:08 2003// /s_html.cpp/1.1/Tue Mar 25 14:54:08 2003// /s_html.h/1.1/Tue Mar 25 14:54:08 2003// -/s_lang.cpp/1.1/Fri Apr 4 22:14:35 2003// -/s_lang.h/1.1/Fri Apr 4 22:14:35 2003// -/s_modl.cpp/1.1/Wed Apr 2 23:01:20 2003// -/s_modl.h/1.1/Wed Apr 2 23:01:20 2003// /s_mutx.cpp/1.1/Tue Mar 25 14:54:08 2003// /s_mutx.h/1.1/Tue Mar 25 14:54:08 2003// -/s_sman.cpp/1.1/Sat Apr 19 16:16:15 2003// -/s_sman.h/1.1/Sat Apr 19 16:17:09 2003// /s_sock.cpp/1.1/Tue Mar 25 14:54:08 2003// /s_sock.h/1.1/Tue Mar 25 14:54:08 2003// -/s_tool.cpp/1.4/Fri Apr 4 10:41:12 2003// -/s_tool.h/1.4/Fri Apr 4 10:41:12 2003// -/sess.cpp/1.2/Sat Apr 19 19:39:17 2003// -/sess.h/1.2/Sat Apr 19 19:39:17 2003// -/sman.cpp/1.1/Sat Apr 19 16:16:15 2003// -/sman.h/1.2/Sat Apr 19 19:39:17 2003// -/sock.cpp/1.17/Sun Sep 14 14:31:49 2003// -/sock.h/1.6/Fri Apr 4 15:19:11 2003// +/s_tool.cpp/1.3/Sun Mar 30 00:06:57 2003// +/s_tool.h/1.3/Sun Mar 30 00:06:57 2003// +/sock.cpp/1.9/Wed Mar 26 15:44:09 2003// +/sock.h/1.5/Wed Mar 26 15:44:09 2003// /thrd.cpp/1.5/Wed Mar 26 14:57:04 2003// /thrd.h/1.1.1.1/Fri Mar 21 15:54:56 2003// /todo.txt/1.4/Sun Mar 30 01:48:46 2003// -/user.cpp/1.7/Fri Apr 4 22:14:35 2003// -/user.h/1.8/Sat Apr 19 19:39:17 2003// +/user.cpp/1.5/Tue Mar 25 14:54:08 2003// +/user.h/1.4/Tue Mar 25 20:06:34 2003// +/yc_test.cpp/1.1/Thu Mar 27 16:14:44 2003// D diff --git a/CVS/Entries.Log b/CVS/Entries.Log index c7be84c..3384330 100644 --- a/CVS/Entries.Log +++ b/CVS/Entries.Log @@ -1,5 +1,3 @@ A D/cmnd//// A D/gfx//// A D/html//// -A D/lang//// -A D/log//// @@ -1 +1 @@ -:pserver:anonymous@cvs.ychat.berlios.de:/cvsroot/ychat +:pserver:volker@cvs.exa-ds.com:/home/cvsroot @@ -1,95 +1,13 @@ -MAKE=`tail -n 1 make.version` -PREFIX=`grep "define PREFIX" src/glob.h | cut -d'"' -f2` -all: version base modules - @echo "Now edit the ychat.conf and run ychat!" - @echo "The config file is searched in the following order:" - @echo " ./ychat.conf " - @echo " ~/.ychat/ychat.conf " - @echo " ./etc/ychat.conf " - @echo " /etc/ychat.conf " - @echo " $(PREFIX)/etc/ychat.conf " - @echo If you want to help the yChat project please run gmake mail - @echo so that the developers receive an email about the platform - @echo being used. - @echo WARNING! This software is EXPERIMENTAL! -mail: - @echo "VERSION:" > mail.tmp - @${MAKE} version >> mail.tmp - @echo >> mail.tmp - @echo "UNAME:" >> mail.tmp - @uname -a >> mail.tmp - @echo >> mail.tmp - @echo "DATE:" >> mail.tmp - @date >> mail.tmp - @echo >> mail.tmp - @echo "COMPILER AND MAKE:" >> mail.tmp - @cat g++.version make.version >> mail.tmp - @cat mail.tmp | mail -s "Successfull build of yChat" successfullbuild@yhttpd.org - @rm -f mail.tmp -install: deinstall -uninstall: deinstall -deinstall: - @echo Install/deinstall is not supported! - @echo Start yChat with ./bin/ychat instead! - @exit 1 -modules: - @if test -d ./src/mods; then ${MAKE} -C ./src/mods; fi -clean_modules: - @if test -d ./src/mods; then ${MAKE} -C ./src/mods clean; fi -base: - @if test -f bin/ychat; then echo "Backing up old binary";if test -f bin/ychat.old; then rm -f bin/ychat.old; fi; mv bin/ychat bin/ychat.old; fi - @perl ./scripts/buildnr.pl - @perl ./scripts/setglobvals.pl - @${MAKE} -C ./src -clean_base: - @${MAKE} -C ./src clean -stats: - @perl scripts/stats.pl -run: - ./bin/ychat -base_start: base - ./bin/ychat -gpl: - @more COPYING -#//<<* -yhttpdbase: - @perl scripts/makeyhttpd.pl || echo "You need to have perl to do this!" - @echo yhttpd code base has been generated in ../yhttpd -#//*>> -clean: clean_base clean_modules -help: - @echo "You may run ${MAKE} with the following parameters:" - @grep "^ ${MAKE} " README - @echo "For more questions read the README file or contact mail@ychat.org!" -setup: - @./configure - @${MAKE} -config: - @sh -c "scripts/config.sh" - @echo If you run ${MAKE} config from the command line then you may need - @echo to rerun ./configure and recompile all now! - -mrproper: clean - @if test -f src/glob.h.org; then mv -f src/glob.h.org src/glob.h;fi - @if test -f g++.version; then rm -f g++.version; fi - @if test -f make.version; then rm -f make.version; fi - @if test -f src/Makefile; then rm -f src/Makefile; fi - @if test -f bin/ychat; then find bin/ -name "*ychat*" | xargs rm -f; fi - @if test -d src/mods; then find src/mods/*/ -name Makefile | xargs rm -f; fi - @find . -name "*.add" | xargs rm -f - @ls | grep core | xargs rm -f -version: - @./scripts/version.sh -debug: - @gdb bin/ychat ychat.core -confdebug: - ./configure -g3 -ggdb -dist: - @./scripts/makedist.sh -ssltest: - openssl genrsa -des3 -out privkey.pem 2048 - openssl req -new -x509 -key privkey.pem -out cert.pem -days 1095 - @mv -f privkey.pem cert.pem etc - - - +# Generated automatically from Makefile.in by configure. +SRCS=base.cpp chat.cpp s_chat.cpp cmnd.cpp conf.cpp s_conf.cpp cont.cpp html.cpp s_html.cpp main.cpp mutx.cpp s_mutx.cpp name.cpp pool.cpp reqp.cpp room.cpp sock.cpp s_sock.cpp thrd.cpp s_tool.cpp user.cpp +OBJS=$(SRCS:.cpp=.o) +CC=g++ +LDFLAGS=-ldl -lstdc++ -g +LDADD=-pthread -D_THREAD_SAFE +all: ychat +$(SRCS): + $(CC) $(CFLAGS) -c $*.cpp +ychat: $(OBJS) + $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDADD) +clean: + rm *.o diff --git a/Makefile.in b/Makefile.in index 300d035..7c2a0c1 100755 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,4 @@ -SRCS=chat.cpp s_chat.cpp cmnd.cpp conf.cpp s_conf.cpp cont.cpp html.cpp s_html.cpp lang.cpp s_lang.cpp logd.cpp main.cpp modl.cpp s_modl.cpp mutx.cpp s_mutx.cpp name.cpp pool.cpp reqp.cpp room.cpp sock.cpp s_sock.cpp thrd.cpp s_tool.cpp user.cpp sess.cpp sman.cpp s_sman.cpp +SRCS=base.cpp chat.cpp s_chat.cpp cmnd.cpp conf.cpp s_conf.cpp cont.cpp html.cpp s_html.cpp main.cpp mutx.cpp s_mutx.cpp name.cpp pool.cpp reqp.cpp room.cpp sock.cpp s_sock.cpp thrd.cpp s_tool.cpp user.cpp OBJS=$(SRCS:.cpp=.o) CC=g++ LDFLAGS=@LDFLAGS@ -lstdc++ -g @@ -1,8 +1,7 @@ -yChat; Homepage: www.yChat.org; Version 0.8-RELEASE - +yChat++; Homepage: www.yChat.org; Version CVS 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 @@ -16,596 +15,161 @@ 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. ------------------------------------------------------------------ -YCHAT TABLE OF CONTENTS: - -1.0.0 GENERAL -1.1.0 ABOUT RELEASES -1.2.0 YCHAT FEATURES //<< -2.0.0 INSTALLATION AND SETUP -2.1.0 REQUIREMENTS -2.2.0 TESTED PLATFORMS -2.3.0 HOW TO OBTAIN YCHAT -2.4.0 INSTALLATION QUICK-START -2.4.1 INSTALLATION -2.3.3 HOW TO USE OPENSSL WITH YCHAT -2.3.4 HOW TO USE MYSQL WITH YCHAT //<< -2.3.5 HOW TO USE SCREEN WITH YCHAT -2.3.6 HOW TO USE SIGNALS WITH YCHAT -2.4.0 CONFIGURING YCHAT -2.5.0 YHTTPD CODE BASE GENERATION //<< -3.0.0 EXTENDING YCHAT -3.1.0 SOURCE FILES -4.0.0 DIVERSE -4.1.0 WRITING BUG REPORTS -4.2.0 CONTACT ADDRESSES -4.3.0 CREDITS - -1.0.0 GENERAL - -1.1.0 ABOUT RELEASES - -There are several projects involved: - -- The chat - -Its a HTTP based chat server written in C++. Clients are normal web browsers -such as MSIE or Gecko based browsers using only CSS, HTML and JavaScript. - -- The httpd - -Its a small http server based on the chat's socket and threading engine. -yhttpd does not have as much features but is easy to use and faster than -apache. yhttpd is a subset of the chat. It can be generated using the -srcipts/yhttpdbase.pl script in the chat's source tree. - -- The ycurses - -ycurses is a easy to use and small C++ wrapper of the C ncurses API. - -There are different branches: - -- CURRENT - -The CURRENT branch is unstable, this is the bleeding developing edge with -all the new experimental features. - -A RELEASE of CURRENT can be referred as CURRENTRELEASE. - -- STABLE - -The STABLE branch is more stable than CURRENT. This branch may get new -features as well. But those will be more conservative compared to -CURRENT. - -A RELEASE of STABLE can be referred as STABLERELEASE. - -- LEGACY - -The LEGACY branch has no real support. This branch may get bugfixes and -updates and might get minor improvements. But there is no garuantee to -be bug free and stable at all. LEGACY versions are of historic meaning. - -- DEVEL - -DEVEL is only a meta name. If a version is labeled with DEVEL, then its -currently undefined if this is a CURRENT, STABLE or LEGACY branch. It -can be everything. Commonly DEVEL versions are CURRENT. - -There are also releases made: - -- RELEASE - -There can be RELEASEs made out of each branch. While a branch can get -new features, a RELEASE can not. A RELEASE of a branch is just like -a snapshot. RELEASEs are complete versions to test and use. But keep -in mind, that a RELEASE of the STABLE branch is recommended over a -RELEASE of a CURRENT or a LEGACY branch in a production environment. -RELEASEs of CURRENT are still the bleeding edge and RELEASEs of LEGACY -may be out of date. - -- Short names - - -In addition, each description also has short names: (short names are needed -if your text space is limited which happens very fast in IRC channel topics) - -CURRENT aka CUR aka C -RELEASE aka REL aka R -LEGACY aka LEG aka L -STABLE aka SBL aka S -DEVEL aka DEV aka D -PRE aka P - -STABLERELEASE aka STBREL aka SR -PRERELEASE aka PREREL aka PR -PRELEGACYRELEASE aka PRELEGREL aka PLR -etc... - -The short name of the chat is "yC" -The short name of the httpd is "yh" -The short name of ycurses is "yu" - -//<<* -1.2.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. -Also, yChat supports secure hypertext transfer protocol (HTTPS) connections -using the OpenSSL library. Then, all chat messages will be encrypted in a -secure manner. HTTPS is optional to HTTP (unsecured connections). - -- 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. -//*>> - -2.0.0 INSTALLATION AND SETUP - -2.1.0 REQUIREMENTS: - -- GNU GCC G++ - The GNU C++ compiler version 3.1 or up. - -- 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. - -- OpenSSL - Includes libssl and the ssl header files of the open source SSL library. - OpenSSL is only needed if you chose to compile yChat w/OpenSSL support. - -//<<* -- mysql-client 4.x (3.x may do too but is not supported) - Includes libmysqlclient and the mysql.h header files. mysql-client is only - needed if you chose to compile yChat w/database support. - -//*>> -- ncurses 5.x - Includes libncurses and the ncurses.h header files. - -- Screen - Only needed if yChat should run in background with - ncurses or CLI enabled. - -- Perl 5.x - Is needed for some scripts. Is not needed if you use precompiled binaries. - -2.1.0 TESTED PLATFORMS: - -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.4-RELEASE (i386) 3.4.2 3.80 -- FreeBSD 5.3-RELEASE (i386) 3.4.2 3.80 - - Tested longer time before: -- 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 - -Other platforms like Linux based systems, other BSD-Systems or UNICES -are very likely to work too. - -2.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://pub.buetow.org/yChat/yChat . - -For CVS download type: - -cvs -d:pserver:anonymous@buetow.org:/usr/home/cvs/cvsroot login -( You will be asked for a password. Use "just enter" ). - -vs -z3 -d:pserver:anonymous@buetow.org:/usr/home/cvs/cvsroot co BRANCH -( The sources will be copied into your local folder ) - -cvs -d:pserver:anonymous@buetow.org:/usr/home/cvs/cvsroot logout -( Logs your CVS session out ). - -Now you may continue with the installation. - -here are different branches in the CVS: - -ychat: This is the latest CURRENT branch of yChat. -ychat-stable: This is the latest STABLE branch of yChat. -ychat-X.Y: This is the branch with the specified version prefix. -yhttpd: This is the latest CURRENT snapshot of yhttpd. - -The CURRENT branch of ychat is mostly untested and unstable, so don't -cry if you get errors. - -2.4.0 INSTALLATION QUICK START - -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! If you chose OpenSSL support, then -also run gmake ssltest before starting yChat. - -2.3.1 INSTALLATION +----------------------------------------------------------------- -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. +Notes: I programmed this on FreeBSD but should also compile without +big problems on Linux or other UNIX-like systems. +If you have tested one of those then pleace write me the name of the OS, +kernel version, make version and compiler & version. I will list it +right here: -//<<* -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. -//*>> +The following platforms have been tested with success: -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): +- FreeBSD 5.0-RELEASE, GCC 3.2.1, FreeBSD 5.0 make and GNU make 3.80 - 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 confdebug (runs ./configure with enabling debugging) - gmake config (runs yChat configurator) - gmake debug (runs gdb on ./ychat.core) - gmake dist (creates a .tar.bz2 ball) - 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 stats (generates ychat statistics) - gmake ssltest (generates a self signed ssl test certificate) - gmake version (shows the current version of yChat) -//<<* - gmake yhttpdbase (generates an yhttpd code base) -//*>> (See section 1.9 to read about this marks) +- Linux Kernel 2.4.19, GCC 3.2.0, GNU make 3.79.1 -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. +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! -Aferwards point your webbrowser to http://yourip:port ! +If you like to support yChat++, please write me an email and tell me +what you can/like/would help ;-]. Please also take a look at the +yChat++ homepage ( www.yChat.org ). +Installation: Just invoke "./configure" and afterwards "make", edit the +conf.txt and 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 :-). -2.3.3 HOW TO USE OPENSSL WITH YCHAT - -If you chose to use OpenSSL support you have to have a valid SSL private and -public key. If you are in hurry, use the gmake ssltest command from the top -source tree directory and follow the instructions. Otherwise type the -following commands manually: - -The private key can be created w/the following command: - - openssl genrsa -des3 -out privkey.pem 2048 - -Afterwards, you can create a self-signed test certificate using the following -command: - - openssl req -new -x509 -key privkey.pem -out cert.pem -days 1095 - -Be sure to move the privkey.pem and cert.pem files into the ./etc directory -or edit the path names in the ./etc/ychat.conf file. yChat wont start if there -are no valid files found. - -To learn more about SSL certificates, visit http://www.openssl.org/docs/HOWTO/. - -Now use https:// and NOT http:// to connect to the yChat server. - -//<<* -2.3.4 HOW TO USE MYSQL WITH YCHAT - -If you chose to use MySQL database support you have to create a valid database -to use with yChat. - -Create a new MySQL database called 'ychat' and type the following command into |
