Please see CHANGES for a detailed description

This commit is contained in:
Michael 'Ghandi' Herold 1997-04-04 09:32:53 +00:00
parent b60c4f9284
commit ce84b341fb
26 changed files with 3102 additions and 1262 deletions

View File

@ -3,6 +3,71 @@
# To describe the news & fixes better (my english is not the best :-) the
# changelog is only available in german.
04-Apr-97
=========
o [Fix] Änderungen am Makefile.in.
25-Mär-97
=========
o [Neu] Dokumentation geschrieben.
24-Mär-97
=========
o [Neu] Neues Target 'create-de-sgml' im Makefile. Damit läßt sich ein
sgml-Source der Dokumentation für weitere Umwandlungen
erzeugen.
o [Neu] Dokumentation geschrieben.
23-Mär-97
=========
o [Neu] Programm vboxbeep so angepasst, das es vboxd benutzt.
o [Neu] Funktion count in vboxd so umgeschrieben, das sie die Anzahl
der neuen Nachrichten *und* das Datum der neusten Nachricht
ausgibt.
22-Mär-97
=========
o [Neu] Dateien im Verzeichnis examples/ auf den neusten Stand
gebracht.
o [Neu] Konfigurationsskripts so umgeschrieben, das alle exportierten
Variablen mit VBOX_ beginnen.
o [Neu] Die Datei in der sich die Konfigurationen des Users befinden
wurde in vbox.conf umbenannt. Sie befindet sich jetzt
standardmäßig im Spoolverzeichnis des jeweiligen Users. Die
Konfiguration wird nur noch von vboxgetty selbst
benötigt. Alle anderen Programme können die Daten aus dem
Header der Nachrichten oder von vboxd auslesen!
21-Mär-97
=========
o [Neu] Server Kommandos count, message und header in vboxd
implementiert.
20-Mär-97
=========
o [Neu] Neues Programm 'vboxd': Der Daemon funktioniert ähnlich dem
nntpd und kann vbox Nachrichten bearbeiten. Der Daemon wird
vom inetd gestartet und kann dann z.B. über telnet oder
Sockets angesprochen werden.
15-Mär-97
=========
@ -47,6 +112,7 @@ o [Neu] Funktion lock_type_lock() belegt Speicher f
o [Neu] Funktion log_init() belegt Speicher für den Namen jetzt selbst.
12-Mär-97
=========
@ -107,6 +173,7 @@ o [Neu] Option '--with-tcllib' in 'configure.in' eingebaut, damit man
o [Fix] Einige Änderungen an den Sourcen gemacht, damit vbox mit der neuen
glibc 2.0.x compiliert (Andreas Jaeger <aj@arthur.pfalz.de>).
26-Feb-97
=========

View File

