--- elserv-0.4.0+0.20011203cvs.orig/ELSERV-MK +++ elserv-0.4.0+0.20011203cvs/ELSERV-MK @@ -80,7 +80,7 @@ (defun config-elserv (&optional silent) (let (prefix lisp-dir exec-dir) - (config-ruby) +; (config-ruby) (and (setq prefix (car command-line-args-left)) (or (string-equal "NONE" prefix) (setq PREFIX prefix))) @@ -93,7 +93,7 @@ (or (string-equal "NONE" exec-dir) (setq EXEC_DIR exec-dir))) (setq command-line-args-left (cdr command-line-args-left))) - (config-icon) +; (config-icon) (load-file "ELSERV-CFG") (load-file "ELSERV-ELS") (unless silent --- elserv-0.4.0+0.20011203cvs.orig/Makefile +++ elserv-0.4.0+0.20011203cvs/Makefile @@ -17,7 +17,7 @@ EXEC_DIR = NONE ICON_DIR = NONE -GOMI = *.elc auto-autoloads.el custom-load.el elservd +GOMI = *.elc auto-autoloads.el custom-load.el elc: $(EMACS) $(FLAGS) -f compile-elserv \ --- elserv-0.4.0+0.20011203cvs.orig/debian/.cvsignore +++ elserv-0.4.0+0.20011203cvs/debian/.cvsignore @@ -0,0 +1,6 @@ +elserv +elserv.postinst.debhelper +elserv.prerm.debhelper +files +patched +stamp-patched --- elserv-0.4.0+0.20011203cvs.orig/debian/CVS/Entries +++ elserv-0.4.0+0.20011203cvs/debian/CVS/Entries @@ -0,0 +1,15 @@ +/compat/1.1.1.1/Wed Sep 20 23:11:19 2006// +/copyright/1.1.1.1/Wed Sep 20 23:11:19 2006// +/dirs/1.1.1.1/Wed Sep 20 23:11:19 2006// +/docs/1.1.1.1/Wed Sep 20 23:11:19 2006// +/emacsen-install/1.1.1.1/Wed Sep 20 23:11:19 2006// +/emacsen-remove/1.1.1.1/Wed Sep 20 23:11:19 2006// +/emacsen-startup/1.1.1.1/Wed Sep 20 23:11:19 2006// +/rules/1.1.1.1/Wed Sep 20 23:11:19 2006// +D/patches//// +D/tests//// +/.cvsignore/1.1/Wed Sep 20 23:33:45 2006// +D/pbuilder-test//// +/control.in/1.2/Fri May 18 00:23:52 2007// +/control/1.2/Fri May 18 00:24:57 2007// +/changelog/1.4/Fri May 18 00:24:30 2007// --- elserv-0.4.0+0.20011203cvs.orig/debian/CVS/Repository +++ elserv-0.4.0+0.20011203cvs/debian/CVS/Repository @@ -0,0 +1 @@ +debian/elserv --- elserv-0.4.0+0.20011203cvs.orig/debian/CVS/Root +++ elserv-0.4.0+0.20011203cvs/debian/CVS/Root @@ -0,0 +1 @@ +:ext:aegis.netfort.gr.jp:/home/dancer/CVSREPOSITORY --- elserv-0.4.0+0.20011203cvs.orig/debian/changelog +++ elserv-0.4.0+0.20011203cvs/debian/changelog @@ -0,0 +1,220 @@ +elserv (0.4.0+0.20011203cvs-17.2) unstable; urgency=medium + + * Non-maintainer upload + * Depend on emacs instead of emacs23 (closes: #754005) + * Refresh debian/control with *.in + + -- Tatsuya Kinoshita Wed, 17 Sep 2014 00:27:57 +0900 + +elserv (0.4.0+0.20011203cvs-17.1) unstable; urgency=low + + * Non-maintainer upload. + * Adapt emacs dependencies to emacs23 and all emacsen providers (note: + this is based on the assumption that xemacs*-nomule won't be in + Squeeze). (Closes: #482790) + + -- Stefano Zacchiroli Fri, 26 Mar 2010 15:29:09 +0100 + +elserv (0.4.0+0.20011203cvs-17) unstable; urgency=low + + * Remove references to emacs-snapshot which is no + longer in Debian. + * "elserv: please prefer emacs22", thanks to Tatsuya Kinoshita + (Closes: #433980). + * update demo test to use emacs22. + + -- Junichi Uekawa Sat, 21 Jul 2007 13:12:23 +0900 + +elserv (0.4.0+0.20011203cvs-16) unstable; urgency=low + + * Bug fix: "elserv: Please support emacs22", thanks to Cyril Brulebois + (Closes: #424885). + * debian/pbuilder-test/01_demotest: add a test to start a demo session + and do wget. + + -- Junichi Uekawa Fri, 18 May 2007 09:24:23 +0900 + +elserv (0.4.0+0.20011203cvs-15) unstable; urgency=low + + * prepend dpatches with number. + * emacs-wiki-home-page -> emacs-wiki-default-page + - 05_emacs-wiki-home-page.dpatch + Fixes: "elserv-wiki emits error on every access" (Closes: #348124). + + -- Junichi Uekawa Thu, 21 Sep 2006 23:34:18 +0900 + +elserv (0.4.0+0.20011203cvs-14) unstable; urgency=low + + * fix warnings from elservd + elservd-space.dpatch + * Bug fix: "elserv wiki assumes iso-2022-jp", thanks to Junichi Uekawa + (Closes: #166157). + - emacs-wiki-multiencoding.dpatch + * make es-wiki even when current directory is outside of ~/Wiki + - emacs-wiki-default-directory.dpatch + + -- Junichi Uekawa Thu, 21 Sep 2006 08:33:23 +0900 + +elserv (0.4.0+0.20011203cvs-13) unstable; urgency=low + + * new maintainer (closes: #386358) + * fix copyright file. + * tested with: emacs -eval '(elserv-wiki-start )' + which works, + emacs -eval '(elserv-demo-start )' + seems to be broken. + + -- Junichi Uekawa Thu, 7 Sep 2006 23:36:56 +0900 + +elserv (0.4.0+0.20011203cvs-12) unstable; urgency=low + + * Remove xml.el. (closes: #375902) + * control.in (Standards-Version): Increased to 3.7.2. + (Build-Depends-Indep): Abolish. + (Build-Depends): Add @cdbs@. + + -- OHASHI Akira Thu, 29 Jun 2006 14:09:38 +0900 + +elserv (0.4.0+0.20011203cvs-11) unstable; urgency=low + + * rules: Use cdbs to build. + * control.in: New file for cdbs. + (Priority): Change to optional from extra. + * emacsen-install: Rewrite to a new de facto standard format. + * emacsen-startup: Use debian-emacs-flavor instead of flavor. + + -- OHASHI Akira Tue, 21 Feb 2006 15:47:47 +0900 + +elserv (0.4.0+0.20011203cvs-10) unstable; urgency=low + + * control (Standards-Version): Increased to 3.6.2. + (elserv/Depends): Add `emacs-snapshot'. (closes: #328998) + (Build-Depends-Indep): Add `dpatch'. + * patches/00list: New file. + * patches/insert-a-whitespace-after-the-backslash.dpatch: + Ditto. (closes: #325449) + * rules: Use it. + + -- OHASHI Akira Sat, 10 Dec 2005 09:49:22 +0900 + +elserv (0.4.0+0.20011203cvs-9) unstable; urgency=low + + * control (Depends): Add xemacs21-gnome-mule*. (closes: #270045) + + -- OHASHI Akira Tue, 7 Sep 2004 11:20:35 +0900 + +elserv (0.4.0+0.20011203cvs-8) unstable; urgency=low + + * emacsen-install: Fix for the broken installation. + + -- OHASHI Akira Fri, 13 Aug 2004 18:05:05 +0900 + +elserv (0.4.0+0.20011203cvs-7) unstable; urgency=low + + * emacsen-startup: Don't add uncompiled files to the load-path. + + -- OHASHI Akira Thu, 12 Aug 2004 12:27:27 +0900 + +elserv (0.4.0+0.20011203cvs-6) unstable; urgency=low + + * emacsen-install: Fix for broken installation. (closes: #247292, #253046) + + -- OHASHI Akira Sat, 7 Aug 2004 09:03:04 +0900 + +elserv (0.4.0+0.20011203cvs-5) unstable; urgency=low + + * emacsen-startup: Use `debian-pkg-add-load-path-item' and add uncompiled + files to the load-path. + * emacsen-install: Output a log to tempfile. + * copyright: Fix for lintian. + + -- OHASHI Akira Fri, 6 Aug 2004 13:20:49 +0900 + +elserv (0.4.0+0.20011203cvs-4) unstable; urgency=low + + * control (Depends): Don't depend `emacs20'. (closes: #232752) + (Standards-Version): Increased to 3.6.1. + + -- OHASHI Akira Mon, 16 Feb 2004 14:08:36 +0900 + +elserv (0.4.0+0.20011203cvs-3.2) unstable; urgency=low + + * NMU + * Apply patch from OHURA Makoto to fix installation error for xemacs21. + (closes: #178486) + * es-demo.el: publish a directory known to exist, than /usr/local/www.data, + try "usr/share/doc/elserv" (closes: #166159) + * debian/dirs: create /var/www + * publish /var/www per default (closes: #166288) + * add missing shell quoting in emacsen-install + + -- Junichi Uekawa Tue, 18 Feb 2003 22:13:48 +0900 + +elserv (0.4.0+0.20011203cvs-3.1) unstable; urgency=low + + * NMU + * add autoload to emacsen-startup to allow easier startup of + elserv-mhc, elserv-wiki, elserv-demo, etc. + + -- Junichi Uekawa Thu, 23 Jan 2003 19:34:35 +0900 + +elserv (0.4.0+0.20011203cvs-3) unstable; urgency=low + + * emacsen-install: Redirect the compilation log to + `CompilationLog.gz' + * rules: Copy `elservd' to `usr/lib/elserv' and abolish + `dh_undocumented'. + * dirs: Follow change above. + * emacsen-startup: Ditto. + + -- OHASHI Akira Wed, 16 Jan 2002 00:22:14 +0900 + +elserv (0.4.0+0.20011203cvs-2) unstable; urgency=low + + * control: Add Suggests: emacs-wiki, mhc. + + -- OHASHI Akira Wed, 5 Dec 2001 22:58:32 +0900 + +elserv (0.4.0+0.20011203cvs-1) unstable; urgency=low + + * New upstream release + + -- OHASHI Akira Mon, 3 Dec 2001 23:47:59 +0900 + +elserv (0.4.0-4) unstable; urgency=high + + * Fix for xemacs21. (closes: Bug#119805) + + -- OHASHI Akira Fri, 16 Nov 2001 20:12:46 +0900 + +elserv (0.4.0-3) unstable; urgency=low + + * Check docs. + + -- OHASHI Akira Thu, 23 Aug 2001 10:18:35 +0900 + +elserv (0.4.0-2) unstable; urgency=low + + * Fix extra-license-file warning. + + -- OHASHI Akira Sun, 12 Aug 2001 21:11:34 +0900 + +elserv (0.4.0-1) unstable; urgency=low + + * New upstream release + + -- OHASHI Akira Thu, 19 Jul 2001 20:09:00 +0900 + +elserv (0.3.1+20010718cvs-2) unstable; urgency=low + + * Use dh_undocumented. + + -- OHASHI Akira Thu, 19 Jul 2001 19:00:23 +0900 + +elserv (0.3.1+20010718cvs-1) unstable; urgency=low + + * Initial Release. + + -- OHASHI Akira Wed, 18 Jul 2001 17:56:07 +0900 + + --- elserv-0.4.0+0.20011203cvs.orig/debian/compat +++ elserv-0.4.0+0.20011203cvs/debian/compat @@ -0,0 +1 @@ +5 --- elserv-0.4.0+0.20011203cvs.orig/debian/control +++ elserv-0.4.0+0.20011203cvs/debian/control @@ -0,0 +1,19 @@ +Source: elserv +Section: web +Priority: optional +Maintainer: Junichi Uekawa +Build-Depends: cdbs, + debhelper, + dh-buildinfo, + dpatch +Standards-Version: 3.7.2 + +Package: elserv +Architecture: all +Depends: emacs | emacsen, flim, ruby +Suggests: emacs-wiki, mhc +Description: HTTP server that runs on Emacsen + Elserv is an HTTP server which runs on Emacs, as a background process. + Since Emacs does not support server sockets, Elserv runs dedicated server + process (ruby script) as a backend process and communicate with it to provide + a server feature on Emacs. --- elserv-0.4.0+0.20011203cvs.orig/debian/control.in +++ elserv-0.4.0+0.20011203cvs/debian/control.in @@ -0,0 +1,16 @@ +Source: elserv +Section: web +Priority: optional +Maintainer: Junichi Uekawa +Build-Depends: @cdbs@ +Standards-Version: 3.7.2 + +Package: elserv +Architecture: all +Depends: emacs | emacsen, flim, ruby +Suggests: emacs-wiki, mhc +Description: HTTP server that runs on Emacsen + Elserv is an HTTP server which runs on Emacs, as a background process. + Since Emacs does not support server sockets, Elserv runs dedicated server + process (ruby script) as a backend process and communicate with it to provide + a server feature on Emacs. --- elserv-0.4.0+0.20011203cvs.orig/debian/copyright +++ elserv-0.4.0+0.20011203cvs/debian/copyright @@ -0,0 +1,31 @@ +This package is Debianized by Junichi Uekawa + +This package was originally debianized by OHASHI Akira on +Tue, 17 Jul 2001 23:08:04 +0900. + +It was downloaded from + +Upstream Author: Yuuichi Teranishi + +Copyright: + +Copyright (C) 2001 Yuuichi Teranishi + + 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, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU Emacs; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + +On Debian systems, the complete text of the GNU General Public License +can be found in /usr/share/common-licenses/GPL. --- elserv-0.4.0+0.20011203cvs.orig/debian/dirs +++ elserv-0.4.0+0.20011203cvs/debian/dirs @@ -0,0 +1,6 @@ +usr/lib/elserv +usr/share/elserv/icons +usr/share/emacs/site-lisp/elserv +usr/share/doc/elserv +var/www + --- elserv-0.4.0+0.20011203cvs.orig/debian/docs +++ elserv-0.4.0+0.20011203cvs/debian/docs @@ -0,0 +1,2 @@ +BUGS.ja +README.ja --- elserv-0.4.0+0.20011203cvs.orig/debian/emacsen-install +++ elserv-0.4.0+0.20011203cvs/debian/emacsen-install @@ -0,0 +1,133 @@ +#! /bin/bash -e +# /usr/lib/emacsen-common/packages/install/elserv + +# Written by Jim Van Zandt , borrowing heavily +# from the install scripts for gettext by Santiago Vila +# and octave by Dirk Eddelbuettel . +# +# Patched by Roland Mas to add support for lists +# of flavor-dependently included/excluded files + +FLAVOR=$1 +STAMPFILE=elserv.elc +PACKAGE=elserv + +# INCLUDED_emacs20="" +# INCLUDED_emacs21="" +# INCLUDED_xemacs21="" +# INCLUDE_emacs_snapshot="" + +# EXCLUDED_emacs20="" +# EXCLUDED_emacs21="" +# EXCLUDED_xemacs21="" +# EXCLUDED_emacs_snapshot="" + +SOURCEONLY_all="ELSERV-CFG ELSERV-ELS ELSERV-MK" + +eval included_here=\$$(echo INCLUDED_$FLAVOR | tr - _) +eval excluded_here=\$$(echo EXCLUDED_$FLAVOR | tr - _) +eval sourceonly_here=\$$(echo SOURCEONLY_$FLAVOR | tr - _) + +included_all=$(for i in ${!INCLUDED_*} ; do + eval echo \$$i + done | sort -u) + +excluded_all=$(for i in ${!EXCLUDED_*} ; do + eval echo \$$i + done | sort -u) + +sourceonly_all=$(for i in ${!SOURCEONLY_*} ; do + eval echo \$$i + done | sort -u) + +if [ ${FLAVOR} = emacs ]; then exit 0; fi + +if [ ${FLAVOR} = xemacs21 ]; then + XEMACS=`ls /usr/bin/xemacs*21*-mule* 2> /dev/null | head -1` + if [ -z $XEMACS ]; then exit 0; fi + XEMACS=`basename $XEMACS` +fi + +# Install-info-altdir does not actually exist. +# Maybe somebody will write it. +#if test -x /usr/sbin/install-info-altdir; then +# echo install/${PACKAGE}: install Info links for ${FLAVOR} +# install-info-altdir --quiet --section "" "" --dirname=${FLAVOR} /usr/info/${PACKAGE}.info.gz +#fi + +LOG=`tempfile -pelc_ -s.log -m644` +ELDIR=/usr/share/emacs/site-lisp/${PACKAGE} +ELCDIR=/usr/share/${FLAVOR}/site-lisp/${PACKAGE} +if test -e "${ELCDIR}/${STAMPFILE}"; then + echo "${PACKAGE} files already compiled in ${ELCDIR}." + rm -f ${LOG} + exit +fi +echo install/${PACKAGE}: Handling ${FLAVOR}, logged in ${LOG} + +if [ -z "$FLAGS" ] ; then + FLAGS="-q -no-site-file --no-site-file -batch -l ELSERV-MK -f compile-elserv" +fi + +install -m 755 -d ${ELCDIR} +cd ${ELDIR} + +# Now to compute the list of files to install... + +FILES=$(ls -1 *.el) +# Here we have all of them + +PATTERN="" +for i in $included_all $excluded_all $sourceonly_all; do + [ ! -z "$PATTERN" ] && PATTERN="${PATTERN}\|" + PATTERN="${PATTERN}^$i\$" +done +FILES2=$FILES +if [ ! -z "$PATTERN" ] ; then + FILES=$(for i in $FILES2 ; do echo $i | grep -v $PATTERN || true ; done) +fi +# Here we only have those not explicitly included or excluded by any flavour + +FILES="$FILES $included_here" +# Here we also have those included for the current flavour + +for i in $excluded_all ; do + include_i="yes" + for j in $excluded_here ; do + [ $i = $j ] && include_i="no" + done + [ $include_i = "yes" ] && FILES="$FILES $i" +done +# And now we have those excluded by other flavours but not the current one + +FILES=$(for i in $FILES ; do echo $i ; done | sort -u) +# And now for my last trick... The list is now uniquified! + +# Symlinks instead of copying... +cd ${ELCDIR} +for i in $FILES $sourceonly_all; do + ln -fs /usr/share/emacs/site-lisp/${PACKAGE}/$i +done + +cat << EOF > path.el +(setq load-path (cons "." load-path) byte-compile-warnings nil) +EOF +if test "${APPEND_LOAD_PATH}" != "" +then + cat << EOF >> path.el +(setq load-path (append ${APPEND_LOAD_PATH} load-path)) +EOF +fi + +if [ -z "$XEMACS" ]; then + echo ${FLAVOR} ${FLAGS} >> ${LOG} + "${FLAVOR}" ${FLAGS} >> ${LOG} 2>&1 +else + echo ${XEMACS} ${FLAGS} >> ${LOG} + "${XEMACS}" ${FLAGS} >> ${LOG} 2>&1 +fi +egrep -s -e "While compiling|\*\*" ${LOG} || /bin/true +echo install/${PACKAGE}: Deleting ${LOG} +rm -f path.el ELSERV-* ${LOG} + +exit 0 --- elserv-0.4.0+0.20011203cvs.orig/debian/emacsen-remove +++ elserv-0.4.0+0.20011203cvs/debian/emacsen-remove @@ -0,0 +1,15 @@ +#!/bin/sh -e +# /usr/lib/emacsen-common/packages/remove/elserv + +FLAVOR=$1 +PACKAGE=elserv + +if [ ${FLAVOR} != emacs ]; then +# if test -x /usr/sbin/install-info-altdir; then +# echo remove/${PACKAGE}: removing Info links for ${FLAVOR} +# install-info-altdir --quiet --remove --dirname=${FLAVOR} /usr/info/elserv.info.gz +# fi + + echo remove/${PACKAGE}: purging byte-compiled files for ${FLAVOR} + rm -rf /usr/share/${FLAVOR}/site-lisp/${PACKAGE} +fi --- elserv-0.4.0+0.20011203cvs.orig/debian/emacsen-startup +++ elserv-0.4.0+0.20011203cvs/debian/emacsen-startup @@ -0,0 +1,29 @@ +;; -*-emacs-lisp-*- +;; +;; Emacs startup file for the Debian GNU/Linux elserv package +;; +;; Originally contributed by Nils Naumann +;; Modified by Dirk Eddelbuettel +;; Adapted for dh-make by Jim Van Zandt + +;; The elserv package follows the Debian/GNU Linux 'emacsen' policy and +;; byte-compiles its elisp files for each 'emacs flavor' (emacs19, +;; xemacs19, emacs20, xemacs20...). The compiled code is then +;; installed in a subdirectory of the respective site-lisp directory. +;; We have to add this to the load-path: + +(when (featurep 'mule) + (if (not (file-exists-p "/usr/share/emacs/site-lisp/elserv")) + (message "Package elserv removed but not purged. Skipping setup.") + (debian-pkg-add-load-path-item + (concat "/usr/share/" (symbol-name debian-emacs-flavor) + "/site-lisp/elserv")) + + (autoload 'elserv-start "elserv" nil t) + (autoload 'elserv-mhc-start "es-mhc" nil t) + (autoload 'elserv-demo-start "es-demo" nil t) + (autoload 'elserv-wiki-start "es-wiki" nil t) + (autoload 'remote-controller "remote" nil t) + (autoload 'web-custom "web-custom" nil t) + (setq elserv-daemon-name "/usr/lib/elserv/elservd") + (setq elserv-icon-path "/usr/share/elserv/icons"))) --- elserv-0.4.0+0.20011203cvs.orig/debian/patches/00list +++ elserv-0.4.0+0.20011203cvs/debian/patches/00list @@ -0,0 +1,5 @@ +01_insert-a-whitespace-after-the-backslash +02_elservd-space +03_emacs-wiki-multiencoding +04_emacs-wiki-default-directory +05_emacs-wiki-home-page --- elserv-0.4.0+0.20011203cvs.orig/debian/patches/01_insert-a-whitespace-after-the-backslash.dpatch +++ elserv-0.4.0+0.20011203cvs/debian/patches/01_insert-a-whitespace-after-the-backslash.dpatch @@ -0,0 +1,19 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## insert-a-whitespace-after-the-backslash.dpatch by OHASHI Akira +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix 325449 + +@DPATCH@ +diff -urNad elserv-0.4.0+0.20011203cvs~/elserv.el elserv-0.4.0+0.20011203cvs/elserv.el +--- elserv-0.4.0+0.20011203cvs~/elserv.el 2005-12-10 13:45:38.000000000 +0900 ++++ elserv-0.4.0+0.20011203cvs/elserv.el 2005-12-10 13:52:21.000000000 +0900 +@@ -470,7 +470,7 @@ + ((>= i len) (concat (nreverse decoded))) + (let ((ch (aref str i))) + (cond ((eq ?+ ch) +- (push ?\ decoded) ++ (push ?\ decoded) + (incf i)) + ((and (eq ?% ch) + (< (+ i 2) len) --- elserv-0.4.0+0.20011203cvs.orig/debian/patches/02_elservd-space.dpatch +++ elserv-0.4.0+0.20011203cvs/debian/patches/02_elservd-space.dpatch @@ -0,0 +1,193 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## elservd-space.dpatch by Junichi Uekawa +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix /usr/lib/elserv/elservd:257: warning: don't put space before argument parentheses + +@DPATCH@ +diff -urNad elserv-0.4.0+0.20011203cvs~/elservd elserv-0.4.0+0.20011203cvs/elservd +--- elserv-0.4.0+0.20011203cvs~/elservd ++++ elserv-0.4.0+0.20011203cvs/elservd +@@ -25,7 +25,7 @@ + keep_alive_timeout = ARGV[4].to_i if ARGV[4] != "0" + keep_alive_timeout = 15 unless keep_alive_timeout + +-session_hash = Hash.new (nil) ++session_hash = Hash.new(nil) + + class ElservClientSession + def initialize (socket, max_count = 0) +@@ -85,7 +85,7 @@ + + def serve_page (content) + # serve_page may close the socket. +- @socket.write (content + "\r\n") ++ @socket.write(content + "\r\n") + @serve_count += 1 + if (@max_count != 0) + if (@serve_count >= @max_count) +@@ -104,7 +104,7 @@ + end + + def read (length) +- return @socket.read (length) ++ return @socket.read(length) + end + + def read_chunked() +@@ -118,7 +118,7 @@ + len = m[0].hex + break if len == 0 + body << @socket.read(len) +- @socket.read (2) # CRLF ++ @socket.read(2) # CRLF + end + until @socket.gets.empty? do + ; +@@ -152,14 +152,14 @@ + esock.close() + elsif line =~/(\d+)([:;])(\d+)/ + # emacs sent port:bytes +- content = esock.read ($3.to_i) +- esock.read (2) # CRLF ++ content = esock.read($3.to_i) ++ esock.read(2) # CRLF + session = session_hash[$1] + if session + if ($2 == ";") # ';'=> close ':' => keep_alive + session.set_close! + end +- session.serve_page (content) ++ session.serve_page(content) + end + else # invalid. close connection + esock.close() +@@ -189,7 +189,7 @@ + isock = nil + end + if isock +- isock.write (sock.addr[1].to_s + ","+ sock.peeraddr[1].to_s + "\r\n") ++ isock.write(sock.addr[1].to_s + ","+ sock.peeraddr[1].to_s + "\r\n") + igot = isock.gets.split(/: */) + if igot + user += "elserv-ident: "+ igot[3] +@@ -198,7 +198,7 @@ + end + end + # end of identity check +- session = ElservClientSession.new (sock, (max_keep_alive or 0)) ++ session = ElservClientSession.new(sock, (max_keep_alive or 0)) + m.synchronize do + session_count += 1 + end +@@ -227,7 +227,7 @@ + else + # requests while keep-alive + begin +- timeout (keep_alive_timeout) do ++ timeout(keep_alive_timeout) do + while (got = session.gets) != CRLF + if got =~ /^content-length: *(\d+)/i + content_length = $1.to_i +@@ -254,7 +254,7 @@ + body = [body].pack('m').chomp.gsub("\n",CRLF+" ") + req += "elserv-content: " + body + CRLF + elsif content_length != 0 +- body = session.read (content_length) ++ body = session.read(content_length) + body = [body].pack('m').chomp.gsub("\n",CRLF+" ") + req += "elserv-content: " + body + CRLF + end +diff -urNad elserv-0.4.0+0.20011203cvs~/elservd.in elserv-0.4.0+0.20011203cvs/elservd.in +--- elserv-0.4.0+0.20011203cvs~/elservd.in 2001-07-18 16:33:36.000000000 +0900 ++++ elserv-0.4.0+0.20011203cvs/elservd.in 2006-09-08 22:58:08.184850120 +0900 +@@ -25,7 +25,7 @@ + keep_alive_timeout = ARGV[4].to_i if ARGV[4] != "0" + keep_alive_timeout = 15 unless keep_alive_timeout + +-session_hash = Hash.new (nil) ++session_hash = Hash.new(nil) + + class ElservClientSession + def initialize (socket, max_count = 0) +@@ -85,7 +85,7 @@ + + def serve_page (content) + # serve_page may close the socket. +- @socket.write (content + "\r\n") ++ @socket.write(content + "\r\n") + @serve_count += 1 + if (@max_count != 0) + if (@serve_count >= @max_count) +@@ -104,7 +104,7 @@ + end + + def read (length) +- return @socket.read (length) ++ return @socket.read(length) + end + + def read_chunked() +@@ -118,7 +118,7 @@ + len = m[0].hex + break if len == 0 + body << @socket.read(len) +- @socket.read (2) # CRLF ++ @socket.read(2) # CRLF + end + until @socket.gets.empty? do + ; +@@ -152,14 +152,14 @@ + esock.close() + elsif line =~/(\d+)([:;])(\d+)/ + # emacs sent port:bytes +- content = esock.read ($3.to_i) +- esock.read (2) # CRLF ++ content = esock.read($3.to_i) ++ esock.read(2) # CRLF + session = session_hash[$1] + if session + if ($2 == ";") # ';'=> close ':' => keep_alive + session.set_close! + end +- session.serve_page (content) ++ session.serve_page(content) + end + else # invalid. close connection + esock.close() +@@ -189,7 +189,7 @@ + isock = nil + end + if isock +- isock.write (sock.addr[1].to_s + ","+ sock.peeraddr[1].to_s + "\r\n") ++ isock.write(sock.addr[1].to_s + ","+ sock.peeraddr[1].to_s + "\r\n") + igot = isock.gets.split(/: */) + if igot + user += "elserv-ident: "+ igot[3] +@@ -198,7 +198,7 @@ + end + end + # end of identity check +- session = ElservClientSession.new (sock, (max_keep_alive or 0)) ++ session = ElservClientSession.new(sock, (max_keep_alive or 0)) + m.synchronize do + session_count += 1 + end +@@ -227,7 +227,7 @@ + else + # requests while keep-alive + begin +- timeout (keep_alive_timeout) do ++ timeout(keep_alive_timeout) do + while (got = session.gets) != CRLF + if got =~ /^content-length: *(\d+)/i + content_length = $1.to_i +@@ -254,7 +254,7 @@ + body = [body].pack('m').chomp.gsub("\n",CRLF+" ") + req += "elserv-content: " + body + CRLF + elsif content_length != 0 +- body = session.read (content_length) ++ body = session.read(content_length) + body = [body].pack('m').chomp.gsub("\n",CRLF+" ") + req += "elserv-content: " + body + CRLF + end --- elserv-0.4.0+0.20011203cvs.orig/debian/patches/03_emacs-wiki-multiencoding.dpatch +++ elserv-0.4.0+0.20011203cvs/debian/patches/03_emacs-wiki-multiencoding.dpatch @@ -0,0 +1,209 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## emacs-wiki-multiencoding.dpatch by Junichi Uekawa +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: support different encodings in emacs-wiki + +@DPATCH@ +diff -urNad elserv-0.4.0+0.20011203cvs~/es-wiki.el elserv-0.4.0+0.20011203cvs/es-wiki.el +--- elserv-0.4.0+0.20011203cvs~/es-wiki.el 2001-07-18 09:51:12.000000000 +0900 ++++ elserv-0.4.0+0.20011203cvs/es-wiki.el 2006-09-21 08:13:24.499993928 +0900 +@@ -1,6 +1,7 @@ + ;;; es-wiki.el -- Elserv interface for emacs-wiki. + + ;; Copyright (C) 2001 Yuuichi Teranishi ++;; Copyright (C) 2002,2003 Junichi Uekawa + + ;; Author: Yuuichi Teranishi + ;; Keywords: HTTP +@@ -27,6 +28,7 @@ + ;;; Code: + (require 'emacs-wiki) + (require 'elserv) ++(require 'mcharset) + + ;; Set action as relative path! + (defvar elserv-wiki-http-edit-form +@@ -39,7 +41,7 @@ + \n") + + (defvar elserv-wiki-http-search-form +- " ++ " +
+
+ Search for: +@@ -121,49 +123,60 @@ + "]]\n") + "No WikiNames")) + ++(defun elserv-wiki-read-charset-from-html () ++ "Read the html header information and return the charset information" ++ (let* (charset) ++ (goto-line 1) ++ (re-search-forward "content=\"text.html; charset=\\([^\"]+\\)") ++ (setq charset (intern (match-string 1))) ++ charset)) ++ + (defun elserv-wiki-render-page (result name) +- (cond ((string= name emacs-wiki-index-page) +- (with-current-buffer (emacs-wiki-generate-index t t) +- (emacs-wiki-replace-markup "Wiki Index") +- (elserv-set-result-header +- result +- (list 'content-type "text/html; charset=iso-2022-jp")) +- (elserv-set-result-body result (encode-coding-string +- (buffer-string) +- 'iso-2022-jp)) +- (kill-buffer (current-buffer)))) +- ((string= name "WikiNames") +- (with-temp-buffer +- (insert (elserv-wiki-interwiki-page)) +- (emacs-wiki-replace-markup "WikiNames") +- (elserv-set-result-header +- result (list 'content-type "text/html")) +- (elserv-set-result-body result (buffer-string)))) +- (t +- (let ((file (and (not (emacs-wiki-private-p name)) +- (cdr (assoc name (emacs-wiki-file-alist))))) +- (system-time-locale "C") +- (inhibit-read-only t)) +- (if (null file) +- (signal 'elserv-file-not-found +- (concat "Page not found" +- (format "Wiki page %s not found" name))) +- (with-temp-buffer +- (let ((modified-time (nth 5 (file-attributes file)))) +- (insert-file-contents-as-binary file) +- (decode-coding-region (point-min) (point-max) 'iso-2022-jp) +- (setq buffer-file-name name) +- (emacs-wiki-replace-markup name) +- (set-buffer-modified-p nil) +- (elserv-set-result-header +- result +- (list 'content-type "text/html; charset=iso-2022-jp" +- 'last-modified (format-time-string "%a, %e %b %Y %T %Z" +- modified-time))) +- (elserv-set-result-body result +- (encode-coding-string +- (buffer-string) +- 'iso-2022-jp))))))))) ++ (let* (charset) ++ (cond ((string= name emacs-wiki-index-page) ++ (with-current-buffer (emacs-wiki-generate-index t t) ++ (emacs-wiki-replace-markup "Wiki Index") ++ (setq charset (elserv-wiki-read-charset-from-html)) ++ (elserv-set-result-header ++ result ++ (list 'content-type (concat "text/html; charset=" (symbol-name charset)))) ++ (elserv-set-result-body result (encode-coding-string ++ (buffer-string) ++ charset)) ++ (kill-buffer (current-buffer)))) ++ ((string= name "WikiNames") ++ (with-temp-buffer ++ (insert (elserv-wiki-interwiki-page)) ++ (emacs-wiki-replace-markup "WikiNames") ++ (setq charset (elserv-wiki-read-charset-from-html)) ++ (elserv-set-result-header ++ result (list 'content-type "text/html")) ++ (elserv-set-result-body result (buffer-string)))) ++ (t ++ (let ((file (and (not (emacs-wiki-private-p name)) ++ (cdr (assoc name (emacs-wiki-file-alist))))) ++ (system-time-locale "C") ++ (inhibit-read-only t)) ++ (if (null file) ++ (signal 'elserv-file-not-found ++ (concat "Page not found" ++ (format "Wiki page %s not found" name))) ++ (with-temp-buffer ++ (let ((modified-time (nth 5 (file-attributes file)))) ++ (insert-file-contents file) ++ (setq buffer-file-name name) ++ (emacs-wiki-replace-markup name) ++ (setq charset (elserv-wiki-read-charset-from-html)) ++ (set-buffer-modified-p nil) ++ (elserv-set-result-header ++ result ++ (list 'content-type (concat "text/html; charset=" (symbol-name charset)) ++ 'last-modified (format-time-string "%a, %e %b %Y %T %Z" ++ modified-time))) ++ (elserv-set-result-body result ++ (encode-coding-string ++ (buffer-string) ++ charset)))))))))) + + (defun elserv-wiki-edit-page (result page-name) + (let ((emacs-wiki-http-edit-form elserv-wiki-http-edit-form)) +@@ -172,18 +185,19 @@ + (with-temp-buffer + (emacs-wiki-setup-edit-page page-name) + ;; this is required because of the : in the name +- (elserv-set-result-header +- result +- (list 'content-type "text/html; charset=iso-2022-jp")) +- (elserv-set-result-body result +- (encode-coding-string +- (buffer-string) +- 'iso-2022-jp)))))) +- ++ (let* ((charset (detect-mime-charset-region (point-min) (point-max)))) ++ (elserv-set-result-header ++ result ++ (list 'content-type (concat "text/html; charset=" (symbol-name charset)))) ++ (elserv-set-result-body result ++ (encode-coding-string ++ (buffer-string) ++ 'iso-2022-jp))))))) ++ + (defun elserv-wiki-change-page (result request) + (let* ((res (elserv-url-decode (plist-get request 'body))) + (page (caar res)) +- (text (cdar res)) ++ (text (cdar res)) + (len (length text)) + (require-final-newline t) + (pos 0) illegal user) +@@ -220,7 +234,7 @@ + (set-file-modes buffer-file-name ?\666)) + (kill-buffer (current-buffer))) + (with-temp-buffer +- (emacs-wiki-file-alist) ; force re-check ++ (emacs-wiki-file-alist) ; force re-check + (insert "") + (insert "Thank you, your changes have been saved to " page) + (insert ". You will be redirected to " +@@ -246,14 +260,15 @@ + (with-current-buffer (emacs-wiki-grep term) + (emacs-wiki-wikify-search-results term) + (emacs-wiki-replace-markup "Search Results") +- (elserv-set-result-header +- result +- (list 'content-type "text/html;charset=iso-2022-jp")) +- (elserv-set-result-body result +- (encode-coding-string +- (buffer-string) 'iso-2022-jp)) +- (kill-buffer (current-buffer))))) +- ++ (let* ((charset (elserv-wiki-read-charset-from-html))) ++ (elserv-set-result-header ++ result ++ (list 'content-type (concat "text/html;charset=" (symbol-name charset)))) ++ (elserv-set-result-body result ++ (encode-coding-string ++ (buffer-string) charset)) ++ (kill-buffer (current-buffer)))))) ++ + (defun elserv-wiki-function (result path ppath request) + (if (string= path "") + (elserv-make-redirect result +@@ -263,7 +278,7 @@ + (let ((emacs-wiki-serving-p t) + (emacs-wiki-publishing-footer elserv-wiki-publishing-footer)) + (cond +- ((string= path "/") ; default page. ++ ((string= path "/") ; default page. + (elserv-wiki-render-page result emacs-wiki-default-page)) + ((string-match "\\`/wiki\\?\\(.+\\)" path) + (elserv-wiki-render-page result (match-string 1 path))) --- elserv-0.4.0+0.20011203cvs.orig/debian/patches/04_emacs-wiki-default-directory.dpatch +++ elserv-0.4.0+0.20011203cvs/debian/patches/04_emacs-wiki-default-directory.dpatch @@ -0,0 +1,18 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## emacs-wiki-default-directory.dpatch by Junichi Uekawa +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Set default directory to ~/Wiki + +@DPATCH@ +diff -urNad elserv-0.4.0+0.20011203cvs~/es-wiki.el elserv-0.4.0+0.20011203cvs/es-wiki.el +--- elserv-0.4.0+0.20011203cvs~/es-wiki.el 2006-09-21 08:20:03.885278136 +0900 ++++ elserv-0.4.0+0.20011203cvs/es-wiki.el 2006-09-21 08:21:17.090149304 +0900 +@@ -276,6 +276,7 @@ + (unless (string= ppath "/") ppath) + path "/")) + (let ((emacs-wiki-serving-p t) ++ (default-directory (expand-file-name "~/Wiki")) + (emacs-wiki-publishing-footer elserv-wiki-publishing-footer)) + (cond + ((string= path "/") ; default page. --- elserv-0.4.0+0.20011203cvs.orig/debian/patches/05_emacs-wiki-home-page.dpatch +++ elserv-0.4.0+0.20011203cvs/debian/patches/05_emacs-wiki-home-page.dpatch @@ -0,0 +1,25 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 05_emacs-wiki-home-page.dpatch by Junichi Uekawa +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: use emacs-wiki-default-page instead of emacs-wiki-home-page +## DP: Follow change done on emacs-wiki. + +@DPATCH@ +diff -urNad elserv-0.4.0+0.20011203cvs~/es-wiki.el elserv-0.4.0+0.20011203cvs/es-wiki.el +--- elserv-0.4.0+0.20011203cvs~/es-wiki.el 2006-09-21 23:30:27.518223712 +0900 ++++ elserv-0.4.0+0.20011203cvs/es-wiki.el 2006-09-21 23:30:56.566807656 +0900 +@@ -78,10 +78,10 @@ + + + (concat +- (and (emacs-wiki-page-file emacs-wiki-home-page t) +- (not (emacs-wiki-private-p emacs-wiki-home-page)) ++ (and (emacs-wiki-page-file emacs-wiki-default-page t) ++ (not (emacs-wiki-private-p emacs-wiki-default-page)) + (concat +- (emacs-wiki-link-href emacs-wiki-home-page \"Home\") ++ (emacs-wiki-link-href emacs-wiki-default-page \"Home\") + \" / \")) + (emacs-wiki-link-href emacs-wiki-index-page \"Index\") + (and (emacs-wiki-page-file \"ChangeLog\" t) --- elserv-0.4.0+0.20011203cvs.orig/debian/patches/CVS/Entries +++ elserv-0.4.0+0.20011203cvs/debian/patches/CVS/Entries @@ -0,0 +1,7 @@ +/04_emacs-wiki-default-directory.dpatch/1.1/Wed Sep 20 23:22:22 2006// +/03_emacs-wiki-multiencoding.dpatch/1.1/Wed Sep 20 23:15:46 2006// +/02_elservd-space.dpatch/1.1/Wed Sep 20 23:11:19 2006// +/01_insert-a-whitespace-after-the-backslash.dpatch/1.1/Wed Sep 20 23:11:19 2006// +/05_emacs-wiki-home-page.dpatch/1.1/Thu Sep 21 14:31:37 2006// +/00list/1.4/Thu Sep 21 14:27:47 2006// +D --- elserv-0.4.0+0.20011203cvs.orig/debian/patches/CVS/Repository +++ elserv-0.4.0+0.20011203cvs/debian/patches/CVS/Repository @@ -0,0 +1 @@ +debian/elserv/patches --- elserv-0.4.0+0.20011203cvs.orig/debian/patches/CVS/Root +++ elserv-0.4.0+0.20011203cvs/debian/patches/CVS/Root @@ -0,0 +1 @@ +:ext:aegis.netfort.gr.jp:/home/dancer/CVSREPOSITORY --- elserv-0.4.0+0.20011203cvs.orig/debian/pbuilder-test/01_demotest +++ elserv-0.4.0+0.20011203cvs/debian/pbuilder-test/01_demotest @@ -0,0 +1,10 @@ +#!/bin/bash +# test the output of demo test page. + +apt-get install --force-yes -y emacs22 emacs21- +emacs22 -batch -eval '(progn (elserv-demo-start) (while t (message (current-time-string))(sleep-for 15)))' < /dev/null & +EMACS=$! +sleep 5s +wget http://localhost:8000 -Odebian/pbuilder-test/01_demotest.test +kill $EMACS +diff -u debian/pbuilder-test/01_demotest.{real,test} --- elserv-0.4.0+0.20011203cvs.orig/debian/pbuilder-test/01_demotest.real +++ elserv-0.4.0+0.20011203cvs/debian/pbuilder-test/01_demotest.real @@ -0,0 +1,14 @@ +Elserv

Elserv: Yet another HTTP server on Emacsen

もしこのページが読めたのであれば、Elserv ウェブサーバのインストールがこの計算機で無事に終了したことを意味します。あなたは、関数 elserv-publish によって文書を +加えたり、このページを置きかえることができます。 +

デモ

カレンダー ... calendar を表示します。
+バッファ一覧 ... 現在 Emacs 上にあるバッファの一覧を表示します。
+バッファ一覧 ... 同上(ただし localhost 以外は拒否。)
+認証テスト ... 認証のテスト
+キーワードをしらべる ... POST を使う例です。
+ファイルをアップロードする ... POST を使う例、その 2。
+カウンタ ... いわゆるカウンタ。
+あんてな(要 w3m) ... emacs-w3m のアンテナ機能を中継します。
+ヒストリ(要 w3m) ... 同じく emacs-w3m のDBヒストリを中継します。
+天気予報(要 w3m) ... 同じく emacs-w3m の天気予報を中継します。
+
Powered by Elserv/0.4.0 (Never Surrender) + --- elserv-0.4.0+0.20011203cvs.orig/debian/pbuilder-test/CVS/Entries +++ elserv-0.4.0+0.20011203cvs/debian/pbuilder-test/CVS/Entries @@ -0,0 +1,3 @@ +/01_demotest.real/1.1/Fri May 18 00:17:46 2007// +/01_demotest/1.1/Fri May 18 00:24:46 2007// +D --- elserv-0.4.0+0.20011203cvs.orig/debian/pbuilder-test/CVS/Repository +++ elserv-0.4.0+0.20011203cvs/debian/pbuilder-test/CVS/Repository @@ -0,0 +1 @@ +debian/elserv/pbuilder-test --- elserv-0.4.0+0.20011203cvs.orig/debian/pbuilder-test/CVS/Root +++ elserv-0.4.0+0.20011203cvs/debian/pbuilder-test/CVS/Root @@ -0,0 +1 @@ +:ext:aegis.netfort.gr.jp:/home/dancer/CVSREPOSITORY --- elserv-0.4.0+0.20011203cvs.orig/debian/rules +++ elserv-0.4.0+0.20011203cvs/debian/rules @@ -0,0 +1,15 @@ +#!/usr/bin/make -f + +DEB_AUTO_UPDATE_DEBIAN_CONTROL := yes + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/rules/dpatch.mk + +clean:: + -$(MAKE) clean + +install/elserv:: + install -m 644 ELSERV-* $(DEB_DESTDIR)usr/share/emacs/site-lisp/elserv + install -m 644 *.el $(DEB_DESTDIR)usr/share/emacs/site-lisp/elserv + install -m 755 elservd $(DEB_DESTDIR)usr/lib/elserv + install -m 644 icons/* $(DEB_DESTDIR)usr/share/elserv/icons --- elserv-0.4.0+0.20011203cvs.orig/debian/tests/CVS/Entries +++ elserv-0.4.0+0.20011203cvs/debian/tests/CVS/Entries @@ -0,0 +1,3 @@ +/run.test.sh/1.1.1.1/Wed Sep 20 23:11:19 2006// +/test-cowdancer.sh/1.2/Fri May 18 00:13:56 2007// +D --- elserv-0.4.0+0.20011203cvs.orig/debian/tests/CVS/Repository +++ elserv-0.4.0+0.20011203cvs/debian/tests/CVS/Repository @@ -0,0 +1 @@ +debian/elserv/tests --- elserv-0.4.0+0.20011203cvs.orig/debian/tests/CVS/Root +++ elserv-0.4.0+0.20011203cvs/debian/tests/CVS/Root @@ -0,0 +1 @@ +:ext:aegis.netfort.gr.jp:/home/dancer/CVSREPOSITORY --- elserv-0.4.0+0.20011203cvs.orig/debian/tests/run.test.sh +++ elserv-0.4.0+0.20011203cvs/debian/tests/run.test.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# run cowdancer to run the tests. + +mkdir tmp +cp ../../../*.deb tmp/ +cowbuilder --execute --bindmount $(pwd) ./test-cowdancer.sh $(pwd) --- elserv-0.4.0+0.20011203cvs.orig/debian/tests/test-cowdancer.sh +++ elserv-0.4.0+0.20011203cvs/debian/tests/test-cowdancer.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# the script to be ran inside cowdancer + +DIR="$1" + +cd $DIR +apt-get install elserv emacs21 +emacs -eval '(elserv-demo-start)' < /dev/tty + + --- elserv-0.4.0+0.20011203cvs.orig/elservd +++ elserv-0.4.0+0.20011203cvs/elservd @@ -0,0 +1,277 @@ +#!/usr/bin/ruby +# -*- ruby -*- +# elservd - A daemon process for elserv +# Yuuichi Teranishi + +require "socket" +require "thread" +require "timeout" +require "monitor" + +if (ARGV.length != 5) + STDERR.print "error: wrong number of arguments ", ARGV.length, "\n" + exit(1) +end + +CRLF = "\r\n" +STDOUT.binmode + +# Arguments: +# port-number {log|nolog} max-children max-keep-alive keep-alive-timeout + +ident = true if ARGV[1] == "log" +max_children = ARGV[2].to_i if ARGV[2] != "0" +max_keep_alive = ARGV[3].to_i if ARGV[3] != "0" +keep_alive_timeout = ARGV[4].to_i if ARGV[4] != "0" +keep_alive_timeout = 15 unless keep_alive_timeout + +session_hash = Hash.new (nil) + +class ElservClientSession + def initialize (socket, max_count = 0) + @socket = socket + @max_count = max_count + @serve_count = 0 + @key = @socket.peeraddr[1].to_s + @keep_alive = true + + @mutex = Monitor.new + @cond = @mutex.new_cond + @running = false + + @closed = false + end + + def set_close! () + @keep_alive = nil + end + + def key + return @key + end + + def peer_host + return @socket.peeraddr[2] + end + + def peer_addr + return @socket.peeraddr[3] + end + + def wait + @mutex.synchronize do + @cond.wait_while {@running} + end + end + + def start + @mutex.synchronize do + @running = true + end + end + + def closed? () + return @closed + end + + def gets () + return @socket.gets + end + + def close () + @socket.close + @closed = true + end + + def serve_page (content) + # serve_page may close the socket. + @socket.write (content + "\r\n") + @serve_count += 1 + if (@max_count != 0) + if (@serve_count >= @max_count) + @socket.close + @closed = true + end + end + if !@keep_alive + @socket.close + @closed = true + end + @mutex.synchronize do + @running = false + @cond.signal + end + end + + def read (length) + return @socket.read (length) + end + + def read_chunked() + len = nil + total = 0 + body = "" + while true do + line = @socket.gets + m = /[0-9a-fA-F]+/.match(line) + m or close # XXX + len = m[0].hex + break if len == 0 + body << @socket.read(len) + @socket.read (2) # CRLF + end + until @socket.gets.empty? do + ; + end + return body + end +end + +# emacs elservd +# <=== greeting:port === +# === connect ===> +# <=== request,key === +# === key:length,CRLF ===> +# === content, CRLF ===> +# + +## Emacs thread +Thread.start() do + emacs_daemon = TCPserver.open("localhost", 0) + ## Greeting. + STDOUT.print "elserv-port: ", emacs_daemon.addr[1], CRLF, CRLF + while TRUE + ## EMACS thread. + esock = emacs_daemon.accept + content = nil + sport = nil + while line = esock.gets # wait for the emacs response. + if line =~ /^stop/ + # emacs sent 'stop'. + emacs_daemon.shutdown(2) + esock.close() + elsif line =~/(\d+)([:;])(\d+)/ + # emacs sent port:bytes + content = esock.read ($3.to_i) + esock.read (2) # CRLF + session = session_hash[$1] + if session + if ($2 == ";") # ';'=> close ':' => keep_alive + session.set_close! + end + session.serve_page (content) + end + else # invalid. close connection + esock.close() + end + # end of EMACS thread + end + end +end + +session_count = 0 +m = Mutex.new + +## MAIN thread +gs = TCPserver.open(ARGV[0]) +while TRUE + s = gs.accept + ## end of MAIN thread + Thread.start() do + ## SESSION thread + sock = s # thread local + # identity check + user = "" + if ident + begin + isock = TCPSocket.open(sock.peeraddr[3], "auth") + rescue + isock = nil + end + if isock + isock.write (sock.addr[1].to_s + ","+ sock.peeraddr[1].to_s + "\r\n") + igot = isock.gets.split(/: */) + if igot + user += "elserv-ident: "+ igot[3] + end + isock.close + end + end + # end of identity check + session = ElservClientSession.new (sock, (max_keep_alive or 0)) + m.synchronize do + session_count += 1 + end + # LOCK OUT! + if max_children and (session_count > max_children) + session.close + end + first_request = true + while !session.closed? + req = "" + force_close = true + chunked = false + content_length = 0 + if first_request + # first request. + while (got = session.gets) != CRLF + if got =~ /^content-length: *(\d+)/i + content_length = $1.to_i + elsif got =~ /^connection: *keep-alive/i + force_close = false + elsif got =~ /^transfer-coding: *chunked/i + chunked = true + end + req += got + end + else + # requests while keep-alive + begin + timeout (keep_alive_timeout) do + while (got = session.gets) != CRLF + if got =~ /^content-length: *(\d+)/i + content_length = $1.to_i + elsif got =~ /^connection: *keep-alive/i + force_close = false + elsif got =~ /^transfer-encoding: *chunked/i + chunked = true + end + req += got + end + end + rescue TimeoutError + req = "" + end + end + first_request = false + if req == "" + # bogus null request. + force_close = true + session.close + else + if chunked + body = session.read_chunked + body = [body].pack('m').chomp.gsub("\n",CRLF+" ") + req += "elserv-content: " + body + CRLF + elsif content_length != 0 + body = session.read (content_length) + body = [body].pack('m').chomp.gsub("\n",CRLF+" ") + req += "elserv-content: " + body + CRLF + end + session_hash[session.key] = session + session.set_close! if force_close + session.start + STDOUT.print user, + "elserv-key: ", session.key, CRLF, + "elserv-client: ", session.peer_host, " ", session.peer_addr, CRLF, + "elserv-request: ", req, CRLF + STDOUT.flush + session.wait + end + end # end of while !session.closed? + m.synchronize do + session_count -= 1 + end + ## end of SESSION thread + end +end --- elserv-0.4.0+0.20011203cvs.orig/es-demo.el +++ elserv-0.4.0+0.20011203cvs/es-demo.el @@ -287,7 +287,7 @@ :content-type "text/html; charset=iso-2022-jp") (elserv-publish (elserv-find-process) (concat path "/data") - :directory "/usr/local/www/data") + :directory "/usr/share/doc/elserv") (elserv-publish (elserv-find-process) (concat path "/logo.gif") :string