Compare commits
11 Commits
0.2.8
...
libevent_w
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
478d8b9dd2 | ||
|
|
904288a2a2 | ||
|
|
de95d4ed85 | ||
|
|
97b53a99fb | ||
|
|
ae017af758 | ||
|
|
7a02f92a4c | ||
|
|
adeebb92a0 | ||
|
|
26f1864c1f | ||
|
|
c14fa3c3a9 | ||
|
|
dfd2191103 | ||
|
|
0042344054 |
@@ -84,7 +84,7 @@ function export_sources
|
|||||||
cp ChangeLog ChangeLog-${VERSION}
|
cp ChangeLog ChangeLog-${VERSION}
|
||||||
}
|
}
|
||||||
|
|
||||||
function export_binaries
|
function build_binaries
|
||||||
{
|
{
|
||||||
if [ ! -d ${PACKAGE} ]; then
|
if [ ! -d ${PACKAGE} ]; then
|
||||||
export_source_directory
|
export_source_directory
|
||||||
@@ -95,9 +95,14 @@ function export_binaries
|
|||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
if [ ! -x ${PACKAGE}/${BINARY} ]; then
|
if [ ! -x ${PACKAGE}/${BINARY} ]; then
|
||||||
echo "Packaging failed, no binary found..."
|
echo "Build failed, no binary found..."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function export_binaries
|
||||||
|
{
|
||||||
|
build_binaries
|
||||||
|
|
||||||
rm -Rf ${PACKAGE}/admin
|
rm -Rf ${PACKAGE}/admin
|
||||||
rm -Rf ${PACKAGE}/autotest
|
rm -Rf ${PACKAGE}/autotest
|
||||||
@@ -111,8 +116,7 @@ function export_binaries
|
|||||||
rm -f ${PACKAGE}/libuhub*
|
rm -f ${PACKAGE}/libuhub*
|
||||||
|
|
||||||
package_zips ${PACKAGE_BIN} ${PACKAGE}
|
package_zips ${PACKAGE_BIN} ${PACKAGE}
|
||||||
|
rm -Rf ${PACKAGE}
|
||||||
rm -Rf ${PACKAGE};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function upload_pkg
|
function upload_pkg
|
||||||
|
|||||||
95
admin/make_pkg_deb.sh
Executable file
95
admin/make_pkg_deb.sh
Executable file
@@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. admin/common.sh
|
||||||
|
|
||||||
|
export_source_directory
|
||||||
|
build_binaries
|
||||||
|
|
||||||
|
DEB_REVISION=1
|
||||||
|
|
||||||
|
if [ -d deb ]; then
|
||||||
|
rm -Rf deb
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p \
|
||||||
|
deb/DEBIAN \
|
||||||
|
deb/usr/bin \
|
||||||
|
deb/usr/share/man/man1/ \
|
||||||
|
deb/usr/share/doc/uhub \
|
||||||
|
deb/etc/uhub \
|
||||||
|
|| exit 1
|
||||||
|
|
||||||
|
find deb -type d | xargs chmod 755
|
||||||
|
|
||||||
|
# Copy binaries...
|
||||||
|
cp ${PACKAGE}/${BINARY} deb/usr/bin
|
||||||
|
strip deb/usr/bin/${BINARY}
|
||||||
|
|
||||||
|
# Copy configuration files...
|
||||||
|
cp ${PACKAGE}/doc/uhub.conf deb/etc/uhub
|
||||||
|
cp ${PACKAGE}/doc/users.conf deb/etc/uhub
|
||||||
|
echo "Welcome to uHub" > deb/etc/uhub/motd.txt
|
||||||
|
|
||||||
|
# Copy other files
|
||||||
|
cp ${PACKAGE}/README deb/usr/share/doc/uhub
|
||||||
|
cp ${PACKAGE}/AUTHORS deb/usr/share/doc/uhub
|
||||||
|
gzip -c --best < ${PACKAGE}/ChangeLog > deb/usr/share/doc/uhub/changelog.gz
|
||||||
|
gzip -c --best < ${PACKAGE}/doc/uhub.1 > deb/usr/share/man/man1/uhub.1.gz
|
||||||
|
|
||||||
|
cat > deb/usr/share/doc/uhub/copyright <<EOF
|
||||||
|
uHub - a high performance hub for the ADC peer-to-peer network
|
||||||
|
|
||||||
|
Copyright (C) 2007-2009 Jan Vidar Krey <janvidar@extatic.org>
|
||||||
|
|
||||||
|
uHub is free and open source software, licensed under the
|
||||||
|
GNU General Public License version 3.
|
||||||
|
|
||||||
|
For details, see /usr/share/common-licenses/GPL-3
|
||||||
|
EOF
|
||||||
|
|
||||||
|
gzip -c --best > deb/usr/share/doc/uhub/changelog.Debian.gz <<EOF
|
||||||
|
uhub (${VERSION}) stable; urgency=low
|
||||||
|
|
||||||
|
* See changelog.gz for details.
|
||||||
|
|
||||||
|
-- Jan Vidar Krey <janvidar@extatic.org> `date -R`
|
||||||
|
EOF
|
||||||
|
|
||||||
|
### Write control files
|
||||||
|
cd deb
|
||||||
|
echo "/etc/uhub/uhub.conf" > DEBIAN/conffiles
|
||||||
|
echo "/etc/uhub/users.conf" >> DEBIAN/conffiles
|
||||||
|
echo "/etc/uhub/motd.txt" >> DEBIAN/conffiles
|
||||||
|
|
||||||
|
md5sum `find usr -type f` > DEBIAN/md5sums
|
||||||
|
|
||||||
|
INSTALL_SIZE=`du -s | cut -f 1`
|
||||||
|
|
||||||
|
cat > DEBIAN/control <<EOF
|
||||||
|
Package: uhub
|
||||||
|
Version: ${VERSION}-${DEB_REVISION}
|
||||||
|
Architecture: ${HOST_MACHINE}
|
||||||
|
Maintainer: Jan Vidar Krey <janvidar@extatic.org>
|
||||||
|
Installed-Size: ${INSTALL_SIZE}
|
||||||
|
Depends: libc6 (>= 2.7-1), libevent1 (>= 1.3e-1)
|
||||||
|
Section: net
|
||||||
|
Priority: optional
|
||||||
|
Description: a high performance hub for the ADC peer-to-peer network
|
||||||
|
uHub is a high performance peer-to-peer hub for the ADC network.
|
||||||
|
Its low memory footprint allows it to handle several thousand users
|
||||||
|
on high-end servers, or a small private hub on embedded hardware.
|
||||||
|
.
|
||||||
|
Homepage: http://www.extatic.org/uhub/
|
||||||
|
EOF
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
### Create deb file
|
||||||
|
fakeroot dpkg-deb --build deb
|
||||||
|
mv deb.deb uhub_${VERSION}-${DEB_REVISION}_${HOST_MACHINE}.deb
|
||||||
|
|
||||||
|
### Check for errors
|
||||||
|
lintian uhub_${VERSION}-${DEB_REVISION}_${HOST_MACHINE}.deb
|
||||||
|
|
||||||
|
### Cleanup
|
||||||
|
rm -Rf deb
|
||||||
|
rm -Rf ${PACKAGE}
|
||||||
|
|
||||||
5
debian/changelog
vendored
5
debian/changelog
vendored
@@ -1,5 +0,0 @@
|
|||||||
uhub (0.2.6-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP>
|
|
||||||
|
|
||||||
-- Jan Vidar Krey <janvidar@extatic.org> Tue, 17 Mar 2009 00:38:12 +0100
|
|
||||||
1
debian/compat
vendored
1
debian/compat
vendored
@@ -1 +0,0 @@
|
|||||||
7
|
|
||||||
3
debian/conffiles
vendored
3
debian/conffiles
vendored
@@ -1,3 +0,0 @@
|
|||||||
etc/uhub/uhub.conf
|
|
||||||
etc/uhub/users.conf
|
|
||||||
etc/uhub/motd.txt
|
|
||||||
15
debian/control
vendored
15
debian/control
vendored
@@ -1,15 +0,0 @@
|
|||||||
Source: uhub
|
|
||||||
Section: net
|
|
||||||
Priority: extra
|
|
||||||
Maintainer: Jan Vidar Krey <janvidar@extatic.org>
|
|
||||||
Build-Depends: debhelper (>= 7)
|
|
||||||
Standards-Version: 3.8.1
|
|
||||||
Homepage: http://www.extatic.org/uhub/
|
|
||||||
|
|
||||||
Package: uhub
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
|
||||||
Description: uHub is a high performance peer-to-peer hub for the ADC network.
|
|
||||||
Its low memory footprint allows it to handle several thousand users on high-end servers,
|
|
||||||
or a small private hub on embedded hardware.
|
|
||||||
uHub uses the ADC protocol, and is compatible with DC++, jUCy and other ADC clients.
|
|
||||||
9
debian/copyright
vendored
9
debian/copyright
vendored
@@ -1,9 +0,0 @@
|
|||||||
Copyright:
|
|
||||||
|
|
||||||
Copyright (C) 2008-2009 Jan Vidar Krey <janvidar@extatic.org>
|
|
||||||
|
|
||||||
License:
|
|
||||||
|
|
||||||
Licensed under the GPL version 3,
|
|
||||||
see `/usr/share/common-licenses/GPL-3'.
|
|
||||||
|
|
||||||
1
debian/dirs
vendored
1
debian/dirs
vendored
@@ -1 +0,0 @@
|
|||||||
usr/bin
|
|
||||||
3
debian/docs
vendored
3
debian/docs
vendored
@@ -1,3 +0,0 @@
|
|||||||
BUGS
|
|
||||||
README
|
|
||||||
AUTHORS
|
|
||||||
1
debian/files
vendored
1
debian/files
vendored
@@ -1 +0,0 @@
|
|||||||
uhub_0.2.6-1_amd64.deb net extra
|
|
||||||
157
debian/init.d
vendored
157
debian/init.d
vendored
@@ -1,157 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
#
|
|
||||||
# skeleton example file to build /etc/init.d/ scripts.
|
|
||||||
# This file should be used to construct scripts for /etc/init.d.
|
|
||||||
#
|
|
||||||
# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
|
|
||||||
# Modified for Debian
|
|
||||||
# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
|
|
||||||
# Further changes by Javier Fernandez-Sanguino <jfs@debian.org>
|
|
||||||
#
|
|
||||||
# Version: @(#)skeleton 1.9 26-Feb-2001 miquels@cistron.nl
|
|
||||||
#
|
|
||||||
|
|
||||||
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
|
||||||
DAEMON=/usr/bin/uhub
|
|
||||||
NAME=uhub
|
|
||||||
DESC=uhub
|
|
||||||
|
|
||||||
test -x $DAEMON || exit 0
|
|
||||||
|
|
||||||
LOGDIR=/var/log/uhub
|
|
||||||
PIDFILE=/var/run/$NAME.pid
|
|
||||||
DODTIME=1 # Time to wait for the server to die, in seconds
|
|
||||||
# If this value is set too low you might not
|
|
||||||
# let some servers to die gracefully and
|
|
||||||
# 'restart' will not work
|
|
||||||
|
|
||||||
# Include uhub defaults if available
|
|
||||||
if [ -f /etc/default/uhub ] ; then
|
|
||||||
. /etc/default/uhub
|
|
||||||
fi
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
running_pid()
|
|
||||||
{
|
|
||||||
# Check if a given process pid's cmdline matches a given name
|
|
||||||
pid=$1
|
|
||||||
name=$2
|
|
||||||
[ -z "$pid" ] && return 1
|
|
||||||
[ ! -d /proc/$pid ] && return 1
|
|
||||||
cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
|
|
||||||
# Is this the expected child?
|
|
||||||
[ "$cmd" != "$name" ] && return 1
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
running()
|
|
||||||
{
|
|
||||||
# Check if the process is running looking at /proc
|
|
||||||
# (works for all users)
|
|
||||||
|
|
||||||
# No pidfile, probably no daemon present
|
|
||||||
[ ! -f "$PIDFILE" ] && return 1
|
|
||||||
# Obtain the pid and check it against the binary name
|
|
||||||
pid=`cat $PIDFILE`
|
|
||||||
running_pid $pid $DAEMON || return 1
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
force_stop() {
|
|
||||||
# Forcefully kill the process
|
|
||||||
[ ! -f "$PIDFILE" ] && return
|
|
||||||
if running ; then
|
|
||||||
kill -15 $pid
|
|
||||||
# Is it really dead?
|
|
||||||
[ -n "$DODTIME" ] && sleep "$DODTIME"s
|
|
||||||
if running ; then
|
|
||||||
kill -9 $pid
|
|
||||||
[ -n "$DODTIME" ] && sleep "$DODTIME"s
|
|
||||||
if running ; then
|
|
||||||
echo "Cannot kill $LABEL (pid=$pid)!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
rm -f $PIDFILE
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
start)
|
|
||||||
echo -n "Starting $DESC: "
|
|
||||||
start-stop-daemon --start --quiet --pidfile $PIDFILE \
|
|
||||||
--exec $DAEMON -- $DAEMON_OPTS
|
|
||||||
if running ; then
|
|
||||||
echo "$NAME."
|
|
||||||
else
|
|
||||||
echo " ERROR."
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
stop)
|
|
||||||
echo -n "Stopping $DESC: "
|
|
||||||
start-stop-daemon --stop --quiet --pidfile $PIDFILE \
|
|
||||||
--exec $DAEMON
|
|
||||||
echo "$NAME."
|
|
||||||
;;
|
|
||||||
force-stop)
|
|
||||||
echo -n "Forcefully stopping $DESC: "
|
|
||||||
force_stop
|
|
||||||
if ! running ; then
|
|
||||||
echo "$NAME."
|
|
||||||
else
|
|
||||||
echo " ERROR."
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
reload)
|
|
||||||
#
|
|
||||||
# If the daemon can reload its config files on the fly
|
|
||||||
# for example by sending it SIGHUP, do it here.
|
|
||||||
#
|
|
||||||
# If the daemon responds to changes in its config file
|
|
||||||
# directly anyway, make this a do-nothing entry.
|
|
||||||
#
|
|
||||||
echo "Reloading $DESC configuration files."
|
|
||||||
start-stop-daemon --stop --signal 1 --quiet --pidfile \
|
|
||||||
/var/run/$NAME.pid --exec $DAEMON
|
|
||||||
#;;
|
|
||||||
force-reload)
|
|
||||||
#
|
|
||||||
# If the "reload" option is implemented, move the "force-reload"
|
|
||||||
# option to the "reload" entry above. If not, "force-reload" is
|
|
||||||
# just the same as "restart" except that it does nothing if the
|
|
||||||
# daemon isn't already running.
|
|
||||||
# check wether $DAEMON is running. If so, restart
|
|
||||||
start-stop-daemon --stop --test --quiet --pidfile \
|
|
||||||
/var/run/$NAME.pid --exec $DAEMON \
|
|
||||||
&& $0 restart \
|
|
||||||
|| exit 0
|
|
||||||
;;
|
|
||||||
restart)
|
|
||||||
echo -n "Restarting $DESC: "
|
|
||||||
start-stop-daemon --stop --quiet --pidfile \
|
|
||||||
/var/run/$NAME.pid --exec $DAEMON
|
|
||||||
[ -n "$DODTIME" ] && sleep $DODTIME
|
|
||||||
start-stop-daemon --start --quiet --pidfile \
|
|
||||||
/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
|
|
||||||
echo "$NAME."
|
|
||||||
;;
|
|
||||||
status)
|
|
||||||
echo -n "$LABEL is "
|
|
||||||
if running ; then
|
|
||||||
echo "running"
|
|
||||||
else
|
|
||||||
echo " not running."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
N=/etc/init.d/$NAME
|
|
||||||
# echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
|
|
||||||
echo "Usage: $N {start|stop|restart|force-reload|status|force-stop}" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
39
debian/postinst
vendored
39
debian/postinst
vendored
@@ -1,39 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# postinst script for uhub
|
|
||||||
#
|
|
||||||
# see: dh_installdeb(1)
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# summary of how this script can be called:
|
|
||||||
# * <postinst> `configure' <most-recently-configured-version>
|
|
||||||
# * <old-postinst> `abort-upgrade' <new version>
|
|
||||||
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
|
|
||||||
# <new-version>
|
|
||||||
# * <postinst> `abort-remove'
|
|
||||||
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
|
|
||||||
# <failed-install-package> <version> `removing'
|
|
||||||
# <conflicting-package> <version>
|
|
||||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
|
||||||
# the debian-policy package
|
|
||||||
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
configure)
|
|
||||||
;;
|
|
||||||
|
|
||||||
abort-upgrade|abort-remove|abort-deconfigure)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "postinst called with unknown argument \`$1'" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# dh_installdeb will replace this with shell code automatically
|
|
||||||
# generated by other debhelper scripts.
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
37
debian/postrm
vendored
37
debian/postrm
vendored
@@ -1,37 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# postrm script for uhub
|
|
||||||
#
|
|
||||||
# see: dh_installdeb(1)
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# summary of how this script can be called:
|
|
||||||
# * <postrm> `remove'
|
|
||||||
# * <postrm> `purge'
|
|
||||||
# * <old-postrm> `upgrade' <new-version>
|
|
||||||
# * <new-postrm> `failed-upgrade' <old-version>
|
|
||||||
# * <new-postrm> `abort-install'
|
|
||||||
# * <new-postrm> `abort-install' <old-version>
|
|
||||||
# * <new-postrm> `abort-upgrade' <old-version>
|
|
||||||
# * <disappearer's-postrm> `disappear' <overwriter>
|
|
||||||
# <overwriter-version>
|
|
||||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
|
||||||
# the debian-policy package
|
|
||||||
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "postrm called with unknown argument \`$1'" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# dh_installdeb will replace this with shell code automatically
|
|
||||||
# generated by other debhelper scripts.
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
35
debian/preinst
vendored
35
debian/preinst
vendored
@@ -1,35 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# preinst script for uhub
|
|
||||||
#
|
|
||||||
# see: dh_installdeb(1)
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# summary of how this script can be called:
|
|
||||||
# * <new-preinst> `install'
|
|
||||||
# * <new-preinst> `install' <old-version>
|
|
||||||
# * <new-preinst> `upgrade' <old-version>
|
|
||||||
# * <old-preinst> `abort-upgrade' <new-version>
|
|
||||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
|
||||||
# the debian-policy package
|
|
||||||
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
install|upgrade)
|
|
||||||
;;
|
|
||||||
|
|
||||||
abort-upgrade)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "preinst called with unknown argument \`$1'" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# dh_installdeb will replace this with shell code automatically
|
|
||||||
# generated by other debhelper scripts.
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
38
debian/prerm
vendored
38
debian/prerm
vendored
@@ -1,38 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# prerm script for uhub
|
|
||||||
#
|
|
||||||
# see: dh_installdeb(1)
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# summary of how this script can be called:
|
|
||||||
# * <prerm> `remove'
|
|
||||||
# * <old-prerm> `upgrade' <new-version>
|
|
||||||
# * <new-prerm> `failed-upgrade' <old-version>
|
|
||||||
# * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
|
|
||||||
# * <deconfigured's-prerm> `deconfigure' `in-favour'
|
|
||||||
# <package-being-installed> <version> `removing'
|
|
||||||
# <conflicting-package> <version>
|
|
||||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
|
||||||
# the debian-policy package
|
|
||||||
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
remove|upgrade|deconfigure)
|
|
||||||
;;
|
|
||||||
|
|
||||||
failed-upgrade)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "prerm called with unknown argument \`$1'" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# dh_installdeb will replace this with shell code automatically
|
|
||||||
# generated by other debhelper scripts.
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
91
debian/rules
vendored
91
debian/rules
vendored
@@ -1,91 +0,0 @@
|
|||||||
#!/usr/bin/make -f
|
|
||||||
# -*- makefile -*-
|
|
||||||
# Sample debian/rules that uses debhelper.
|
|
||||||
# This file was originally written by Joey Hess and Craig Small.
|
|
||||||
# As a special exception, when this file is copied by dh-make into a
|
|
||||||
# dh-make output file, you may use that output file without restriction.
|
|
||||||
# This special exception was added by Craig Small in version 0.37 of dh-make.
|
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
|
||||||
#export DH_VERBOSE=1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
configure: configure-stamp
|
|
||||||
configure-stamp:
|
|
||||||
dh_testdir
|
|
||||||
# Add here commands to configure the package.
|
|
||||||
|
|
||||||
touch configure-stamp
|
|
||||||
|
|
||||||
|
|
||||||
build: build-stamp
|
|
||||||
|
|
||||||
build-stamp: configure-stamp
|
|
||||||
dh_testdir
|
|
||||||
|
|
||||||
# Add here commands to compile the package.
|
|
||||||
$(MAKE)
|
|
||||||
#docbook-to-man debian/uhub.sgml > uhub.1
|
|
||||||
|
|
||||||
touch $@
|
|
||||||
|
|
||||||
clean:
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
rm -f build-stamp configure-stamp
|
|
||||||
|
|
||||||
# Add here commands to clean up after the build process.
|
|
||||||
$(MAKE) clean
|
|
||||||
|
|
||||||
dh_clean
|
|
||||||
|
|
||||||
install: build
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_prep
|
|
||||||
dh_installdirs
|
|
||||||
|
|
||||||
# Add here commands to install the package into debian/uhub.
|
|
||||||
$(MAKE) DESTDIR=$(CURDIR)/debian/uhub install
|
|
||||||
|
|
||||||
|
|
||||||
# Build architecture-independent files here.
|
|
||||||
binary-indep: install
|
|
||||||
# We have nothing to do by default.
|
|
||||||
|
|
||||||
# Build architecture-dependent files here.
|
|
||||||
binary-arch: install
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_installchangelogs ChangeLog
|
|
||||||
dh_installdocs
|
|
||||||
dh_installexamples
|
|
||||||
# dh_install
|
|
||||||
# dh_installmenu
|
|
||||||
# dh_installdebconf
|
|
||||||
# dh_installlogrotate
|
|
||||||
# dh_installemacsen
|
|
||||||
# dh_installpam
|
|
||||||
# dh_installmime
|
|
||||||
# dh_python
|
|
||||||
# dh_installinit
|
|
||||||
# dh_installcron
|
|
||||||
# dh_installinfo
|
|
||||||
dh_installman
|
|
||||||
dh_link
|
|
||||||
dh_strip
|
|
||||||
dh_compress
|
|
||||||
dh_fixperms
|
|
||||||
# dh_perl
|
|
||||||
# dh_makeshlibs
|
|
||||||
dh_installdeb
|
|
||||||
dh_shlibdeps
|
|
||||||
dh_gencontrol
|
|
||||||
dh_md5sums
|
|
||||||
dh_builddeb
|
|
||||||
|
|
||||||
binary: binary-indep binary-arch
|
|
||||||
.PHONY: build clean binary-indep binary-arch binary install configure
|
|
||||||
10
debian/uhub.default
vendored
10
debian/uhub.default
vendored
@@ -1,10 +0,0 @@
|
|||||||
# Defaults for uhub initscript
|
|
||||||
# sourced by /etc/init.d/uhub
|
|
||||||
# installed at /etc/default/uhub by the maintainer scripts
|
|
||||||
|
|
||||||
# Additional options that are passed to the Daemon.
|
|
||||||
ENABLED=1
|
|
||||||
LOGFILE="/var/log/uhug.log"
|
|
||||||
USER=nobody
|
|
||||||
GROUP=nogroup
|
|
||||||
DAEMON_OPTS="-f -l ${LOGFILE} -u ${USER} -g {GROUP}"
|
|
||||||
72
doc/uhub.1
Normal file
72
doc/uhub.1
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
.TH UHUB 1 "March 2009"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.\"
|
||||||
|
.\" Some roff macros, for reference:
|
||||||
|
.\" .nh disable hyphenation
|
||||||
|
.\" .hy enable hyphenation
|
||||||
|
.\" .ad l left justify
|
||||||
|
.\" .ad b justify to both left and right margins
|
||||||
|
.\" .nf disable filling
|
||||||
|
.\" .fi enable filling
|
||||||
|
.\" .br insert line break
|
||||||
|
.\" .sp <n> insert n+1 empty lines
|
||||||
|
.\" for manpage-specific macros, see man(7)
|
||||||
|
.SH NAME
|
||||||
|
uhub \- a high performance ADC peer-to-peer hub
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B uhub
|
||||||
|
.RI [ options ]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
uHub is a high performance peer-to-peer hub for the ADC network.
|
||||||
|
Its low memory footprint allows it to handle several thousand users
|
||||||
|
on high-end servers, or a small private hub on embedded hardware.
|
||||||
|
.SH "OPTIONS"
|
||||||
|
.TP
|
||||||
|
.BI \^\-v
|
||||||
|
Verbose mode, add more -v's for higher verbosity.
|
||||||
|
.TP
|
||||||
|
.BI \^\-q
|
||||||
|
Quiet mode, if quiet mode is enabled no output or logs are made.
|
||||||
|
.TP
|
||||||
|
.BI \^\-f
|
||||||
|
Fork uhub to background in order to run it as a daemon.
|
||||||
|
.TP
|
||||||
|
.BI \^\-l " logfile"
|
||||||
|
Log messages to the given logfile (default: stderr)
|
||||||
|
.TP
|
||||||
|
.BI \^\-L
|
||||||
|
Log messages to syslog.
|
||||||
|
.TP
|
||||||
|
.BI \^\-c " config"
|
||||||
|
Specify configuration file (default: /etc/uhub/uhub.conf)
|
||||||
|
.TP
|
||||||
|
.BI \^\-C
|
||||||
|
Check configuration files and return. Will print either \"OK\" or \"ERROR\".
|
||||||
|
.TP
|
||||||
|
.BI \^\-s
|
||||||
|
Show all configuration parameters. In a format that is compatible with
|
||||||
|
the configuration files.
|
||||||
|
.TP
|
||||||
|
.BI \^\-S
|
||||||
|
Show all non-default configuration parameters.
|
||||||
|
.TP
|
||||||
|
.BI \^\-h
|
||||||
|
Show the help message.
|
||||||
|
.TP
|
||||||
|
.BI \^\-u " user"
|
||||||
|
Drop privileges and run as the given user.
|
||||||
|
.TP
|
||||||
|
.BI \^\-g " group"
|
||||||
|
Drop privileges and run with the given group permissions.
|
||||||
|
.TP
|
||||||
|
.BI \^\-V
|
||||||
|
Show the version number
|
||||||
|
.SH EXAMPLES
|
||||||
|
To run uhub as a daemon, and log to a file:
|
||||||
|
.TP
|
||||||
|
.B uhub " -f -l /var/log/uhub/uhub.log"
|
||||||
|
.SH AUTHOR
|
||||||
|
This program was written by Jan Vidar Krey <janvidar@extatic.org>
|
||||||
|
.SH "BUG REPORTS"
|
||||||
|
If you find a bug in uhub please report it to
|
||||||
|
.B http://bugs.extatic.org/
|
||||||
16
src/hub.c
16
src/hub.c
@@ -146,8 +146,8 @@ int hub_handle_support(struct user* u, struct adc_message* cmd)
|
|||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
hub_send_handshake(u);
|
hub_send_handshake(u);
|
||||||
if (u->ev_read)
|
if (u->ev_handle)
|
||||||
event_add(u->ev_read, &timeout);
|
event_add(u->ev_handle, &timeout);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -492,6 +492,7 @@ struct hub_info* hub_start_service(struct hub_config* config)
|
|||||||
}
|
}
|
||||||
|
|
||||||
hub_log(log_info, "Starting " PRODUCT "/" VERSION ", listening on %s:%d...", address_buf, config->server_port);
|
hub_log(log_info, "Starting " PRODUCT "/" VERSION ", listening on %s:%d...", address_buf, config->server_port);
|
||||||
|
hub_log(log_debug, "Using libevent %s, backend: %s", event_get_version(), event_get_method());
|
||||||
|
|
||||||
server_tcp = net_socket_create(af, SOCK_STREAM, IPPROTO_TCP);
|
server_tcp = net_socket_create(af, SOCK_STREAM, IPPROTO_TCP);
|
||||||
if (server_tcp == -1)
|
if (server_tcp == -1)
|
||||||
@@ -1016,17 +1017,20 @@ size_t hub_get_min_hubs_op(struct hub_info* hub)
|
|||||||
|
|
||||||
void hub_event_loop(struct hub_info* hub)
|
void hub_event_loop(struct hub_info* hub)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
event_dispatch();
|
|
||||||
#endif
|
|
||||||
int ret;
|
int ret;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
ret = event_base_loop(hub->evbase, EVLOOP_ONCE);
|
ret = event_base_loop(hub->evbase, EVLOOP_ONCE);
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
|
{
|
||||||
|
hub_log(log_debug, "event_base_loop returned: %d", (int) ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret < 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
event_queue_process(hub->queue);
|
event_queue_process(hub->queue);
|
||||||
}
|
}
|
||||||
while (hub->status == hub_status_running);
|
while (hub->status == hub_status_running || hub->status == hub_status_disabled);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,8 +49,6 @@ static void log_user_nick_change(struct user* u, const char* nick)
|
|||||||
/* Send MOTD, do logging etc */
|
/* Send MOTD, do logging etc */
|
||||||
void on_login_success(struct user* u)
|
void on_login_success(struct user* u)
|
||||||
{
|
{
|
||||||
struct timeval timeout = { TIMEOUT_IDLE, 0 };
|
|
||||||
|
|
||||||
/* Send user list of all existing users */
|
/* Send user list of all existing users */
|
||||||
if (!send_user_list(u))
|
if (!send_user_list(u))
|
||||||
return;
|
return;
|
||||||
@@ -69,10 +67,6 @@ void on_login_success(struct user* u)
|
|||||||
/* Send message of the day (if any) */
|
/* Send message of the day (if any) */
|
||||||
if (user_is_logged_in(u)) /* Previous send() can fail! */
|
if (user_is_logged_in(u)) /* Previous send() can fail! */
|
||||||
hub_send_motd(u);
|
hub_send_motd(u);
|
||||||
|
|
||||||
/* reset to idle timeout */
|
|
||||||
if (u->ev_read)
|
|
||||||
event_add(u->ev_read, &timeout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_login_failure(struct user* u, enum status_message msg)
|
void on_login_failure(struct user* u, enum status_message msg)
|
||||||
|
|||||||
@@ -169,19 +169,20 @@ int check_configuration(int dump)
|
|||||||
int ret = read_config(arg_config, &configuration, 0);
|
int ret = read_config(arg_config, &configuration, 0);
|
||||||
|
|
||||||
if (dump)
|
if (dump)
|
||||||
|
{
|
||||||
|
if (ret != -1)
|
||||||
{
|
{
|
||||||
dump_config(&configuration, dump > 1);
|
dump_config(&configuration, dump > 1);
|
||||||
puts("");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dump)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (ret == -1)
|
if (ret == -1)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "ERROR\n");
|
fprintf(stderr, "ERROR\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stdout, "OK\n");
|
fprintf(stdout, "OK\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
152
src/netevent.c
152
src/netevent.c
@@ -20,31 +20,14 @@
|
|||||||
#include "uhub.h"
|
#include "uhub.h"
|
||||||
|
|
||||||
|
|
||||||
void net_on_read(int fd, short ev, void *arg)
|
static int on_read(struct user* user)
|
||||||
{
|
{
|
||||||
static char buf[MAX_RECV_BUF];
|
static char buf[MAX_RECV_BUF];
|
||||||
struct user* user = (struct user*) arg;
|
|
||||||
char* pos;
|
|
||||||
size_t offset;
|
size_t offset;
|
||||||
size_t buflen;
|
size_t buflen;
|
||||||
ssize_t size;
|
ssize_t size;
|
||||||
int more = 1;
|
int more = 1;
|
||||||
int flag_close = 0;
|
char* pos;
|
||||||
|
|
||||||
hub_log(log_trace, "net_on_read() : fd=%d, ev=%d, arg=%p", fd, (int) ev, arg);
|
|
||||||
|
|
||||||
if (ev == EV_TIMEOUT)
|
|
||||||
{
|
|
||||||
more = 0;
|
|
||||||
if (user_is_connecting(user))
|
|
||||||
{
|
|
||||||
flag_close = quit_timeout;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
hub_send_ping(user);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (more)
|
while (more)
|
||||||
{
|
{
|
||||||
@@ -55,17 +38,16 @@ void net_on_read(int fd, short ev, void *arg)
|
|||||||
offset = user->recv_buf_offset;
|
offset = user->recv_buf_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
size = net_recv(fd, &buf[offset], MAX_RECV_BUF - offset, 0);
|
size = net_recv(user->sd, &buf[offset], MAX_RECV_BUF - offset, 0);
|
||||||
if (size == -1)
|
if (size == -1)
|
||||||
{
|
{
|
||||||
if (net_error() != EWOULDBLOCK)
|
if (net_error() != EWOULDBLOCK)
|
||||||
flag_close = quit_socket_error;
|
return quit_socket_error;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (size == 0)
|
else if (size == 0)
|
||||||
{
|
{
|
||||||
flag_close = quit_disconnected;
|
return quit_disconnected;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -87,9 +69,7 @@ void net_on_read(int fd, short ev, void *arg)
|
|||||||
{
|
{
|
||||||
if (hub_handle_message(user, &buf[handled], msglen) == -1)
|
if (hub_handle_message(user, &buf[handled], msglen) == -1)
|
||||||
{
|
{
|
||||||
flag_close = quit_protocol_error;
|
return quit_protocol_error;
|
||||||
more = 0;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,8 +104,7 @@ void net_on_read(int fd, short ev, void *arg)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
flag_close = quit_memory_error;
|
return quit_memory_error;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,39 +119,14 @@ void net_on_read(int fd, short ev, void *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
if (flag_close)
|
|
||||||
{
|
|
||||||
user_disconnect(user, flag_close);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (user_is_logged_in(user))
|
static int on_write(struct user* user)
|
||||||
{
|
{
|
||||||
if (user->ev_read)
|
|
||||||
{
|
|
||||||
struct timeval timeout = { TIMEOUT_IDLE, 0 };
|
|
||||||
event_add(user->ev_read, &timeout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (user_is_connecting(user))
|
|
||||||
{
|
|
||||||
if (user->ev_read)
|
|
||||||
{
|
|
||||||
struct timeval timeout = { TIMEOUT_HANDSHAKE, 0 };
|
|
||||||
event_add(user->ev_read, &timeout);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void net_on_write(int fd, short ev, void *arg)
|
|
||||||
{
|
|
||||||
struct user* user = (struct user*) arg;
|
|
||||||
struct adc_message* msg;
|
struct adc_message* msg;
|
||||||
int ret;
|
int ret;
|
||||||
int length;
|
int length;
|
||||||
int close_flag = 0;
|
|
||||||
|
|
||||||
msg = list_get_first(user->send_queue);
|
msg = list_get_first(user->send_queue);
|
||||||
while (msg)
|
while (msg)
|
||||||
@@ -182,29 +136,16 @@ void net_on_write(int fd, short ev, void *arg)
|
|||||||
|
|
||||||
if (ret == 0 || (ret == -1 && net_error() == EWOULDBLOCK))
|
if (ret == 0 || (ret == -1 && net_error() == EWOULDBLOCK))
|
||||||
{
|
{
|
||||||
close_flag = 0;
|
return 0;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
else if (ret > 0)
|
else if (ret > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
user->tm_last_write = time(NULL);
|
user->tm_last_write = time(NULL);
|
||||||
|
|
||||||
if (ret == length)
|
if (ret == length)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_SENDQ
|
|
||||||
hub_log(log_error, "SENDQ: sent=%d bytes/%d (all), send_queue_size=%d, offset=%d", ret, (int) msg->length, user->send_queue_size, user->send_queue_offset);
|
|
||||||
#endif
|
|
||||||
user->send_queue_size -= ret;
|
user->send_queue_size -= ret;
|
||||||
user->send_queue_offset = 0;
|
user->send_queue_offset = 0;
|
||||||
|
|
||||||
#ifdef DEBUG_SENDQ
|
|
||||||
if ((user->send_queue_size < 0) || (user->send_queue_offset < 0))
|
|
||||||
{
|
|
||||||
hub_log(log_error, "INVALID: send_queue_size=%d, send_queue_offset=%d", user->send_queue_size, user->send_queue_offset);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
list_remove(user->send_queue, msg);
|
list_remove(user->send_queue, msg);
|
||||||
|
|
||||||
if (user_flag_get(user, flag_user_list) && (msg == user->info || user->send_queue_size == 0))
|
if (user_flag_get(user, flag_user_list) && (msg == user->info || user->send_queue_size == 0))
|
||||||
@@ -220,40 +161,73 @@ void net_on_write(int fd, short ev, void *arg)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_SENDQ
|
|
||||||
hub_log(log_error, "SENDQ: sent=%d bytes/%d (part), send_queue_size=%d, offset=%d", ret, (int) msg->length, user->send_queue_size, user->send_queue_offset);
|
|
||||||
#endif
|
|
||||||
user->send_queue_size -= ret;
|
user->send_queue_size -= ret;
|
||||||
user->send_queue_offset += ret;
|
user->send_queue_offset += ret;
|
||||||
|
|
||||||
#ifdef DEBUG_SENDQ
|
|
||||||
if ((user->send_queue_size < 0) || (user->send_queue_offset < 0) || (user->send_queue_offset > msg->length))
|
|
||||||
{
|
|
||||||
hub_log(log_error, "INVALID: send_queue_size=%d, send_queue_offset=%d", user->send_queue_size, user->send_queue_offset);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
close_flag = quit_socket_error;
|
return quit_socket_error;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
msg = list_get_first(user->send_queue);
|
msg = list_get_first(user->send_queue);
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (close_flag)
|
void on_net_event(int fd, short ev, void *arg)
|
||||||
{
|
{
|
||||||
user_disconnect(user, close_flag);
|
struct user* user = (struct user*) arg;
|
||||||
|
int want_close = 0;
|
||||||
|
int want_write = 0;
|
||||||
|
|
||||||
|
hub_log(log_debug, "on_net_event() : fd=%d, ev=%d, user=%s", fd, (int) ev, user);
|
||||||
|
|
||||||
|
if (ev == EV_TIMEOUT)
|
||||||
|
{
|
||||||
|
|
||||||
|
hub_log(log_debug, "EV_TIMEOUT");
|
||||||
|
|
||||||
|
if (user_is_connecting(user))
|
||||||
|
{
|
||||||
|
want_close = quit_timeout;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (user->send_queue_size > 0 && user->ev_write)
|
hub_send_ping(user);
|
||||||
event_add(user->ev_write, NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ev & EV_WRITE)
|
||||||
|
{
|
||||||
|
want_close = on_write(user);
|
||||||
|
want_write = (user->send_queue_size != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!want_close && ev & EV_READ)
|
||||||
|
{
|
||||||
|
want_close = on_read(user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (want_close)
|
||||||
|
{
|
||||||
|
user_disconnect(user, want_close);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user_is_logged_in(user))
|
||||||
|
{
|
||||||
|
user_trigger_update(user, want_write, TIMEOUT_IDLE);
|
||||||
|
}
|
||||||
|
else if (user_is_connecting(user))
|
||||||
|
{
|
||||||
|
user_trigger_update(user, want_write, TIMEOUT_HANDSHAKE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void net_on_accept(int server_fd, short ev, void *arg)
|
void net_on_accept(int server_fd, short ev, void *arg)
|
||||||
@@ -262,7 +236,6 @@ void net_on_accept(int server_fd, short ev, void *arg)
|
|||||||
struct user* user = 0;
|
struct user* user = 0;
|
||||||
struct ip_addr_encap ipaddr;
|
struct ip_addr_encap ipaddr;
|
||||||
const char* addr;
|
const char* addr;
|
||||||
struct timeval timeout = { TIMEOUT_CONNECTED, 0 };
|
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@@ -306,12 +279,7 @@ void net_on_accept(int server_fd, short ev, void *arg)
|
|||||||
|
|
||||||
net_set_nonblocking(fd, 1);
|
net_set_nonblocking(fd, 1);
|
||||||
net_set_nosigpipe(fd, 1);
|
net_set_nosigpipe(fd, 1);
|
||||||
|
user_trigger_init(user);
|
||||||
event_set(user->ev_read, fd, EV_READ | EV_PERSIST, net_on_read, user);
|
|
||||||
event_set(user->ev_write, fd, EV_WRITE, net_on_write, user);
|
|
||||||
event_base_set(hub->evbase, user->ev_read);
|
|
||||||
event_base_set(hub->evbase, user->ev_write);
|
|
||||||
event_add(user->ev_read, &timeout);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,33 +20,19 @@
|
|||||||
#ifndef HAVE_UHUB_NET_EVENT_H
|
#ifndef HAVE_UHUB_NET_EVENT_H
|
||||||
#define HAVE_UHUB_NET_EVENT_H
|
#define HAVE_UHUB_NET_EVENT_H
|
||||||
|
|
||||||
/**
|
struct user;
|
||||||
* Network callback for reading data from a socket.
|
|
||||||
*/
|
|
||||||
extern void net_on_read(int fd, short ev, void *arg);
|
|
||||||
|
|
||||||
/**
|
extern void on_net_event(int fd, short ev, void *arg);
|
||||||
* Network callback for writing data to a socket.
|
|
||||||
*/
|
|
||||||
extern void net_on_write(int fd, short ev, void *arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Network callback for timers.
|
|
||||||
*/
|
|
||||||
extern void net_on_read_timeout(int fd, short ev, void* arg);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Network callback to accept incoming connections.
|
* Network callback to accept incoming connections.
|
||||||
*/
|
*/
|
||||||
extern void net_on_accept(int fd, short ev, void *arg);
|
extern void net_on_accept(int fd, short ev, void *arg);
|
||||||
|
|
||||||
#ifdef ADC_UDP_OPERATION
|
|
||||||
/**
|
/**
|
||||||
* Network callback to receive incoming UDP datagram.
|
*
|
||||||
*/
|
*/
|
||||||
extern void net_on_packet(int fd, short ev, void *arg);
|
extern void net_update_trigger(struct user* user, int write, struct timeval timeout);
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* HAVE_UHUB_NET_EVENT_H */
|
#endif /* HAVE_UHUB_NET_EVENT_H */
|
||||||
|
|
||||||
|
|||||||
@@ -135,8 +135,8 @@ int route_to_user(struct user* user, struct adc_message* msg)
|
|||||||
{
|
{
|
||||||
queue_command(user, msg, ret);
|
queue_command(user, msg, ret);
|
||||||
|
|
||||||
if (user->send_queue_size && user->ev_write)
|
if (user->send_queue_size && user->ev_handle)
|
||||||
event_add(user->ev_write, NULL);
|
event_add(user->ev_handle, NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -158,8 +158,8 @@ int route_to_user(struct user* user, struct adc_message* msg)
|
|||||||
{
|
{
|
||||||
/* queue command */
|
/* queue command */
|
||||||
queue_command(user, msg, 0);
|
queue_command(user, msg, 0);
|
||||||
if (user->ev_write)
|
if (user->ev_handle)
|
||||||
event_add(user->ev_write, NULL);
|
event_add(user->ev_handle, NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
63
src/user.c
63
src/user.c
@@ -30,13 +30,11 @@ struct user* user_create(struct hub_info* hub, int sd)
|
|||||||
if (user == NULL)
|
if (user == NULL)
|
||||||
return NULL; /* OOM */
|
return NULL; /* OOM */
|
||||||
|
|
||||||
user->ev_write = hub_malloc_zero(sizeof(struct event));
|
user->ev_handle = hub_malloc_zero(sizeof(struct event));
|
||||||
user->ev_read = hub_malloc_zero(sizeof(struct event));
|
|
||||||
|
|
||||||
if (!user->ev_write || !user->ev_read)
|
if (!user->ev_handle)
|
||||||
{
|
{
|
||||||
hub_free(user->ev_read);
|
hub_free(user->ev_handle);
|
||||||
hub_free(user->ev_write);
|
|
||||||
hub_free(user);
|
hub_free(user);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -65,22 +63,8 @@ void user_destroy(struct user* user)
|
|||||||
{
|
{
|
||||||
hub_log(log_trace, "user_destroy(), user=%p", user);
|
hub_log(log_trace, "user_destroy(), user=%p", user);
|
||||||
|
|
||||||
if (user->ev_write)
|
user_trigger_shutdown(user);
|
||||||
{
|
|
||||||
event_del(user->ev_write);
|
|
||||||
hub_free(user->ev_write);
|
|
||||||
user->ev_write = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (user->ev_read)
|
|
||||||
{
|
|
||||||
event_del(user->ev_read);
|
|
||||||
hub_free(user->ev_read);
|
|
||||||
user->ev_read = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
net_close(user->sd);
|
net_close(user->sd);
|
||||||
|
|
||||||
adc_msg_free(user->info);
|
adc_msg_free(user->info);
|
||||||
user_clear_feature_cast_support(user);
|
user_clear_feature_cast_support(user);
|
||||||
|
|
||||||
@@ -213,12 +197,7 @@ void user_disconnect(struct user* user, int reason)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* dont read more data from this user */
|
/* dont read more data from this user */
|
||||||
if (user->ev_read)
|
user_flag_set(user, flag_ignore);
|
||||||
{
|
|
||||||
event_del(user->ev_read);
|
|
||||||
hub_free(user->ev_read);
|
|
||||||
user->ev_read = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
hub_log(log_trace, "user_disconnect(), user=%p, reason=%d, state=%d", user, reason, user->state);
|
hub_log(log_trace, "user_disconnect(), user=%p, reason=%d, state=%d", user, reason, user->state);
|
||||||
|
|
||||||
@@ -303,6 +282,36 @@ int user_is_disconnecting(struct user* user)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void user_trigger_init(struct user* user)
|
||||||
|
{
|
||||||
|
if (user->ev_handle)
|
||||||
|
{
|
||||||
|
struct timeval timeout = { TIMEOUT_CONNECTED, 0 };
|
||||||
|
event_set(user->ev_handle, user->sd, EV_READ | EV_PERSIST, on_net_event, user);
|
||||||
|
event_base_set(user->hub->evbase, user->ev_handle);
|
||||||
|
event_add(user->ev_handle, &timeout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void user_trigger_update(struct user* user, int w, int timeout_sec)
|
||||||
|
{
|
||||||
|
if (user->ev_handle)
|
||||||
|
{
|
||||||
|
struct timeval timeout = { timeout_sec, 0 };
|
||||||
|
int f = w ? EV_WRITE | EV_READ | EV_PERSIST : EV_READ | EV_PERSIST;
|
||||||
|
event_del(user->ev_handle);
|
||||||
|
event_set(user->ev_handle, user->sd, f, on_net_event, user);
|
||||||
|
event_base_set(user->hub->evbase, user->ev_handle);
|
||||||
|
event_add(user->ev_handle, &timeout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void user_trigger_shutdown(struct user* user)
|
||||||
|
{
|
||||||
|
if (user->ev_handle)
|
||||||
|
{
|
||||||
|
event_del(user->ev_handle);
|
||||||
|
hub_free(user->ev_handle);
|
||||||
|
user->ev_handle = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -99,8 +99,7 @@ struct user_counts
|
|||||||
struct user
|
struct user
|
||||||
{
|
{
|
||||||
int sd; /** socket descriptor */
|
int sd; /** socket descriptor */
|
||||||
struct event* ev_read; /** libevent struct for read events */
|
struct event* ev_handle;
|
||||||
struct event* ev_write; /** libevent struct for write events */
|
|
||||||
enum user_state state; /** see enum user_state */
|
enum user_state state; /** see enum user_state */
|
||||||
enum user_credentials credentials; /** see enum user_credentials */
|
enum user_credentials credentials; /** see enum user_credentials */
|
||||||
struct user_info id; /** Contains nick name and CID */
|
struct user_info id; /** Contains nick name and CID */
|
||||||
@@ -256,7 +255,9 @@ extern int user_set_feature_cast_support(struct user* u, char feature[4]);
|
|||||||
*/
|
*/
|
||||||
extern void user_clear_feature_cast_support(struct user* u);
|
extern void user_clear_feature_cast_support(struct user* u);
|
||||||
|
|
||||||
|
extern void user_trigger_init(struct user* user);
|
||||||
|
extern void user_trigger_update(struct user* user, int w, int timeout_sec);
|
||||||
|
extern void user_trigger_shutdown(struct user* user);
|
||||||
|
|
||||||
#endif /* HAVE_UHUB_USER_H */
|
#endif /* HAVE_UHUB_USER_H */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user