@ -116,11 +116,21 @@ HAVE_NCURSES = @HAVE_NCURSES_LIBS@
HAVE_TCL = @HAVE_TCL_LIBS@
HAVE_INTL = @HAVE_INTL_LIBS@
GETTYRC = $(sysconfdir)/vboxgetty.conf
VBINDIR = $(bindir)
PACKAGE = @PACKAGE@
VERSION = @VERSION@
VERDATE = @VERDATE@
VBOX_GETTYCONF = $(sysconfdir)/vboxgetty.conf
VBOX_VBOXDCONF = $(sysconfdir)/vboxd.conf
VBOX_SYSCONFDIR = $(sysconfdir)
VBOX_BINDIR = $(bindir)
VBOX_SBINDIR = $(sbindir)
VBOX_PACKAGE = @PACKAGE@
VBOX_VERSION = @VERSION@
VBOX_VERDATE = @VERDATE@
VBOX_TOPDIR = $(TOPDIR)
VBOX_CATALOGS = $(CATALOGS)
VBOX_LOGFILEDIR = $(LOGFILEDIR)
VBOX_PIDFILEDIR = $(PIDFILEDIR)
VBOX_LCKFILEDIR = $(LCKFILEDIR)
VBOX_SPOOLDIR = $(SPOOLDIR)
VBOX_LOCALEDIR = $(LOCALEDIR)
#----------------------------------------------------------------------------#
# Export variables needed by the other utilities... #
@ -132,73 +142,142 @@ export LDFLAGS
export AR
export RANLIB
export SED
export GETTYRC
export VBINDIR
export TOPDIR
export CATALOGS
export PACKAGE
export VBOX_GETTYCONF
export VBOX_VBOXDCONF
export VBOX_BINDIR
export VBOX_SBINDIR
export VBOX_TOPDIR
export VBOX_CATALOGS
export VBOX_PACKAGE
export VBOX_VERSION
export VBOX_VERDATE
export VBOX_LOGFILEDIR
export VBOX_PIDFILEDIR
export VBOX_LCKFILEDIR
export VBOX_SPOOLDIR
export VBOX_LOCALEDIR
export VBOX_SYSCONFDIR
#----------------------------------------------------------------------------#
# All action we must do... #
#----------------------------------------------------------------------------#
all: vbox sedconvert
all: vbox-apps vbox-seds
#----------------------------------------------------------------------------#
# vbox #
# Build... #
#----------------------------------------------------------------------------#
vbox: ignore
vbox-apps: ignore
@$(ECHO)
@$(ECHO) "Building vbox $(VBOX_VERSION) ($(VBOX_VERDATE))..."
@$(ECHO)
@$(MAKE) -C $(TOPDIR)/src all
#----------------------------------------------------------------------------#
# sedconvert #
#----------------------------------------------------------------------------#
sedconvert: ignore
@$(TOPDIR)/utils/mksed <$(TOPDIR)/utils/vboxmail.in >$(TOPDIR)/utils/vboxmail
@$(TOPDIR)/utils/mksed <$(TOPDIR)/utils/vboxplay.in >$(TOPDIR)/utils/vboxplay
SEDCONVERTOBJS = $(TOPDIR)/utils/vboxmail $(TOPDIR)/utils/vboxplay \
$(TOPDIR)/doc/de/txt/vbox.txt \
$(TOPDIR)/doc/de/html/vbox.html \
$(TOPDIR)/doc/de/html/vbox-1.html \
$(TOPDIR)/doc/de/html/vbox-2.html \
$(TOPDIR)/doc/de/html/vbox-3.html \
$(TOPDIR)/doc/de/html/vbox-4.html \
$(TOPDIR)/doc/de/html/vbox-5.html \
$(TOPDIR)/doc/de/html/vbox-6.html \
$(TOPDIR)/doc/de/html/vbox-7.html \
$(TOPDIR)/doc/de/html/vbox-8.html \
$(TOPDIR)/doc/de/html/vbox-9.html
vbox-seds: ignore
@set -e; for i in $(SEDCONVERTOBJS); do \
$(TOPDIR)/utils/mksed <$$i.in >$$i; \
done
#----------------------------------------------------------------------------#
# install program & settings... #
# Install program & settings... #
#----------------------------------------------------------------------------#
install: install-dirs
install: inst-message \
inst-vboxdirs inst-vboxgetty inst-vboxd inst-vbox \
inst-vboxcnvt inst-vboxctrl inst-vboxbeep inst-vboxmail \
inst-vboxplay inst-vboxmsgs
inst-message: ignore
@$(ECHO)
@$(ECHO) "Installing vbox $(VBOX_VERSION) ($(VBOX_VERDATE))..."
@$(ECHO)
#----------------------------------------------------------------------------#
inst-vboxgetty: ignore
@$(ECHO) "Installing '$(sbindir)/vboxgetty'..."
@$(INSTALL_SBIN) $(TOPDIR)/src/vboxgetty $(sbindir)/vboxgetty
@$(ECHO) "Installing '$(sysconfdir)/vboxgetty.conf.example'..."
@$(INSTALL_SYSCONF) $(TOPDIR)/examples/vboxgetty.conf.example $(sysconfdir)
@$(ECHO) "Installing '$(bindir)/vboxconvert'..."
@$(INSTALL_BIN) $(TOPDIR)/src/vboxconvert $(bindir)
@cd $(bindir); \
$(LN) -f vboxconvert vboxtoau; \
$(LN) -f vboxconvert autovbox; \
$(LN) -f vboxconvert vboxmode;
#----------------------------------------------------------------------------#
inst-vboxd: ignore
@$(ECHO) "Installing '$(sbindir)/vboxd'..."
@$(INSTALL_SBIN) $(TOPDIR)/src/vboxd $(sbindir)/vboxd
@$(ECHO) "Installing '$(sysconfdir)/vboxd.conf.example'..."
@$(INSTALL_SYSCONF) $(TOPDIR)/examples/vboxd.conf.example $(sysconfdir)
#----------------------------------------------------------------------------#
inst-vboxcnvt: ignore
@$(ECHO) "Installing '$(bindir)/vboxcnvt'..."
@$(INSTALL_BIN) $(TOPDIR)/src/vboxconvert $(bindir)/vboxcnvt
@cd $(bindir); \
$(LN) -f vboxcnvt vboxtoau; \
$(LN) -f vboxcnvt autovbox; \
$(LN) -f vboxcnvt vboxmode;
#----------------------------------------------------------------------------#
inst-vboxctrl: ignore
@$(ECHO) "Installing '$(bindir)/vboxctrl'..."
@$(INSTALL_BIN) $(TOPDIR)/src/vboxctrl $(bindir)
#----------------------------------------------------------------------------#
inst-vboxbeep: ignore
@$(ECHO) "Installing '$(bindir)/vboxbeep'..."
@$(INSTALL_UBIN) $(TOPDIR)/src/vboxbeep $(bindir)
#----------------------------------------------------------------------------#
inst-vboxmail: ignore
@$(ECHO) "Installing '$(bindir)/vboxmail'..."
@$(INSTALL_SHBIN) $(TOPDIR)/utils/vboxmail $(bindir)
#----------------------------------------------------------------------------#
inst-vboxplay: ignore
@$(ECHO) "Installing '$(bindir)/vboxplay'..."
@$(INSTALL_SHBIN) $(TOPDIR)/utils/vboxplay $(bindir)
ifeq ($(ACTION_ON_VBOX),y)
#----------------------------------------------------------------------------#
inst-vbox: ignore
ifeq ($(HAVE_NCURSES),y)
@$(ECHO) "Installing '$(bindir)/vbox'..."
@$(INSTALL_BIN) $(TOPDIR)/src/vbox $(bindir)
endif
@set -e; for i in `echo $(CATALOGS)`; do \
$(ECHO) "Installing '$(LOCALEDIR)/$$i/LC_MESSAGES/$(PACKAGE).mo'..."; \
$(INSTALL_LOCALE) $(TOPDIR)/messages/$$i.mo $(LOCALEDIR)/$$i/LC_MESSAGES/$(PACKAGE).mo; \
done
#----------------------------------------------------------------------------#
inst-vboxmsgs: ignore
@set -e; \
if [ "$(CATALOGS)" != "" ]; then \
for i in $(CATALOGS); do \
$(ECHO) "Installing '$(LOCALEDIR)/$$i/LC_MESSAGES/$(VBOX_PACKAGE).mo'..."; \
$(INSTALL_LOCALE) $(TOPDIR)/messages/$$i.mo $(LOCALEDIR)/$$i/LC_MESSAGES/$(VBOX_PACKAGE).mo; \
done; \
fi
#----------------------------------------------------------------------------#
# Uninstall... #
@ -214,8 +293,9 @@ MAKETHISDIRS = $(prefix) $(exec_prefix) $(sbindir) $(bindir) \
$(sysconfdir) $(SPOOLDIR) $(LOGFILEDIR) $(PIDFILEDIR) \
$(LCKFILEDIR)
install-dirs: ignore
@set -e; for i in `echo $(MAKETHISDIRS)`; do \
inst-vboxdirs: ignore
@set -e; \
for i in $(MAKETHISDIRS); do \
$(ECHO) -n "Checking '$$i'... "; \
if [ -d $$i ]; then \
$(ECHO) "it's here."; \
@ -224,15 +304,25 @@ install-dirs: ignore
$(INSTALL_DIRS) $$i; \
fi; \
done
@set -e; for i in `echo $(CATALOGS)`; do \
$(ECHO) -n "Checking '$(LOCALEDIR)/$$i/LC_MESSAGES'... "; \
if [ -d $(LOCALEDIR)/$$i/LC_MESSAGES ]; then \
$(ECHO) "it's here."; \
else \
$(ECHO) "creating..."; \
$(INSTALL_DIRS) $(LOCALEDIR)/$$i/LC_MESSAGES; \
fi; \
done
@set -e; \
if [ "$(CATALOGS)" != "" ]; then \
for i in $(CATALOGS); do \
$(ECHO) -n "Checking '$(LOCALEDIR)/$$i/LC_MESSAGES'... "; \
if [ -d $(LOCALEDIR)/$$i/LC_MESSAGES ]; then \
$(ECHO) "it's here."; \
else \
$(ECHO) "creating..."; \
$(INSTALL_DIRS) $(LOCALEDIR)/$$i/LC_MESSAGES; \
fi; \
done; \
fi
#----------------------------------------------------------------------------#
# Create sgml source... #
#----------------------------------------------------------------------------#
create-de-sgml: ignore
@$(TOPDIR)/utils/mksed <$(TOPDIR)/doc/de/vbox.sgml >$(TOPDIR)/vbox-de.sgml
#----------------------------------------------------------------------------#
# Create po und mo messages (only for development)... #
@ -242,31 +332,47 @@ messages: ignore
@$(TOPDIR)/utils/mkpos
#----------------------------------------------------------------------------#
# Create release version... #
# Create documentation (only for development)... #
#----------------------------------------------------------------------------#
release: distclean messages
documents: ignore
@$(TOPDIR)/utils/mkdoc
#----------------------------------------------------------------------------#
# Create release version (only for development)... #
#----------------------------------------------------------------------------#
release: distclean messages documents
#----------------------------------------------------------------------------#
# Cleaning... #
#----------------------------------------------------------------------------#
CLEANSUBDIRS = $(TOPDIR) $(TOPDIR)/src $(TOPDIR)/doc $(TOPDIR)/utils \
$(TOPDIR)/examples $(TOPDIR)/messages \
$(TOPDIR)/doc/de $(TOPDIR)/doc/de/html $(TOPDIR)/doc/txt
CLEANOBJS = $(TOPDIR)/src/vboxgetty $(TOPDIR)/src/vboxd \
$(TOPDIR)/src/vboxconvert $(TOPDIR)/src/vboxbeep \
$(TOPDIR)/src/vboxctrl $(TOPDIR)/src/vbox
DISTCLEANOBJS = $(SEDCONVERTOBJS) $(TOPDIR)/Makefile \
$(TOPDIR)/src/Makefile $(TOPDIR)/src/config.h \
$(TOPDIR)/.Config $(TOPDIR)/config.cache \
$(TOPDIR)/config.log $(TOPDIR)/config.status
distclean: clean
@$(RM) -f $(TOPDIR)/Makefile $(TOPDIR)/src/Makefile \
$(TOPDIR)/src/config.h $(TOPDIR)/utils/vboxmail \
$(TOPDIR)/utils/vboxplay $(TOPDIR)/.config \
$(TOPDIR)/config.cache $(TOPDIR)/config.log \
$(TOPDIR)/config.status
@set -e; for i in $(DISTCLEANOBJS); do \
$(RM) -f $$i; \
done
clean: ignore
@$(RM) -f $(TOPDIR)/*~ $(TOPDIR)/src/*~ $(TOPDIR)/doc/*~ \
$(TOPDIR)/examples/*~ $(TOPDIR)/utils/*~ \
$(TOPDIR)/messages/*~ $(TOPDIR)/messages/backup-* \
$(TOPDIR)/src/*.[oas] $(TOPDIR)/src/vboxgetty \
$(TOPDIR)/src/vbox $(TOPDIR)/src/vboxconvert \
$(TOPDIR)/src/vboxctrl $(TOPDIR)/src/vboxbeep \
$(TOPDIR)/doc/*.html $(TOPDIR)/doc/*.sgml \
$(TOPDIR)/doc/*.txt
@set -e; for i in $(CLEANSUBDIRS); do \
$(RM) -f $$i/*~ $$i/*.[oas] $$i/backup-*; \
done
@set -e; for i in $(CLEANOBJS); do \
$(RM) -f $$i; \
done
#----------------------------------------------------------------------------#
# For isdn4k-utils package compatibility... #

View File

@ -1,18 +0,0 @@
o Environment Variable VBOXSPOOL als Voreinstellungen für das Spoolverzeich-
nis benutzen. vbox und vboxctrl werten diese dann aus.
Erzeugen der locales:
localedef -i de_DE -f "ISO_8859-1,1987" de
Erzeugt z.B.:
$ ls -lF /usr/share/locale/de/
-rw-r--r-- 1 root root 29970 Mar 14 12:50 LC_COLLATE
-rw-r--r-- 1 root root 10432 Mar 14 12:50 LC_CTYPE
-rw-r--r-- 1 root root 94 Mar 14 12:50 LC_MONETARY
-rw-r--r-- 1 root root 26 Mar 14 12:50 LC_NUMERIC
-rw-r--r-- 1 root root 492 Mar 14 12:50 LC_TIME

29
vbox/configure vendored
View File

@ -2280,12 +2280,37 @@ echo "$ac_t""${VBOX_LOCALE_DIR}" 1>&6
if (test "${ac_cv_prog_CC}" = "gcc")
then
if (test "${CFLAGS}" = "")
if (test "${CFLAGS}" != "")
then
CFLAGS="-Wall -O2"
FLAGOPMZ="no"
FLAGWARN="no"
for i in ${CFLAGS}
do
case "$i" in
-O*) FLAGOPMZ="yes"
;;
-W*) FLAGWARN="yes"
;;
esac
done
if (test "${FLAGOPMZ}" = "no")
then
CFLAGS="-O2 ${CFLAGS}"
fi
if (test "${FLAGWARN}" = "no")
then
CFLAGS="-Wall ${CFLAGS}"
fi
else
CFLAGS="-Wall -O2 ${CFLAGS}"
fi
fi
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure

View File

@ -213,17 +213,45 @@ AC_MSG_RESULT(${VBOX_LOCALE_DIR})
AC_SUBST(VBOX_LOCALE_DIR)
dnl #------------------------------------------------------------------------#
dnl # Creates output files: #
dnl # Check and optimize compiler flags: #
dnl #------------------------------------------------------------------------#
if (test "${ac_cv_prog_CC}" = "gcc")
then
if (test "${CFLAGS}" = "")
if (test "${CFLAGS}" != "")
then
CFLAGS="-Wall -O2"
FLAGOPMZ="no"
FLAGWARN="no"
for i in ${CFLAGS}
do
case "$i" in
-O*) FLAGOPMZ="yes"
;;
-W*) FLAGWARN="yes"
;;
esac
done
if (test "${FLAGOPMZ}" = "no")
then
CFLAGS="-O2 ${CFLAGS}"
fi
if (test "${FLAGWARN}" = "no")
then
CFLAGS="-Wall ${CFLAGS}"
fi
else
CFLAGS="-Wall -O2 ${CFLAGS}"
fi
fi
dnl #------------------------------------------------------------------------#
dnl # Creates output files: #
dnl #------------------------------------------------------------------------#
AC_OUTPUT(Makefile src/Makefile)

1049
vbox/doc/de/vbox.sgml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,38 +0,0 @@
Angabe der Zeitzonen
====================
Ab v2.0 von vbox können die verschiedenen Zeitzonen (z.B. bei den Rings)
auch mit einer Minutenangabe versehen werden.
Einzelne Zeitangaben werden durch Kommatas getrennt, Angaben von Start- und
Endzeit durch ein Minuszeichen. Die Stundenangaben müssen im 24-Stunden-
Format - also von 0 Uhr bis 23 Uhr - gemacht werden.
Die Zeitangaben werden intern immer in Start- und Endzeit umgerechnet, auch
dann, wenn nur eine Startzeit angegeben ist.
Nehmen wir zum Beispiel folgende Zeitangaben:
20:15-21:14
Diese Zeit wird intern in 20:15:00-21:14:59 umgerechnet, d.h. Start- und
Endzeit sind *inklusive*!
Wenn bei einer Zeitangabe keine Minuten angebenen sind, wird bei der
Startzeit 0 Minuten und bei der Endzeit 59 Minuten benutzt. Intern werden
die Sekunden - die nicht einstellbar sind - nach dem gleichen Schema
behandelt.
Beispiele:
20 - Umrechnung nach 20:00:00-20:59:59
20:15-21:14 - Umrechnung nach 20:15:00-21:14:59
08-11 - Umrechnung nach 08:00:00-11:59:59
12-15:30 - Umrechnung nach 12:00:00-15:30:59
Eine Zeitzone zählt als zutreffend (match) wenn die aktuelle Zeit
größer/gleich der Startzeit *und* kleiner/gleich der Endzeit ist.
Ein '*' als *einzige* Zeitangabe wird als *immer* behandelt, ein '-' oder
'!' als *einzige* Zeitangabe als *nie*.

View File

@ -1,830 +0,0 @@
<!doctype linuxdoc system>
<article>
<!-- *********************************************************************
** **
** T I T E L **
** **
********************************************************************* -->
<title>V B O X
<author>Michael 'Ghandi' Herold, <tt>michael@abadonna.franken.de</tt>
<date>Version @VBOX_VERSION@, @VBOX_VERDATE@
<abstract>
Diese Dokumentation beschreibt die Konfiguration von <em>vbox
v@VBOX_VERSION@</em>, einem Softwarepaket zum Betrieb eines
Anrufbeantworters unter <em>Linux</em>.
</abstract>
<!-- *********************************************************************
** **
** I N H A L T S V E R Z E I C H N I S **
** **
********************************************************************* -->
<toc>
<p>
Testpassagen die mit ***NEW*** versehen sind, wurden geändert oder der
Dokumentation neu hinzugefügt. Es ist ratsam, diese Abschnitte nochmals zu
lesen!
<!-- *********************************************************************
** **
** C O P Y R I G H T **
** **
********************************************************************* -->
<sect>Copyright<label id="id-copyright">
<p>
Copyright &copy; 1996,1997 Michael 'Ghandi' Herold
Das Paket <em>vbox</em> ist freie Software und kann unter den Bedingungen
der <em>GNU General Public License</em> veröffentlicht oder verändert
werden.
Die Dokumentation sowie alle Programme von <em>vbox</em> wurden mit großer
Sorgfalt erstellt. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem
Grund sind die in der vorliegenden Dokumentation enthaltenen Angaben mit
keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Sowohl Michael
Herold als auch die in Kapitel <ref id="id-danksagungen"
name="Danksagungen"> genannten Personen übernehmen keine Verantwortung oder
sonstige Haftung für Schäden, die auf irgendeine Art aus der Benutzung der
Dokumentation oder den darin beschriebenen Programmen entstehen oder
entstanden sind.
<!-- *********************************************************************
** **
** V O R W O R T **
** **
********************************************************************* -->
<sect>Vorwort<label id="id-vorwort">
<p>
<!-- *********************************************************************
** Vorwort: Was ist vbox? **
********************************************************************* -->
<sect1>Was ist vbox?<label id="id-vorwort-wasistvbox">
<p>
<em>vbox</em> ist ein Softwarepaket zum Betrieb eines Anrufbeantworters
unter Linux.
Es wurde speziell für <em>isdn4linux</em> geschrieben und ist nicht für
normale Modems geeignet. Mit <em>vbox</em> können keine Fax- oder
Datenanrufe erkannt, entgegengenommen oder umgeleitet werden. Wer so etwas
benötigt, dem kann ich nur <em>mgetty</em>, bzw. <em>vgetty</em> ans Herz
legen.
<!-- *********************************************************************
** Vorwort: Was brauche ich für vbox? **
********************************************************************* -->
<sect1>Was brauche ich für vbox?<label id="id-vorwort-wasbraucheich">
<p>
Zum kompilieren von <em>vbox</em> werden folgende Dinge benötigt:
<itemize>
<item>Einen Kernel mit <tt>ISDN</tt> und <tt>AUDIO</tt> Unterstützung,
<item><em>gcc</em> 2.7.0 (oder höher),
<item><em>ncurses</em> 1.9.9e (oder höher),
<item><em>tcl</em> 7.6b1 (oder höher),
<item>und optional die <em>pvftools</em> aus dem <em>mgetty</em> Paket.
</itemize>
Entwickelt wurde <em>vbox</em> mit:
<itemize>
<item>Kernel 2.0.23,
<item><em>gcc</em> 2.7.2.1,
<item><em>ncurses</em> 1.9.9g,
<item><em>tcl</em> 7.6b1.
</itemize>
Die mit <em>vbox</em> aufgezeichneten Sprachdateien können mit den in
<em>mgetty</em> enthaltenen <em>pvftools</em> abgespielt oder konvertiert
werden. Für die Aufzeichnungsformate <tt>ULAW</tt> und <tt>ALAW</tt> liegen
Programme zum Abspielen nach '<tt>/dev/audio</tt>' bei.
Die <em>pfvtools</em> sind <bf>nicht</bf> im Paket von <em>vbox</em>
enthalten; sie sind Bestandteil von <em>mgetty</em> und können unter <url
url="ftp://ftp.leo.org/pub/comp/networking/communication/modem/mgetty/">
bezogen werden.
<!-- *********************************************************************
** Vorwort: Anregungen und Fehlermeldungen **
********************************************************************* -->
<sect1>Anregungen und Fehlermeldungen<label id="id-vorwort-report">
<p>
Für Fragen, Probleme oder Anregungen zu <bf><em>vbox</em></bf> wurde eine
eigene Mailingliste eingerichtet.
Um in die Mailingliste aufgenommen zu werden, muß eine E-Mail an
<verb>
majordomo@abadonna.franken.de
</verb>
geschrieben werden. Der Nachrichtentext muß die Zeile
<verb>
subscribe vbox &lt;die eigene email adresse&gt;
</verb>
enthalten.
Bei einer Mitteilung über einen Fehler bitte <bf>immer</bf> eine möglichst
genaue Beschreibung (am besten reproduzierbar) <bf>und</bf> den
entsprechenden Auszug aus den Logdateien beifügen.
<!-- *********************************************************************
** **
** K O N F I G U R A T I O N **
** **
********************************************************************* -->
<sect>Konfiguration<label id="id-setup">
<p>
<!-- *********************************************************************
** Konfiguration: Einrichten eines neuen Anrufbeantworters **
********************************************************************* -->
<sect1>Einrichten eines neuen Anrufbeantworters<label id="id-setup-new">
<p>
Für jeden Benutzer dem ein Anrufbeantworter installiert werden soll, muß im
<tt>SPOOLVERZEICHNIS</tt> ein Unterverzeichnis mit seinem Namen angelegt
werden.
<bf>Beispiel eines <tt>SPOOLVERZEICHNISSES</tt>:</bf>
<verb>
/var/spool/vbox:
drwx------ 4 michael users 1024 Jan 2 18:46 michael/
drwx------ 2 nicole users 1024 Jan 4 13:14 nicole/
</verb>
In diesem Verzeichnis <bf>muß</bf> sich die Konfigurationsdatei vboxrc
befinden. Ein Beispiel dieser Datei befindet sich im Verzeichnis
'<tt>examples</tt>' unter dem Namen '<tt>vboxrc.example</tt>'.
Ab Version 2.0.0 benötigt <em>vbox</em> ein Tcl-Skript, das angibt wo, wann
und wie ein- und ausgehende Nachrichten gespielt bzw. gespeichert werden
sollen. Auch hierzu befinden sich im Verzeichnis '<tt>examples</tt>' unter
dem Namen '<tt>standard.tcl.example</tt>' ein Beispiel.
<bf>Beispiel eines fertigen Verzeichnisses für einen Benutzer:</bf>
<verb>
/var/spool/vbox/michael:
michael/
|-- incoming/
|-- messages/
| |-- beep.msg
| |-- standard.msg
| +-- timeout.msg
|-- standard.tcl
+-- vboxrc
</verb>
Alle Datei- und Verzeichnisrechte sollten so angepasst werden, daß der
jeweilige Benutzer (bzw. die Gruppe) auf diese zugreifen kann! Die Datei
'<tt>vboxrc</tt>' sollte vor dem ersten Start noch vom Benutzer an seine
eigenen Bedürfnisse angepasst werden!
Zum Schluß muß nur noch der <em>vboxgetty</em> eingestellt und gestartet
werden...
<!-- *********************************************************************
** Konfiguration: Die Datei 'vboxgetty.conf' **
********************************************************************* -->
<sect1>Die Datei 'vboxgetty.conf'<label id="id-setup-vboxgettyconf">
<p>
Mit dieser Datei kann der <em>vboxgetty</em> eingestellt und konfiguriert
werden. Die Datei <bf>muß</bf> existieren!
Leere Zeilen und solche die mit einem '<tt>#</tt>' beginnen werden
überlesen. Text nach einem '<tt>#</tt>' wird entfernt (incl. '<tt>#</tt>'
und allen vorangegangenen Whitespaces). Die Datei wird ständig im Speicher
gehalten und automatisch neu geladen, wenn etwas an ihr geändert wurde!
Alles vor dem ersten <tt>PORT</tt> Kommando zählt als globale Einstellung
und gilt für alle Ports. Alle Argumente müssen durch ein Leerzeichen oder
einen Tabulator vom Kommando getrennt werden.
Folgende Kommandos können angegeben werden:
<descrip>
<tag/<tt>PORT [DEVICENAME]</tt>/
<p>
Name des Modemdevices für welches die nachfolgenden Einstellungen gelten
sollen. Es muß der komplette Pfad zum Device angegeben werden!
<bf>Beispiel:</bf> <tt>PORT /dev/ttyI7</tt>
<tag/<tt>DROPDTRONHANGUP [YES|NO]</tt>/
<p>
Gibt an ob die <tt>DATA TERMINAL READY</tt> Leitung beim Auflegen auf
<tt>LOW</tt> gesetzt werden soll. Voreinstellung ist <tt>YES</tt>.
<bf>Beispiel:</bf> <tt>DROPDTRONHANGUP YES</tt>
<tag/<tt>DROPDTRTIME [MS]</tt>/
<p>
Gibt an wieviele Millisekunden die <tt>DATA TERMINAL READY</tt> Leitung
beim Auflegen auf <tt>LOW</tt> gehalten werden soll. Voreinstellung ist
<tt>800</tt>ms.
<bf>Beispiel:</bf> <tt>DROPDTRTIME 800</tt>
<tag/<tt>ALIVETIMEOUT [SEKUNDEN]</tt>/
<p>
Gibt an nach wievielen Sekunden 'nichtstun' überprüft werden soll ob das
Modem noch auf Kommandos reagiert. Voreinstellung ist <tt>1800</tt>
Sekunden.
<bf>Beispiel:</bf> <tt>ALIVETIMEOUT 1800</tt>
<tag/<tt>RINGTIMEOUT [SEKUNDEN]</tt>/
<p>
Gibt an wieviele Sekunden auf einen <bf>einzelnen</bf> <tt>RING</tt>
gewartet werden soll. Konnte in dieser Zeit kein <tt>RING</tt> vom Modem
gelesen werden, wird die Verbindung beendet. Voreinstellung ist
<tt>5</tt> Sekunden.
<bf>Beispiel:</bf> <tt>RINGTIMEOUT 5</tt>
<tag/<tt>ECHOTIMEOUT [SEKUNDEN]</tt>/
<p>
Gibt an wieviele Sekunden auf das Echo eines Modemkommandos gewartet
werden soll, bevor dieses als Fehler gewertet wird. Voreinstellung ist
<tt>2</tt> Sekunden.
<bf>Beispiel:</bf> <tt>ECHOTIMEOUT 2</tt>
<tag/<tt>COMMANDTIMEOUT [SEKUNDEN]</tt>/
<p>
Gibt an wieviele Sekunden auf die Antwort eines Modemkommandos gewartet
werden soll, bevor dieses als Fehler gewertet wird. Voreinstellung ist
<tt>2</tt> Sekunden.
<bf>Beispiel:</bf> <tt>COMMANDTIMEOUT 2</tt>
<tag/<tt>BADINITSEXIT [SEKUNDEN]</tt>/
<p>
Gibt an nach wievielen Fehlerhaften Initialisierungen des Modems der
<em>vboxgetty</em> beendet werden soll. Eine Angabe von 0 schaltet dieses
Feature aus. Voreinstellung ist <tt>0</tt>.
<bf>Beispiel:</bf> <tt>BADINITSEXIST 0</tt>
<tag/<tt>USER [BENUTZERNAME]</tt>/
<p>
Name des Benutzers für den der <em>vboxgetty</em> laufen soll. Der
Benutzer muß existieren und in der '<tt>/etc/passwd</tt>' eingetragen
sein. Zudem muß im <tt>SPOOLVERZEICHNIS</tt> ein Unterverzeichnis mit dem
Namen des Benutzers existieren, in dem sich auch die Datei 'vboxrc'
befinden muß! Der Name des Benutzers mit der <tt>UID</tt> 0 darf
<bf>nicht</bf> angegeben werden! Voreinstellung ist der Name des
Benutzers mit der <tt>UID</tt> 0
:-)
<bf>Beispiel:</bf> <tt>USER MICHAEL</tt>
<tag/<tt>GROUP [GRUPPENNAME]</tt>/
<p>
Name der Gruppe unter der <em>vboxgetty</em> laufen soll. Wird dieses
Kommando nicht angegeben, benutzt <em>vboxgetty</em> die <tt>GID</tt> des
jeweiligen Benutzers. Die Schreib-/Leserechte werden dann nur für
<em>user</em> (u+rw oder u+rwx) gesetzt. Wenn hingegen die Gruppe auch
angegeben wurde, werde zusätzlich noch die Schreib-/Leserechte für die
<em>group</em> gesetzt (g+rw oder g+rwx). In der Voreinstellung ist
<tt>GROUP</tt> nicht angegeben.
<bf>Beispiel:</bf> <tt>GROUP VBOXES</tt>
<tag/<tt>MODEMSPEED [GESCHWINDIGKEIT]</tt>/
<p>
Geschwindigkeit mit der das Modem angesprochen werden soll. Der hier
angegebene Wert hat keinen Einfluß! Voreinstellung ist <tt>38400</tt>.
<bf>Beispiel:</bf> <tt>MODEMSPEED 38400</tt>
<tag/<tt>INITPAUSE [MS]</tt>/
<p>
Gibt an wieviele Millisekunden vor der Initialisierung des Modems
gewartet werden soll. Das Modem meldet beim Auflegen erst mit einer
kleinen Zeitverzögerung ein <tt>NO CARRIER</tt>. Damit dieses nicht als
neue Modemdaten gewertet wird, kann vor dem initialisieren mit diesem
Kommando eine kleine Pause eingelegt werden. Voreinstellung ist
<tt>1500</tt>ms.
<bf>Beispiel:</bf> <tt>INITPAUSE 1500</tt>
<tag/<tt>MODEMINIT [KOMMANDO]</tt>/
<p>
Kommando mit dem das Modem initialisiert wird. Hier <bf>muß</bf> mit
<tt>&amp;E</tt> die <tt>MSN</tt> angegeben werden, auf die der
<em>vboxgetty</em> reagieren soll. Das Kommando muß den String
<tt>OK</tt> zurückgeben. Voreinstellung ist <tt>ATZ</tt>.
<bf>Beispiel:</bf> <tt>MODEMINIT ATZ&amp;B512&amp;E332332</tt>
<tag/<tt>MODEMHANGUP [KOMMANDO]</tt>/
<p>
Kommando mit dem das Modem aufgelegt werden soll. Das Kommando muß den
String <tt>OK</tt> zurückgeben. Voreinstellung ist
<tt>&tilde;&tilde;+++&tilde;&tilde;ATH0</tt>.
<bf>Beispiel:</bf> <tt>MODEMINIT &tilde;&tilde;+++&tilde;&tilde;ATH0</tt>
<tag/<tt>COMPRESSION [KOMPRESSION]</tt>/
<p>
Kompression mit der neue Nachrichten aufgezeichnet werden sollen. Folgende Werte
können angegeben werden:
<itemize>
<item><tt>ADPCM-2</tt>
<item><tt>ADPCM-3</tt>
<item><tt>ADPCM-4</tt>
<item><tt>ALAW</tt>
<item><tt>ULAW</tt>
</itemize>
Voreinstellung ist <tt>ADPCM-4</tt>.
<bf>Beispiel:</bf> <tt>COMPRESSION ADPCM-4</tt>
</descrip>
Beim Start öffnet <em>vboxgetty</em> den Modemport, erzeugt die Log- und
Lockdateien und setzte dann sofort die Rechte auf die in <tt>USER</tt> und
<tt>GROUP</tt> angegebenen Werte. Aus diesem Grund können Lockdateien nach
dem Beenden <bf>nicht</bf> mehr gelöscht werden! Alle weiteren Programme und
Skripts werden unter den Rechten des jeweiligen Benutzers ausgeführt!
<bf>Beispiel '<tt>/usr/local/vbox/etc/vboxgetty.conf</tt>':</bf>
<verb>
#--------------------------------------------------------------------------
# This is a example for 'vboxgetty.conf'. Please read the documentation for
# a complete description of the commands!
#--------------------------------------------------------------------------
# Global settings
dropdtronhangup no
modemspeed 19200
compression 6
# Settings for port ttyI5
port /dev/ttyI5
dropdtronhangup no
dropdtrtime 1000
initpause 2500
modeminit ATZ&amp;B512&amp;E0190332332
modemhangup &tilde;&tilde;+++&tilde;&tilde;ATH
modemspeed 57600
user peter
group lustig
badinitsexit 999
commandtimeout 5
echotimeout 10
ringtimeout 15
alivetimeout 3000
compression blub
# Settings for port ttyI7
port /dev/ttyI7
dropdtronhangup yes
dropdtrtime 400
initpause 2500
modeminit ATZ&amp;B512&amp;E7850414
modemhangup &tilde;&tilde;+++&tilde;&tilde;ATH
modemspeed 38400
user michael
badinitsexit 10
commandtimeout 2
echotimeout 2
ringtimeout 5
alivetimeout 300
compression adpcm-4
</verb>
<!-- *********************************************************************
** Konfiguration: Die Datei 'vboxrc' **
********************************************************************* -->
<sect1>Die Datei 'vboxrc'<label id="id-setup-vboxrc">
<p>
In jedem Benutzerverzeichnis (Unterverzeichnis im <tt>SPOOLVERZEICHNIS</tt>)
<bf>muß</bf> sich die Datei '<tt>vboxrc</tt>' befinden, in welcher der
Benutzer seine eigenen Einstellungen vornehmen kann.
Leere Zeilen und solche die mit einem '<tt>#</tt>' beginnen werden
überlesen. Text nach einem '<tt>#</tt>' wird entfernt (incl. '<tt>#</tt>'
und allen vorangegangenen Whitespaces). Die Datei wird ständig im Speicher
gehalten und automatisch neu geladen, wenn etwas an ihr geändert wurde!
Die Datei ist in verschiedene Sektionen aufgeteilt. Eine Sektion beginnt mit
dem Sektionsnamen und Endet beim nächsten Sektionsnamen oder dem Ende der
Datei. Jeder Sektionsname beginnt mit einem '<tt>[</tt>' und endet mit einem
'<tt>]</tt>'. Die Groß- und Kleinschreibung zwischen den Sektionskennungen
'<tt>[</tt>' und '<tt>]</tt>' wird ignoriert.
Folgende Sektionen existieren:
<descrip>
<tag/<tt>[CALLERIDS]</tt>/
<p>
<bf>Format:</bf> <tt>CALLERID-PATTERN USERSECTION REALNAME</tt>
In dieser Sektion werden die <tt>CALLERID</tt>'s ihren Besitzern
zugeordnet. Die <tt>CALLERID</tt> wird bei ISDN-Geräten - sofern nicht
abgeschaltet - mit übermittelt und dient zum Idendifizieren des Anrufers.
<descrip>
<tag/<tt>CALLERID-PATTERN</tt>/
<p>
<tt>CALLERID</tt> für die ein Zuordnung definiert werden soll (ohne
führende Nullen). Es können hier die üblichen UN*X-Pattern angegeben
werden. Bei der ersten Übereinstimmung eines Musters mit der
<tt>CALLERID</tt> wird abgebrochen. Konnte der <tt>CALLERID</tt> kein
Name zugeordnet werden, wird als <tt>USERSECTION</tt>
<tt>STANDARD</tt> benutzt! In der <tt>CALLERID</tt> dürfen
<bf>keine</bf> Leerzeichen oder Tabulatoren (Whitespaces) enthalten
sein!
<tag/<tt>USERSECTION</tt>/
<p>
Hier kann angegeben werden, welche <tt>USERSECTION</tt> als
Einstellung für den Anrufer benutzt werden soll. Ein '<tt>*</tt>' gibt
an, daß der <tt>REALNAME</tt> als Sektionsname verwendet werden soll.
Bei einem '<tt>-</tt>' wird <tt>STANDARD</tt> als Sektionsname
benutzt. Im Namen der <tt>USERSECTION</tt> dürfen keine Leerzeichen
oder Tabulatoren (Whitespaces) enthalten sein!
<tag/<tt>REALNAME</tt>/
<p>
Name, der dieser <tt>CALLERID</tt> zugeordnet werden soll. Der
<tt>REALNAME</tt> darf Leerzeichen enthalten. Er wird z.B. von
<em>vbox</em> benutzt, um anzuzeigen, wer angerufen hat.
</descrip>
Als letzter Eintrag sollte immer '<tt>* - *** Unknown ***</tt>' angegeben
werden.
<bf>Beispiel:</bf>
<verb>
[CALLERIDS]
931785041[3-4] HE_I_KNOW_YOU Michael Herold
9317851144 HE_I_KNOW_YOU Nicole Sauvage
* - *** Unknown ***
</verb>
<tag/<tt>[DEBUG]</tt>/
<p>
<bf>Format:</bf> <tt>FLAG + FLAG + FLAG ...</tt>
In dieser Sektion können Flag's angegeben werden, die bestimmen, welche
Informationen in die Logdatei von <em>vboxgetty</em> aufgenommen werden
sollen.
Folgende Flag's können angegeben werden:
<itemize>
<item><tt>FATAL</tt>
<p>
Fatale Fehler
<item><tt>ERRORS</tt>
<p>
Normal Fehler
<item><tt>WARNINGS</tt>
<p>
Warnungen
<item><tt>INFOS</tt>
<p>
Informationen
<item><tt>DEBUG</tt>
<p>
Informationen zum Debuggen
<item><tt>JUNK</tt>
<p>
Erweiterte Informationen zum Debuggen
</itemize>
<bf>Beispiel:</bf> <tt>FATAL + ERRORS + WARNINGS + INFOS</tt>
<tag/<tt>[RINGS]</tt>/
<p>
<bf>Format:</bf> <tt>ZEIT WOCHENTAG RINGS</tt>
Hier kann angegeben werden, zu welcher Zeit an welchem Tag nach wievielen
<tt>RING</tt>'s ein eingehender Anruf entgegengenommen werden soll.
<descrip>
<tag/<tt>ZEIT</tt>/
<p>
Eine oder mehrere Zeitzonen; Die Zeitangaben können durch Kommata
voneinander getrennt werden. Bei einer Zeitzone von
'<tt>STARTZEIT</tt>-<tt>ENDZEIT</tt>' ist die letzte Zahl inklusiv
(z.B. <tt>18-22</tt> heißt von 18 bis einschließlich 22 Uhr).
<tag/<tt>WOCHENTAG</tt>/
<p>
Ein oder mehrere Wochentage; Die Tage können durch Kommata voneinander
getrennt werden. Tageszonen (<tt>STARTZEIT</tt>-<tt>ENDZEIT</tt>)
können hier <bf>nicht</bf> angegeben werden. Jeder Wochentag an dem
ein Anruf entgegengenommen werden soll muß einzeln aufgeführt werden.
Folgende Wochentagsangaben sind möglich:
<itemize>
<item><tt>SO</tt>, <tt>SUN</tt> - Sonntag
<item><tt>MO</tt>, <tt>MON</tt> - Montag
<item><tt>DI</tt>, <tt>TUE</tt> - Dienstag
<item><tt>MI</tt>, <tt>WED</tt> - Mittwoch
<item><tt>DO</tt>, <tt>THU</tt> - Donnerstag
<item><tt>FR</tt>, <tt>FRI</tt> - Freitag
<item><tt>SA</tt>, <tt>SAT</tt> - Samstag
</itemize>
<tag/<tt>RINGS</tt>/
<p>
Anzahl der <tt>RING</tt>'s bis ein Anruf entgegengenommen wird. Eine
Anzahl von 0 <tt>RING</tt>'s heißt, daß der Anruf nicht
entgegengenommen werden soll.
</descrip>
<bf>Beispiel:</bf>
<verb>
0-8 MO,DI,MI,DO,FR 5
0-11 SA,SO 5
* * 30
</verb>
Im oben angegebenen Beispiel würde <em>vboxgetty</em> von Montag bis
Freitag zwischen 0 und 8 Uhr und von Samstag bis Sontag zwischen 0 und 11
Uhr Anrufe nach 5 <tt>RING</tt>'s entgegennehmen. An allen anderen Tagen
erst nach 30 <tt>RING</tt>'s.
Die <bf>erste</bf> Übereinstimming wird benutzt.
<tag/<tt>Benutzersektionen</tt>/
<p>
<bf>Format:</bf> <tt>ZEIT WOCHENTAG ANSAGE AUFNAHMEZEIT [FLAGS]</tt>
Eine Benutzersektion (<tt>USERSECTION</tt>) kann frei benannt werden;
einzige Ausnahme sind Namen von bereits existierenden Sektionen.
Mit diesen Sektionen können für bestimmte Anrufer, die in der Sektion
<tt>[CALLERIDS]</tt> definiert wurden, eigene Einstellungen gemacht
werden. Es sollte immer eine Sektion <tt>[STANDARD]</tt> existieren, da
diese als Voreinstellung bei Fehlern benutzt wird!
<descrip>
<tag/<tt>ZEIT</tt>/
<p>
Eine oder mehrere Zeitzonen; Die Zeitangaben können durch Kommata
voneinander getrennt werden. Bei einer Zeitzone von
'<tt>STARTZEIT</tt>-<tt>ENDZEIT</tt>' ist die letzte Zahl inklusiv
(z.B. <tt>18-22</tt> heißt von 18 bis einschließlich 22 Uhr).
<tag/<tt>WOCHENTAG</tt>/
<p>
Ein oder mehrere Wochentage; Die Tage können durch Kommata voneinander
getrennt werden. Tageszonen (<tt>STARTZEIT</tt>-<tt>ENDZEIT</tt>)
können hier <bf>nicht</bf> angegeben werden. Jeder Wochentag an dem
ein Anruf entgegengenommen werden soll muß einzeln aufgeführt werden.
Folgende Wochentagsangaben sind möglich:
<itemize>
<item><tt>SO</tt>, <tt>SUN</tt> - Sonntag
<item><tt>MO</tt>, <tt>MON</tt> - Montag
<item><tt>DI</tt>, <tt>TUE</tt> - Dienstag
<item><tt>MI</tt>, <tt>WED</tt> - Mittwoch
<item><tt>DO</tt>, <tt>THU</tt> - Donnerstag
<item><tt>FR</tt>, <tt>FRI</tt> - Freitag
<item><tt>SA</tt>, <tt>SAT</tt> - Samstag
</itemize>
<tag/<tt>ANSAGE</tt>/
<p>
Ansagetext der gespielt werden soll. Wenn kein Verzeichnispfad mit
angegeben wurde, wird '<tt>BENUTZERVERZEICHNIS/messages/</tt>'
benutzt.
<tag/<tt>AUFNAHMEZEIT</tt>/
<p>
Maximale Aufzeichnungszeit in Sekunden.
<tag/<tt>FLAGS</tt>/
<p>
<descrip>
<tag/<tt>NOANSWER</tt>/
<p>
Der Anruf wird nicht beantwortet.
<tag/<tt>NORECORD</tt>/
<p>
Es wird keine Nachricht aufgezeichnet.
<tag/<tt>NOTIMEOUTMSG</tt>/
<p>
Bei einem Timeout wird die entsprechende Nachricht nicht gespielt.
<tag/<tt>NOBEEPMSG</tt>/
<p>
Der BEEP wird nicht gespielt.
<tag/<tt>NOSTDMSG</tt>/
<p>
Die normale Ansage wird nicht gespielt.
<tag/<tt>RINGS=NUMMER</tt>/
<p>
Der Anruf wird nach <tt>NUMMER</tt> <tt>RING</tt>'s entgegengenommen.
<tag/<tt>SCRIPT=NAME</tt>/
<p>
Hier kann das Tcl-Skript angegeben werden das benutzt werden soll.
Wird diese Option nicht angegeben, wird das Skript
'<tt>SPOOLVERZEICHNIS/standard.tcl</tt>' verwendet. Wenn kein
kompletter Pfad angegeben wurde, wird das Skript aus dem
Verzeichnis '<tt>SPOOLVERZEICHNIS</tt>' geladen.
</descrip>
</descrip>
<bf>Beispiel:</bf>
<verb>
[STANDARD]
20 DO aktex.msg 90 SCRIPT=standard.tcl
* * standard.msg 90 SCRIPT=standard.tcl
[HE_I_KNOW_YOU]
* * iknowyou.msg 90 SCRIPT=iknowyou.tcl RINGS=40
</verb>
</descrip>
<bf>Beispiel '<tt>/var/spool/vbox/michael/vboxrc</tt>':</bf>
<verb>
# CALLERIDS
#
# Format: PATTERN SECTION REALNAME
[CALLERIDS]
931785051[3-4] HE_I_KNOW_YOU Michael Herold
9317851144 HE_I_KNOW_YOU Nicole Sauvage
* - *** Unknown ***
# RINGS
#
# Format: TIME DAYS RINGS
[RINGS]
0-8 MO,DI,MI,DO,FR,SA,SO 5
* * 30
# [USERSECTIONS]
#
# Format: TIME DAYS STANDARD RECTIME [FLAG] [...]
[STANDARD]
20 DO aktex.msg 90 SCRIPT=standard.tcl RINGS=20
* * standard.msg 90 SCRIPT=standard.tcl RINGS=30
[HE_I_KNOW_YOU]
* * standard.msg 90
</verb>
<!-- *********************************************************************
** **
** S K R I P T U N T E R S T Ü T Z U N G **
** **
********************************************************************* -->
<sect>Skriptunterstützung<label id="id-scripts">
<p>
Ab Version 2.0.0 unterstützt <em>vbox</em> die Skriptsprache <em>Tcl</em>.
Nach dem Beantworten eines Anrufs (<tt>CONNECT</tt>) wird das Skript von
<em>vboxgetty</em> geladen und abgearbeitet.
<!-- *********************************************************************
** Konfiguration: Die Datei 'vboxrc' **
********************************************************************* -->
<sect1>Die Datei 'vboxrc'<label id="id-setup-vboxrc">
<p>
</article>

View File

@ -0,0 +1,34 @@
# CALLERIDS
#
# Format: PATTERN SECTION REALNAME
[CALLERIDS]
9317850413 STANDARD-OWNER Michael Herold
9317830022 - Nicole Sauvage
* - *** Unknown ***
# RINGS
#
# Format: TIME DAYS RINGS
[RINGS]
23:30-23:59,00:00-08:59 * 1
* * 6
# [USERSECTIONS]
#
# Format: TIME DAYS STANDARD RECTIME [FLAG] [...]
[STANDARD]
20:15-22:14 DO aktex.msg 60 RINGS=1
* * standard.msg 90 RINGS=6 TOLLRINGS=4
[STANDARD-OWNER]
* * standard.msg 120 RINGS=99

View File

@ -0,0 +1,18 @@
# Login access list
#
# All hosts in the login access list (begins with 'L') are checked at
# login (server startup) time. If access is 'yes' the host can login
# and count messages without special access.
L:abadonna.franken.de:Y
L:*:N
# Full access list
#
# All hosts in the full access list (begins with 'A') are checked if the
# server gets the 'login' command.
A:abadonna.franken.de:RW:michael:123:/var/spool/vbox/michael/incoming
A:abadonna.franken.de:RW:nicole:123:/var/spool/vbox/nicole/incoming
A:*:-:-:-:-

View File

@ -4,52 +4,34 @@
# a complete description of the commands!
#--------------------------------------------------------------------------
# Global settings
# Global settings for all ports
compression alaw
user michael
group users
umask 077
badinitsexit 5
compression adpcm-4
umask 077
badinitsexit 10
dropdtrtime 400
initpause 2500
commandtimeout 2
echotimeout 2
ringtimeout 3
alivetimeout 300
freespace 2000000
# Settings for port ttyI5
port /dev/ttyI5
dropdtronhangup no
dropdtrtime 1000
initpause 2500
modeminit ATZ&B512&E0190332332
modemhangup ~~+++~~ATH
modemspeed 57600
user peter
group lustig
badinitsexit 999
commandtimeout 5
echotimeout 10
ringtimeout 15
alivetimeout 3000
compression blub
# Settings for port ttyI6
port /dev/ttyI6
modeminit ATZ&B512&E7830022
user nicole
group users
spooldir /var/spool/vbox/nicole
# Settings for port ttyI7
port /dev/ttyI7
dropdtrtime = 400
initpause = 2500
modeminit=ATZ&B512&E7840514 # Test
user = michael
modeminit ATZ&B512&E7850413
user michael
group users
umask 077
badinitsexit 10
commandtimeout 4
echotimeout 4
ringtimeout 5
alivetimeout 300
compression adpcm-4
# freespace 2000000000
interninitb ATS13.2=1S13.4=1
spooldir /var/spool/vbox/michael
vboxrc /var/spool/vbox/michael/vboxrc
vboxctrl /var/spool/vbox/michael/vboxctrl

View File

@ -1,46 +0,0 @@
# CALLERIDS
#
# Format: PATTERN SECTION REALNAME
[CALLERIDS]
931784051[3-4] HE_I_KNOW_YOU Michael Herold
9317840044 HE_I_KNOW_YOU Nicole Sauvage
* - *** Unknown ***
# RINGS
#
# Format: TIME DAYS RINGS
[RINGS]
#
# 20 = 20:00:00
# 20:15 = 20:15:00
#
# 20 = 20:59:59
# 20:15 = 20:15:59
# 21:14 = 21:14:59
#
#
#
#20:15-21:14,0-8,23:15,22:30-23 MO,DI,MI,DO,FR,SA,SO 5
* * 30
# [USERSECTIONS]
#
# Format: TIME DAYS STANDARD RECTIME [FLAG] [...]
[STANDARD]
20 DO aktex.msg 90 SCRIPT=standard.tcl RINGS=6 RINGSIFNEW=4
* * standard.msg 90 SCRIPT=standard.tcl RINGS=6
[HE_I_KNOW_YOU]
* * standard.msg 30 SCRIPT=standard.tcl

Binary file not shown.

View File

@ -6,7 +6,7 @@ msgstr ""
"Xgettext-Options: --default-domain=./messages/de --sort-output\n"
"Files: ./src/init.c ./src/libvbox.c ./src/lists.c ./src/lock.c ./src/log.c ./src/modem.c ./src/perms.c ./src/rcgetty.c ./src/rcvbox.c ./src/script.c ./src/streamio.c ./src/vbox.c ./src/vboxbeep.c ./src/vboxconvert.c ./src/vboxctrl.c ./src/vboxgetty.c ./src/voice.c\n"
#: src/modem.c:648 src/modem.c:679 src/modem.c:789 src/vboxbeep.c:271 src/vboxbeep.c:273 src/vboxbeep.c:285 src/vboxbeep.c:287 src/vboxbeep.c:293 src/vboxbeep.c:295 src/vboxconvert.c:338 src/vboxconvert.c:340 src/vboxconvert.c:344 src/vboxconvert.c:447 src/vboxconvert.c:449 src/vboxconvert.c:456 src/vboxconvert.c:458 src/vboxconvert.c:492 src/vboxconvert.c:494 src/vboxconvert.c:498 src/vboxconvert.c:500 src/vboxconvert.c:504 src/vboxconvert.c:613 src/vboxconvert.c:615 src/vboxconvert.c:625 src/vboxconvert.c:1134 src/vboxconvert.c:1142 src/vboxconvert.c:1195 src/vboxconvert.c:1201 src/vboxconvert.c:1213 src/vboxconvert.c:1215 src/vboxctrl.c:190 src/vboxctrl.c:192 src/vboxctrl.c:203 src/vboxctrl.c:205 src/vboxctrl.c:215 src/vboxctrl.c:217 src/vboxctrl.c:221 src/vboxgetty.c:153 src/vboxgetty.c:155 src/vboxgetty.c:174 src/vboxgetty.c:176 src/vboxgetty.c:182
#: src/modem.c:648 src/modem.c:679 src/modem.c:789 src/vboxbeep.c:314 src/vboxbeep.c:316 src/vboxbeep.c:328 src/vboxbeep.c:330 src/vboxbeep.c:338 src/vboxbeep.c:340 src/vboxconvert.c:338 src/vboxconvert.c:340 src/vboxconvert.c:344 src/vboxconvert.c:447 src/vboxconvert.c:449 src/vboxconvert.c:456 src/vboxconvert.c:458 src/vboxconvert.c:492 src/vboxconvert.c:494 src/vboxconvert.c:498 src/vboxconvert.c:500 src/vboxconvert.c:504 src/vboxconvert.c:613 src/vboxconvert.c:615 src/vboxconvert.c:625 src/vboxconvert.c:1134 src/vboxconvert.c:1142 src/vboxconvert.c:1195 src/vboxconvert.c:1201 src/vboxconvert.c:1213 src/vboxconvert.c:1215 src/vboxctrl.c:190 src/vboxctrl.c:192 src/vboxctrl.c:203 src/vboxctrl.c:205 src/vboxctrl.c:215 src/vboxctrl.c:217 src/vboxctrl.c:221 src/vboxgetty.c:153 src/vboxgetty.c:155 src/vboxgetty.c:174 src/vboxgetty.c:176 src/vboxgetty.c:182
msgid "\n"
msgstr "\n"
@ -32,11 +32,11 @@ msgstr "\" (%d).\n"
#: src/voice.c:266 src/voice.c:624
msgid "\" (ignored)...\n"
msgstr ""
msgstr "\" (ignoriert)...\n"
#: src/voice.c:287
msgid "\" (need a \"<DLE>\").\n"
msgstr ""
msgstr "\" (brauche ein \"<DLE>\").\n"
#: src/modem.c:347
msgid "\".\n"
@ -54,7 +54,7 @@ msgstr "\"... "
msgid "%ld bytes available; %ld bytes needed... "
msgstr "%ld Byte's sind verfügbar; %ld Byte's werden benötigt...\n"
#: src/vboxbeep.c:272 src/vboxconvert.c:1214 src/vboxctrl.c:191 src/vboxgetty.c:154
#: src/vboxbeep.c:315 src/vboxconvert.c:1214 src/vboxctrl.c:191 src/vboxgetty.c:154
msgid "%s version %s (%s)\n"
msgstr "%s Version %s (%s)\n"
@ -74,7 +74,7 @@ msgstr "%s: kann tempor
msgid "%s: can't create control file \"%s\".\n"
msgstr "%s: kann die Kontrolldatei \"%s\" nicht erzeugen.\n"
#: src/vboxbeep.c:205
#: src/vboxbeep.c:221
msgid "%s: can't find running %s process.\n"
msgstr "%s: kann keinen laufenden Prozeß von %s finden.\n"
@ -130,7 +130,7 @@ msgstr "%s: die Kontrolldatei \"%s\" wurde entfernt.\n"
msgid "%s: device \"%s\" is not accessable.\n"
msgstr "%s: Gerätetreiber \"%s\" ist nicht ansprechbar.\n"
#: src/vboxbeep.c:178 src/vboxbeep.c:189
#: src/vboxbeep.c:194 src/vboxbeep.c:205
msgid "%s: error sending signal (%s).\n"
msgstr "%s: Fehler beim senden des Signals (%s).\n"
@ -158,11 +158,11 @@ msgstr "%s: die Datei enth
msgid "%s: sample contains no vbox or sun au header.\n"
msgstr "%s: die Datei enthält weder einen \"vbox audio header\" noch einen \"au header\".\n"
#: src/vboxbeep.c:174
#: src/vboxbeep.c:190
msgid "%s: sending signal to stop beep's to process %d...\n"
msgstr "%s: sende Signal zum stoppen der Beep's an Prozeß %d...\n"
#: src/vboxbeep.c:185
#: src/vboxbeep.c:201
msgid "%s: sending terminate signal to process %d...\n"
msgstr "%s: sende Signal zum terminieren an Prozeß %d...\n"
@ -182,11 +182,11 @@ msgstr "%s: nicht unterst
msgid "%s: unsupported or illegal sound encoding.\n"
msgstr "%s: nicht unterstütztes oder falsches Musikformat.\n"
#: src/vboxbeep.c:194
#: src/vboxbeep.c:210
msgid "%s: you must be *root* to kill a running %s.\n"
msgstr "%s: nur *root* kann einen laufendes %s beenden.\n"
#: src/vboxbeep.c:214
#: src/vboxbeep.c:230
msgid "%s: you must be *root* to start %s.\n"
msgstr "%s: nur *root* kann %s starten.\n"
@ -210,7 +210,7 @@ msgstr "- F
msgid "- For vbox messages it returns 2-6,\n"
msgstr "- Für vbox-Nachrichten wird 2-6 zurückgegeben,\n"
#: src/init.c:230
#: src/init.c:232
msgid "------------------------[End session]-----------------------\n"
msgstr "-----------------------[Programmende]-----------------------\n"
@ -262,7 +262,7 @@ msgstr "-h, --help Zeigt diesen Hilfstext an.\n"
msgid "-h, --help Prints this usage message.\n"
msgstr "-h, --help Zeigt diesen Hilfstext an.\n"
#: src/vboxbeep.c:291
#: src/vboxbeep.c:336
msgid "-h, --help Displays this help text.\n"
msgstr "-h, --help Zeigt diesen Hilfstext an.\n"
@ -274,6 +274,10 @@ msgstr "-h, --help Zeigt diesen Hilfstext an.\n"
msgid "-h, --help Displays this usage message.\n"
msgstr "-h, --help Zeigt diesen Hilfstext an.\n"
#: src/vboxbeep.c:334
msgid "-i, --machine HOST Connect to message server on HOST (default: localhost).\n"
msgstr "-i, --machine HOST Nachrichten-Server ist HOST (Voreinst.: localhost).\n"
#: src/vboxctrl.c:211
msgid "-j, --reject Control file \"vboxctrl-reject\".\n"
msgstr "-j, --reject Kontrolldatei \"vboxctrl-reject\".\n"
@ -286,7 +290,7 @@ msgstr "-l, --language
msgid "-l, --location LOCATION Sets header information.\n"
msgstr "-l, --location LOCATION Setzt Information im \"audio header\".\n"
#: src/vboxbeep.c:289
#: src/vboxbeep.c:332
msgid "-m, --messagebox DIR Watch directory DIR for new messages.\n"
msgstr "-m, --messagebox DIR Verzeichnis DIR auf neue Nachrichten überwachen.\n"
@ -298,7 +302,11 @@ msgstr "-n, --answernow Kontrolldatei \"vboxctrl-answernow\".\n"
msgid "-n, --name NAME Sets header information.\n"
msgstr "-n, --name NAME Setzt Information im \"audio header\".\n"
#: src/vboxbeep.c:290
#: src/vboxbeep.c:335
msgid "-o, --port PORT Connect to message server on PORT (default: %d).\n"
msgstr "-o, --port PORT Nachrichten-Server mit PORT (Voreinst.: %d).\n"
#: src/vboxbeep.c:333
msgid "-p, --pause SECONDS Pause in seconds to sleep between checks (default: 5).\n"
msgstr "-p, --pause SECONDS Pause in Sekunden zwischen Check's (Voreinstellung: 5).\n"
@ -322,7 +330,7 @@ msgstr "-r, --remove Erzeugt eine Kontrolldatei.\n"
msgid "-r, --samplerate RATE Header sampling rate (default 8000).\n"
msgstr "-r, --samplerate RATE Samplerate im \"audio header\" (Voreinstellung 8000).\n"
#: src/vboxbeep.c:288
#: src/vboxbeep.c:331
msgid "-s, --sound HOURS Hours to signal with sound (default: no time)\n"
msgstr "-s, --sound HOURS Stunden in denen Sound gespielt wird (Voreinst.: keine).\n"
@ -346,7 +354,7 @@ msgstr "-v, --version Zeigt die Version des Programms an.\n"
msgid "-v, --version Prints the package version.\n"
msgstr "-v, --version Zeigt die Version des Programms an.\n"
#: src/vboxbeep.c:292
#: src/vboxbeep.c:337
msgid "-v, --version Displays program version.\n"
msgstr "-v, --version Zeigt die Version des Programms an.\n"
@ -398,7 +406,7 @@ msgstr "Falsche Zeit; kann Zeitangabe (%s-%s) nicht konvertieren - ignoriert...\
msgid "Bad time; start greater than end (%s-%s) - ignored...\n"
msgstr "Falsche Zeit; Startzeit ist größer als die Endzeit (%s-%s) - ignoriert...\n"
#: src/rcgetty.c:141
#: src/rcgetty.c:140
msgid "Bad value \"%s\" for command \"%s\" ignored (%s)...\n"
msgstr "Falscher Wert \"%s\" für Kommando \"%s\" ignoriert (%s)...\n"
@ -434,7 +442,7 @@ msgstr "Kann Anruf nicht beantworten - Lege auf...\n"
msgid "Can't call fcntl() to setup modem port.\n"
msgstr "Kann Modem nicht mit der Funktion 'fcntl()' einstellen.\n"
#: src/init.c:126
#: src/init.c:122
msgid "Can't create \"%s\" (%s).\n"
msgstr "Kann \"%s\" nicht erzeugen (%s).\n"
@ -482,7 +490,7 @@ msgstr "Kann den Tcl-Interpreter nicht initialisieren.\n"
msgid "Can't lock \"%s\".\n"
msgstr "Kann \"%s\" nicht sperren.\n"
#: src/init.c:200 src/rcgetty.c:170 src/voice.c:156
#: src/init.c:202 src/rcgetty.c:169 src/voice.c:156
msgid "Can't open \"%s\".\n"
msgstr "Kann \"%s\" nicht öffnen.\n"
@ -496,11 +504,11 @@ msgstr "Kann nicht vom Modem lesen [%d]%s.\n"
#: src/voice.c:504
msgid "Can't read incoming data (%s).\n"
msgstr ""
msgstr "Kann eingehende Daten nicht lesen (%s).\n"
#: src/voice.c:313
msgid "Can't read input from modem.\n"
msgstr ""
msgstr "Kann Daten vom Modem nicht lesen.\n"
#: src/modem.c:305
msgid "Can't read modem command echo.\n"
@ -512,9 +520,9 @@ msgstr "Kann die Antwort vom Modemkommando nicht lesen.\n"
#: src/voice.c:163
msgid "Can't read vbox audio header from message.\n"
msgstr ""
msgstr "Kann \"vbox audio header\" nicht lesen.\n"
#: src/init.c:156 src/init.c:164 src/modem.c:888 src/modem.c:900
#: src/init.c:155 src/init.c:163 src/modem.c:888 src/modem.c:900
msgid "Can't remove control file \"%s\"!\n"
msgstr "Kann die Kontrolldatei \"%s\" nicht löschen!\n"
@ -540,11 +548,11 @@ msgstr "Kann Besitzer von \"%s\" nicht setzen (%s).\n"
#: src/voice.c:394
msgid "Can't set voice audio compressen.\n"
msgstr ""
msgstr "Kann die Audio-Kompression nicht setzen.\n"
#: src/voice.c:174
msgid "Can't set voice audio compression or line mode.\n"
msgstr ""
msgstr "Kann die Audio-Kompression oder den Line-Mode nicht setzen.\n"
#: src/perms.c:67
msgid "Can't set working directory to \"%s\" (%s).\n"
@ -560,15 +568,15 @@ msgstr "Kann ID nicht zu %d, %d
#: src/voice.c:432
msgid "Can't start record mode.\n"
msgstr ""
msgstr "Kann den Aufzeichnungs-Modus nicht starten.\n"
#: src/voice.c:190
msgid "Can't start voice play mode.\n"
msgstr ""
msgstr "Kann den Abspiel-Modus nicht starten.\n"
#: src/voice.c:414
msgid "Can't write raw voice audio header.\n"
msgstr ""
msgid "Can't write vbox audio header.\n"
msgstr "\"Kann \"vbox audio header\" nicht schreiben.\n"
#: src/vboxconvert.c:1198
msgid "Channels........: %d\n"
@ -610,17 +618,17 @@ msgstr "Kontrolldatei \"%s\" existiert - Programm wird beendet...\n"
msgid "Control file \"%s\" exists - rejecting call...\n"
msgstr "Kontrolldatei \"%s\" existiert - Anruf wird verworfen...\n"
#: src/init.c:140 src/init.c:144
#: src/init.c:139 src/init.c:143
msgid "Control file \"%s\" exists - waiting...\n"
msgstr "Kontrolldatei \"%s\" existiert - Warte...\n"
#: src/init.c:149
#: src/init.c:148
msgid "Control file deleted - back in business...\n"
msgstr "Kontrolldatei wurde gelöscht - Back in business...\n"
#: src/voice.c:240
msgid "Could only write %d of %d bytes (%s).\n"
msgstr ""
msgstr "Kann nur %d von %d Zeichen schreiben (%s).\n"
#: src/vboxconvert.c:1135
msgid "Creation time...........: %s"
@ -656,13 +664,13 @@ msgstr "Setze Proze
#: src/voice.c:208
msgid "End of audio data (%s).\n"
msgstr ""
msgstr "Ende der Audio-Daten (%s).\n"
#: src/rcgetty.c:163
#: src/rcgetty.c:162
msgid "Error in \"%s\": Missing argument (%s).\n"
msgstr "Fehler in \"%s\": Vermisse Argument (%s).\n"
#: src/rcgetty.c:162
#: src/rcgetty.c:161
msgid "Error in \"%s\": Missing command.\n"
msgstr "Fehler in \"%s\": Vermisse Kommando.\n"
@ -674,7 +682,7 @@ msgstr "Fehler in Tagesangabe \"%s\" in Zeile #%ld (keine
msgid "Error in vboxrc line #%ld (ignored).\n"
msgstr "Fehler in vboxrc Zeile #%ld (ignoriert).\n"
#: src/init.c:223
#: src/init.c:225
msgid "Exit program on signal %d...\n"
msgstr "Signal %d erhalten - Beende Programm...\n"
@ -702,11 +710,11 @@ msgstr "%d neue Nachricht(en) gefunden; Neue Anzahl Ring's ist %d...\n"
msgid "Found Flag \"%s\"...\n"
msgstr "Gefundenes Flag: \"%s\"...\n"
#: src/rcgetty.c:137
#: src/rcgetty.c:136
msgid "Found command '%s = %s' (%s)...\n"
msgstr "Gefundenes Kommando: '%s = %s' (%s)...\n"
#: src/rcgetty.c:122
#: src/rcgetty.c:121
msgid "Found command '%s = %s'...\n"
msgstr "Gefundenes Kommando: '%s = %s'...\n"
@ -716,19 +724,19 @@ msgstr "Bereits ge
#: src/voice.c:264
msgid "Found sequence \"<DLE>"
msgstr ""
msgstr "Gefundene Sequenz: \"<DLE>"
#: src/voice.c:270
msgid "Found sequence \"<DLE><DC4>\" (remote hangup)...\n"
msgstr ""
msgstr "Gefundene Sequenz: \"<DLE><DC4>\" (Gegenstellt hat aufgelegt)...\n"
#: src/voice.c:466
msgid "Found sequence \"<DLE><ETX>\" (remote hangup)...\n"
msgstr ""
msgstr "Gefundene Sequenz: \"<DLE><ETX>\" (Gegenstelle hat aufgelegt)...\n"
#: src/voice.c:637
msgid "Found touchtone \"%c\"...\n"
msgstr ""
msgstr "Gefundener Touchtone: \"%c\"...\n"
#: src/vboxgetty.c:327
msgid "Free disc space check disabled!\n"
@ -736,7 +744,7 @@ msgstr "Die
#: src/voice.c:324
msgid "Function play %d secs (kernel needs %d secs)...\n"
msgstr ""
msgstr "Funktion spielte %d Sekunden (Kernel bräuchte %d Sekunden)...\n"
#: src/rcvbox.c:315
msgid "Getting number of rings to wait before answer call...\n"
@ -760,7 +768,7 @@ msgstr "Der Inhalt des S-Registers ist \"%s\".\n"
#: src/voice.c:285
msgid "Got unneeded character \""
msgstr ""
msgstr "Unbenötigtes Zeichen erhalten: \""
#: src/modem.c:160
msgid "Hangup modem (drop dtr %d ms)...\n"
@ -768,9 +776,9 @@ msgstr "Lege Modem auf (drop dtr %d ms)...\n"
#: src/voice.c:249
msgid "Have input...\n"
msgstr ""
msgstr "Es sind Daten da...\n"
#: src/vboxbeep.c:294
#: src/vboxbeep.c:339
msgid ""
"Hours to play sound with the pc speaker must be specified in 24-hour-format.\n"
"you can use ',' or '-' to seperate hours or specify time ranges (eg 9,17-22).\n"
@ -789,7 +797,7 @@ msgstr ""
#: src/voice.c:622
msgid "Illeagal \"<DLE>\" shielded code \""
msgstr ""
msgstr "Falsche \"<DLE>\" Sequenz \""
#: src/script.c:125 src/script.c:134
msgid "In \"%s\": %s (line %d).\n"
@ -853,7 +861,7 @@ msgstr ""
#: src/voice.c:333
msgid "Oops - can't calculate time to wait!\n"
msgstr ""
msgstr "Huch - Kann die Zeit zum Warten nicht errechnen!\n"
#: src/modem.c:426
msgid "Oops!\n"
@ -863,7 +871,7 @@ msgstr "Huch!\n"
msgid "Opening modem port \"%s\"...\n"
msgstr "Öffne Modemport \"%s\"...\n"
#: src/rcgetty.c:142
#: src/rcgetty.c:141
msgid "Parser returns \"%s\" (min %d; max %d).\n"
msgstr "Übersetzer hat \"%s\" zurückgegeben (Min %d; Max %d).\n"
@ -875,7 +883,7 @@ msgstr "Untersuche Tag(e) \"%s\"...\n"
msgid "Parsing settings from section \"%s\"...\n"
msgstr "Übersetze Einstellungen der Sektion \"%s\"...\n"
#: src/rcgetty.c:85
#: src/rcgetty.c:84
msgid "Parsing settings in \"%s\" for port \"%s\"...\n"
msgstr "Übersetze Einstellungen in \"%s\" für Port \"%s\"...\n"
@ -897,11 +905,11 @@ msgstr "Zeitbegrenzungs-Nachricht wird gespielt"
#: src/voice.c:224
msgid "Play: <DATA %d incoming; %d outgoing>\n"
msgstr ""
msgstr "Abspielen: <DATEN %d eingehend; %d ausgehend>\n"
#: src/voice.c:152
msgid "Playing \"%s\"...\n"
msgstr ""
msgstr "Spiele \"%s\"...\n"
#: src/rcvbox.c:171
msgid "Range %s - %s (%s): "
@ -945,11 +953,11 @@ msgstr "Eine Nachricht wird aufgezeichnet"
#: src/voice.c:493
msgid "Record: <DATA %d incoming; %d outgoing>\n"
msgstr ""
msgstr "Aufzeichnen: <DATEN %d eingehend; %d ausgehend>\n"
#: src/voice.c:388
msgid "Recording \"%s\" (%d secs)...\n"
msgstr ""
msgstr "Zeichne \"%s\" auf (%d Sekunden)...\n"
#: src/script.c:65
msgid "Running tcl script \"%s\"...\n"
@ -989,19 +997,19 @@ msgstr "Sende \""
#: src/voice.c:561
msgid "Sending \"<DLE><DC4>\"...\n"
msgstr ""
msgstr "Sende \"<DLE><DC4>\"...\n"
#: src/voice.c:353
msgid "Sending \"<DLE><ETX>\"...\n"
msgstr ""
msgstr "Sende \"<DLE><ETX>\"...\n"
#: src/voice.c:300 src/voice.c:519
msgid "Sequence \"%s\" found in breaklist...\n"
msgstr ""
msgstr "Sequenz \"%s\" in der Unterbrechungsliste gefunden...\n"
#: src/voice.c:306 src/voice.c:525
msgid "Sequence \"%s\" not in breaklist (ignored)...\n"
msgstr ""
msgstr "Sequenz \"%s\" nicht in der Unterbrechungsliste gefunden (ignoriert)...\n"
#: src/perms.c:28
msgid "Setting \"%s\" to %d.%d (%04o)...\n"
@ -1017,7 +1025,7 @@ msgstr "Setze Modem-Geschwindigkeit auf 57600...\n"
#: src/voice.c:109
msgid "Setting voice compression \"%s\"...\n"
msgstr ""
msgstr "Setze Audio-Kompression \"%s\"...\n"
#: src/rcvbox.c:589
msgid "Settings: %d secs record time.\n"
@ -1109,7 +1117,7 @@ msgstr "Zeitbegrenzungs-Funktion wurde aufgerufen!\n"
#: src/voice.c:296 src/voice.c:515
msgid "Touchtone sequence \"%s\" found.\n"
msgstr ""
msgstr "Touchtone-Sequenz \"%s\" gefunden.\n"
#: src/rcvbox.c:565
msgid "Unable to locate section \"%s\" (useing defaults)...\n"
@ -1123,19 +1131,19 @@ msgstr "Kann die Sektion \"[CALLERIDS]\" nicht finden (benutze Voreinstellungen)
msgid "Unable to locate section \"[RINGS]\" (useing defaults)...\n"
msgstr "Kann die Sektion \"[RINGS]\" nicht finden (benutze Voreinstellungen)...\n"
#: src/rcgetty.c:153
#: src/rcgetty.c:152
msgid "Unknown command \"%s\" ignored (%s)...\n"
msgstr "Unbekanntes Kommando \"%s\" ignoriert (%s)...\n"
#: src/voice.c:114
msgid "Unknown compression %d - can't set.\n"
msgstr ""
msgstr "Umbekannte Kompression %d - Kann nicht gesetzt werden.\n"
#: src/lock.c:171
msgid "Unlocking %s (%s)...\n"
msgstr "Entsperre %s (%s)...\n"
#: src/vboxbeep.c:286 src/vboxctrl.c:204 src/vboxgetty.c:175
#: src/vboxbeep.c:329 src/vboxctrl.c:204 src/vboxgetty.c:175
msgid "Usage: %s OPTION [ OPTION ] [ ... ]\n"
msgstr "Benutzung: %s OPTION [ OPTION ] [ ...]\n"
@ -1151,25 +1159,25 @@ msgstr "Benutzung: %s OPTION [ OPTION ] [ ... ] DATEINAME\n"
msgid "Use existing lock for \"%s\" (%d).\n"
msgstr "Benutze existierende Sperrung für \"%s\" (%d).\n"
#: src/init.c:118
#: src/init.c:112
msgid "User %s's messagebox is \"%s\"...\n"
msgstr "Benutzer %s's Nachrichtenfach ist \"%s\"...\n"
#: src/init.c:119
msgid "User %s's vboxrc is \"%s\"...\n"
msgstr "Benutzer %s's vboxrc ist unter \"%s\"...\n"
#: src/init.c:113
msgid "User %s's vbox.conf is \"%s\"...\n"
msgstr "Benutzer %s's vbox.conf ist \"%s\"...\n"
#: src/voice.c:497
msgid "Wait: <DATA %d incoming>\n"
msgstr ""
msgstr "Warte: <DATEN %d eingehend>\n"
#: src/voice.c:390
msgid "Waiting %d secs for input...\n"
msgstr ""
msgstr "Warte %d Sekunden auf eingehende Daten...\n"
#: src/voice.c:328
msgid "Waiting %d secs to complete playing...\n"
msgstr ""
msgstr "Warte %d Sekunden bis das Abspielen abgeschlossen ist...\n"
#: src/modem.c:396
msgid "Waiting for \""
@ -1299,11 +1307,7 @@ msgstr "[vbox_wait] Ergebnis \"%s\".\n"
msgid "[vbox_wait] usage: vbox_wait <seconds>\n"
msgstr "[vbox_wait] Benutzung: vbox_wait <seconds>\n"
#: src/vboxbeep.c:437
msgid "add directory \"%s\" to watchlist..."
msgstr "füge Verzeichnis \"%s\" zur Überwachungsliste hinzu...\n"
#: src/rcgetty.c:235
#: src/rcgetty.c:234
msgid "alaw not longer supported"
msgstr "alaw wird nicht länger unterstützt"
@ -1311,42 +1315,54 @@ msgstr "alaw wird nicht l
msgid "autovbox - to convert au format samples to vbox messages.\n"
msgstr "autovbox - um eine au-Datei in eine vbox-Nachricht zu konvertieren.\n"
#: src/vboxbeep.c:383
#: src/vboxbeep.c:435
msgid "bad hour in local time structure (%d)."
msgstr "falsche Stunde in der lokalen Zeitstruktur (%d).\n"
#: src/vboxbeep.c:444
#: src/vboxbeep.c:548 src/vboxbeep.c:550
msgid "bad server response \"%s\"."
msgstr "falsche Server Antwort \"%s\"."
#: src/vboxbeep.c:491
msgid "can't add \"%s\" to watchlist."
msgstr "kann \"%s\" nicht zur Überwachungsliste hinzufügen.\n"
#: src/vboxbeep.c:497
msgid "can't change to \"%s\" (%s)."
msgstr "kann nicht nach \"%s\" wechseln (%s).\n"
#: src/vboxbeep.c:272
msgid "can't connect to vbox message server."
msgstr "kann Verbindung zum \"vbox message server\" nicht herstellen."
#: src/rcgetty.c:263
#: src/rcgetty.c:262
msgid "can't convert value to integer"
msgstr "kann den Wert nicht in Zahl konvertieren"
#: src/vboxbeep.c:376
#: src/vboxbeep.c:428
msgid "can't get current local time (%s)."
msgstr "kann die lokale Zeit nicht ermitteln (%s).\n"
#: src/vboxbeep.c:495
msgid "can't open \"%s\" (%s)."
msgstr "kann \"%s\" nicht öffnen (%s).\n"
#: src/vboxbeep.c:554
msgid "can't get server response."
msgstr "kann Antwort vom Server nicht lesen."
#: src/vboxbeep.c:392
#: src/vboxbeep.c:444
msgid "can't open \"/dev/console\" (%s)."
msgstr "kann \"/dev/console\" nicht öffnen (%s).\n"
#: src/vboxbeep.c:530
#: src/vboxbeep.c:590
msgid "can't remove PID file \"%s\" (%s)."
msgstr "kann die PID-Datei \"%s\" nicht entfernen (%s).\n"
#: src/vboxbeep.c:512
#: src/vboxbeep.c:268
msgid "connected to vbox message server."
msgstr "Verbindung zum \"vbox message server\" hergestellt."
#: src/vboxbeep.c:572
msgid "could not create PID file \"%s\" (%s)."
msgstr "kann die PID-Datei \"%s\" nicht erzeugen (%s).\n"
#: src/vboxbeep.c:391
msgid "disconnecting from server..."
msgstr "Verbindung zum \"vbox message server\" wird beendet..."
#: src/rcvbox.c:179
msgid "don't match.\n"
msgstr "keine Übereinstimmung.\n"
@ -1367,11 +1383,11 @@ msgstr "
msgid "modem port"
msgstr "Modemport"
#: src/vboxbeep.c:359
#: src/vboxbeep.c:411
msgid "new starttime is %ld."
msgstr "die neue Startzeit ist %ld.\n"
#: src/vboxbeep.c:118
#: src/vboxbeep.c:124
msgid "not enough memory to create pid name.\n"
msgstr "nicht genug Speicher um den Namen der PID zu erzeugen.\n"
@ -1383,47 +1399,55 @@ msgstr "nicht genug!\n"
msgid "sequence"
msgstr "Sequenz"
#: src/vboxbeep.c:615
#: src/vboxbeep.c:296
msgid "server connection canceled."
msgstr "Verbindung zum \"vbox message server\" wurde beendet."
#: src/vboxbeep.c:552
msgid "server connection lost!"
msgstr "Verbindung zum \"vbox message server\" wurde verloren!"
#: src/vboxbeep.c:675
msgid "start- or endtime out of range."
msgstr "die Start- oder Endzeit ist ausßerhalb der gültigen Werte.\n"
#: src/vboxbeep.c:613
#: src/vboxbeep.c:673
msgid "starttime must be lower than endtime."
msgstr "die Startzeit muß kleiner als die Endzeit sein.\n"
#: src/vboxbeep.c:344
#: src/vboxbeep.c:396
msgid "terminate..."
msgstr "beendet sich...\n"
#: src/vboxbeep.c:223
#: src/vboxbeep.c:239
msgid "there are no directories to watch."
msgstr "es sind keine Verzeichnisse zum überwachen angegeben.\n"
#: src/vboxbeep.c:239
#: src/vboxbeep.c:255
msgid "time range \"%s\"."
msgstr "Zeiten \"%s\".\n"
#: src/rcgetty.c:233
#: src/rcgetty.c:232
msgid "unknown compression"
msgstr "unbekannte Kompression"
#: src/rcgetty.c:281
#: src/rcgetty.c:280
msgid "unknown groupname"
msgstr "unbekannter Gruppenname"
#: src/rcgetty.c:331
#: src/rcgetty.c:330
msgid "unknown umask"
msgstr "unbekannte umask"
#: src/rcgetty.c:299
#: src/rcgetty.c:298
msgid "unknown username"
msgstr "unbekannter Benutzername"
#: src/rcgetty.c:261
#: src/rcgetty.c:260
msgid "value too big"
msgstr "Wert zu groß"
#: src/rcgetty.c:260
#: src/rcgetty.c:259
msgid "value too small"
msgstr "Wert zu klein"
@ -1438,3 +1462,4 @@ msgstr "vboxmode - um Informationen
#: src/vboxconvert.c:341
msgid "vboxtoau - to convert vbox messages to au format.\n"
msgstr "vboxtoau - um eine vbox-Nachricht in eine au-Datei zu konvertieren.\n"
#

View File

@ -20,7 +20,7 @@ LIBS_INTL = @LINK_INTL_LIBS@
HEADERS = init.h lists.h lock.h log.h modem.h streamio.h perms.h \
rcgetty.h script.h voice.h vboxgetty.h rcvbox.h \
vboxctrl.h
vboxctrl.h vboxd.h config.h
#----------------------------------------------------------------------------#
# Object compile modes #
@ -39,7 +39,7 @@ lists.o: $(HEADERS) lists.c
$(CC) $(CFLAGS) -c lists.c
script.o: $(HEADERS) script.c
$(CC) $(CFLAGS) -DBINDIR='"$(VBINDIR)"' -c script.c
$(CC) $(CFLAGS) -DBINDIR='"$(VBOX_BINDIR)"' -c script.c
voice.o: $(HEADERS) voice.c
$(CC) $(CFLAGS) -c voice.c
@ -60,7 +60,7 @@ rcvbox.o: $(HEADERS) rcvbox.c
$(CC) $(CFLAGS) -c rcvbox.c
vboxgetty.o: $(HEADERS) vboxgetty.c
$(CC) $(CFLAGS) -DGETTYRC='"$(GETTYRC)"' -c vboxgetty.c
$(CC) $(CFLAGS) -DGETTYRC='"$(VBOX_GETTYCONF)"' -c vboxgetty.c
vboxconvert.o: $(HEADERS) vboxconvert.c
$(CC) $(CFLAGS) -c vboxconvert.c
@ -74,9 +74,12 @@ vboxctrl.o: $(HEADERS) vboxctrl.c
vboxbeep.o: $(HEADERS) vboxbeep.c
$(CC) $(CFLAGS) -c vboxbeep.c
vboxd.o: $(HEADERS) vboxd.c
$(CC) $(CFLAGS) -DVBOXDRC='"$(VBOX_VBOXDCONF)"' -c vboxd.c
#----------------------------------------------------------------------------#
all: vboxlib vboxgetty vboxconvert vboxctrl vboxbeep vbox
all: vboxlib vboxd vboxgetty vboxconvert vboxctrl vboxbeep vbox
#----------------------------------------------------------------------------#
# Compiling vboxlib #
@ -135,7 +138,7 @@ vboxctrl: $(VBOXCTRLOBJS)
$(CC) $(CFLAGS) $(VBOXCTRLOBJS) -o vboxctrl -L. $(LIBS_INTL) -lvbox
#----------------------------------------------------------------------------#
# Compiling vboxleds #
# Compiling vboxbeep #
#----------------------------------------------------------------------------#
VBOXBEEPOBJS = vboxbeep.o
@ -144,46 +147,11 @@ vboxbeep: $(VBOXBEEPOBJS)
$(CC) $(CFLAGS) $(VBOXBEEPOBJS) -o vboxbeep -L. $(LIBS_INTL) -lvbox
#----------------------------------------------------------------------------#
# Misc #
# Compiling vboxd #
#----------------------------------------------------------------------------#
clean:
@rm -f *~
VBOXDOBJS = vboxd.o streamio.o
vboxd: $(VBOXDOBJS)
$(CC) $(CFLAGS) $(VBOXDOBJS) -o vboxd -L. -lvbox

View File

@ -96,18 +96,6 @@ int init_program(char *device, char *gettyrc)
xstrncpy(setup.users.name, passwd->pw_name, USER_MAX_NAME);
xstrncpy(setup.users.home, passwd->pw_dir , USER_MAX_HOME);
if (!*setup.vboxrcname)
{
xstrncpy(setup.vboxrcname, setup.users.home, SETUP_MAX_VBOXRC);
xstrncat(setup.vboxrcname, "/.vboxrc" , SETUP_MAX_VBOXRC);
}
if (!*setup.vboxctrl)
{
xstrncpy(setup.vboxctrl, setup.users.home, SETUP_MAX_VBOXCTRL);
xstrncat(setup.vboxctrl, "/.vboxctrl" , SETUP_MAX_VBOXCTRL);
}
if (!*setup.spool)
{
xstrncpy(setup.spool, SPOOLDIR , SETUP_MAX_SPOOLNAME);
@ -115,11 +103,19 @@ int init_program(char *device, char *gettyrc)
xstrncat(setup.spool, setup.users.name, SETUP_MAX_SPOOLNAME);
}
log(L_INFO, gettext("User %s's messagebox is \"%s\"...\n"), setup.users.name, setup.spool);
log(L_INFO, gettext("User %s's vboxrc is \"%s\"...\n"), setup.users.name, setup.vboxrcname);
if (!*setup.vboxrcname)
{
xstrncpy(setup.vboxrcname, setup.spool , SETUP_MAX_VBOXRC);
xstrncat(setup.vboxrcname, "/vbox.conf", SETUP_MAX_VBOXRC);
}
/* Create the spool directory and set the permissions to the */
/* current user (with umask). */
log(L_INFO, gettext("User %s's messagebox is \"%s\"...\n"), setup.users.name, setup.spool);
log(L_INFO, gettext("User %s's vbox.conf is \"%s\"...\n"), setup.users.name, setup.vboxrcname);
/*
* Create the spool directory and set the permissions to the current
* user (with umask).
*/
if ((mkdir(setup.spool, S_IRWXU) == -1) && (errno != EEXIST))
{
@ -128,7 +124,10 @@ int init_program(char *device, char *gettyrc)
returnerror();
}
if (!permissions_set(setup.spool, setup.users.uid, setup.users.gid, S_IRWXU|S_IRWXG|S_IRWXO, setup.users.umask)) returnerror();
if (!permissions_set(setup.spool, setup.users.uid, setup.users.gid, S_IRWXU|S_IRWXG|S_IRWXO, setup.users.umask))
{
returnerror();
}
/*
* Now we check if 'vboxctrl-stop' exists. If true, loop and watch
@ -186,13 +185,16 @@ int init_program(char *device, char *gettyrc)
* umask.
*/
if (!permissions_drop(setup.users.uid, setup.users.gid, setup.users.name, setup.users.home)) returnerror();
if (!permissions_drop(setup.users.uid, setup.users.gid, setup.users.name, setup.users.home))
{
returnerror();
}
umask(setup.users.umask);
/*
* Load vbox's runtime configuration into memory and initialize
* the voice defaults.
* Load vbox's configuration into memory and initialize the voice
* defaults.
*/
if (!(setup.vboxrc = streamio_open(setup.vboxrcname)))

