summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES145
-rw-r--r--[-rwxr-xr-x]COPYING0
-rwxr-xr-xMakefile79
-rwxr-xr-xREADME874
-rwxr-xr-xconf.txt63
-rwxr-xr-xconfigure76
-rw-r--r--[-rwxr-xr-x]html/favicon.icobin2238 -> 2238 bytes
-rwxr-xr-xhtml/frameset.html12
-rwxr-xr-xhtml/index.html46
-rwxr-xr-xhtml/input.html52
-rwxr-xr-xhtml/notfound.html4
-rwxr-xr-xhtml/online.html21
-rwxr-xr-xhtml/stream.html42
-rw-r--r--[-rwxr-xr-x]html/style.css45
-rwxr-xr-xhtml/y_ani.gifbin0 -> 35107 bytes
-rwxr-xr-xhtml/y_black.gifbin0 -> 61100 bytes
-rw-r--r--lang/de3
-rw-r--r--lang/en3
-rwxr-xr-xscripts/astyle.sh3
-rwxr-xr-xscripts/stats.pl2
-rwxr-xr-xsrc/Makefile.in34
-rwxr-xr-xsrc/base.cpp69
-rwxr-xr-xsrc/base.h71
-rwxr-xr-xsrc/chat.cpp156
-rwxr-xr-xsrc/chat.h46
-rwxr-xr-xsrc/conf.cpp76
-rwxr-xr-xsrc/conf.h24
-rwxr-xr-xsrc/configure1873
-rwxr-xr-xsrc/cont.cpp24
-rwxr-xr-xsrc/cont.h29
-rwxr-xr-xsrc/glob.h221
-rw-r--r--src/hmap.cpp183
-rw-r--r--src/hmap.h123
-rwxr-xr-xsrc/html.cpp131
-rwxr-xr-xsrc/html.h36
-rwxr-xr-xsrc/incl.h19
-rwxr-xr-xsrc/lang.cpp79
-rwxr-xr-xsrc/lang.h24
-rwxr-xr-xsrc/main.cpp126
-rwxr-xr-xsrc/msgs.h151
-rwxr-xr-xsrc/mutx.cpp20
-rwxr-xr-xsrc/mutx.h21
-rwxr-xr-xsrc/name.cpp34
-rwxr-xr-xsrc/name.h20
-rwxr-xr-xsrc/pool.cpp180
-rwxr-xr-xsrc/pool.h52
-rwxr-xr-xsrc/reqp.cpp465
-rwxr-xr-xsrc/reqp.h48
-rwxr-xr-xsrc/room.cpp16
-rwxr-xr-xsrc/room.h34
-rw-r--r--src/s_chat.cpp10
-rw-r--r--src/s_chat.h27
-rw-r--r--src/s_conf.cpp10
-rw-r--r--src/s_conf.h27
-rw-r--r--src/s_html.cpp10
-rw-r--r--src/s_html.h27
-rw-r--r--src/s_lang.cpp10
-rw-r--r--src/s_lang.h28
-rw-r--r--src/s_mutx.cpp10
-rw-r--r--src/s_mutx.h27
-rw-r--r--src/s_sman.cpp10
-rw-r--r--src/s_sman.h27
-rw-r--r--src/s_sock.cpp10
-rw-r--r--src/s_sock.h27
-rw-r--r--src/s_tool.cpp139
-rw-r--r--src/s_tool.h21
-rw-r--r--src/sess.cpp39
-rw-r--r--src/sess.h28
-rw-r--r--src/sman.cpp49
-rw-r--r--src/sman.h36
-rwxr-xr-xsrc/sock.cpp240
-rwxr-xr-xsrc/sock.h57
-rwxr-xr-xsrc/thrd.cpp29
-rwxr-xr-xsrc/thrd.h29
-rwxr-xr-xsrc/user.cpp144
-rwxr-xr-xsrc/user.h102
76 files changed, 4771 insertions, 2257 deletions
diff --git a/CHANGES b/CHANGES
index 899b707..ca43577 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,136 +1,15 @@
--Changes from 0.7.9-RELEASE to 0.7.9.1-RELEASE -
-$ Fixed etc/ychat.conf (Its now valid XML)
-$ Fixed some typos.
-$ Added the scripts/makedist.sh script, which can be invoked by gmake dist.
-$ yhttpd.org has been renamed to yChat.org. The yhttpd.org SLD will be
-$ canceled! The yhttpd.org Homepage will remain on yChat.org!
+Changes from 0.5.3-LEGACYRELEASE to 0.5.4-STABLERELEASE
+- Backported reqp::get_url from yChat 0.7.8-CURRENT.
+- Tagged 0.5-STABLE
--Changes from 0.7.8-RELEASE to 0.7.9-RELEASE -
-$ In the system messages will be the user printed which has requested the
- specified module.
-$ Removed the cursor from the ncurses interface.
-$ Added wrap::init_wrappers -> The main.cpp is now shorter.
-$ Added some Makefile modifications
-$ Bugfix: cleanipcache shouldn run every minute but every 10!
-$ Bugfix: scripts/stats.pl now counts all text-files properly.
+Changes from 0.5.2-LEGACYRELEASE to 0.5.3-LEGACYRLEASE
+- Code cleanup
+- Added ./scripts/*
+- Added gmake stats option
--Changes from 0.7.7.1-RELEASE to 0.7.8-RELEASE -
-$ Updated the yhttpd generation script due new sources in src/memb.
-$ Changd some hashmaps back into simple std::map objects, this might
-$ has resulted in some bugs due slow hashmap initialization time.
-$ Hashmaps now only should being used on permanent objects.
-$ Rewrote the dynamic thread pool.
-$ makeyhttpd now also removes the yChat specific form etc/yhttpd.conf
-$ automatically.
-$ Implemnted an IP Cache (makes yChat faster).
-$ Implemented signal catcher:
-$ SIGUSR1 will clear the html template cache.
-$ SIGUSR2 will reload the dynamic modules.
-$ SIGSEGV can be catched if defined in src/glob.h.
-$ SIGHUP, SIGINT and SIGTERM will shutdown yChat cleanly.
-$ Added Allow: GET to the HTTP header.
-$ Bugfix: The httpd.logging.accesslines now will be read correctly.
-$ Bugfix: JavaScript messages now wont be logged.
+Changes from 0.5.1-RELEASE to 0.5.2-LEGACYRLEASE
+- Changed this branch into a LEGACY branch.
+- Rewrote the dynamic thread pool (backport from 0.7.8-CURRENT).
+- Added scripts/*
+- Code now uses ANSI C++ style with 2 space code indenting.
--Changes from 0.7.7-RELEASE to 0.7.7.1-RELEASE -
-$ Bugfix in main.cpp which resulted in a core dump on yChat startup.
-
--Changes from 0.7.6-RELEASE to 0.7.7-RELEASE -
-$ Major code cleanup.
-$ Bugfix in /col.
-$ Bugfix in gcol #1 (destroy session also if no database is used).
-$ Bugfix in gcol #2 (now runs each hour not once a day).
-$ Renew the style.css and stream.html.
-
--Changes from 0.7.5-RELEASE to 0.7.6-RELEASE -
-$ Removed the old hash maps and included the SGI C++ STL extenstion
-$ hash_map.
-
--Changes from 0.7.4.1-RELEASE to 0.7.5-RELEASE -
-$ Garbage collector will now run once a hour rather than each ten minutes.
-$ Dynamic thread pool improvements.
-$ Removed equiv-http-refresh meta tag from the online list.
-$ Minor bugfix in the /topic command.
-$ Implemented "User list".
-
--Changes from 0.7.4-RELEASE to 0.7.4.1-RELEASE -
-$ Dynamic thread pool bugfix (dead lock).
-
--Changes from 0.7.3-RELEASE to 0.7.4-RELEASE -
-$ Code cleanup.
-$ Made the thread pool increasing dynamic.
-$ Added some thread pool optimazions.
-$ Added some more ${MAKE} vars to the Makefiles.
-$ Added Content-length to the HTTPD header.
-$ Added the !command to the command line interface.
-$ Added Content-type text/plain.
-$ Added scrolling checkbox to input.html.
-$ Removed modl from yhttpd. Dynamic modules are not needed in yhttpd yet.
-$ Improved session engine.
-$ Fixed auto logout bug.
-$ Fixed newline bug (one \n too much for each html template).
-$ Logging can now be completely disabled.
-
--Changes from 0.7.2 to 0.7.3-RELEASE -
-$ Added FreeBSD 5.3-RELEASE support.
-$ Added chat.enableguest option.
-$ Added the /all command (Global system message).
-$ Renamed the /getstatus command into /about.
-$ Fixed the &-bug (& should be allowed in messages). \AND is now a
-$ synonym for & too.
-$ Fixed the /msg bug (In /msg the string replacer should be activated).
-$ Fixed logging bug (do not log any timestamps if there are no messages).
-
--Changes from 0.7.1 to 0.7.2-RELEASE -
-$ New features:
-$ /morph.
-$ Added the new standard html template design.
-$ Bugfixes:
-$ /away prints a . instead of a : if no away reason is given.
-$ /ko message was wrong. Displayed not room name of the user to be kicked out.
-$ /invisible command displayed wrong private messages.
-$ /getstatus had no help text.
-$ /msg and /s should now print the system time if printalwaystime == true.
-$ Added a blank to the /uptime message.
-$ /topic now prints the topic in the user's color.
-$ Fixed some typos.
-
--Changes from 0.7.0 to 0.7.1-RELEASE -
-$ Added ${MAKE} to the config file because some Linux distros dont use
-$ the "gmake" command for GNU make but just "make"! Modified the
-$ configure script to generate a make.version file.
-$ Removed some typos from the ychat.conf.
-$ Fixed the auto away message. This one will be posted in the room
-$ as public rather than only private to the auto-away-user.
-$ Fixed some documentation stuff for yhttpd because yhttpd does not
-$ need MySQL at all.
-$ Added the chat.maxlength.word option.
-
--Changes from 0.6 to 0.7.0-RELEASE -
-$ Better stability .
-$ Better performance (using more hmaps).
-$ HTML color switcher menu.
-$ New commands: /away /room /j /ren.
-$ Simple garbage collector for old user and room objects.
-$ Use of the database (MySQL).
-$ Nick registration and password protection.
-$ Status images for Operator, Half-Operator, Voiced user and Guests.
-$ New Makefiles.
-$ Useful Perl scripts for sourcecode stats generation etc.
-$ Added system_log and room logging to access_log logging.
-$ Added time-offset option.
-$ Added to the admin interface new options.
-$ Added Logout button.
-$ Added string replacer there certain substr. of postings will be replaced by another string (such as smiley images).
-$ Added Superuser levels and the /ko and /set commands.
-$ Added admin CLI (Command Line Interface) mode.
-$ Added memory rusage history which tracks memory usage for the last 10 days.
-$ Added HTTP POST request parsing.
-$ Made yChat more modular so yhttpd can be extracted from it
-$ (scripts/makeyhttpd.pl).
-$ Added CGI support.
-$ Rewrote big parts of the Makefiles and the configure scripts.
-$ Made it compatible to GNU G++ 3.4, 3.3, 3.2 and 3.1 (3.0 and earlier do not
-$ work).
-$ XML based configuration file (ychat.conf).
-$ Added default operator option: chat.defaultop.
diff --git a/COPYING b/COPYING
index a43ea21..a43ea21 100755..100644
--- a/COPYING
+++ b/COPYING
diff --git a/Makefile b/Makefile
index b3c5ca8..3bed77d 100755
--- a/Makefile
+++ b/Makefile
@@ -1,88 +1,23 @@
-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.
+MAKE=gmake
+all: base
+ @echo "Now edit the ./conf.txt file and run ./ychat!"
@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!
+ @echo Start yChat with ./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
+ ./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
+clean: clean_base
debug:
- @gdb bin/ychat ychat.core
-confdebug:
- ./configure -g3 -ggdb
-dist:
- @./scripts/makedist.sh
+ @gdb ./ychat ychat.core
diff --git a/README b/README
index 5b72fd5..b95b7ae 100755
--- a/README
+++ b/README
@@ -1,8 +1,8 @@
-yChat; Homepage: www.yChat.org; Version 0.7.9.1-RELEASE
-
+yChat; Homepage: www.yChat.org; Version 0.5.4-RELEASE
Copyright (C) 2003 Paul C. Buetow, Volker Richter
-Copyright (C) 2004, 2005 Paul C. Buetow
+Copyright (C) 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,249 +16,39 @@ 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:
+-----------------------------------------------------------------
-0.0.0 ABOUT RELEASES
-0.0.1 YCHAT FEATURES //<<
+0.0.0 LEGACY YCHAT 0.5 TABLE OF CONTENTS
1.0.0 REQUIREMENTS
1.1.0 TESTED PLATFORMS
-1.2.0 IMPORTANT NOTICES
+1.2.0 IMPORTANT NOTES
1.3.0 HOW TO OBTAIN YCHAT
1.3.1 INSTALLATION
-1.3.2 INSTALLATION QUICK-START
-1.3.3 MYSQL SETUP //<<
-1.4.0 HOW TO USE SCREEN WITH YCHAT
-1.4.1 HOW TO USE SIGNALS 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 //<<
-2.0.0 LICENSE
-
-0.0.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.
-
-//<<*
-0.0.1 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:
-- GNU GCC G++
- The GNU C++ compiler version 3.1 or up.
-
-- GNU make 3.80 (gmake) or higher
- If you dont