View File

@ -6,13 +6,20 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <ctype.h>
#include <signal.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include "libvbox.h"
@ -21,6 +28,254 @@
char *compressions[] = {
"?", "?", "ADPCM-2", "ADPCM-3", "ADPCM-4", "ALAW", "ULAW"
};
static char vboxd_message[128 + 1];
FILE *vboxd_r_stream = NULL;
FILE *vboxd_w_stream = NULL;
int vboxd_r_fd = -1;
int vboxd_w_fd = -1;
/**************************************************************************/
/** vboxd_connect(): Connect to the vbox message server. After connect **/
/** the function reads the server startup message! **/
/**************************************************************************/
/** machine String with the hostname or the ip address. **/
/** port Port number to connect. **/
/** <return> 0 on success; < 0 on error. **/
/**************************************************************************/
int vboxd_connect(char *machine, int port)
{
struct sockaddr_in sockp;
struct hostent *hostp;
struct hostent defaulthost;
struct in_addr defaultaddr;
char defaultname[256];
char *defaultlist[1];
char **p;
int c;
int s;
if (isdigit(*machine))
{
defaultlist[0] = NULL;
if (inet_aton(machine, &defaultaddr) != 0)
{
xstrncpy(defaultname, machine, 255);
defaulthost.h_name = (char *)defaultname;
defaulthost.h_addr_list = defaultlist;
defaulthost.h_addr = (char *)&defaultaddr;
defaulthost.h_length = sizeof(struct in_addr);
defaulthost.h_addrtype = AF_INET;
defaulthost.h_aliases = 0;
hostp = &defaulthost;
}
else hostp = gethostbyname(machine);
}
else hostp = gethostbyname(machine);
if (!hostp) return(VBOXC_ERR_UNKNOWNHOST);
memset((char *)&sockp, '\0', sizeof(struct sockaddr_in));
sockp.sin_family = hostp->h_addrtype;
sockp.sin_port = htons(port);
c = -1;
s = -1;
for (p = hostp->h_addr_list; ((p) && (*p)); p++)
{
s = socket(hostp->h_addrtype, SOCK_STREAM, 0);
if (s < 0) return(VBOXC_ERR_NOSOCKET);
memcpy((char *)&sockp.sin_addr, *p, hostp->h_length);
c = connect(s, (struct sockaddr *)&sockp, sizeof(struct sockaddr_in));
if (c == 0) break;
close(s);
}
if (c < 0) return(VBOXC_ERR_NOCONNECT);
vboxd_r_fd = s;
vboxd_w_fd = dup(vboxd_r_fd);
if ((vboxd_w_fd < 0) || (vboxd_r_fd < 0))
{
vboxd_disconnect();
return(VBOXC_ERR_NOFILEIO);
}
vboxd_r_stream = fdopen(vboxd_r_fd, "r");
vboxd_w_stream = fdopen(vboxd_w_fd, "w");
if ((!vboxd_r_stream) || (!vboxd_w_stream))
{
vboxd_disconnect();
return(VBOXC_ERR_NOFILEIO);
}
if (!vboxd_get_message())
{
vboxd_disconnect();
return(VBOXC_ERR_GETMESSAGE);
}
if (!vboxd_test_response(VBOXD_VAL_SERVEROK))
{
vboxd_disconnect();
return(VBOXC_ERR_GETMESSAGE);
}
return(VBOXC_ERR_OK);
}
/**************************************************************************/
/** vboxd_disconnect(): Sends "quit" and disconnect from the server. **/
/**************************************************************************/
void vboxd_disconnect(void)
{
if (vboxd_w_stream) vboxd_put_message("quit");
if (vboxd_r_stream) close_and_null(vboxd_r_stream);
if (vboxd_w_stream) close_and_null(vboxd_w_stream);
if (vboxd_r_fd != -1) close_and_mone(vboxd_r_fd);
if (vboxd_w_fd != -1) close_and_mone(vboxd_w_fd);
}
/**************************************************************************/
/** vboxd_put_message(): **/
/**************************************************************************/
void vboxd_put_message(char *fmt, ...)
{
va_list arg;
if (vboxd_w_stream)
{
va_start(arg, fmt);
fprintf(stderr, "[put] ");
vfprintf(stderr , fmt, arg);
fprintf(stderr, "\n");
vfprintf(vboxd_w_stream, fmt, arg);
fprintf(vboxd_w_stream, "\r\n");
fflush(vboxd_w_stream);
va_end(Arg);
}
}
/**************************************************************************/
/** vboxd_get_message(): Try to get a message from the server. The func- **/
/** tion us a timeout of 5 seconds to get the mess- **/
/** age. **/
/**************************************************************************/
/** <return> Pointer to the message or NULL. **/
/**************************************************************************/
char *vboxd_get_message(void)
{
struct timeval timeval;
fd_set rmask;
*vboxd_message = '\0';
if (vboxd_r_stream)
{
FD_ZERO(&rmask);
FD_SET(vboxd_r_fd, &rmask);
timeval.tv_sec = 5;
timeval.tv_usec = 0;
if (select((vboxd_r_fd + 1), &rmask, NULL, NULL, &timeval) > 0)
{
if (FD_ISSET(vboxd_r_fd, &rmask))
{
fprintf(stderr, "[get] select has data for me...\n");
if (fgets(vboxd_message, 128, vboxd_r_stream))
{
vboxd_message[strlen(vboxd_message) - 1] = '\0';
vboxd_message[strlen(vboxd_message) - 1] = '\0';
fprintf(stderr, "[get] %s\n", vboxd_message);
return(vboxd_message);
}
}
}
}
fprintf(stderr, "[get] FAILED!\n");
return(NULL);
}
/**************************************************************************/
/** vboxd_test_response(): **/
/**************************************************************************/
int vboxd_test_response(char *response)
{
if (strlen(vboxd_message) > (strlen(response) + 1))
{
if (strncmp(response, vboxd_message, strlen(response)) == 0)
{
if (vboxd_message[strlen(response)] == ' ') returnok();
}
}
returnerror();
}
/*************************************************************************/
/** get_message_ptime(): Returns the vbox message length in seconds. **/

View File

@ -7,6 +7,8 @@
#ifndef _VBOX_LIBVBOX_H
#define _VBOX_LIBVBOX_H 1
#include <stdio.h>
/** Defines **************************************************************/
#define CTRL_NAME_STOP "vboxctrl-stop"
@ -25,6 +27,37 @@
#define VAH_MAX_CALLERID (32)
#define VAH_MAX_PHONE (32)
#define VAH_MAX_LOCATION (64)
#define VHA_MAX_RESERVED_A (32)
#define VHA_MAX_RESERVED_B (64)
/** vboxd support *********************************************************/
#define VBOXD_DEF_PORT (20012) /* Default server port */
#define VBOXD_VAL_HELP "180" /* Help messages */
#define VBOXD_VAL_COUNT "181" /* Count new messages */
#define VBOXD_VAL_MESSAGE "182" /* Get a message */
#define VBOXD_VAL_HEADER "183" /* Get a message header */
#define VBOXD_VAL_LIST "184" /* List messages */
#define VBOXD_VAL_SERVEROK "280" /* Server ready */
#define VBOXD_VAL_SERVERQUIT "281" /* Server quit */
#define VBOXD_VAL_ACCESSOK "282" /* Access ok */
#define VBOXD_VAL_LOGINOK "283" /* User login ok */
#define VBOXD_VAL_ACCESSDENIED "580" /* No access */
#define VBOXD_VAL_BADARGS "583" /* Not enough or too many args */
#define VBOXD_VAL_BADPASSWD "584" /* Bad password */
#define VBOXD_VAL_BADMESSAGE "585" /* Bad message */
#define VBOXD_VAL_BADCOMMAND "586" /* Bad command */
#define VBOXD_VAL_TEMPERROR "589" /* Misc error */
#define VBOXC_ERR_OK ( 0)
#define VBOXC_ERR_UNKNOWNHOST (-1)
#define VBOXC_ERR_NOSOCKET (-2)
#define VBOXC_ERR_NOCONNECT (-3)
#define VBOXC_ERR_NOFILEIO (-4)
#define VBOXC_ERR_GETMESSAGE (-5)
#ifdef TRUE
#undef TRUE
@ -40,6 +73,8 @@
#define returnerror() return(FALSE)
#define returnok() return(TRUE)
#define printstring sprintf
#define close_and_mone(F) { close(F); F = -1; }
#define close_and_null(S) { fclose(S); S = NULL; }
/** Structures ***********************************************************/
@ -52,6 +87,10 @@ typedef struct
char name[VAH_MAX_NAME + 1];
char phone[VAH_MAX_PHONE + 1];
char location[VAH_MAX_LOCATION + 1];
char reserved1[VHA_MAX_RESERVED_A + 1];
char reserved2[VHA_MAX_RESERVED_A + 1];
char reserved3[VHA_MAX_RESERVED_B + 1];
char reserved4[VHA_MAX_RESERVED_B + 1];
} vaheader_t;
/** Variables ************************************************************/
@ -75,4 +114,24 @@ extern int header_get(int, vaheader_t *);
extern int get_nr_messages(char *, int);
extern int get_message_ptime(int, int);
extern FILE *vboxd_r_stream;
extern FILE *vboxd_w_stream;
extern int vboxd_r_fd;
extern int vboxd_w_fd;
extern int vboxd_connect(char *, int);
extern void vboxd_disconnect(void);
extern char *vboxd_get_message(void);
extern void vboxd_put_message(char *, ...);
extern int vboxd_test_response(char *);
#endif /* _VBOX_LIBVBOX_H */

View File

@ -60,8 +60,7 @@ static struct rctable rct[] =
{ "commandtimeout", &setup.modem.timeout_cmd , 0, 60000 , parse_int },
{ "alivetimeout" , &setup.modem.timeout_alive , 0, 60000 , parse_int },
{ "compression" , &setup.modem.compression , 2, 6 , parse_cmp },
{ "vboxrc" , setup.vboxrcname , 0, SETUP_MAX_VBOXRC , parse_str },
{ "vboxctrl" , setup.vboxctrl , 0, SETUP_MAX_VBOXCTRL , parse_str },
{ "vboxconfig" , setup.vboxrcname , 0, SETUP_MAX_VBOXRC , parse_str },
{ "spooldir" , setup.spool , 0, SETUP_MAX_SPOOLNAME , parse_str },
{ "freespace" , &setup.freespace , 0, 2000000000 , parse_int },
@ -84,9 +83,9 @@ int getty_get_settings(char *rcname)
log(L_DEBUG, gettext("Parsing settings in \"%s\" for port \"%s\"...\n"), rcname, setup.modem.device);
xstrncpy(setup.modem.interninita , "AT+FCLASS=8" , MODEM_MAX_INITSTRING);
xstrncpy(setup.modem.interninitb , "ATS18=1S13.2=1S13.4=1" , MODEM_MAX_INITSTRING);
xstrncpy(setup.modem.init , "ATZ" , MODEM_MAX_INITSTRING);
xstrncpy(setup.modem.interninita , "AT+FCLASS=8" , MODEM_MAX_INITSTRING);
xstrncpy(setup.modem.interninitb , "S13.2=1S13.4=1", MODEM_MAX_INITSTRING);
xstrncpy(setup.modem.init , "ATZ" , MODEM_MAX_INITSTRING);
setup.modem.toggle_dtr_time = MODEM_TOGGLETIME;
setup.modem.timeout_ring = MODEM_RINGTIMEOUT;

View File

@ -48,6 +48,8 @@ static char *pidname = NULL;
static int killmode = 0;
static time_t starttime = 0;
static int dodebug = FALSE;
static int haveconnect = FALSE;
static int downconnect = FALSE;
static struct option arguments[] =
{
@ -56,6 +58,8 @@ static struct option arguments[] =
{ "kill" , no_argument , NULL, 'k' },
{ "sound" , required_argument , NULL, 's' },
{ "messagebox" , required_argument , NULL, 'm' },
{ "machine" , required_argument , NULL, 'i' },
{ "port" , required_argument , NULL, 'o' },
{ "pause" , required_argument , NULL, 'p' },
{ "debug" , no_argument , NULL, 'x' },
{ NULL , 0 , NULL, 0 }
@ -86,18 +90,20 @@ static void usage(void);
int main(int argc, char **argv)
{
char timestrings[32];
int i;
int b;
int opts;
int checkpause;
char timestrings[32];
int i;
int b;
int opts;
int checkpause;
int port;
char *machine;
#if HAVE_LOCALE_H
setlocale(LC_ALL, "");
#endif
#if ENABLE_NLS
textdomain("vbox");
textdomain(PACKAGE);
#endif
if (!(vbasename = rindex(argv[0], '/')))
@ -125,10 +131,12 @@ int main(int argc, char **argv)
killmode = 0;
starttime = 0;
checkpause = 5;
port = VBOXD_DEF_PORT;
machine = "localhost";
b = 0;
while ((opts = getopt_long(argc, argv, "vhks:m:p:x", arguments, (int *)0)) != EOF)
while ((opts = getopt_long(argc, argv, "vhko:i:s:m:p:x", arguments, (int *)0)) != EOF)
{
switch (opts)
{
@ -152,6 +160,14 @@ int main(int argc, char **argv)
parse_sound_times(strdup(optarg), 0, 23);
break;
case 'o':
port = (int)xstrtol(optarg, VBOXD_DEF_PORT);
break;
case 'i':
machine = optarg;
break;
case 'v':
version();
break;
@ -239,21 +255,48 @@ int main(int argc, char **argv)
log(LOG_DEBUG, gettext("time range \"%s\"."), timestrings);
}
haveconnect = FALSE;
while (TRUE)
{
for (i = 0; i < MAX_MESSAGE_BOXES; i++)
downconnect = FALSE;
if (!haveconnect)
{
if (messageboxes[i].name)
if (vboxd_connect(machine, port) == VBOXC_ERR_OK)
{
messageboxes[i].time = get_newest_message_time(messageboxes[i].name);
if (messageboxes[i].time > starttime)
if (dodebug) log(LOG_DEBUG, gettext("connected to vbox message server."));
haveconnect = TRUE;
}
else log(LOG_ERR, gettext("can't connect to vbox message server."));
}
if (haveconnect)
{
for (i = 0; i < MAX_MESSAGE_BOXES; i++)
{
if (messageboxes[i].name)
{
lets_hear_the_sound();
messageboxes[i].time = get_newest_message_time(messageboxes[i].name);
break;
if (messageboxes[i].time > starttime)
{
lets_hear_the_sound();
break;
}
}
}
if (downconnect)
{
vboxd_disconnect();
if (dodebug) log(LOG_DEBUG, gettext("server connection canceled."));
haveconnect = FALSE;
}
}
xpause(checkpause * 1000);
@ -288,6 +331,8 @@ static void usage(void)
fprintf(stderr, gettext("-s, --sound HOURS Hours to signal with sound (default: no time)\n"));
fprintf(stderr, gettext("-m, --messagebox DIR Watch directory DIR for new messages.\n"));
fprintf(stderr, gettext("-p, --pause SECONDS Pause in seconds to sleep between checks (default: 5).\n"));
fprintf(stderr, gettext("-i, --machine HOST Connect to message server on HOST (default: localhost).\n"));
fprintf(stderr, gettext("-o, --port PORT Connect to message server on PORT (default: %d).\n"), VBOXD_DEF_PORT);
fprintf(stderr, gettext("-h, --help Displays this help text.\n"));
fprintf(stderr, gettext("-v, --version Displays program version.\n"));
fprintf(stderr, gettext("\n"));
@ -341,6 +386,13 @@ static void leave_program(int sig)
remove_pid_file();
free_resources();
if (haveconnect)
{
if (dodebug) log(LOG_DEBUG, gettext("disconnecting from server..."));
vboxd_disconnect();
}
if (dodebug) log(LOG_DEBUG, gettext("terminate..."));
exit(0);
@ -431,11 +483,6 @@ static int add_dir_to_messagebox(int nr, char *box)
{
messageboxes[nr].name = name;
messageboxes[nr].time = time(NULL);
if (dodebug)
{
log(LOG_DEBUG, gettext("add directory \"%s\" to watchlist..."), name);
}
returnok();
}
@ -469,34 +516,47 @@ static void free_all_messageboxes(void)
static time_t get_newest_message_time(char *box)
{
struct dirent *entry;
struct stat status;
time_t newest;
char response[128 + 1];
char *msg;
char *respcode;
char *respmsgs;
char *resptime;
DIR *dir = NULL;
time_t newest = 0;
if (chdir(box) == 0)
if (haveconnect)
{
if ((dir = opendir(".")))
newest = 0;
vboxd_put_message("count %s", box);
if ((msg = vboxd_get_message()))
{
while ((entry = readdir(dir)))
if (!vboxd_test_response(VBOXD_VAL_SERVERQUIT))
{
if (strcmp(entry->d_name, "." ) == 0) continue;
if (strcmp(entry->d_name, "..") == 0) continue;
if (stat(entry->d_name, &status) == 0)
if (vboxd_test_response(VBOXD_VAL_COUNT))
{
if (status.st_mtime > newest) newest = status.st_mtime;
xstrncpy(response, msg, 128);
respcode = strtok(response, "\t ");
respmsgs = strtok(NULL , "\t ");
resptime = strtok(NULL , "\t ");
if ((respcode) && (respmsgs) && (resptime))
{
return(xstrtol(resptime, 0));
}
else log(LOG_ERR, gettext("bad server response \"%s\"."), msg);
}
else log(LOG_ERR, gettext("bad server response \"%s\"."), msg);
}
closedir(dir);
else log(LOG_ERR, gettext("server connection lost!"));
}
else log(LOG_ERR, gettext("can't open \"%s\" (%s)."), box, strerror(errno));
}
else log(LOG_ERR, gettext("can't change to \"%s\" (%s)."), box, strerror(errno));
else log(LOG_ERR, gettext("can't get server response."));
return(newest);
downconnect = TRUE;
}
return(0);
}
/**************************************************************************/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,31 @@
#ifndef _VBOXD_H
#define _VBOXD_H 1
#include "libvbox.h" /* Contains server message id defines! */
/** Defines ***************************************************************/
#define VBOXD_LEN_ACCESSLINE 256
#define VBOXD_LEN_CMDLINE 128
#define VBOXD_LEN_ARGLIST 10
#define VBOXD_ACC_NOTHING 0 /* No access */
#define VBOXD_ACC_COUNT 1 /* Access to count messages */
#define VBOXD_ACC_READ 2 /* Access to read messages */
#define VBOXD_ACC_WRITE 4 /* Access to write messages */
#define VBOXD_ERR_OK 0
#define VBOXD_ERR_TIMEOUT 1
#define VBOXD_ERR_EOF 2
#define VBOXD_ERR_TOOLONG 3
/** Structures ************************************************************/
struct servercmds
{
char *name;
void (*func)(int, char **);
};
#endif /* _VBOXD_H */

View File

@ -411,7 +411,7 @@ int voice_get_message(char *name, char *timestr, int save)
if (!header_put(fd, &header))
{
log(L_ERROR, gettext("Can't write raw voice audio header.\n"));
log(L_ERROR, gettext("Can't write vbox audio header.\n"));
voice_close_or_unlink(fd, name);

35
vbox/utils/mkdoc Executable file
View File

@ -0,0 +1,35 @@
#! /bin/sh
##
## $Id#
##
## Create the documents from sgml source. Please *only* call this
## script from top level makefile!
SGML2TEXT="/usr/local/lib/linuxdoc-sgml/bin/sgml2txt"
SGML2HTML="/usr/local/lib/linuxdoc-sgml/bin/sgml2html"
DOCLANGS="de"
for l in ${DOCLANGS}
do
cd "${VBOX_TOPDIR}/doc/${l}"
${SGML2TEXT} -l -f vbox
if [ "$l" = "de" ]
then
${SGML2HTML} -l -L deutsch vbox
else
${SGML2HTML} -l vbox
fi
for i in *.html
do
mv $i html/$i.in
done
for i in *.txt
do
mv $i txt/$i.in
done
done

View File

@ -1,29 +1,31 @@
#! /bin/sh
##
## $Id$
##
## Script to create the misc message catalogs. This is only for development!
# Get all sources (*.c) to a variable #
GETTEXT_SOURCE_FILES=""
for i in ${TOPDIR}/src/*.c
for i in ${VBOX_TOPDIR}/src/*.c
do
GETTEXT_SOURCE_FILES="${GETTEXT_SOURCE_FILES} ${i}"
done
# Process each existing catalog #
for i in ${CATALOGS}
for i in ${VBOX_CATALOGS}
do
OLD_PO_FILE="${TOPDIR}/messages/tmp-o-${i}"
NEW_PO_FILE="${TOPDIR}/messages/tmp-n-${i}"
OLD_PO_FILE="${VBOX_TOPDIR}/messages/tmp-o-${i}"
NEW_PO_FILE="${VBOX_TOPDIR}/messages/tmp-n-${i}"
echo "Creating '${TOPDIR}/messages/${i}.po'..."
echo "Creating '${VBOX_TOPDIR}/messages/${i}.po'..."
if (test -f ${TOPDIR}/messages/${i}.po)
if (test -f ${VBOX_TOPDIR}/messages/${i}.po)
then
cp ${TOPDIR}/messages/${i}.po ${TOPDIR}/messages/backup-${i}.po
mv ${TOPDIR}/messages/${i}.po ${OLD_PO_FILE}.po
cp ${VBOX_TOPDIR}/messages/${i}.po ${VBOX_TOPDIR}/messages/backup-${i}.po
mv ${VBOX_TOPDIR}/messages/${i}.po ${OLD_PO_FILE}.po
fi
xgettext --default-domain=${NEW_PO_FILE} \
@ -32,14 +34,14 @@ do
if (test -f ${OLD_PO_FILE}.po)
then
tupdate ${NEW_PO_FILE}.po ${OLD_PO_FILE}.po >${TOPDIR}/messages/${i}.po 2>/dev/null
tupdate ${NEW_PO_FILE}.po ${OLD_PO_FILE}.po >${VBOX_TOPDIR}/messages/${i}.po 2>/dev/null
rm ${OLD_PO_FILE}.po ${NEW_PO_FILE}.po
else
mv ${NEW_PO_FILE}.po ${TOPDIR}/messages/${i}.po
mv ${NEW_PO_FILE}.po ${VBOX_TOPDIR}/messages/${i}.po
fi
echo "Creating '${TOPDIR}/messages/${i}.mo'..."
echo "Creating '${VBOX_TOPDIR}/messages/${i}.mo'..."
msgfmt --output-file=${TOPDIR}/messages/${i}.mo ${TOPDIR}/messages/${i}.po
msgfmt --output-file=${VBOX_TOPDIR}/messages/${i}.mo ${VBOX_TOPDIR}/messages/${i}.po
done

View File

@ -1,11 +1,21 @@
#! /bin/sh
##
## $Id$
##
## Please *only* call this script from top level makefile!
$SED \
-e "s;@BINDIR@;${bindir};g" \
-e "s;@VERSION@;${VERSION};g" \
-e "s;@VERDATE@;${VERDATE};g" \
-e "s;@MAILCMD@;${MAILCMD};g" \
-e "s;@SPOOLDIR@;${SPOOLDIR};g"
${SED} \
-e "s;{;\[;g" \
-e "s;};\];g" \
-e "s;@DOTS@;...;g" \
-e "s;@BINDIR@;${VBOX_BINDIR};g" \
-e "s;@SBINDIR@;${VBOX_SBINDIR};g" \
-e "s;@VERSION@;${VBOX_VERSION};g" \
-e "s;@VERDATE@;${VBOX_VERDATE};g" \
-e "s;@SPOOLDIR@;${VBOX_SPOOLDIR};g" \
-e "s;@SYSCONFDIR@;${VBOX_SYSCONFDIR};g" \
-e "s;@LOGFILEDIR@;${VBOX_LOGFILEDIR};g" \
-e "s;@PIDFILEDIR@;${VBOX_PIDFILEDIR};g" \
-e "s;@LCKFILEDIR@;${VBOX_LCKFILEDIR};g"