initial commit

This commit is contained in:
Marcus Hanisch DLM274 2019-05-15 00:19:53 +02:00
commit 6e56114b94
238 changed files with 113512 additions and 0 deletions

86
LICENSE Executable file
View file

@ -0,0 +1,86 @@
Allgemeine Lizenz für Amateurfunk Software (ALAS)
Copyright (C) 1994 NORD><LINK e.V.
Hinter dem Berge 5
D-38108 Braunschweig
Dieses Dokument darf beliebig vervielfältigt oder verteilt werden,
solange es nicht verändert wird. Für Anregungen, wie es zu verbessern ist,
bin ich dankbar. (DF2AU @ DB0FC.#NDS.DEU.EU)
1. Vorwort
Diese Lizenz entstand aus der General Public Licence der Free Software
Foundation (GPL). Ich habe versucht, den Sinn zu erhalten und mehr Klarheit
hineinzubringen. Einige Passagen sind vollständig entfallen. Es ist aber
jedem Nutzer freigestellt, an Stelle dieser Lizenz die GPL Bedingungen
anzuwenden.
Der Sinn dieser Lizenz ist es, den Autor und den Anwender der Software zu
schützen. Es sind daher einige Einschränkungen erforderlich und es entstehen
auch einige Pflichten für den, der die mit dieser Lizenz verbundene Software
weitergibt oder verändert.
Dies wird dadurch erreicht, dass die Software durch Copyright geschützt
wird und der Nutzer durch diese Lizenz die Möglichkeit einer nahezu
unbeschränkten Nutzung erhält.
2. Geltungsbereich
Diese Lizenz gilt für jedes Programm oder Teil eines Programmpaketes, das
eine Copyright Notiz ausgibt, die sich auf diese Lizenz bezieht. Im folgenden
bedeutet "Programm" entweder das Programm oder einen Teil davon.
"Du" bist der Lizenznehmer.
3. Deine Rechte:
Du darfst das Programm nutzen oder kopieren oder verteilen oder verändern,
solange Du damit keine kommerziellen Absichten verbindest.
4. Deine Pflichten:
4.1. Du darfst den Copyright Vermerk und den Hinweis auf diese Lizenz nicht
verändern und er muss bei jedem Start des Programms eindeutig für den
Benutzer sichtbar sein.
4.2. Du musst jedem Dritten, dem Du eine Kopie des Programms gibst, die
gleichen Rechte einräumen, die auch Dir gegeben wurden. Du musst ihm
auch die gleichen Pflichten auferlegen.
4.3. Du darfst für die Weitergabe kein Geld verlangen ausser den
Kosten für das Medium und Porto.
4.4. Du darfst das Programm nur komplett weitergeben, so wie Du es bekommen
hast.
4.5. Wenn Du das Programm veränderst oder Teile davon für eigene Arbeiten
verwendest - wörtlich oder verändert - so gelten die folgenden Punkte für
das daraus entstehende neue Programm:
4.5.1. Du musst deutlich sichtbar angeben:
- Deinen Namen und Deine Adresse und
- die Tatsache, dass Du das Programm geändert hast oder Teile des
Programms verwendet hast.
4.5.2. Du musst das Programm entweder mit dem kompletten Quelltext
weitergeben oder jedem auf Verlangen eine Kopie des Quelltextes gegen eine
Gebühr von maximal der Kosten des Mediums und der Portokosten aushändigen.
4.5.3. Du darfst keine Beschränkungen aussprechen, die über diese Lizenz
hinausgehen.
5. Sonstiges
Du erhälst das Programm ohne jede Garantie für Funktion, Fehlerfreiheit oder
Anwendbarkeit für eine bestimmte Sache. Du verzichtest auf jede
Schadensersatzforderung, gleich aus welchem Grunde.
Mit der Nutzung des Programms erkennst Du diese Lizenzbedingungen
vorbehaltlos an.
Vers. 1.0, 13-OCT-92
Adressen aktualisiert am 20.10.2003
Ende ALAS

97
README.TXT Executable file
View file

@ -0,0 +1,97 @@
Installationshinweise zu TNN 1.79 :
===================================
Diese Anleitung richtet sich in erster Linie an Linux-User, fuer DOS kann
ein geringfuegig anderes Vorgehen notwendig werden. Als Basisverzeichnis
dient hier in der Regel "c:\tnn".
Leider ist noch keine endgueltige Dokumentation verfuegbar, vieles ist aber
im Vergleich zur Version 1.78 gleich geblieben, Unterschiede und neue Features,
bzw. Kommandos, koennen im history-Verzeichnis nachgelesen werden, ansonsten
stellt die alte Dokumentation der Version 1.78 einen guten Leitfaden dar.
Unter GCC 3.x meldet der Compiler beim Uebersetzen des Convers einige Warnings,
diese koennen ignoriert werden.
Neuinstallation :
-----------------
1.) Archiv auspacken (z.B. in /usr/local/src/tnn) und in das Verzeichnis wechseln
Optional: Im Verzeichnis "include" die Datei "all.h" ansehen und ggf. Optionen
aktivieren oder unerwuenschte Optionen deaktivieren (auskommentieren).
2.) "make baseinstall" ausfuehren
TNN kompiliert nun und wird anschliessend in das Verzeichnis "/usr/local/tnn"
installiert. Je nach Betriebssystem werden Beispieldateien fuer die
Konfiguration hinzugefuegt. Ein normales "make" erzeugt lediglich die
ausfuehrbaren Dateien von TNN und der extrenen Programme, es findet KEINE
Installation statt !
3.) "cd /usr/local/tnn"
3.) Die Konfigurationsdateien tnn.ini, tnn179.{tnb,pas} und ax25ip.cfg
ansehen und ggf. anpassen (bei DOS nicht alle benoetigt)
4.) Dateizugriffsrechte ueberpruefen. TNN sollte root gehoeren, das Verzeichnis
in dem sich TNN befindet, sollte auch NUR fuer root zugaenglich sein !
Laeuft TNN nicht als root, so koennen einige Linuxfeatures nicht benutzt
werden !!!
5.) TNN starten ("./tnn")
6.) Am Passwortprompt mit dem Konsolenpasswort aus der Datei tnn.pas einloggen
(Standard: "Geheim")
7.) "<ESC> c <Enter>" verbindet mit der ersten Konsole
Jetzt ggf. noch im laufenden Betrieb Einstellungen vornehmen (IP, Baken,
Links, Convers etc.).
Optional:
A.) Mit dem Kommando "sp" an der TNN-Konsole die aktuelle Konfiguration
speichern wenn alle Einstellungen gemacht sind
B.) Die neue Datei "parms.tnb" sichten, ist alles korrekt, so kann diese in
"tnn179.tnb" umbenannt werden. Achtung: "parms.tnb" selber wird beim
Systemstart NICHT ausgewertet !!!
In der Datei "startup.log" befinden sich die Reaktionen auf die Verarbeitung
der einzelnen Befehle der tnn179.tnb. Hier kann im Fehlerfall ueberprueft
werden, welche Befehle nicht akzeptiert wurden.
Update von TNN Version 1.78/1.79pre? :
--------------------------------------
1.) Archiv auspacken
Optional: Optionen in "all.h" ueberpruefen und ggf. anpassen
2.) "make" oder "make install" ausfuehren. Bei letzterem wird die Verzeichnis-
struktur mit angelegt und NUR das "tnn"-Executeable kopiert.
3.) "tnn"-Executable ins TNN-Verzeichnis kopieren
4.) Optional: externe Programm in die entsprechenden Verzeichnisse kopieren
Alte Konfigurationsdateien (tnn178.tnb etc.) werden automatisch geupdated.
Auf Schreibberechtigungen des Users achten, der TNN dann startet, kann TNN die
neuen Dateien nicht erzeugen, so wird mit STANDARDEINSTELLUNGEN (!) gestartet.
Zur Sicherheit koennen die alten Dateien auch vor dem ersten Start von Hand
in die neuen Namen kopiert werden (tnn178.tnb -> tnn179.tnb etc.). Als weitere
Alternative bietet sich das "upd"-Utility an, welches nach dem Uebersetzen
ebenfalls im "bin"-Verzeichnis zu finden ist.
Update einer TNN-Version 1.77 oder aelter :
-------------------------------------------
Hier ist leider Handarbeit angesagt. Es sollte das Neuinstallations-Verfahren
durchgefuehrt werden, danach von Hand die Einstellungen (vor allem die PAR-
Sektion) uebertragen und die Bedeutung der Parameter pruefen. Alternativ kann
auch versucht werden, die alten .tnb-Dateien in die neue, laufende TNN mit dem
"run"-Kommando einzulesen ("run tnn177.tnb"), und anschliessend mittels "sp"
eine parms.tnb-Datei zur weiteren Anpassung erzeugt werden.
Noch Probleme und Fragen ? Hier kann geholfen werden :
------------------------------------------------------
* Im DL-Convers auf Kanal 170.
* Auf www.nordlink.org im "Forum", Rubrik "TNN".

10
README.md Normal file
View file

@ -0,0 +1,10 @@
# TheNetNode-CB
TheNetNode from Nordlink>&lt;, CB-Version (TNN 1.79cb53)
Version Info:
TheNetNode (Linux) (CB), Version 1.79cb53 (May 8 2019)
Copyright by NORD><LINK, free for non-commercial usage.
See www.nordlink.org for further information.
This version compiled for 16 Ports, 400 L2-Links and 200 Circuits.
*** CB-Version by DAA531, http://dig531.dyndns.org. ***

86
alas.txt Executable file
View file

@ -0,0 +1,86 @@
Allgemeine Lizenz für Amateurfunk Software (ALAS)
Copyright (C) 1994 NORD><LINK e.V.
Hinter dem Berge 5
D-38108 Braunschweig
Dieses Dokument darf beliebig vervielfältigt oder verteilt werden,
solange es nicht verändert wird. Für Anregungen, wie es zu verbessern ist,
bin ich dankbar. (DF2AU @ DB0FC.#NDS.DEU.EU)
1. Vorwort
Diese Lizenz entstand aus der General Public Licence der Free Software
Foundation (GPL). Ich habe versucht, den Sinn zu erhalten und mehr Klarheit
hineinzubringen. Einige Passagen sind vollständig entfallen. Es ist aber
jedem Nutzer freigestellt, an Stelle dieser Lizenz die GPL Bedingungen
anzuwenden.
Der Sinn dieser Lizenz ist es, den Autor und den Anwender der Software zu
schützen. Es sind daher einige Einschränkungen erforderlich und es entstehen
auch einige Pflichten für den, der die mit dieser Lizenz verbundene Software
weitergibt oder verändert.
Dies wird dadurch erreicht, dass die Software durch Copyright geschützt
wird und der Nutzer durch diese Lizenz die Möglichkeit einer nahezu
unbeschränkten Nutzung erhält.
2. Geltungsbereich
Diese Lizenz gilt für jedes Programm oder Teil eines Programmpaketes, das
eine Copyright Notiz ausgibt, die sich auf diese Lizenz bezieht. Im folgenden
bedeutet "Programm" entweder das Programm oder einen Teil davon.
"Du" bist der Lizenznehmer.
3. Deine Rechte:
Du darfst das Programm nutzen oder kopieren oder verteilen oder verändern,
solange Du damit keine kommerziellen Absichten verbindest.
4. Deine Pflichten:
4.1. Du darfst den Copyright Vermerk und den Hinweis auf diese Lizenz nicht
verändern und er muss bei jedem Start des Programms eindeutig für den
Benutzer sichtbar sein.
4.2. Du musst jedem Dritten, dem Du eine Kopie des Programms gibst, die
gleichen Rechte einräumen, die auch Dir gegeben wurden. Du musst ihm
auch die gleichen Pflichten auferlegen.
4.3. Du darfst für die Weitergabe kein Geld verlangen ausser den
Kosten für das Medium und Porto.
4.4. Du darfst das Programm nur komplett weitergeben, so wie Du es bekommen
hast.
4.5. Wenn Du das Programm veränderst oder Teile davon für eigene Arbeiten
verwendest - wörtlich oder verändert - so gelten die folgenden Punkte für
das daraus entstehende neue Programm:
4.5.1. Du musst deutlich sichtbar angeben:
- Deinen Namen und Deine Adresse und
- die Tatsache, dass Du das Programm geändert hast oder Teile des
Programms verwendet hast.
4.5.2. Du musst das Programm entweder mit dem kompletten Quelltext
weitergeben oder jedem auf Verlangen eine Kopie des Quelltextes gegen eine
Gebühr von maximal der Kosten des Mediums und der Portokosten aushändigen.
4.5.3. Du darfst keine Beschränkungen aussprechen, die über diese Lizenz
hinausgehen.
5. Sonstiges
Du erhälst das Programm ohne jede Garantie für Funktion, Fehlerfreiheit oder
Anwendbarkeit für eine bestimmte Sache. Du verzichtest auf jede
Schadensersatzforderung, gleich aus welchem Grunde.
Mit der Nutzung des Programms erkennst Du diese Lizenzbedingungen
vorbehaltlos an.
Vers. 1.0, 13-OCT-92
Adressen aktualisiert am 20.10.2003
Ende ALAS

157
contrib/makefile Executable file
View file

@ -0,0 +1,157 @@
########################################################################
# #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# *************** *************** #
# ***************** ***************** #
# *************** *************** #
# ***** ***** TheNetNode #
# ***** ***** Portable #
# ***** ***** Network #
# ***** ***** Software #
# #
# File contrib/makefile (maintained by: DF6LN) #
# #
# Copyright (C) 1998 - 2004 NORD><LINK e.V. Braunschweig #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer #
# Amateurfunk Software) as published by Hans Georg Giese (DF2AU) #
# on 13/Oct/1992; either version 1, or (at your option) any later #
# version. #
# #
# This program is distributed WITHOUT ANY WARRANTY only for further #
# development and learning purposes. See the ALAS (Allgemeine Lizenz #
# fuer Amateurfunk Software). #
# #
# You should have received a copy of the NORD><LINK ALAS (Allgemeine #
# Lizenz fuer Amateurfunk Software) along with this program; if not, #
# write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
# Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch #
# die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder #
# Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), #
# am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. #
# #
# Dieses Programm wird unter Haftungsausschluss vertrieben, aus- #
# schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres #
# koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) #
# entnehmen. #
# #
# Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- #
# funk Software) beigelegen haben, wenden Sie sich bitte an #
# NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
########################################################################
#
# Geruest fuer ein makefile in contrib/programmname mit dem das Programm
# "prg" uebersetzt werden soll, das im TNN-Unterverzeichnis userexe laufen
# soll.
#
# Das Programm soll grundsaetzlich in das Verzeichnis $(BIN) uebersetzt
# werden. Die in den anderen Makefiles verwendeten Targets duerfen nicht
# noch einmal verwendet werden. Daher werden fuer "clean", "dist", etc.
# jeweils zusaetzliche abhaengige Targets definiert, unter denen dann die
# tatsaechliche Ausfuehrung stattfindet. Folgende Targets sollten
# beruecksichtigt werden:
#
# prg - (ist durch den Programmnamen zu ersetzen) uebersetzen des
# Programms in das Verzeichnis $(BIN). Evtl. zusaetzlich
# generierte Dateien sollten im Verzeichnis des Programms
# bleiben (contrib/programmname). Das Programm kann fuer LINUX
# und / oder GO32 uebersetzt werden, oder auch fuer GO32 unter
# DOS.
#
# all - hier wird prg zusaetzlich eingetragen, so dass es bei einem
# Befehl "make" ohne zusaetzliche Parameter mit uebersetzt
# wird.
#
# clean - loeschen des compilierten Programms in $(BIN) und aller
# anderen mit den normalen Libraries neu generierbaren Files.
# Wenn spezielle Libraries benoetigt werden (z.b. von p2c),
# sind besondere Massnahmen zu ueberlegen, damit nicht etwas
# falsches geloescht wird (s. contrib/onlhelp/makefile).
#
# bigdist - (nur bei Linux) kopieren der fuer das Uebersetzen des
# Programms benoetigten Dateien in das Verzeichnis
# $(DISTDIR)/contrib/programmname - dazu gehoeren die *.c und
# *.h Dateien sowie das Makefile und evtl. weitere Dateien wie
# z.B. Hilfetexte.
#
# install - (nur fuer Linux) kopieren des fertigen Programms sowie der
# ggf. benoetigten weiteren Dateien (Hilfe etc.) in die
# passenden Verzeichnisse $(TNNDIR), $(TNNUSEREXE),
# $(TNNSYSEXE), usw. - abhaengig von der gewuenschten Funktion
#
# go32 - (nur fuer Linux) wenn das Programm in einer GO32-Version
# unter Linux uebersetzt werden kann, sollte es hier auch mit
# eingetragen werden, damit es bei einem Befehl "make go32"
# mit uebersetzt wird.
#
PRGNAM := contrib/programmname
PRGFILES := $(PRGNAM)/prg.c $(PRGNAM)/makefile
# Phony Targets eintragen, die fuer LINUX und DOS gueltig sind
.PHONY: prg prgclean
# Lokale Erweiterung eintragen fuer "all" und "clean"
all: prg
clean: prgclean
# das wird bei "make prg" tatsaechlich uebersetzt:
prg: $(BIN)/prg
# nun wirds Systemabhaengig - erstmal Linux
ifeq ($(SYSTEM), LINUX)
# Phony Targets eintragen, die nur fuer LINUX gueltig sind
.PHONY: prgdist prginstall prggo32
# Lokale Erweiterung fuer "dist" eintragen
bigdist: prgdist
# Lokale Erweiterung fuer "install" eintragen
install: prginstall
# Lokale Erweiterung fuer "go32" eintragen
go32: prggo32
# das wird bei "make prggo32" tatsaechlich uebersetzt:
prggo32: $(BIN)/prggo32
# hier wird tatsaechlich uebersetzt
$(BIN)/prg: $(PRGFILES) $(CLEANER)
$(CLEANER) $(PRG)/prg.c
$(CC) $(CFLAGS_LIN) $(PRG)/prg.c -o $@
sync
echo $@ done.
$(BIN)/prggo32: $(PRGFILES) $(CLEANER)
$(CLEANER) $(PRG)/prg.c
$(CC_GO32) $(CFLAGS_GO32) $(PRG)/prg.c -o $@
chmod 644 $@
sync
echo $@ done.
prgclean:
rm -f $(BIN)/prg $(BIN)/prggo32{,.exe} $(PRG)/*~
prgdist:
cp --parents $(PRGFILES) $(DISTDIR)
prginstall:
install -m 0700 $(BIN)/prg $(TNNUSEREXE)/prg
else
#
# Hier (fast) das gleiche fuer Dose
#
$(BIN)/prg: $(PRGFILES) $(CLEANER)
$(CLEANER) $(PRG)/prg.c
$(CC) $(CFLAGS_GO32) $(PRG)/prg.c -o $@
echo $@ done.
prgclean:
erase $(subst /,\\,$(BIN))\prg
erase $(subst /,\\,$(BIN))\prg.exe
erase $(subst /,\\,$(PRG))\*.bak
endif

126
contrib/msgmsy/makefile Executable file
View file

@ -0,0 +1,126 @@
########################################################################
# #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# *************** *************** #
# ***************** ***************** #
# *************** *************** #
# ***** ***** TheNetNode #
# ***** ***** Portable #
# ***** ***** Network #
# ***** ***** Software #
# #
# File makefile (maintained by: DG8BR) #
# #
# Copyright (C) 1998 - 2004 NORD><LINK e.V. Braunschweig #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer #
# Amateurfunk Software) as published by Hans Georg Giese (DF2AU) #
# on 13/Oct/1992; either version 1, or (at your option) any later #
# version. #
# #
# This program is distributed WITHOUT ANY WARRANTY only for further #
# development and learning purposes. See the ALAS (Allgemeine Lizenz #
# fuer Amateurfunk Software). #
# #
# You should have received a copy of the NORD><LINK ALAS (Allgemeine #
# Lizenz fuer Amateurfunk Software) along with this program; if not, #
# write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
# Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch #
# die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder #
# Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), #
# am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. #
# #
# Dieses Programm wird unter Haftungsausschluss vertrieben, aus- #
# schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres #
# koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) #
# entnehmen. #
# #
# Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- #
# funk Software) beigelegen haben, wenden Sie sich bitte an #
# NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
########################################################################
#
# Makefile fuer MSG und MSY
#
MSGMSY := contrib/msgmsy
MSGFILES := $(MSGMSY)/{ms[gy]{_lin.c,.his,.inf},msg.{usr,sys},makefile}
.PHONY: msg msy msgclean
all: msg msy
clean: msgclean
msg: $(BIN)/msg
msy: $(BIN)/msy
ifeq ($(SYSTEM), LINUX)
.PHONY: msgdist msginstall msggo32 msygo32
bigdist: msgdist
install: msginstall
go32: msggo32 msygo32
msggo32: $(BIN)/msggo32
msygo32: $(BIN)/msygo32
$(BIN)/msg: $(MSGMSY)/msg_lin.c $(MSGMSY)/makefile $(CLEANER)
$(CLEANER) $(MSGMSY)/msg_lin.c
$(CC) $(CFLAGS_LIN) $(LDFLAGS_LIN) -o $@ $(MSGMSY)/msg_lin.c
echo $@ done.
$(BIN)/msy: $(MSGMSY)/msy_lin.c $(MSGMSY)/makefile $(CLEANER)
$(CLEANER) $(MSGMSY)/msy_lin.c
$(CC) $(CFLAGS_LIN) $(LDFLAGS_LIN) -o $@ $(MSGMSY)/msy_lin.c
echo $@ done.
$(BIN)/msggo32: $(MSGMSY)/msg_lin.c $(MSGMSY)/makefile $(CLEANER)
$(CLEANER) $(MSGMSY)/msg_lin.c
$(CC) $(CFLAGS_GO32) -o $@ $(MSGMSY)/msg_lin.c
chmod 644 $@
echo $@ done.
$(BIN)/msygo32: $(MSGMSY)/msy_lin.c $(MSGMSY)/makefile $(CLEANER)
$(CLEANER) $(MSGMSY)/msy_lin.c
$(CC) $(CFLAGS_GO32) -o $@ $(MSGMSY)/msy_lin.c
chmod 644 $@
echo $@ done.
msgclean:
rm -f $(BIN)/ms[gy] $(BIN)/ms[gy]go32{,.exe} $(MSGMSY)/*~
msgdist:
cp --parents $(MSGFILES) $(DISTDIR)
msginstall:
echo $@
install -m 0700 $(BIN)/msg $(TNNUSEREXE)msg
install -m 0700 $(BIN)/msy $(TNNSYSEXE)msy
cp $(MSGMSY)/msg.{usr,sys} $(TNNMSG)
else
#
# Nun kommt Dose
#
$(BIN)/msg: $(MSGMSY)/msg_lin.c $(MSGMSY)/makefile $(CLEANER)
$(CLEANER) $(MSGMSY)/msg_lin.c
$(CC) $(CFLAGS_GO32) -o $@ $(MSGMSY)/msg_lin.c
echo $@ done.
$(BIN)/msy: $(MSGMSY)/msy_lin.c $(MSGMSY)/makefile $(CLEANER)
$(CLEANER) $(MSGMSY)/msy_lin.c
$(CC) $(CFLAGS_GO32) -o $@ $(MSGMSY)/msy_lin.c
echo $@ done.
msgclean:
erase $(subst /,\\,$(BIN))\msg
erase $(subst /,\\,$(BIN))\msy
erase $(subst /,\\,$(BIN))\msg.exe
erase $(subst /,\\,$(BIN))\msy.exe
erase $(subst /,\\,$(MSGMSY))\*.bak
endif

15
contrib/msgmsy/msg.his Executable file
View file

@ -0,0 +1,15 @@
Version gleich Datum
====================
16.01.1999
- Verteilversion
03.06.1999
- Wegen libc6(glibc2) ein "#include <errno.h>" eingebaut.
und main von "void" nach "int" umgestellt.
20.06.99
- Durch einen Fehler in der Speicherroutine konnte es unter Linux in einer
bestimmten Situation zu einem 'Segmentation fault' kommen.
Wurde abgefangen.

23
contrib/msgmsy/msg.inf Executable file
View file

@ -0,0 +1,23 @@
Hallo Sysop's,
das Paket sollte folgende Dateien beinhalten.
- msg_lin.c das Programm. MUSS als msg.exe. TNN verlangt .exe!!!!
- msg.usr die Hilfedatei
- msg.mak das Makefile
- msg.his Histo
Nach dem Kompilieren solltet Ihr eine msg.exe haben.
Bitte msg.exe in's Verzeichnis "userexe" kopieren.
Die Hilfe-Datei msg.usr bitte ins Verzeichnis "msg".
Das Verzeichnis "msg" sollte unter tnn stehen. Aber das wisst Ihr sicher.
Es wird kein Environmenteintrag benoetigt.
Das Programm erkennt wo es ist. Zwingend ist nur vorgeschrieben,
das die Hilfedatei im Verzeichniss "msg" steht!!!
Da werden auch die call.msg geschrieben.
Fehler bitte unbedingt melden!!
Bis denne Bernd DG8BR

62
contrib/msgmsy/msg.sys Executable file
View file

@ -0,0 +1,62 @@
Uebersicht zur MSY-Hilfe : 3.02
-------------------------
(MSY) C count lifetime -1
(MSY) D dir
(MSY) E erase
(MSY) G group
(MSY) L list
(MSY) S send
(MSY) V version
Detaillierte Hilfe zu MSY :
---------------------------
(MSY) C
Lifetime aller MSG's wird um 1 verringert. Dieses kann per Hand
geschehen oder sinnvollerweise mit z. B. folgendem TNB-File.
######01.TNB
============
; ;Diese File startet taeglich um 1:00 Uhr.
MSY C ;Lifetime der .MSG-File um einen Tag herrabsetzen
; ;und bei Lifetime = 0 entfernen.
(MSY) D Listet die Header aller MSG's auf.
(MSY) D -#x o. +#x
MSG's, deren LT (-) kleiner o. (+) groesser x-Tage ist.
(MSY) D -*x o. +*x
MSG's, die (-) juenger o. (+) aelter als x-Tage sind.
(MSY) D FROM
zeigt MSG-Liste sortiert nach Absender-Calls an.
Die Sortierung kann auch nach :
BYTE, DATE, TIME, LT, RETURN vorgenommen werden.
(MSY) E ALL <call>
Loescht alle MSG's von oder an <call>.
(MSY) E 3 <call>
Loescht die dritte Nachricht an <call>. Varianten sind 1-4, 2- oder -3.
(MSY) G <gruppe> +/- <call>
Fuegt/loescht <call> ein/aus <gruppe>. Zugelassen sind in einer Gruppe
maximal 50 Call's.
(MSY) L
Zeigt alle MSG-Files.
(MSY) S <call> <#x> <text>
Schreibt <text> an <call> mit Lifetime x. Hier ist eine Lifetime von
maximal 99 Tagen moeglich.
(MSY) V
Ausgabe von der Versionsnummer und dem Datum.

78
contrib/msgmsy/msg.usr Executable file
View file

@ -0,0 +1,78 @@
Uebersicht zur MSG-Hilfe : 3.04
-------------------------
(MS)G S <ZIELCALL/GRUPPE> <#lifetime> <text> sendet MSG
(MS)G R <call> <nummer> liest MSG
(MS)G L listet MSGs
(MS)G E loescht MSGs
(MS)G G <gruppe> listet Gruppen
(MS)G V zeigt Version
Detaillierte Hilfe zu MSG :
---------------------------
(MS)G S <ZIELCALL/GRUPPE> #<lifetime> <text>
Zum Erstellen einer Digimail (MSG) :
Der Message-Befehl ermoeglicht es, einem Benutzer des Knotens eine kurze
(!) Nachricht in den CTEXT zu schreiben. Beim naechsten Connect wird
diese Zeile dann bei Ihm im CTEXT erscheinen. Statt des Zielcalls kann
auch eine Zielgruppe angegeben werden. Diese ist eine Art Verteiler-
liste. Jedes Mitglied der Zielgruppe bekommt eine Kopie der Nachricht.
Die Lifetime kann, muss aber nicht, angegeben werden. Sie kann von #1 =
einem Tag bis #30 = dreissig Tage angegeben werden. Wird keine Lifetime
angegeben, so wird sie auf default = 7 Tage gesetzt. Das taegliche
Herabsetzen der Lifetime geschieht im Digi. Ist die Lifetime abgelaufen
und der Adressat ist nicht der Absender, bekommt der Absender seine MSG
mit einer Default-Lifetime von 7 Tagen zurueck. Nach dieser Zeit wird
die MSG endgueltig geloescht.
Abhaengig davon, ob das System mit einer Festplatte oder einer RAMDISK
arbeitet, kann die Nachricht bei Absturz oder Reset verloren gehen.
Beispiel: MSG S DL9GYA #10 Roland, bitte connecte mich, wenn Du zurueck
bist!
MSG S SYSOP Link nach ..... defekt?!
Letzteres wuerde die Nachricht an die OM's der Gruppe SYSOP weiter-
leiten.
Die Definition einer neuen Gruppe geschieht nur durch die Sysops. Bitte
danach fragen.
(MS)G R
Liest die eigenen MSG's aus.
(MS)G R <call>
Liest die an <call> gerichteten MSG's aus.
(MS)G R <call> 1 oder 1-3
Zusaetzlich kann noch eine Numerierung mit angegeben werden. Also
lesen der MSG 1 oder MSG 1-3.
(MS)G L
Listet die eigenen Header auf.
(MS)G E
Dieser Befehl loescht alle eigenen Digimail-Nachrichten.
(MS)G E 1-2
Dieser Befehl loescht Nr. 1-2 der eigenen Digimail-Nachrichten. Es muss
mindestens eine Zahl angegeben werden.
(MS)G E 1- <call>
Dieser Befehl loescht alle eigenen Digimail-Nachrichten die an <call>
geschickt wurden.
(MS)G G
zeigt alle vorhandenen Verteiler-Gruppen mit Call's an.
(MS)G G <gruppe>
zeigt nur die Call's in der <gruppe> an
Neue Gruppen koennen nur vom Sysop angelegt werden!
(MS)G V
Gibt Versionsnummer und -Datum aus.

950
contrib/msgmsy/msg_lin.c Executable file
View file

@ -0,0 +1,950 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File msg_lin.c (maintained by: DG8BR) */
/* */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
/*****************************************************************************
Dies ist ein Remake von MSG.PAS.
Erstellt wurde die Originalversion von DG3AAH und DF7BZ in Pascal.
Ihnen ist die Entstehung des Programmpaares MSG und MSY zuverdanken.
Da ich einige Sachen aus DF6LN's Linuxpacket fuer TNN entnommen habe,
moechte und muss ich diese Ausgabe unter ALAS stellen.
Dieses Programm ist in der Bedienung und in der Ausgabe weitestgehend
kompatibel zum Original-MSG.
Viele Gruesse Bernd DG8BR
*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <ctype.h>
#ifdef __MSDOS__
#include <dir.h>
#endif
#ifdef __GO32__
#include <unistd.h>
#endif
#ifdef __linux__
#include <errno.h>
#include <unistd.h>
#include <fnmatch.h>
#include <dirent.h>
#include <sys/stat.h>
#endif
#ifdef WIN32
#ifdef _MSC_VER
/* Wird nur im VC benoetig. */
#include <direct.h>
#endif /* MSC_VER */
#include <sys/stat.h>
#include "sys/dirent32.h"
#include "sys/fnmatch.h"
#endif /* WIN32 */
/* Definitionen */
#define MaxZeilen 200
#define MaxLT 30
#define FALSE 0
#define TRUE (!FALSE)
#define DefaultLT " 7"
#ifdef __MSDOS__
#define Seperator '\\'
#define xfindfirst findfirst
#define xfindnext findnext
#endif
#ifdef WIN32
#define MAXPATH 255
#define NAME_MAX 260
#define findfirst _findfirst
#define findnext _findnext
#define Seperator '\\'
#endif /* WIN32 */
#ifdef __linux__
#define Seperator '/'
#define MAXPATH 128 /* ist unter TC3.1 auf 80 festgelegt */
#define stricmp strcasecmp
#endif
/* Globale Variablen */
int Status; /* True, wenn procedure erfolgreich */
int Gruppe; /* True, wenn Call==Gruppe */
char Usercall[10]; /* Aufrufender des MSG-pgms */
char msgpath[MAXPATH];
char ZeitZone[5];
#ifndef WIN32
struct ffblk ffblk;
#endif /* WIN32 */
/* Prototypen */
void ListMsg (int,int,char**);
void GroupMsg ( int, char** );
void SendMsg ( int, char** );
void HelpMsg ( void );
void VerMsg ( void );
int Suche_Datei ( char* );
void Stop (char* );
int Calltest ( char* );
int speichern ( char*, char*, char* ); /* Unterfunktion von SendMsg */
/* Alles unter dem nachfolgenden ifdef __linux__ wurde aus dem TNN-Packet */
/* fuer LinuX von der NORD><LINK - Gruppe bzw. aus dem DJGPP GNU-Paket fuer */
/* DOS von D.J. Delorie entnommen. */
#if defined(__linux__) || defined(WIN32)
#ifndef WIN32
int xfindfirst (const char*, struct ffblk *, int);
int xfindnext (struct ffblk *);
void setfiletime (struct ffblk * );
#endif /* WIN32 */
char* strlwr (char*);
char* strupr (char*);
struct ffblk
{
char ff_path[MAXPATH];
char ff_find[NAME_MAX];
char ff_name[NAME_MAX];
unsigned ff_fdate;
unsigned ff_ftime;
};
#ifdef WIN32
struct ffblk ffblk;
int xfindfirst (const char*, struct ffblk *, int);
int xfindnext (struct ffblk *);
void setfiletime (struct ffblk * );
#endif /* WIN32 */
struct ftime
{
unsigned ft_tsec : 5;
unsigned ft_min : 6;
unsigned ft_hour : 5;
unsigned ft_day : 5;
unsigned ft_month : 4;
unsigned ft_year : 7;
};
/************************************************************************/
/* */
/* Als Ersatz fuer die Funktionen "findfirst" und "findnext" (bei DOS) */
/* werden die Funktionen "xfindfirst" und "xfindnext" verwendet. Hier */
/* wird nur der fuer TNN benoetigte Teil in die Struktur ffblk einge- */
/* tragen. Der zuletzt gefundene Filename muss in ffblk->ff_name erhal- */
/* ten bleiben, weil dieser beim Aufruf von "xfindnext" gesucht wird. */
/* */
/************************************************************************/
int xfindfirst(const char *pathname, struct ffblk *ffblk, int attrib)
{
char *fnpoi;
DIR *dp;
struct dirent *dirp;
int retval;
strcpy(ffblk->ff_path, pathname); /* Filename incl. Pfad */
#ifdef WIN32
fnpoi = strrchr(ffblk->ff_path, Seperator); /* Pfad angegeben? */
#else
fnpoi = strrchr(ffblk->ff_path, '/'); /* Pfad angegeben? */
#endif /* WIN32 */
if (fnpoi == NULL) /* - nein .. */
{
strcpy(ffblk->ff_find, ffblk->ff_path); /* Filename kopieren */
strcpy(ffblk->ff_path, msgpath); /* default: msgpath */
}
else /* mit Pfad */
{
if (fnpoi == ffblk->ff_path+strlen(ffblk->ff_path)) /* ohne Name */
return(-1); /* Unsinn */
strcpy(ffblk->ff_find, ++fnpoi); /* nur Filename */
*fnpoi = '\0'; /* Filename im Pfad loeschen */
}
if ((dp = opendir(ffblk->ff_path)) == NULL) /* Directory vorhanden? */
return(-1);
retval = -1; /* default: nix gefunden */
while ((dirp = readdir(dp)) != NULL) /* Eintrag vorhanden? */
{
if ((fnmatch(ffblk->ff_find, dirp->d_name,
FNM_PATHNAME|FNM_PERIOD) != 0))
continue;
strcpy(ffblk->ff_name, dirp->d_name);
setfiletime(ffblk);
retval = 0;
break;
}
closedir(dp);
return(retval);
}
/****************************************************************************/
/* */
/* Erst den zuletzt gefundenen Eintrag suchen (steht in ffblk->ff_name) */
/* und den darauffolgenden passenden Eintrag zurueckmelden. */
/* */
/****************************************************************************/
int xfindnext(struct ffblk *ffblk)
{
DIR *dp;
struct dirent *dirp;
int retval;
if ((dp = opendir(ffblk->ff_path)) == NULL)
return -1;
retval = -1; /* default: nix gefunden */
while ((dirp = readdir(dp)) != NULL)
{
if ((fnmatch(ffblk->ff_name, dirp->d_name,
FNM_PATHNAME|FNM_PERIOD) != 0))
continue;
retval = 1;
break;
}
if (retval == 1)
{
retval = -1; /* default: nix gefunden */
while ((dirp = readdir(dp)) != NULL)
{
if ((fnmatch(ffblk->ff_find, dirp->d_name,
FNM_PATHNAME|FNM_PERIOD) != 0))
continue;
strcpy(ffblk->ff_name, dirp->d_name);
setfiletime(ffblk);
retval = 0;
break;
}
}
closedir(dp);
return(retval);
}
/****************************************************************************/
/* */
/* Bei xfindfirst und xfindnext Datum und Uhrzeit im Fileblock setzen */
/* */
/****************************************************************************/
void setfiletime(struct ffblk *ffblk)
{
struct stat filestat;
struct tm *filetime;
char fn[MAXPATH];
sprintf(fn, "%s%s", ffblk->ff_path, ffblk->ff_name);
stat(fn, &filestat);
filetime = gmtime(&filestat.st_mtime);
ffblk->ff_ftime = ((filetime->tm_sec / 2) & 0x1f)
+ ((filetime->tm_min & 0x3f) << 5)
+ ((filetime->tm_hour & 0x1f) << 11);
ffblk->ff_fdate = (filetime->tm_mday & 0x1f)
+ ((filetime->tm_mon & 0x0f) << 5)
+ (((filetime->tm_year - 80) & 0x7f) << 9);
}
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
char* strlwr(char *_s)
{
char *rv = _s;
while (*_s)
{
*_s = tolower(*_s);
_s++;
}
return rv;
}
/*
String in Grossbuchstaben umwandeln - aus DJGPP GNU-Paket fuer DOS
von D.J. Delorie
*/
char *strupr(char *s)
{
char *p = s;
while (*s)
{
if ((*s >= 'a') && (*s <= 'z'))
*s += 'A'-'a';
s++;
}
return p;
}
#endif /* Linux-Teil */
/*============================================================================
VerMsg.c
============================================================================*/
#define MsgVersion "3.04"
#define MsgDatum "14.05.1997 von DF7BZ & DG3AAH"
#define MsgLinux "(20.06.99) nach 'C' portiert von DG8BR"
#ifdef WIN32
#define MsgWin32 "(17.01.04) Modifiziert fuer Win32 von DAA531 Oliver Kern."
#endif
void VerMsg ( void )
{
#ifdef WIN32
printf("\nMSG-Programm %s von %s \n%s\n%s\n",MsgVersion, MsgDatum,MsgLinux,MsgWin32);
#else
printf("\nMSG-Programm %s von %s \n%s\n",MsgVersion, MsgDatum,MsgLinux);
#endif
Status = TRUE;
}
/*============================================================================
SendMsg.c
============================================================================*/
/* Parameterreihenfolge ist:
Programmname Befehl Empfaenger (Lifetime) Nachricht Absender */
/* 1 2 3 4 5 6
0 1 2 3 4 5 */
void SendMsg ( int argc, char *argv[] )
{
int a;
char LT[3] = DefaultLT; /* LifeTime im Header einer MSG */
char buffer[80]; /* Nachrichtentext */
char dname[MAXPATH];
char name[9]; /* Gruppen oder Empfeangername */
FILE *fp; /* Empfaenger-Dateizeiger */
a = 2; /* Empfangscall */
sscanf (argv[a], "%s", &(*name)); /* Empfaenger feststellen */
if ( Calltest(name) == FALSE)
Stop("Fehler im Empfaengerrufzeichen.");
a++; /* Lifetime oder Nachricht */
if(argv[a][0] == '#') /* Lifetime vorhanden? */
{
strcpy (LT,&(argv[a][1])); /* Lifetime */
if (( atoi(LT) < 1 ) || (atoi(LT) > MaxLT))
{
printf("ACHTUNG ! Lifetime muss zwischen 1 und %d sein!\n\n",MaxLT);
strcpy(LT,DefaultLT);
}
a++; /* Nur wenn lifetime da war */
}
buffer[0] = ' '; /* Nachricht einruecken. Sieht doch besser aus */
buffer[1] = '\0';
for(;a < argc-1; a++) /* die komplette Nachricht einlesen */
{
sprintf (buffer+(char)strlen(buffer),"%s ", argv[a]);
}
if(buffer[1] == '\0') /* wenn nix dann mecker */
Stop("Nachricht fehlt !");
buffer[strlen(buffer)-1] = '\n'; /* return einfuegen */
a = 0; /* wird noch benoetigt */
/*--------------------------------------------------------------------------*/
if ( Gruppe == TRUE ) /* wird in Calltest geprueft */
{
sprintf(dname,"%s%s.mbr",msgpath,name);
/* Gruppendatei oeffnen */
if((fp = fopen(dname,"rt")) == NULL)
{
sprintf(dname,"Fehler #S1 Konnte die Datei %s nicht oeffnen.",name);
Stop(dname);
}
while(!feof(fp))
{
*name = '\0';
fscanf(fp,"%s",&(*name));
if(name[0] != '\0') /* fscanf findet trotz feof was */
{
strlwr(name);
speichern(LT,name,buffer);
a = TRUE;
}
}
fclose(fp);
}
else
a = speichern(LT,name,buffer); /* Speichern ohne Gruppe */
if (a == TRUE)
{
printf("\nInhalt der Nachricht :\n"); /* das bekommen alle */
printf("----------------------\n");
printf("%s",buffer);
}
Status = TRUE;
}
/*--------------------------------------------------------------------------*/
int speichern (char *LT,char *name,char *buffer)
{
int a = 0; /* Nachrichtenzaehler */
int b = 0; /* Umspeicherzaehler */
int ist = 0; /* Flag fuer eingefuegte Nachricht. */
char dname[MAXPATH];
char MsgZeit[40];
char Nachricht[MaxZeilen][80];
char Zbuffer[80]; /* Zwischenbuffer beim umspeichern */
char Datum[9];
FILE *fp;
time_t t;
struct tm *ts;
char *Tage[] = { "Sun", "Mon", "Thu", "Wed", "Thu", "Fri", "Sat" };
time(&t);
ts = localtime(&t);
sprintf(Datum,"%02d.%02d.%02d",ts->tm_mday,ts->tm_mon +1,ts->tm_year%100);
sprintf(MsgZeit,"Time: %s, %s / %02d:%02dZ",Tage[ts->tm_wday],
Datum,
ts->tm_hour,
ts->tm_min);
sprintf(dname,"%s%s.msg",msgpath,name);
strupr(name); /* nun wird name nur noch GROSS gebraucht */
if ((fp = fopen(dname,"rt")) == NULL) /* Datei vorhanden? */
{
if((fp = fopen(dname,"wt")) == NULL) /* Nein, schreibend oeffnen */
{
printf("Fehler beim Oeffnen von %s !\n",dname);
return(FALSE);
}
fprintf(fp,"\nMessage from %-6s - %s Lifetime %2s\n%s",
Usercall,MsgZeit,LT,buffer);
fclose(fp);
}
else /* Datei ist da. Alles einlesen und aktuelle Nachricht einschieben */
{
fgets(Nachricht[a], 79,fp);
while(!feof(fp))
{
if(strstr(Nachricht[a],"Message from ")) /* Kopfzeile von MSG */
{
if( strstr(Nachricht[a],Usercall)) /* hat er schon eine von call? */
{ /* und auch von heute ? */
if(strstr(Nachricht[a],Datum) && !strstr(Nachricht[a],"RETURN"))
{ /* LT aus Datei nehmen */
if(Gruppe == FALSE) /* Bei Gruppe die LT ueberschreiben */
strncpy(LT,strstr(Nachricht[a],"Lifetime ")+9,2);
else /* sonst LT uebernehmen */
{
strncpy (strstr(Nachricht[a],"Lifetime ")+9,LT,2);
}
fgets(Nachricht[++a],79,fp); /* 1 String kommt auf jeden Fall */
do
{
if(fgets(Zbuffer,79,fp)) /* kommt noch mehr */
{
if(strstr(Zbuffer,"Message from "))
break; /* Nee. War nur eine Zeile */
strcpy(Nachricht[++a],Zbuffer); /* sonst kopieren */
}
else /* sicherheitshalber leer machen */
*Zbuffer = '\0';
}
while(!feof(fp));
strcpy(Nachricht[++a],buffer); /* aktuelle Nachricht einfuegen */
if(Zbuffer[0] != '\x0') /* die geholte Zeile auch einfuegen */
strcpy(Nachricht[++a],Zbuffer);
ist = TRUE; /* habe eingefuegt */
}
}
}
a++;
fgets(Nachricht[a], 79,fp);
}
fclose(fp);
if ( a >= MaxZeilen )
{
printf("%s hat zuviele Nachrichten ! Nichts gespeichert!\n",name);
return(FALSE); /* Speichertext wird nicht ausgegeben */
}
unlink(dname);
if ((fp = fopen(dname,"wt")) == NULL)
Stop("Fehler #S2 Problem beim Zurueckschreiben der Datei!");
while (b < a)
{
fprintf(fp,"%s",Nachricht[b++]);
}
if(ist == FALSE) /* habe nicht eingefuegt, also anhaengen */
fprintf(fp,"Message from %-6s - %s Lifetime %2s\n%s",
Usercall,MsgZeit,LT,buffer);
fclose(fp);
}
printf("MSG wurde fuer %-6s mit einer Lifetime von %s Tag(en)"
" gespeichert.\n",name,LT);
return(TRUE); /* war alles richtig */
}
/*============================================================================
ListMsg.c
============================================================================*/
/* Parameterreihenfolge ist: Programmname Befehl von-bis Rufzeichen Usercall
Argument(argv) 0 1 2 3 4
Argument(argc) 1 2 3 4 5
Argument 2 (von-bis) und 3 (Rufzeichen) sind optional.
Wenn 2 nicht angegeben, dann alles ausgeben.
Wenn 3 angegeben, beim Loeschen pruefen ob Usercall der Absender war ?
Ansonsten ist es egal was fuer ein Call angegeben wurde!
*/
void ListMsg (int Befehl,int argc,char *argv[])
{
int von = 1; /* Nur Nachricht von * ausgeben. 1 = default */
int bis = 99; /* Nur Nachricht bis * ausgeben. 99 = default */
int Nr = 0; /* Nummer der Nachricht. Von 1 bis MaxZeilen */
int a;
int aus; /* es wurde was ausgegeben, also nicht speichern */
int seine = 0; /* user's eigene MSG */
int Ruecknr; /* wieviel Zeilen noch zurueckgeschreiben */
char trenner = '\0'; /* wird nur fuer sscanf benoetigt */
char AnzNr[3] = "00"; /* Das wird ausgegeben. */
char dname[MAXPATH]; /* Pfad und Dateiname */
char name[7]; /* Dateiname */
char Nachricht[MaxZeilen][80];
FILE *fp;
*name = '\0'; /* erstmal den Namen weg */
/*----------------------------------------------------------------------------
von-bis und eventuell das call pruefen.
----------------------------------------------------------------------------*/
if (argc == 4 || argc == 5) /* Nummer und/oder Call */
{
for ( a = 2; a < argc-1; a++)
{
if((isdigit(argv[a][0])) != FALSE)
Nr = sscanf(argv[a],"%02d%c%02d",&von, &trenner, &bis);
if (Nr == 1) /* wenn nur eine Zahl eingegeben wurde. */
bis = von;
if((argv[a][0] == '-') == TRUE)
Nr = sscanf (argv[a],"%c%02d",&trenner, &bis);
if (Nr == 0) /* Argument ein Call */
sscanf(argv[a],"%s",&(*name));
Nr = 0; /* name nach von-bis wird nicht gefunden, wenn Nr gesetzt */
}
if( von > bis ) /* Ev. sollte man das einfach verbessern */
Stop("Ende liegt vor Anfang!");
}
if(*name == FALSE) /* wenn kein Call angegeben wurde */
{
strcpy(name,Usercall); /* Sind seine MSG's */
}
else
{
if (Calltest(name) == FALSE) /* Gucken ob der User richtig schreiben */
Stop("Das angegebene Rufzeichen ist ungueltig !"); /* Sonst Mecker */
}
/*--------------------------------------------------------------------------*/
strlwr(name);
sprintf(dname,"%s%s.msg",msgpath,name);
strupr(name);
Nr = 0;
if ((fp = fopen(dname,"rt")) == NULL)
{
printf("Keine MSG fuer %s gefunden.\n",name);
exit(0);
}
printf("\n%s :\n",name); /* Empfaenger der Nachricht ausgeben */
while(!feof(fp)) /* erstmal alles lesen */
{
if((fgets(Nachricht[Nr],79,fp)) != NULL)
{
if (Nachricht[Nr][0] == 0x0A) /* LF-Return, */
continue; /* naechste Zeile einlesen. */
Nr++;
}
if ( Nr > MaxZeilen ) /* Sollte nie vorkommen !! */
{
fclose(fp);
sprintf(dname,"Fehler #L1 %s ist zu gross! ",ffblk.ff_name);
Stop(dname);
}
}
fclose(fp);
/*----------------------------------------------------------------------------
Die gewuenschten Nachrichten ausgeben und wenn geloescht werden soll, die
entsprechenden Zeilen markieren.
----------------------------------------------------------------------------*/
aus = 0;
Ruecknr = Nr;
for (a = 0; a < Nr; a++)
{
if(strstr(Nachricht[a],"Message from ")) /* Kopfzeile von MSG */
{
if ( AnzNr[1] == '9' ) /* wenn 9 dann auf 0 setzen und das */
{ /* vorherige Byte auf 1 */
AnzNr[0]++;
AnzNr[1] = '0';
}
else
AnzNr[1]++; /* wenn nicht, dann nur erhoehen */
aus++; /* zaehlt die nachrichtennummern */
if(( aus >= von) && ( aus <= bis) == TRUE)
{
if (Befehl == 'e') /* feststellen ob es seine oder ob von ihm */
{
if(!stricmp(name,Usercall) || strstr(Nachricht[a],Usercall))
{
printf("MSG %s: %s",AnzNr,Nachricht[a]);
*Nachricht[a] = '\0'; /* Loeschen markieren */
Ruecknr--;
seine = TRUE; /* fuer den Nachrichteninhalt */
}
else
seine = FALSE;
}
if(Befehl == 'r' || Befehl == 'l')
printf("MSG %s: %s",AnzNr,Nachricht[a]);
}
}
else /* ist kein Nachrichtenkopf */
{
if(( aus >= von) && ( aus <= bis) == TRUE) /* aber gueltige Nummer */
{
if( Befehl == 'e' && seine == TRUE)
{
printf("%s",Nachricht[a]);
*Nachricht[a] = '\0';
Ruecknr--;
}
if(Befehl == 'r')
printf("%s",Nachricht[a]);
}
}
}
/*----------------------------------------------------------------------------
Und nun wird geloescht.
----------------------------------------------------------------------------*/
if(Befehl == 'e')
{
if(Ruecknr == 0) /* ist nix mehr zum zurueckschreiben */
unlink(dname);
else
{
unlink(dname);
if ((fp = fopen(dname,"wt")) == NULL)
{
Stop("Fehler #L2 Fehler beim Zurueckschreiben der Datei!");
}
for (a = 0; a < Nr; a++)
{
if(*Nachricht[a] != '\0')
fprintf(fp,"%s",Nachricht[a]);
}
fclose(fp);
}
if(Ruecknr < Nr) /* wenn ja, dann wurde was geloescht. */
printf("\nDiese MSG('s) wurde(n) soeben geloescht!\n");
else
printf("\nEs wurde nichts geloescht!\n");
}
Status = TRUE;
}
/*============================================================================
HelpMsg.c
============================================================================*/
void HelpMsg ( void )
{
char filename[MAXPATH];
FILE *fp;
sprintf(filename,"%smsg.usr",msgpath);
if (( fp = fopen(filename,"rt")) == NULL)
{
Stop("Fehler #H1 Konnte Hilfedatei nicht oeffnen.");
}
while (!feof(fp))
{
if((fgets(filename,79,fp)) != NULL)
printf("%s",filename);
}
fclose (fp);
Status = TRUE;
}
/*============================================================================
GroupMsg.c
============================================================================*/
/* Parameterreihenfolge ist: Programmname Befehl Gruppe Usercall
Argument(argv) 0 1 2 3
Argument(argc) 1 2 3 4
Wobei Gruppe optional ist. Wenn keine Gruppe angegeben wurde, dann alle
Gruppen auflisten.
*/
void GroupMsg ( int argc, char *argv[] )
{
int a;
int gefunden;
char dname[MAXPATH];
FILE *fp;
if(argc == 3)
sprintf(dname,"%s*.mbr",msgpath);
if(argc == 4)
sprintf(dname,"%s%s.mbr",msgpath,strlwr(argv[2]));
if(argc > 4)
Stop("Zuviele Parameter !");
gefunden = xfindfirst( dname, &ffblk, 0);
if (gefunden != FALSE) /* wenn nicht gefunden, dann meckern */
Stop("Gruppe nicht gefunden...");
printf("\n");
while (!gefunden)
{
sprintf(dname,"%s%s",msgpath,ffblk.ff_name);
if (( fp = fopen(dname,"rt")) == NULL)
Stop("Fehler #G1 Konnte Datei nicht oeffnen.");
strcpy(dname,ffblk.ff_name);
dname[strlen(dname)-4] = '\0'; /* Standard IMMER .EXT */
printf("%s :\n",strupr(dname));
for(a = strlen(dname)+2;a > 0;a--) /* Laenge des Gruppennamens */
{
printf("-"); /* unterstreichen */
}
printf("\n"); /* und dann ..... return !!! */
do /* Datei ausgeben */
{
fgets(dname,79,fp);
printf("%s",dname);
*dname = '\0';
}
while (!feof(fp));
printf("\n");
fclose (fp);
gefunden = xfindnext(&ffblk);
}
Status= TRUE;
}
/*============================================================================
MSG_LIN.C
============================================================================*/
/*--------------------------------------------------------------------------*/
void Stop(char *S)
{
if (strchr(S, '#')) /* Systemfehler */
{
printf("\n%s\n", S);
printf("Bitte Beschreibung des Fehlers an Sysop schicken !\n");
}
else
{
if (strchr(S, '!')) /* Bedienungsfehler */
{
printf("\n%s\n", S);
printf("Bitte Hilfe anfordern mit 'MSG H'.\n");
}
else
{
printf("\n%s\n", S); /* nur ne dumme Bemerkung */
}
}
exit(0);
}
/*--------------------------------------------------------------------------*/
int Calltest( char *Call )
{
int falschesZ, Zahl, i, a;
char dname[MAXPATH];
Zahl = 0;
falschesZ = 0; /* falsches Zeichen */
if(!Gruppe)
{
if (strchr(Call, '-') > (char *)NULL)
*(char *) (strchr(Call, '-')) = '\0';
}
a = strlen(Call);
for (i = 0; i < a; i++) /* AeAe pruefen ob Zeichen in Call Ok AeAe */
{
Call[i] = tolower(Call[i]); /* fuer die Ascii-Ausgabe */
/* Ae alle Zeichen die in der ASCII-Tabelle ueber Z, zwischen 9 und A
sowie unter 0 liegen, machen Call ungueltig ! Ae */
if (isdigit(Call[i]))
Zahl++;
if (Call[i] > 'z')
falschesZ++;
if (Call[i] < 'a' && Call[i] > '9')
falschesZ++;
if (Call[i] < '0')
falschesZ++;
}
sprintf(dname,"%s%s.mbr",msgpath,Call); /* auch auf Gruppe testen, erspart*/
if ((xfindfirst (dname, &ffblk,0)) == 0) /* einwenig Arbeit */
Gruppe = TRUE;
if (!Gruppe && (strlen(Call) < 4 || strlen(Call) > 6 || Zahl < 1
|| Zahl > 2 || falschesZ > 0))
return(TRUE);
return(TRUE);
}
/*--------------------------------------------------------------------------*/
int main ( int argc, char *argv[] )
{
char hilfstring[MAXPATH];
char Call[11];
char Befehl = '\0'; /* Befehl ist argv[1] */
char *fnpoi;
Status = FALSE; /* ist immer FALSE, muss von der Funktion gesetzt werden */
*msgpath = '\0';
if (getcwd(msgpath,MAXPATH)== NULL) /* Wo sind wir denn? */
{
printf("\nKonnte Pfad nicht ermmitteln!\n");
exit(0);
}
if(*(fnpoi = msgpath + strlen(msgpath)) != Seperator) /* / oder \\ dran ? */
*fnpoi++ = Seperator;
strcat(fnpoi, "msg"); /* Hier sollten immer MSG`s unter TNN sein !!! */
*(fnpoi+3) = Seperator; /* msgpath ist nun festgelegt */
sprintf ( hilfstring,"%smsg.usr",msgpath); /* Hilfedatei da ?? */
if (xfindfirst( hilfstring, &ffblk, 0) != FALSE)
Stop ( "\nFehler #M1 Fehler im MSGPATH ! Hilfe-Datei nicht gefunden !" );
if (argc < 3)
Stop("\nEs wurde kein Befehl angegeben !");
if ( strlen(argv[1]) > 1 )
Stop( "\nDer Befehl wird nur mit dem Anfangsbuchstaben angegeben !");
else
Befehl = tolower( argv[1][0] );
strcpy(Call, argv[argc - 1]); /* Absender ermitteln */
if(Calltest(Call) == FALSE) /* und pruefen ob es ein call ist */
Stop("\nFehler in Deinem Rufzeichen !?");
else
strcpy ( Usercall, Call);
strupr(Usercall);
printf("\nDigimail fuer TheNetNode!\n");
switch (Befehl)
{
case 'e':
case 'l':
case 'r': ListMsg(Befehl,argc,argv);
break;
case 's': if ( argc < 4 )
Stop("Zuwenig Parameter!\n");
else
SendMsg(argc,argv);
break;
case 'g': GroupMsg(argc,argv);
break;
case 'h': HelpMsg();
break;
case 'v': VerMsg();
break;
default: sprintf(hilfstring, "Befehl %c ungueltig !", Befehl);
Stop(hilfstring);
break;
}
if (!Status)
{
sprintf(hilfstring, "#Fehler bei Ausfuehrung des '%c'-Befehls !",Befehl);
Stop(hilfstring);
}
return(0);
}

41
contrib/msgmsy/msy.his Executable file
View file

@ -0,0 +1,41 @@
Version gleich Datum
====================
16.01.99
- 2 Testversionen an DB0CEL und DB0UHI verteilt. Aber ohne MSY D XXX.
- Kommt der Hinweis"Nicht implementiert."
25.02.99
- Fehler in GroupSys entfernt. Hat in der 1.ten Zeile nur 10 statt 11 Calls
- geschrieben. Ist beim Loeschen eines Calls aufgefallen.
01.03.99
- Fehler in GroupSys entfernt. Beim Call setzen oder loeschen wurde die
- Gruppe kleingeschrieben ausgegeben.
04.03.99
- in 2 Funktionen wurde auf das Fehlen von Dateien falsch reagiert.
- Nun nicht mehr Stop, sondern Meldung und exit
18.03.99
- Nun ist das entgueltige Version fertig.
30.04.99
- Bei der Linuxversion wurde bei der CHECK-Funktion nur eine! Datei im der
Lifetime verringert.
xfindnext erwartet das die Datei, die in ffblk steht, existiert.
Ich hatte sie gerade geloescht :-((
Wurde gerichtet.
02.05.99
- Bei der Linux-Version konnte man mehrmals am Tag die Checkfunktion aufrufen.
Sollte aber nur einmal am Tag ausfuehrbar sein.
Die Dateizeit und Systemzeit passten nicht. Es fehlte 1 Monat bei der Datei-
Zeit..
- In setfiletime beim Monat eine 1 hinzuaddiert.
20.06.99
- Durch einen Fehler in der Speicherroutine konnte es unter Linux in einer
bestimmten Situation zu einem 'Segmentation fault' kommen.
Wurde abgefangen.
- Ein 'toupper' in 'tolower' geaendert. Sollte ein paar Byte sparen.

26
contrib/msgmsy/msy.inf Executable file
View file

@ -0,0 +1,26 @@
Hallo Sysop's,
das Paket sollte folgende Dateien beinhalten.
- msy_lin.c das Programm. MUSS als msy.exe TNN verlangt .exe!!!
- msg.sys die Hilfedatei
- msy.his Histo
- msy.mak Makefile
Nach dem Kompilieren solltet Ihr eine msy.exe haben.
Bitte msy.exe in's Verzeichnis "sysexe" kopieren.
Die Hilfe-Datei msg.sys bitte ins Verzeichnis "msg".
Das Verzeichnis "msg" sollte unter tnn stehen. Aber das wisst Ihr sicher.
Es wird kein Environmenteintrag benoetigt.
Das Programm erkennt wo es ist. Zwingend ist nur vorgeschrieben,
das die Hilfedatei im Verzeichniss "msg" steht!!!
Da werden auch die call.msg geschrieben.
Eventuell solltet Ihr Euch eine TNB schreiben. Ist in msg.sys beschrieben.
Fehler bitte unbedingt melden!!
Bis denne Bernd DG8BR

1725
contrib/msgmsy/msy_lin.c Executable file

File diff suppressed because it is too large Load diff

87
contrib/onlhelp/makefile Executable file
View file

@ -0,0 +1,87 @@
########################################################################
# #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# *************** *************** #
# ***************** ***************** #
# *************** *************** #
# ***** ***** TheNetNode #
# ***** ***** Portable #
# ***** ***** Network #
# ***** ***** Software #
# #
# File contrib/onlhelp/makefile (maintained by: DF6LN) #
# #
# Copyright (C) 1998 - 2004 NORD><LINK e.V. Braunschweig #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer #
# Amateurfunk Software) as published by Hans Georg Giese (DF2AU) #
# on 13/Oct/1992; either version 1, or (at your option) any later #
# version. #
# #
# This program is distributed WITHOUT ANY WARRANTY only for further #
# development and learning purposes. See the ALAS (Allgemeine Lizenz #
# fuer Amateurfunk Software). #
# #
# You should have received a copy of the NORD><LINK ALAS (Allgemeine #
# Lizenz fuer Amateurfunk Software) along with this program; if not, #
# write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
# Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch #
# die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder #
# Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), #
# am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. #
# #
# Dieses Programm wird unter Haftungsausschluss vertrieben, aus- #
# schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres #
# koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) #
# entnehmen. #
# #
# Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- #
# funk Software) beigelegen haben, wenden Sie sich bitte an #
# NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
########################################################################
#
# Makefile fuer help
#
ifeq ($(SYSTEM), LINUX)
HELP := contrib/onlhelp
HELPFILES := $(HELP)/oh.c $(HELP)/makefile
HELPTEXT := $(HELP)/ohs.txt $(HELP)/ohu.txt
.PHONY: help helpclean helpdist helpinstall
all: help
clean: helpclean
bigdist: helpdist
install: helpinstall
help: $(BIN)/help
$(BIN)/help: $(HELP)/help
cp $(HELP)/help $@
echo $@ done.
$(HELP)/help: $(HELPFILES) $(CLEANER)
$(CLEANER) $(HELP)/oh.c
$(CC) -pipe $(HELP)/oh.c $(LDFLAGS_LIN) -o $@
sync
echo $@ done.
helpclean:
rm -f $(BIN)/help $(HELP)/*~ $(HELP)/help
helpdist:
cp --parents $(HELPFILES) $(HELPTEXT) $(DISTDIR)
helpinstall: $(BIN)/help
echo $@
install -m 0700 $(BIN)/help $(TNNUSEREXE)help
cd $(TNNSYSEXE); ln -sf $(TNNUSEREXE)help syshelp
cp $(HELPTEXT) $(TNNDIR)
endif

404
contrib/onlhelp/oh.c Executable file
View file

@ -0,0 +1,404 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File contrib/onlhelp/oh.c (maintained by: DL1XAO) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
#ifdef WIN32
#define MODI "(01.08.04) Modifiziert fuer Win32 von DAA531 Oliver Kern."
#endif
#define VERSION "1.1"
#define VDATUM "Mar 01 2000"
char *helpfn;
char *idxfn;
char progname[128];
#if defined(WIN32) && defined(_MSC_VER)
int strcasecmp(const char *Sstr, const char *Dstr)
{
char _Sstr[255];
char _Dstr[255];
if ( (Sstr == NULL)
||(Dstr == NULL))
return(1);
strcpy(_Sstr, Sstr);
strcpy(_Dstr, Dstr);
strupr(_Sstr);
strupr(_Dstr);
if (strcmp(_Sstr, _Dstr) == 0)
return(0);
else
return(1);
}
int strncasecmp(const char *Sstr, const char *Dstr, int len)
{
char _Sstr[255];
char _Dstr[255];
if ( (Sstr == NULL)
||(Dstr == NULL))
return(1);
strcpy(_Sstr, Sstr);
strcpy(_Dstr, Dstr);
strupr(_Sstr);
strupr(_Dstr);
if (strncmp(_Sstr, _Dstr, len) == 0)
return(0);
else
return(1);
}
#endif /* WIN32 */
int gettopic(char *in, char *topic) /* prueft auf Zeile mit Befehl*/
{
if (*in == '(' && strchr(in, ')')) {
sscanf(in, "%s", topic);
if (strstr(in, "externer Befehl"))
return 2;
return 1;
}
return 0;
}
void getcmd(char *cmd) /* liest den Befehl ohne Klammern */
{
char *cp = cmd;
if (*cmd == '(')
cmd++;
while (*cmd && *cmd != ')')
*cp++ = *cmd++;
if (*cmd == ')')
cmd++;
while (*cmd)
*cp++ = *cmd++;
*cp = '\0';
}
int genindex(void) /* legt Index-File an */
{
FILE *fpt, *fpi;
char in[128], c_cmd[32], tmp[32];
#ifdef WIN32
int state,
i,
lines = 0;
#else
int state, i, lines;
#endif /* WIN32 */
long pos;
if ((fpt = fopen(helpfn, "r")) == NULL) {
puts("Konnte Hilfedatei nicht oeffnen.");
return 0;
}
if ((fpi = fopen(idxfn, "w")) == NULL) {
puts("Konnte Index nicht anlegen.");
fclose(fpt);
return 0;
}
state = 1;
pos = 0;
while (fgets(in, 120, fpt) != NULL) {
if (state == 1) { /* fetch version */
if (!strncmp(in, "TNN-Doku-Version", 16)) {
fprintf(fpi, "%s", in);
state++;
}
}
else if (state == 2) { /* fetch first topic */
if ((i = gettopic(in, tmp)) != 0) {
fprintf(fpi, "%s %d %ld ", tmp, i - 1, pos);
strcpy(c_cmd, tmp);
lines = 1;
state++;
}
}
else if (state == 3) { /* fetch next topics */
if ( (i = gettopic(in, tmp)) != 0
&& strcasecmp(c_cmd, tmp)) {
fprintf(fpi, "%d\n%s %d %ld ", lines, tmp, i - 1, pos);
strcpy(c_cmd, tmp);
lines = 1;
}
else
lines++;
}
pos = ftell(fpt);
}
fprintf(fpi, "%d\n", lines);
fclose(fpt);
fclose(fpi);
return 1;
}
int checkindex(void) /* prueft, ob Indexfile neu angelegt werden muss */
{
struct stat statbuf1, statbuf2;
if (stat(helpfn, &statbuf1)) {
puts("Hilfe-Datei fehlt. Bitte Sysop verstaendigen !");
return 0;
}
if (stat(idxfn, &statbuf2))
statbuf2.st_ctime = 0;
if (statbuf1.st_ctime > statbuf2.st_ctime) {
puts("Generiere Index.");
return genindex();
}
return 1;
}
void overview(void) /* Alle Befehle in der Uebersicht */
{
FILE *fpi;
char in[128], cmd[32];
int left, ext, lines;
long pos;
if ((fpi = fopen(idxfn, "r")) != NULL) {
puts("Programm-"VERSION" vom "VDATUM" by DL1XAO");
fgets(in, 100, fpi);
printf("%s", in);
#ifdef WIN32
puts(""MODI"\n");
#endif
puts("\nFolgende Befehle sind laut Dokumentation verfuegbar :");
puts("\nBefehl Hilfe-Seiten Befehl Hilfe-Seiten");
left = 1;
while (fgets(in, 120, fpi) != NULL) {
sscanf(in, "%s %d %ld %d\n", cmd, &ext, &pos, &lines);
lines = (lines + 18) / 20;
printf("%-15s%s", cmd, ext ? "(extern) " : " ");
if (left)
printf("%2d ", lines);
else
printf("%2d\n", lines);
left = 1 - left; /* Seitenwechsel */
}
puts("\nExterne Befehle sind nicht bei jedem Digi vorhanden !");
fclose(fpi);
}
}
/* Topic im Index suchen */
int findtopic(char *topic, char *fcmd, long *pos, int *lines)
{
FILE *fpi;
char in[128], cmd[32];
int ext;
if ((fpi = fopen(idxfn, "r")) != NULL) {
fgets(in, 100, fpi);
while (fgets(in, 120, fpi) != NULL) {
sscanf(in, "%s %d %ld %d\n", cmd, &ext, pos, lines);
strcpy(fcmd, cmd);
getcmd(cmd);
if (!strncasecmp(topic, cmd, strlen(topic))) {
fclose(fpi);
return 1;
}
}
fclose(fpi);
}
return 0;
}
void showhelp(char *topic, int startpage) /* Hilfe zu topic anzeigen */
{
FILE *fpt;
char in[128], cmd[32] ,*cp;
int lines, pages, n;
long pos;
if (!findtopic(topic, cmd, &pos, &lines)) {
printf("Keine Hilfe zu %s gefunden.\n", topic);
return;
}
pages = (lines + 18) / 20;
if (startpage > pages) {
printf("Keine Seite %d zu %s vorhanden.\n", startpage, topic);
return;
}
if ((fpt = fopen(helpfn, "r")) != NULL) {
fseek(fpt, pos, SEEK_SET);
if (startpage == -1) { /* display all */
while (lines && fgets(in, 120, fpt) != NULL) {
printf("%s", in);
lines--;
}
}
else { /* show one page */
fgets(in, 120, fpt);
lines--;
if ((cp = strchr(in, '\n')) != NULL)
*cp = '\0';
printf("%-70.70s Seite %d\n", in, startpage);
n = (startpage - 1) * 20; /* skip n lines */
while (n-- && fgets(in, 120, fpt) != NULL)
lines--;
n = (lines > 20) ? 20 : lines;
while (n-- && fgets(in, 120, fpt) != NULL) { /* show page */
printf("%s", in);
lines--;
}
if (lines)
printf("Weiter mit \'%s %s %d\'\n", progname, topic, startpage + 1);
else
printf("Ende Hilfe zu %s!\n", cmd);
}
fclose(fpt);
}
}
void sysopcheck(char *pname) /* sind wir SYSHELP ? */
{
char *cp;
cp = strrchr(pname, '/');
if (!cp)
cp = strrchr(pname, '\\');
if (!cp)
cp = pname - 1;
strcpy(progname, cp + 1);
if ((cp = strchr(progname, '.')) != NULL)
*cp = '\0';
if (!strncasecmp(progname, "SYSH", 4)) {
helpfn = "ohs.txt";
idxfn = "ohs.idx";
}
else {
helpfn = "ohu.txt";
idxfn = "ohu.idx";
}
}
int main(int argc, char **argv)
{
char topic[32];
int start;
puts("\nHilfe fuer TNN");
sysopcheck(argv[0]);
if (checkindex()) {
if (argc < 2) {
puts("Zuwenig Parameter angegeben !");
}
else if (argc == 2) { /* oh dl1xao */
overview();
}
else if (argc == 3 || argc == 4) { /* oh st [2|*] dl1xao */
strncpy(topic, argv[1], 30);
topic[30] ='\0';
getcmd(topic);
start = 1;
if (argc == 4) {
if (*argv[2] == '*')
start = -1;
else {
start = atoi(argv[2]);
if (start < 1 || start > 20) {
puts("Nummer der Folgeseite muss zwischen 1 und 20 liegen !");
return 1;
}
}
}
showhelp(argv[1], start);
}
else {
puts("Zuviele Parameter angegeben !");
}
}
return 0;
}

1683
contrib/onlhelp/ohs.txt Executable file

File diff suppressed because it is too large Load diff

2300
contrib/onlhelp/ohu.txt Executable file

File diff suppressed because it is too large Load diff

115
contrib/output/makefile Executable file
View file

@ -0,0 +1,115 @@
########################################################################
# #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# *************** *************** #
# ***************** ***************** #
# *************** *************** #
# ***** ***** TheNetNode #
# ***** ***** Portable #
# ***** ***** Network #
# ***** ***** Software #
# #
# File contrib/output/makefile (maintained by: DF6LN) #
# #
# Copyright (C) 1998 - 2004 NORD><LINK e.V. Braunschweig #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer #
# Amateurfunk Software) as published by Hans Georg Giese (DF2AU) #
# on 13/Oct/1992; either version 1, or (at your option) any later #
# version. #
# #
# This program is distributed WITHOUT ANY WARRANTY only for further #
# development and learning purposes. See the ALAS (Allgemeine Lizenz #
# fuer Amateurfunk Software). #
# #
# You should have received a copy of the NORD><LINK ALAS (Allgemeine #
# Lizenz fuer Amateurfunk Software) along with this program; if not, #
# write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
# Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch #
# die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder #
# Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), #
# am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. #
# #
# Dieses Programm wird unter Haftungsausschluss vertrieben, aus- #
# schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres #
# koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) #
# entnehmen. #
# #
# Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- #
# funk Software) beigelegen haben, wenden Sie sich bitte an #
# NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
########################################################################
#
# Makefile fuer output
#
#
OUTPUT := contrib/output
OUTPUTFILES := $(OUTPUT)/output.c $(OUTPUT)/makefile
.PHONY: output outputclean
all: output
clean: outputclean
output: $(BIN)/output
# erstmal fuer Linux
ifeq ($(SYSTEM), LINUX)
.PHONY: outputdist outputinstall outputgo32
bigdist: outputdist
install: outputinstall
go32: outputgo32
outputgo32: $(BIN)/outputgo32
# hier wird tatsaechlich uebersetzt
# (oder auch nicht, MeshCube und WRT54G haben keinen par. Port !)
ifeq ($(MIPS), YES)
$(BIN)/output:
echo Program \'output\' skipped, not available for your system yet !
else
$(BIN)/output: $(OUTPUTFILES) $(CLEANER)
$(CLEANER) $(OUTPUT)/output.c
$(CC) $(CFLAGS_LIN) -O2 $(OUTPUT)/output.c $(LDFLAGS_LIN) -o $@
sync
echo $@ done.
endif
$(BIN)/outputgo32: $(OUTPUTFILES) $(CLEANER)
$(CLEANER) $(OUTPUT)/output.c
$(CC_GO32) $(CFLAGS_GO32) $(OUTPUT)/output.c -o $@
chmod 644 $@
sync
echo $@ done.
outputclean:
rm -f $(BIN)/output $(BIN)/outputgo32{,.exe} $(OUTPUT)/*~
outputdist:
cp --parents $(OUTPUTFILES) $(DISTDIR)
outputinstall:
install -m 0700 $(BIN)/output $(TNNSYSEXE)/output
else
#
# Hier (fast) das gleiche fuer Dose
#
$(BIN)/output: $(OUTPUTFILES) $(CLEANER)
$(CLEANER) $(OUTPUT)/output.c
$(CC) $(CFLAGS_GO32) $(OUTPUT)/output.c -o $@
echo $@ done.
outputclean:
erase $(subst /,\\,$(BIN))\output
erase $(subst /,\\,$(BIN))\output.exe
erase $(subst /,\\,$(OUTPUT))\*.bak
endif

195
contrib/output/output.c Executable file
View file

@ -0,0 +1,195 @@
/************************************************************************/
/* */
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode - Tools */
/* ***** ***** (PC) */
/* ***** ***** Public Domain */
/* ***** ***** NORD><LINK */
/* */
/* This software is public domain ONLY for non commercial use */
/* */
/* output.c Fernsteuerung ueber Printer Port */
/* */
/* 05-01-91, DF2AU : Urversion */
/* 06-02-94, DB2OS : zusaetzliche Status-Ausgabe */
/* 09-30-00, DH6BB : Anpassung fuer Linux. Erfordert ROOT !! */
/* (gcc -O2 -o output output.c */
/* 07-21-05, DH6BB : Anpassung von Christoph DK2CRN eingepflegt */
/* (400ms warten nach Portausgabe) */
/* 07-21-05, DG9OBU: gewuenschtes Bit auf Gueltigkeit pruefen */
/************************************************************************/
#include "tnn.h"
#define __NAME__ "\nOutput"
#define __VER__ "2.0"
#define __AUTHOR__ "pG" /* Monogramm des Autors/Programmierers */
#ifdef __LINUX__
#include <sys/io.h>
#define inportb(adr) inb(adr)
#define outportb(adr, data) outb(data, adr)
#define port_adresse 0x378 /* LPT 1 */
#else /* GO32 */
#include <sys/farptr.h>
#define port_adresse _farpeekw(_dos_ds,0x00408)
#endif
char version[] = __NAME__ ", Version " __VER__ __AUTHOR__
" ("__DATE__ ", " __TIME__ ")\r";
/*----------------------------------------------------------------------*/
/* Fehler im Aufruf melden */
/*----------------------------------------------------------------------*/
void usage_error(void)
{
puts(version);
printf("Syntax: OUTPUT [<bit> <0|1>]\n");
printf(" (using io-port 0x%x)\n", port_adresse);
exit(1);
}
/*----------------------------------------------------------------------*/
/* Port Bit setzen */
/*----------------------------------------------------------------------*/
void set_port(int io_port)
{
if (io_port < 8)
{
outportb(port_adresse, (inportb(port_adresse) | (0x01 << io_port)));
/* setzt STROBE-Bit auf LOW-Position (invertiert) */
outportb(port_adresse + 2, (inportb(port_adresse + 2) | (0x01 << 0)));
/* 400ms warten */
usleep(400000);
/* setzt STROBE-Bit auf HIGH-Position (invertiert) */
outportb(port_adresse + 2, (inportb(port_adresse + 2) & ~(0x01 << 0)));
}
else
usage_error();
}
/*----------------------------------------------------------------------*/
/* Port Bit loeschen */
/*----------------------------------------------------------------------*/
void reset_port(int io_port)
{
if (io_port < 8)
{
outportb(port_adresse, (inportb(port_adresse) & ~(0x01 << io_port)));
/* setzt STROBE-Bit auf LOW-Position (invertiert) */
outportb(port_adresse + 2, (inportb(port_adresse + 2) | (0x01 << 0)));
/* 400ms warten */
usleep(400000);
/* setzt STROBE-Bit auf HIGH-Position (invertiert) */
outportb(port_adresse + 2, (inportb(port_adresse + 2) & ~(0x01 << 0)));
}
else
usage_error();
}
/*----------------------------------------------------------------------*/
/* Port Bit lesen */
/*----------------------------------------------------------------------*/
int read_port(int io_port)
{
if (io_port < 8)
return((inportb(port_adresse) >> io_port) & 1);
else
{
usage_error();
return(0);
}
}
/*----------------------------------------------------------------------*/
/* Port Status anzeigen */
/*----------------------------------------------------------------------*/
void show_port(void)
{
int ioport;
printf("\nOutput-Status:\n 7 6 5 4 3 2 1 0\n");
for (ioport = 7; ioport >= 0; ioport--)
printf(" %1.1d", read_port(ioport));
printf("\n");
}
/*----------------------------------------------------------------------*/
int main(int argc, char *argv[])
{
int bit = -1;
#ifdef __LINUX__
/* direkten Portzugriff beim Kernel anfordern */
if (ioperm(port_adresse, 3, 1))
{
perror("Can't get permissions for port-access. (Are you \'root\' ?)");
exit(1);
}
#endif
if (argc == 2) /* Nur Status ausgeben */
{
show_port();
return(0);
}
if (argc == 4) /* Port setzen/loeschen, 4 da TNN Rufzeichen anfuegt */
{
switch (*argv[2])
{
case '0': bit = atoi(argv[1]);
if (bit < 0 || bit > 7 )
{
usage_error();
exit(1);
}
reset_port(bit);
show_port();
break;
case '1': bit = atoi(argv[1]);
if (bit < 0 || bit > 7 )
{
usage_error();
exit(1);
}
set_port(bit);
show_port();
break;
default: usage_error();
exit(1);
}
return(0);
}
usage_error();
#ifdef __LINUX__
/* Port wieder freigeben */
if (ioperm(port_adresse, 3, 0))
{
perror("Can't release io-permissions !");
exit(1);
}
#endif
return(1);
}
/*----------------------------------------------------------------------*/
/*--- Ende von output.c ---*/

110
contrib/pfhadd/makefile Executable file
View file

@ -0,0 +1,110 @@
########################################################################
# #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# *************** *************** #
# ***************** ***************** #
# *************** *************** #
# ***** ***** TheNetNode #
# ***** ***** Portable #
# ***** ***** Network #
# ***** ***** Software #
# #
# File contrib/pfhadd/makefile (maintained by: DF6LN) #
# #
# Copyright (C) 1998 - 2004 NORD><LINK e.V. Braunschweig #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer #
# Amateurfunk Software) as published by Hans Georg Giese (DF2AU) #
# on 13/Oct/1992; either version 1, or (at your option) any later #
# version. #
# #
# This program is distributed WITHOUT ANY WARRANTY only for further #
# development and learning purposes. See the ALAS (Allgemeine Lizenz #
# fuer Amateurfunk Software). #
# #
# You should have received a copy of the NORD><LINK ALAS (Allgemeine #
# Lizenz fuer Amateurfunk Software) along with this program; if not, #
# write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
# Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch #
# die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder #
# Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), #
# am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. #
# #
# Dieses Programm wird unter Haftungsausschluss vertrieben, aus- #
# schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres #
# koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) #
# entnehmen. #
# #
# Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- #
# funk Software) beigelegen haben, wenden Sie sich bitte an #
# NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
########################################################################
#
# Makefile fuer pfhadd
#
PFH := contrib/pfhadd
PFHFILES := $(PFH)/pfhadd.c $(PFH)/makefile
.PHONY: pfhadd pfhclean
all: pfhadd
clean: pfhclean
pfhadd: $(BIN)/pfhadd
ifeq ($(SYSTEM), LINUX)
.PHONY: pfhdist pfhinstall pfhgo32
bigdist: pfhdist
install: pfhinstall
go32: pfhgo32
pfhgo32: $(BIN)/pfhgo32
$(BIN)/pfhadd: $(PFHFILES) $(CLEANER)
$(CLEANER) $(PFH)/pfhadd.c
$(CC) $(CFLAGS_LIN) $(PFH)/pfhadd.c $(LDFLAGS_LIN) -o $@
sync
echo $@ done.
ifeq ($(MIPS), YES)
$(BIN)/pfhadd:
echo Program \'pfhadd\' skipped since PACSAT is disabled for MIPS devices !
else
$(BIN)/pfhgo32: $(PFHFILES) $(CLEANER)
$(CLEANER) $(PFH)/pfhadd.c
$(CC_GO32) $(CFLAGS_GO32) $(PFH)/pfhadd.c -o $@
chmod 644 $@
sync
echo $@ done.
endif
pfhclean:
rm -f $(BIN)/pfhadd $(BIN)/pfhgo32{,.exe} $(PFH)/*~
pfhdist:
cp --parents $(PFHFILES) $(DISTDIR)
pfhinstall:
echo $@
install -m 0700 $(BIN)/pfhadd $(TNNPACSAT)pfhadd
else
#
# Hier (fast) das gleiche fuer Dose
#
$(BIN)/pfhadd: $(PFHFILES) $(CLEANER)
$(CLEANER) $(PFH)/pfhadd.c
$(CC) $(CFLAGS_GO32) $(PFH)/pfhadd.c -o $@
echo $@ done.
pfhclean:
erase $(subst /,\\,$(BIN))\pfhadd
erase $(subst /,\\,$(BIN))\pfhadd.exe
erase $(subst /,\\,$(PFH))\*.bak
endif

195
contrib/pfhadd/output.c Executable file
View file

@ -0,0 +1,195 @@
/************************************************************************/
/* */
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode - Tools */
/* ***** ***** (PC) */
/* ***** ***** Public Domain */
/* ***** ***** NORD><LINK */
/* */
/* This software is public domain ONLY for non commercial use */
/* */
/* output.c Fernsteuerung ueber Printer Port */
/* */
/* 05-01-91, DF2AU : Urversion */
/* 06-02-94, DB2OS : zusaetzliche Status-Ausgabe */
/* 09-30-00, DH6BB : Anpassung fuer Linux. Erfordert ROOT !! */
/* (gcc -O2 -o output output.c */
/* 07-21-05, DH6BB : Anpassung von Christoph DK2CRN eingepflegt */
/* (400ms warten nach Portausgabe) */
/* 07-21-05, DG9OBU: gewuenschtes Bit auf Gueltigkeit pruefen */
/************************************************************************/
#include "tnn.h"
#define __NAME__ "\nOutput"
#define __VER__ "2.0"
#define __AUTHOR__ "pG" /* Monogramm des Autors/Programmierers */
#ifdef __LINUX__
#include <sys/io.h>
#define inportb(adr) inb(adr)
#define outportb(adr, data) outb(data, adr)
#define port_adresse 0x378 /* LPT 1 */
#else /* GO32 */
#include <sys/farptr.h>
#define port_adresse _farpeekw(_dos_ds,0x00408)
#endif
char version[] = __NAME__ ", Version " __VER__ __AUTHOR__
" ("__DATE__ ", " __TIME__ ")\r";
/*----------------------------------------------------------------------*/
/* Fehler im Aufruf melden */
/*----------------------------------------------------------------------*/
void usage_error(void)
{
puts(version);
printf("Syntax: OUTPUT [<bit> <0|1>]\n");
printf(" (using io-port 0x%x)\n", port_adresse);
exit(1);
}
/*----------------------------------------------------------------------*/
/* Port Bit setzen */
/*----------------------------------------------------------------------*/
void set_port(int io_port)
{
if (io_port < 8)
{
outportb(port_adresse, (inportb(port_adresse) | (0x01 << io_port)));
/* setzt STROBE-Bit auf LOW-Position (invertiert) */
outportb(port_adresse + 2, (inportb(port_adresse + 2) | (0x01 << 0)));
/* 400ms warten */
usleep(400000);
/* setzt STROBE-Bit auf HIGH-Position (invertiert) */
outportb(port_adresse + 2, (inportb(port_adresse + 2) & ~(0x01 << 0)));
}
else
usage_error();
}
/*----------------------------------------------------------------------*/
/* Port Bit loeschen */
/*----------------------------------------------------------------------*/
void reset_port(int io_port)
{
if (io_port < 8)
{
outportb(port_adresse, (inportb(port_adresse) & ~(0x01 << io_port)));
/* setzt STROBE-Bit auf LOW-Position (invertiert) */
outportb(port_adresse + 2, (inportb(port_adresse + 2) | (0x01 << 0)));
/* 400ms warten */
usleep(400000);
/* setzt STROBE-Bit auf HIGH-Position (invertiert) */
outportb(port_adresse + 2, (inportb(port_adresse + 2) & ~(0x01 << 0)));
}
else
usage_error();
}
/*----------------------------------------------------------------------*/
/* Port Bit lesen */
/*----------------------------------------------------------------------*/
int read_port(int io_port)
{
if (io_port < 8)
return((inportb(port_adresse) >> io_port) & 1);
else
{
usage_error();
return(0);
}
}
/*----------------------------------------------------------------------*/
/* Port Status anzeigen */
/*----------------------------------------------------------------------*/
void show_port(void)
{
int ioport;
printf("\nOutput-Status:\n 7 6 5 4 3 2 1 0\n");
for (ioport = 7; ioport >= 0; ioport--)
printf(" %1.1d", read_port(ioport));
printf("\n");
}
/*----------------------------------------------------------------------*/
int main(int argc, char *argv[])
{
int bit = -1;
#ifdef __LINUX__
/* direkten Portzugriff beim Kernel anfordern */
if (ioperm(port_adresse, 3, 1))
{
perror("Can't get permissions for port-access. (Are you \'root\' ?)");
exit(1);
}
#endif
if (argc == 2) /* Nur Status ausgeben */
{
show_port();
return(0);
}
if (argc == 4) /* Port setzen/loeschen, 4 da TNN Rufzeichen anfuegt */
{
switch (*argv[2])
{
case '0': bit = atoi(argv[1]);
if (bit < 0 || bit > 7 )
{
usage_error();
exit(1);
}
reset_port(bit);
show_port();
break;
case '1': bit = atoi(argv[1]);
if (bit < 0 || bit > 7 )
{
usage_error();
exit(1);
}
set_port(bit);
show_port();
break;
default: usage_error();
exit(1);
}
return(0);
}
usage_error();
#ifdef __LINUX__
/* Port wieder freigeben */
if (ioperm(port_adresse, 3, 0))
{
perror("Can't release io-permissions !");
exit(1);
}
#endif
return(1);
}
/*----------------------------------------------------------------------*/
/*--- Ende von output.c ---*/

21
contrib/top/config.top Executable file
View file

@ -0,0 +1,21 @@
# Configdatei fuer TOP
# Alle Angaben die nicht gelesen werden sollen muessen eine # am Zeilen-
# anfang haben.
#
P0 = Port0
P1 = Port1
P2 = Port2
P3 = Port3
P4 = Port4
P5 = Port5
P6 = Port6
P7 = Port7
P8 = Port8
P9 = Port9
P10 = Port10
P11 = Port11
P12 = Port12
P13 = Port13
P14 = Port14
P15 = Port15
# Ende der Datei

106
contrib/top/makefile Executable file
View file

@ -0,0 +1,106 @@
########################################################################
# #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# ***** ***** #
# *************** *************** #
# ***************** ***************** #
# *************** *************** #
# ***** ***** TheNetNode #
# ***** ***** Portable #
# ***** ***** Network #
# ***** ***** Software #
# #
# File contrib/pfhadd/makefile (maintained by: DG8BR) #
# #
# Copyright (C) 1998 - 2004 NORD><LINK e.V. Braunschweig #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer #
# Amateurfunk Software) as published by Hans Georg Giese (DF2AU) #
# on 13/Oct/1992; either version 1, or (at your option) any later #
# version. #
# #
# This program is distributed WITHOUT ANY WARRANTY only for further #
# development and learning purposes. See the ALAS (Allgemeine Lizenz #
# fuer Amateurfunk Software). #
# #
# You should have received a copy of the NORD><LINK ALAS (Allgemeine #
# Lizenz fuer Amateurfunk Software) along with this program; if not, #
# write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
# Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch #
# die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder #
# Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), #
# am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. #
# #
# Dieses Programm wird unter Haftungsausschluss vertrieben, aus- #
# schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres #
# koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) #
# entnehmen. #
# #
# Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- #
# funk Software) beigelegen haben, wenden Sie sich bitte an #
# NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig #
# #
########################################################################
#
# Makefile fuer pfhadd
#
TOP := contrib/top
TOPFILES := $(TOP)/top_gnu.c $(TOP)/makefile
.PHONY: top topclean
all: top
clean: topclean
top: $(BIN)/top
ifeq ($(SYSTEM), LINUX)
.PHONY: topdist topinstall topgo32
bigdist: topdist
install: topinstall
go32: topgo32
topgo32: $(BIN)/topgo32
$(BIN)/top: $(TOPFILES) $(CLEANER)
$(CLEANER) $(TOP)/top_gnu.c
$(CC) $(CFLAGS_LIN) $(TOP)/top_gnu.c $(LDFLAGS_LIN) -o $@
sync
echo $@ done.
$(BIN)/topgo32: $(TOPFILES) $(CLEANER)
$(CLEANER) $(TOP)/top_gnu.c
$(CC_GO32) $(CFLAGS_GO32) $(TOP)/top_gnu.c -o $@
chmod 644 $@
sync
echo $@ done.
topclean:
rm -f $(BIN)/top $(BIN)/topgo32{,.exe} $(TOP)/*~
topdist:
cp --parents $(TOPFILES) $(DISTDIR)
topinstall:
echo $@
install -m 0700 $(BIN)/top $(TNNUSEREXE)/top
cp $(TOP)/config.top $(TNNDIR)/config.top
else
#
# Hier (fast) das gleiche fuer Dose
#
$(BIN)/top: $(TOPFILES) $(CLEANER)
$(CLEANER) $(TOP)/top_gnu.c
$(CC) $(CFLAGS_GO32) $(TOP)/top_gnu.c -o $@
echo $@ done.
topclean:
erase $(subst /,\\,$(BIN))\top
erase $(subst /,\\,$(BIN))\top.exe
erase $(subst /,\\,$(TOP))\*.bak
endif

842
contrib/top/top_gnu.c Executable file
View file

@ -0,0 +1,842 @@
/*
** TOP.EXE fuer TNN 1.72 und groesser (c) DG8BR
** Eigentlicher Titel "MHTNN.EXE"
** Ein Programm um die MHEARD.TAB in TNN direkt auszuwerten
**
**
** Zum Compilieren BITTE die TOP.MAK benutzen. Turbo-C.
** Eventuell die Pfade aendern.
** Falls die Datei nicht mitgegeben wurde, hier nochmal die Parameter fuer
** den Compiler (TC1/3.0++)
** TCC -2 -mc -f- -a -d -G -O
**
** Fuer Linux habe ich kein Makefile.
** Einfach gcc -Wall top_gnu.c -o top.exe .
**
**
** Aenderungen BITTE an mich weitergeben!!
** Mein Copyright darf NICHT entfernt werden!!
**
** Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch
** die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder
** Version 1, veroeffentlicht von Hans Georg Giese (DF2AU),
** am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version.
******************************************************************************
** Beginn 10.02.1995
** Anpassung auf neue MHEARD.TAB am 13.02.97 by DG1KWA
**
** neues Format der MHEARD.TAB jetzt reiner ASCII
** Aufbau : Zeit im PC-Format , RX-Bytes , TX-Bytes , Port
** rx-rej , tx-rej , dama-verstoesse , Call
**
** Beispiel: 855398713 1083577 170775 2 1 8 2 DG9FU-2
**
** Endgueltige Anpassung auf das neue Format.
** Externe Hilfe rausgeworfen.
** Rennt nun unter GNU32 und Linux
**
** Seit der 1.73 ist Max_MH = 5000. Darum habe ich auf das
** Speichermodul COMPACT umgestellt.
**
** Ein struct line *liste benoetigt 52 Bytes. Das bedeutet es muss 240000
** Bytes freier Speicher fuer die Daten vorhanden sein. Dazu kommt noch das
** Programm.
*/
#define DATUM "28.12.2000" /* Letzte Aenderung DG8BR */
#define EOS '\0'
#ifdef __MSDOS__
#define Seperator '\\'
#endif
#ifdef __linux__
#define Seperator '/'
#endif
/*#define DEBUG*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#ifdef __MSDOS__
#include <dir.h>
#include <sys\stat.h>
#endif
#if defined(__linux__) || defined(__GO32__)
#include <sys/dir.h>
#include <unistd.h>
#include <sys/stat.h>
#endif
#ifdef WIN32
#include <direct.h>
#include <sys/stat.h>
#define Seperator '\\'
#endif /* WIN32 */
/* prototypen */
int get_ftime (int); /* Dateizeit der MHEARD.TAB holen */
void config_lesen (void); /* config-file einlesen */
char grossbuchstabe (char); /* meine toupper-Version */
void prozent (unsigned long, unsigned long, char*); /* Prozentberechnung */
void ssid_weg ( char* ); /* die SSiD von Call entfernen */
void benutzung (void); /* Kurzhilfe ausgeben */
void einles (int, int); /* Hauptleseroutine */
void addier (void); /* Bytes der einzelnen Call's addieren */
void sortier (int, int); /* nach Menge sortieren, Plaetze vergeben, Ausgabe */
char* punkte (char*, unsigned long); /* Zahl mit 100ter Punkte */
void callraus (char*); /* Einzelausgabe von Call */
int callcmp (char*, char*, int); /* Call mit Call vergleichen */
/* globale Variablen */
char VERSION[] = "TOP v1.06g ("DATUM") (c) DG8BR";
struct line { /* Struktur fuer die Daten. Speicherbedarf 52 Bytes */
struct line *naechster; /* naechster Eintrag */
unsigned int platz;
unsigned long gesamt;
time_t heard; /* Uhrzeit */
unsigned long tx; /* gesendete Bytes */
unsigned long rx; /* empfangene Bytes */
unsigned int d; /* Damaverstoesse */
unsigned int t; /* gesendete Rejects */
unsigned int r; /* empfangene Rejects */
unsigned int mhport; /* Digiport */
unsigned int flag; /* Call aktiv */
char call[10];
char via[10];
int dummi; /* fuer die verschiedene Via's */
} *liste;
struct line *listenanfang; /* Eintrag der ersten Station der Liste */
time_t Dateianfang; /* Wann die MHEARD.TAB gegonnen wurde. */
time_t filetime; /* entspricht dem Listenende */
char zeitzone[3] = "UTC"; /* Zeitzonenbezeichnung */
unsigned long max; /* Gesamtbytes ueber alles */
int max_user; /* alle gezaehlten Benutzer */
int max_nenner;
char filename[12];
struct kanal { /* hier wird die config.top abgelegt */
char name[11];
unsigned long gesamt;
} port[16]; /* Port0 -Port15 */
/*----------------------------------------------------------------------------
* Zeit der MHEARD.TAB holen. Wird als bis-Zeit genommen. Damit sollte egal
* in welcher Reihenfolge die Daten stehen, bzw. wie durcheinander sie sind.
*/
int get_ftime(int handle)
{
#ifdef WIN32
#else
struct stat filestat;
if (fstat(handle, &filestat) == -1)
return(-1);
filetime = filestat.st_mtime; /* filetime ist 32bit-Zahl */
#endif
return(0);
}
/*----------------------------------------------------------------------------
** Config-File einlesen
** Wird von main aufgerufen. Rueckgabewert: Keiner
**
** Diese Datei sollte in dem TNN-Pfad stehen.
**
** Config sollte folgendermassen aussehen:
** #Beispiel fuer den Einstieg. Alle Zeilen ohne # werden eingelesen
** P0 = 70cm
*/
void config_lesen (void)
{
FILE *ein;
char buffer[81];
char standard[] = "P 0";
int a;
if ((ein = fopen("config.top","rt")) != NULL)
{
while(!feof(ein))
{
fgets(buffer,80,ein);
if((buffer[0] != '#') && (strlen(buffer) > 1)) /* nur lesen wenn # */
{ /* und Zeile > 1 */
a = atoi(&buffer[1]); /* Portnummer holen */
strtok(buffer," =");
if ( buffer[0] == 'P' )
strcpy(port[a].name ,strtok(NULL," =\n\r")); /* Portnamen */
}
}
}
for ( a = 0; a < 16; a++) /* PORT wird nun von 0-15 eingerichtet */
{
if (port[a].name[0] == EOS) /* wenn der Port nicht von der Config */
strcpy(port[a].name,standard); /* versorgt wurde */
if ( standard[2] == '9' ) /* wenn 9 dann auf 0 setzen und das */
{ /* vorherige Byte auf 1 */
standard[1] = '1';
standard[2] = '0';
}
else
standard[2]++; /* wenn nicht, dann nur erhoehen */
}
#ifdef DEBUG
printf("config erfolgreich.\n");
#endif
}
/*----------------------------------------------------------------------------
** Diese Routine wurde aus dem TNN-Packet entnommen.
** Erdacht hat sie DG9AML. Von mir an TOP angepasst.
*/
void prozent (unsigned long zaehler, unsigned long nenner, char *resultstr)
{
int i, zaehlernull;
char tmp[32];
tmp[0] = EOS;
*resultstr = EOS;
zaehlernull = 0;
if (nenner == 0) /* dividiert durch 0 ergibt eine Fehlermeldung */
{
zaehler = 0L;
nenner = 1L;
}
if (zaehler / nenner != 0) /* 100er Stelle */
{
sprintf(tmp, "%s%lu", resultstr, zaehler / nenner);
strcpy(resultstr,tmp);
}
else
zaehlernull = 1;
/* Solange der zaehler kleiner nenner ist wird der zaehler um eine 10-potenz
** hoeher. Da bei 4,3G grossen Zahlen ein Ueberlauf stattfinden wuerde,
** werden beide Zahlen um eine 10er-potenz gekuerzt.
*/
if ( zaehler > 430000000L)
{
zaehler = zaehler / 10;
nenner = nenner / 10;
}
zaehler = (zaehler % nenner) * 10;
if (zaehlernull != 1 || zaehler / nenner != 0) /* 10er Stelle */
{
sprintf(tmp, "%s%lu",resultstr, zaehler / nenner);
strcpy(resultstr,tmp);
}
if ( zaehler > 430000000L)
{
zaehler = zaehler / 10;
nenner = nenner / 10;
}
zaehler = (zaehler % nenner) * 10;
sprintf(tmp, "%s%lu", resultstr, zaehler / nenner); /* 1er Stelle */
strcpy(resultstr,tmp);
if ( zaehler > 430000000L)
{
zaehler = zaehler / 10;
nenner = nenner / 10;
}
zaehler = (zaehler % nenner) * 10;
strcat(resultstr, ".");
for (i = 0 ; i < 2; i++) /* 2 Kommastellen */
{
sprintf(tmp, "%s%lu", resultstr, zaehler / nenner);
if ( zaehler > 430000000L)
{
zaehler = zaehler / 10;
nenner = nenner / 10;
}
zaehler = (zaehler % nenner) * 10;
strcpy(resultstr,tmp);
}
return;
}
/*----------------------------------------------------------------------------
** meine Version von 'toupper'
*/
char grossbuchstabe ( char buchstabe )
{
if ( buchstabe > 'Z' )
buchstabe -= ' ';
return ( buchstabe );
}
/*----------------------------------------------------------------------------
** Die SSID vom call entfernen.
** Return ist ein String ohne SSID
** Es gibt kein eigentliches Return. Es wird direkt der Eintrag via Zeiger
** geaendert.
*/
void ssid_weg (char *callmit)
{
char *callohne;
for (callohne = callmit; *callohne; callohne++)
if ( *callohne == '-' )
*callohne = EOS;
}
/*-----------------------------------------------------------------------------
** Kurzanleitung ausgeben
*/
void benutzung (void)
{
printf("\n");
printf(" Befehlssyntax Bedeutung Beispiel\n\n");
printf(" TOP alle Port, 10 Plaetze TOP\n");
printf(" TOP Anzahl <*> soviel Plaetze, alle Ports TOP 45\n");
printf(" TOP -Port einen Port, 10 Plaetze TOP -0 \n");
printf(" TOP Anzahl -Port soviel Plaetze, ein Port TOP 30 -0\n");
printf(" TOP -Port Anzahl ein Port, soviel Plaetze TOP -0 30 \n");
printf(" TOP Call nur ein Rufzeichen TOP dg8br\n");
printf(" TOP Ca* Alle Call's mit DL TOP dl*\n");
printf(" TOP -L3 Die L3HEARD auswerten\n");
printf(" TOP -v Version\n");
printf(" TOP -h dieses hier\n\n");
printf("Weitere Hilfe gibt es mit 'Help Top'\n"); /* Hinweis auf Help */
}
/*----------------------------------------------------------------------------
** Vergleicht 2 Calls miteinander.
** Beide calls werden ohne SSId geliefert.
** Returnwert : bei Gleichheit 0, sonst 1
** call1 == das Call das gesucht wird.
** call2 == mit dem wird verglichen
** wird von addier und callraus aufgerufen
*/
int callcmp ( char *call1 , char *call2, int len )
{
while ( len-- ) /* Call wird zeichenweise verglichen */
if (*call1++ != *call2++ ) /* bei Gleichheit return mit 0 */
return (1);
return (0);
}
/*----------------------------------------------------------------------------
** Die Gesamt-Zahl der Endsummen werden zwecks besserer Lesbarkeit
** mit 100ter Punkte versehen.
** Wird von sortier aufgerufen.
** Rueckgabe : gepunkteter String
*/
char* punkte (char *string, unsigned long all)
{
char temp[20]; /* Hilfsstring */
char *tp = temp; /* Zeiger auf temp */
int a = 0; /* Zaehler fuer Punkte */
int b = 0; /* Zaehler Returnstring */
while ( all ) /* Solange das Ende von all nicht erreicht */
{
#ifdef WIN32
*tp++ = (char)((all % 10) + '0'); /* Zahl/10 und den Rest verasscien */
#else
*tp++ = (all % 10) + '0'; /* Zahl/10 und den Rest verasscien */
#endif /* WIN32 */
all = all / 10; /* Quelle muss auch geteilt werden */
a++;
if ( a == 3 && all != EOS) /* Punkt einfuegen */
{
*tp++ = '.';
a = 0;
}
}
*tp = EOS;
a = strlen(temp);
while ( a ) /* und nun kopieren, aber von hinten nach vorne */
string[b++] = temp[--a];
string[b] = EOS;
return(string);
}
/*----------------------------------------------------------------------------
** Generelle Einleseroutine. Wird von main aufgerufen.
** Es wird immer fuer einen Eintrag dynamisch Speicher allociert.
** Und auch nur ein Eintrag zur Zeit gelesen.
** Der erste Speicherplatz hat auch schon gueltige Daten. Der letze Eintrag
** hat im "naechster" ein NULL stehen!! Es geht bis zum NULL-Eintrag!!
** User die im TX oder RX nichts haben, werden eingelesen aber wenn keine
** Einzelausgabe gewuenscht sofort wieder geloescht.
** Wird von main aufgerufen.
**
** Der CONFPATH wird nun vom Programm ermittelt. Es wird also bei der Linux-
** Version kein globaler CONFPATH-Eintrag mehr benoetigt. Bei der DOS(GNU32)
** wird es aber gesetzt, aber nicht genutzt. Bei der Linux-Version wird der
** Eintrag auch gesetzt, gilt aber nur fuer den TNN-Task.
**
** neues Format der MHEARD.TAB jetzt reiner ASCII
** Erster Eintrag ist der neuste Eintrag.
** Aufbau : Zeit im PC-Format , RX-Bytes , TX-Bytes , Port
** rx-rej , tx-rej , dama-verstoesse , Call
**
** Bespiel: 855398713 1083577 170775 2 1 8 2 DG9FU-15
*/
void einles (int alles, int Gesamt)
{
FILE *ein;
int a = 0;
char buffer[81];
char file[81];
char *fp;
struct line *indexalt = NULL; /* Hilfszeiger um alten Eintrag zufinden */
int kontrolle = 0; /* Zaehler der eingelesenen Datensaetze */
*file = EOS;
if(getcwd(file,80) == NULL) /* Pfad feststellen */
{
printf("\nKonnte den Pfad nicht ermitteln !\n");
exit(0);
}
if(*(fp = file + strlen(file)) != Seperator)
{
*fp++ = Seperator; /* Seperator anhaengen */
*fp = EOS; /* und schulz */
}
strcat(file,filename);
if (( ein = fopen (file , "rb")) == NULL)
{
printf ("\n%s nicht gefunden!\n", file);
exit (0);
}
if (get_ftime(fileno(ein)) != 0)
printf("\nEndezeit kann nicht ermittelt werden !\n");
while (!feof(ein))
{
if ((liste = malloc(sizeof(struct line))) == NULL)
{
printf("Kein Speicher!!! %d Datensaetze eingelesen.\n",kontrolle);
kontrolle = sizeof(struct line);
printf("Eine Datenzeile benoetigt %d Bytes.\n",kontrolle);
printf("Bitte diese Zeilen mit Digicall mir, DG8BR, zuschicken!!");
exit(0);
}
kontrolle++;
if (( fgets (buffer, 80, ein )) != NULL)
{
if ( buffer[0] == ':' ) /* dann wurde die MHEARD begonnen */
{ /* ist ab der 1.74xx drin */
sscanf ( buffer+1, "%lu", (unsigned long *)&Dateianfang );
continue;
}
liste->via[0] = EOS;
liste->call[0] = EOS;
sscanf (buffer ,"%lu %lu %lu %u %u %u %u %u %s %s",
(unsigned long *)&liste->heard ,&liste->rx ,&liste->tx ,&liste->mhport,
&liste->d, &liste->r ,&liste->t ,&liste->flag,liste->call,
liste->via);
if(Gesamt == 0)
{
if(alles == 1 && ((liste ->tx == 0L) || (liste->rx == 0L)))
{
free(liste);
continue; /* Bei Summenausgabe, nur Leute mit gueltigen Daten */
}
}
if ( alles == 1 ) /* Bei Summenausgabe, die SSId weg */
ssid_weg (liste->call);
liste->dummi = ' ';
liste->gesamt = 0L;
if ( a == 0 )
{
listenanfang = liste; /* Damit wird der 1.te Eintrag gefunden */
indexalt = liste; /* beim 1.ten Mal muss hier gespeichert werden */
a++;
}
indexalt->naechster = liste; /* im vorherigen Eintrag den Naechsten */
indexalt = liste; /* eintragen. Und dann den Alten auf neu setzen */
}
}
indexalt->naechster = NULL; /* Sonst wird das Ende der Liste nicht bemerkt*/
fclose(ein);
#ifdef DEBUG
printf("%d Datensaetze eingelesen.\n",kontrolle);
printf("einles erfolgreich.\n");
#endif
}
/*----------------------------------------------------------------------------
** Alle Bytes eines Call's zusammenzaehlen. Es werden bis auf einen Listen-
** eintrag alle ungueltig gemacht.
** Ermittelt fuer die globalen Variablen max und port.gesamt die Werte.
** Wird von main aufgerufen.
**
*/
void addier (void)
{
struct line *index = NULL; /* Zieleintrag */
struct line *indexalt = NULL; /* vorheriger Eintrag beim Durchsuchen */
liste = listenanfang; /* Und nu geht es los */
while ( liste != NULL )
{
index = liste; /* call uebernehmen */
indexalt = liste; /* aktuell merken */
liste = liste->naechster; /* und weiterschalten */
while ( liste != NULL)
{
if (!callcmp (index->call, liste->call, 6 )) /* call gleich ?? */
{
if (index->mhport == liste->mhport) /* und Port gleich ?? */
{
index->tx += liste->tx; /* a weng rechnen */
index->rx += liste->rx;
index->t += liste->t;
index->r += liste->r;
index->d += liste->d;
indexalt->naechster = liste->naechster; /* Listenplatz aendern */
free ( liste ); /* und den Alten wech */
liste = indexalt->naechster; /* zurueck auf aktuellen Stand */
}
else /* Call gleich, aber anderer port */
{
if (index->dummi != '#') /* wenn noch nicht gekennzeichnet */
{
index->dummi = liste->dummi = '#';
max_user--; /* Jedes Call wird nur einmal gezaehlt */
}
indexalt = liste;
liste = liste->naechster; /* und weiterschalten */
}
}
else /* call nicht gleich */
{
indexalt = liste; /* aktuell merken */
liste = liste->naechster; /* und weiterschalten */
}
}
index->gesamt = index->tx + index->rx; /* Ergebnisse speichern */
index->platz = 0;
max_user++;
max += index->gesamt; /* Gesamtdurchsatz des Digi's */
port[index->mhport].gesamt += index->gesamt; /* Portdurchsatz */
liste = index->naechster; /* zurueck */
}
#ifdef DEBUG
printf("addier erfolgreich.\n");
#endif
}
/*----------------------------------------------------------------------------
** Suche nach der groessten Zahl und zwar nehme 1.te Zahl und vergleiche mit
** der naechsten. Ist sie groesser, nehmen, sonst naechsten Platz. Wenn Zahl
** gefunden, wird ein Platz vergeben und es beginnt von vorne. Die Liste
** wird nur nach gueltigen Listenplaetzen durchsucht. D.h. nur wenn Platz = 0
** ist.
** Hier ist nun auch die Ausgabe. Ausgegeben wird bis Anzahl erreicht. Die
** Liste wird trotzdem bis zum Ende durchsucht um die Anzahl der Benutzer
** zubekommen.
** Wird von main aufgerufen.
**
*/
void sortier (int anzahl, int ports)
{
int a;
int c = 0; /* Ausgabeplatz */
char f[32];
unsigned long aktu;
unsigned long alleszusammen = 0L;
char tmp[15]; /* Rueckgabevariable fuer gepunkteten String */
struct line *indexplatz = NULL; /* hat zur Zeit das meiste */
/* und wird ausgegeben */
struct tm *ts;
liste = listenanfang; /* von Vorne suchen */
while ( liste != NULL )
{
a = 0;
aktu = 0L; /* und wieder auf 0, damit wieder richtig gefunden wird */
while ( liste != NULL ) /* Es wird immer die ganze Tabelle durchsucht */
{
#ifdef WIN32
if((liste->platz == 0) && (liste->mhport == (unsigned int)ports || ports == 'a'))
#else
if((liste->platz == 0) && (liste->mhport == ports || ports == 'a'))
#endif /* WIN32 */
{ /* platz gueltig, dann mit aktu vergleichen */
if ((liste->gesamt) >= aktu) /* wenn aktu > gesamt */
{ /* dann neuen aktu uebernehmen */
aktu = liste->gesamt; /* um die Plaetze zuerhalten */
indexplatz = liste; /* der hat die meisten, uebernehmen */
a = 1; /* Flag setzen fuer fuendig geworden */
}
}
liste = liste->naechster;
}
if (a == 1) /* Es wurde was gefunden */
{
indexplatz->platz = 5000; /* Pseudo-Platznummer vergeben */
if ( c == 0 ) /* nur beim 1ten mal */
{
ts = localtime(&Dateianfang); /* Zeit von Anfang holen */
if (!strcmp(filename, "mheard.tab"))
printf("\n\n MHEARD-Auswertung");
else
printf("\n\n L3MHEARD-Auswertung");
printf(" vom %02d.%02d.%02d %02d:%02d %.3s",
ts->tm_mday,
ts->tm_mon+1,
ts->tm_year%100,
ts->tm_hour,
ts->tm_min,
zeitzone);
ts = localtime(&filetime); /* Zeit von Listenende */
printf(" bis %02d.%02d.%02d %02d:%02d %.3s\n",ts->tm_mday,
ts->tm_mon+1,
ts->tm_year%100,
ts->tm_hour,
ts->tm_min,
zeitzone);
printf("\nNr. Call Port Rx Tx "
"Summe %%");
if (!strcmp( filename,"mheard.tab"))
printf(" RxRej TxRej Dama\n");
c++; /* nun Platzzaehler */
}
if ( ports == 'a' ) /* Alle Ports ausgeben ? */
prozent(indexplatz->gesamt,max, f);
else
prozent(indexplatz->gesamt ,port[ports].gesamt,f);
/* Prozentsatz des Users berechnen */
printf("\n%3u %-6s %-10s %10lu %10lu %10lu %5s",
c,indexplatz->call,port[indexplatz->mhport].name,indexplatz->tx,
indexplatz->rx,indexplatz->gesamt,f);
if (!strcmp( filename , "mheard.tab"))
{
printf(" %5u %5u %4u %c",indexplatz->t,indexplatz->r,
indexplatz->d,indexplatz->dummi);
if ( indexplatz->via[0] != EOS ) /* via gibt es nicht mehr */
printf("*");
}
else /* L3MHEARD */
printf(" %2c",indexplatz->dummi);
alleszusammen += indexplatz->gesamt;
c++; /* Anzahl erhoehen */
liste = listenanfang; /* und wieder an Anfang gehen */
}
if ( c > anzahl )
break;
}
if (c == 0 ) /* was gefunden ? */
{
if ( ports != 'a' )
printf("\nFuer diesen Port sind keine Daten in der MHEARD-Tabelle!\n");
else
printf("\nKeine Daten in der MHEARD-Tabelle!\n");
}
else
{
if ( ports == 'a' )
{
prozent(alleszusammen,max,f);
printf("\n\nDiese User haben auf allen Ports %s Bytes = %s %%"
" uebertragen.\n",punkte( tmp,alleszusammen ), f);
}
else
{
prozent(alleszusammen,port[ports].gesamt,f);
printf("\n\nDiese User haben auf Port %d (%s) %s Bytes = %s%%"
" uebertragen.\n",ports,port[ports].name,punkte( tmp,
alleszusammen ),f );
}
printf("Insgesamt wurden %s Bytes von %d Benutzer bewegt.\n",punkte
(tmp,max), (max_user));
}
#ifdef DEBUG
printf("sortiert erfolgreich.\n");
#endif
}
/*----------------------------------------------------------------------------
** Einzelaugabe eines Calls
** Seit der 1.75 gibt es im L2 keine Via-Eintraege mehr in der MHEARD.TAB.
*/
void callraus(char *suchcall)
{
int a;
int calllen = 0;
char vergleichcall[10] = "0x00";
struct line *liste;
struct tm *ts;
calllen = strlen (suchcall);
for ( a = 0; a < calllen; a++ ) /* call in Grossbuchstaben wandeln */
{
suchcall[a] = grossbuchstabe ( suchcall[a] );
}
if ( suchcall[calllen -1] =='*' ) /* Wenn * vorhanden, calllen 1 weniger */
calllen-- ; /* sonst wird das * mitgesucht. */
else
calllen = 6;
a = 0;
liste = listenanfang;
while (liste != NULL)
{
strcpy(vergleichcall, liste->call);
ssid_weg ( vergleichcall );
if (!callcmp(suchcall,vergleichcall,calllen)) /* und guggen ob da */
{
if ( a == 0 ) /* nur beim erstenmal */
{
printf("\nDatum Port Rx Tx RxRej "
"TxRej D Call\n");
}
ts = localtime ( &liste->heard ) ;
printf("\n%02d.%02d.%02d %02d:%02d ", ts->tm_mday,
ts->tm_mon+1,
ts->tm_year%100,
ts->tm_hour,
ts->tm_min);
printf("%-10s %9lu %9lu %5u %5u %3u %-9s",
port[liste->mhport].name,liste->tx,liste->rx,liste->t,liste->r,
liste->d,liste->call);
a = 1;
}
liste = liste->naechster;
}
if ( a == 0 )
printf("\n%s nicht gehoert!",suchcall);
ts = localtime ( &filetime ); /* wann das letze Mal gesaved */
printf("\n\nStand: %02d.%02d.%02d %02d:%02d %.3s\n", ts->tm_mday,
ts->tm_mon+1,
ts->tm_year%100,
ts->tm_hour,
ts->tm_min,
zeitzone);
#ifdef DEBUG
printf("callraus erfolgreich\n");
#endif
}
/*----------------------------------------------------------------------------
** Aufruf ohne Parameter ergibt eine Ausgabe von 10 Eintraege von allen Ports.
** Es koennen ein bestimmter Port oder eine bestimmte Anzahl uebergeben
** werden. Oder beides gemeinsam. Reihenfolge, egal.
** Dann kann man noch ein Rufzeichen eingeben. Aber dann nur das!!
*/
int main (int argc, char *argv[])
{
int uni; /* Uebergabevariable fuer max_user */
int Ausgabe = 10;
int Gesamt = 0;
char Port = 'a'; /* Dummi fuer Ausgabe alle Ports */
char call[10] = "\x0";
char *port_z; /* Zeiger fuer Port */
#ifdef DEBUG
clock_t ende;
#endif
strcpy (filename, "mheard.tab");
for ( argc--, uni = 1; uni < argc; uni++ )
{
if (argv[uni][0] == '-') /* erstmal die -Parameter bearbeiten */
{
switch (argv[uni][1] )
{
case 'V' :
case 'v' : printf("\n%s\n",VERSION);
exit(0);
break;
case 'H' :
case 'h' :
case '?' : benutzung ();
exit(0);
case 'L' :
case 'l' : strcpy(filename, "l3heard.tab");
break;
default : if (isdigit( argv[uni][1]))
{
port_z = argv[uni]; /* auf zeiger umkopieren */
port_z++; /* einen weiterdrehen, damit - verschwindet */
Port = atoi(port_z); /* aus Asci "echte" Hexwerte */
break; /*machen. Kann dann nur Port sein */
}
else
{
benutzung(); /* Kurzhilfe ausgeben */
exit(0);
}
}
}
if ( isdigit (argv[uni][0] )) /* Zahl ?? */
Ausgabe = atoi (argv[uni]); /* Anzahl der Ausgabe */
if ( isalpha (argv [uni][0])) /* Buchstabe ?? */
{
strncpy ( call, argv[uni],9 );
uni = argc; /* Bei Call wird ALLES ignoriert!! */
if ( strlen ( call ) < 3 ) /* Es sollte mehr als 1 Buchstabe sein */
{
printf("\nMindestens 2 Buchstaben und eine Zahl oder * eingeben!\n");
exit (0);
}
}
if(*argv[uni] == '*')
Gesamt = 1; /* Alles einlesen, aber SSId weg */
}
config_lesen();
if ((port_z = getenv("TZ")) != NULL)
strcpy(zeitzone,port_z);
if( call[0] ) /* wenn call angegeben, alles ignorieren */
{
einles(0,Gesamt); /* MHEARD.TAB einlesen mit Nullbyteleute */
callraus(call); /* Einzelcall ausgeben */
}
else
{
einles(1,Gesamt); /* MHEARD.TAB einlesen OHNE Nullbyteleute */
addier();
sortier(Ausgabe, Port); /* sortiert und gibt aus */
}
#ifdef DEBUG
ende = clock();
printf("Laufzeit = %ld \n",(ende*100) / 182);
#endif
exit(EXIT_SUCCESS);
}

207
doc/conversd.g Executable file
View file

@ -0,0 +1,207 @@
Commands may be abbreviated. Commands are:
/Away [text] Mark user as being away
/ALl text Send text to all users
/Beep Toggle Beep-Mode
/Channel n Switch to channel n
/CHARset [in [out]] Change terminal emulation (default ansi)
/Destinations List reachable ping-pong hosts
/Filter [calls] Set calls you want to filter
/Help [command] Print help information
/Invite user Invite user to join your channel
/IMsg user text Send Text to all on channel except user
/Links [args] List or setup links
/LISt List all channels and topics
/LEave [channel] Leaves specified or default channel
/Msg user|#channel text Send message to a user or joined channel
/ME text Write action to channel
/MOde [channel] options Set channel options
/NIck nickname Set your (nick)name
/NONick Delete your (nick)name
/NOTify [calls] Send notice if one of calls signs on
/Personal [text] Set personal description
/PRompt abcd Prompts a=query b=std c=ctrl-g d=ctrl-h
/Quit Terminate the convers session
/QUEry [user] Start/End a private conversation
/Topic [#chan] [text] Set channel topic. Text=@ removes topic
/UPtime How long is this conversd up ?
/Verbose Toggles verbose Flag
/VERSion Show version information
/Who [N|*|A|L|U|@] List users and their channel numbers
/WIdth [value] Set/show terminal width
@@ALL
If you are in /query mode, a text written with /all at the front will
be displayed as a normal convers text written to all users on this channel.
@@AWAY
/away sets an away-text for the other users. called with no additional
arguments, you are marked as being back again.
@@BEEP
(/beep /bell)
The beep command toggles a warning bell (^G) being sent before every message
coming from another user. This command really is a subset of the /prompt
command, see there.
@@CHAR
With this command, you can tell the convers deamon which type of umlauts you
prefer to use. The Syntax is /char [intype [outtype]]. For example, if you
work on an Atari st you could say: "/char atari atari". If you use a pc and
like to write your own umlauts in TeX style, "/char tex pc" may work. Use
"/char ?" to see a list. Play a bit around with this feature !
Special Thanks to Thommy, <dl9sau@zedat. fu-berlin.de> (Internet mail)
<dl9sau@db0sao.ampr.org> (AmPR-Net mail) who wrote this nice feature.
Suggestions to this feature should be redirected to him :-)
Your char-setting will be stored when using "/pers", see there.
Please notice; use the correct charset for your program, not for your type
of computer.
@@DEST
(/destinations /hosts)
All Pingpong hosts in the network being connected to each other are listed.
The numbers shown in the list are response times in seconds. Use "/d #" to
see another form of this list.
@@EXCL
(/exclude /imsg /iwrite)
The exclude command is the opposite of the /msg command. You can send
messages to all users on the channel except the one given as the first
parameter. Internally these messages are sent as private messages to the
users, so links are flooded a bit more :-)
@@FAID
Welcome to the convers, select the right conversion for umlauts (/char),
set your personal description (/pers)
and change (/join) to another channel of your interest, if you want.
Whith /who you get an overview of the channels, more help with /help.
Have fun.
@@FILT
If you don't want to read texts from certain users, you can set a list
of calls. Messages from this calls are discarded for you. The syntax is
similar to "/notify". E.g. "/filter + dc1ik - db4ut" adds the user dc1ik
to the filter and removes db4ut from the list.
@@HELP
(/? /help)
The help command may be invoked with an additional parameter. I believe you
hacked in "help help" to see this, right ? :-). better try out help options
that are followed by an additional command.
@@INVI
An invitation tho the named user is sent. The invite is passed through all
convers nodes in the net. If the user is on another channel, he will be able
to join your private channel. If he is in the commandinterpreter on a node,
he will receive the invitation message. In the latter case he will be unable
to join a private channel directly.
@@JOIN
(/channel /join)
Join another channel. Unlike other other conversd implementations Ping-Pong-
conversd supports multiple channel joins the same time. Thus the old channel
is not left. You may do this by invoking "/leave".
@@LEAV
Invoking this command you will leave the actual channel or the specified
channel. If the given channel is your last existence in the convers channel,
you'll quit the whole program.
@@LINK
The current link state is displayed. In the standard version, host name,
link state, link round trip times, neighbour revision codes and state time
followed by time of next try and count of connect tries (on disconnected or
connecting links) are shown, connected lines print out their queue length
and total transmit statistics.
If you are sysop, you may also set up or remove links at runtime.
Connection-info will be shown in brackets additionally.
Syntax: /l [@ host]|[[+]|[-] host [port [via]]]
With "/l @host" you are able to get info from host (not all versions support
this function).
@@LIST
All channels, their topics (if set), flags (if some) and users are displayed.
@@ME
If you want to display an action you take, you might use this command. E.g.
entering the line "/me yawns" all connected users in this channel will see
a message like: "*** dc6iq yawns"
@@MODE
The mode command is one of the most complicated ones. It is invoked with
/mode <channel> <+|-><t|i|s|m|p|l|o<name>>.
Flags may be a set of the following:
t - channel topic may be set by channel operators only
i - channel is invisible for users not on it
s - channel is secrect, only its number not displayed
m - channel is moderated, only channel-operators may talk
p - channel is private, invitation needed to join here
l - channel is local, no text forwarding to other nodes (NYI)
o<name> - make <name> a channel operator
The plus indicates an option to be set, a dash resets the option.
A combination of + and - is allowed so the following command will work:
"/mode 69 -s+todc6iq". Channel 69 is no longer secret, but topics may be
set only by channel operators. In addition the user dc6iq becomes a channel
operator.
Without parameters, the current settings will be listed.
On channel 0 it is impossible to set modes!
@@MSG
(/msg /send /write)
Send a text to one special user or a joined channel. If the message should
be redirected to a channel, The command must be invoked in this syntax:
"/msg #<channel> <text>". The adressee (if user) can indicate the private
character of the message due to additional asterisks in his received lines.
a mesage written by dc6iq to dc1ik looks like this: "/m dc1ik This is a Test"
will be received by dc1ik like this: "<*dc6iq*>: This is a test".
@@NICK
You can set your nickname to be displayed in front of your callsign. The
nickname is forwarded to other convers hosts. Use "/nick @" or "/nonick"
to delete your nickname.
@@NONICK
If a nickname is set, it is deleted. (same as "/nick @")
@@NOTI
You are notified if one person out of the notification list appears on any
channel in this convers. E.g. "/notify + dc1ik" adds the user dc1ik to the
notification list, "/notify - db4ut" removes him from the list. The list is
initially treated as if a plus "+"-sign was given, multiple lists may be
specified. The following command would be legal and would result in adding
dc1ik, db4ut and dg3kcr to the list, while removing dc6iq and dh2paf:
"/notify dh2paf + dc1ik db4ut - dc6iq dh2paf +dg3kcr"
Removing non-members to the list is ignored.
@@PERS
(/note /personal)
A brief description can be set up, accessible to all users via the "/who"-
command. A typical Message looks like this: "/pers Fred, Buechig, JN49fb".
The description can be deleted with "/pers @".
The digi stores up to 118 chars of this description and set it automatically
when you enter convers (the settings of "/char" and "/width" will be stored
and set on login, too). Storing is also possible with simply "/pers".
@@PROM
The prompt command takes up to four arguments in one concatenated string.
Thus "/prompt abcd" will set up "a" for the query prompt, "b" for the
standard prompt. "d" is the character to remove the prompt, and "c" is
displayed whenever a text is sent to you. Normally you make "c" a control-G
(beep char) and "d" a backspace or delete character (control-h or 0x7f).
@@QUER
The username given as argument will be the only recipient for all further
texts. They are send as private messages (just like /m). With no optional
argument, the further texts go into the whole channel again.
@@QUIT
(/bye /exit /quit)
Passing this command to conversd, you will retire from the famous Ping-Pong
conversation. I hope you enjoyed this stuff :-)
@@TOPI
A brief description of the channel topic can be set. Other users can look
it up with the "/who quick" or "/list" commands. If the channel number is
omitted, the topic will be set to the current channel, else to the desired
one. If no #channel is given, the topic will appear on the current channel,
if specified, the topic on that channel will be set (only if youre logged
on to that channel). To clear a topic, just try to set a topic like "@" :-)
An empty topic command diplays the current's channel topic.
@@UPTI
The uptime command tells us how long this conversd is up and running.
@@VERB
The verbose flag is toggled. You will be flooded with information if you
enable this feature.
@@VERS
Print out version information to this software.
@@WHO
(/users /who)
This command shows the users and has multiple options:
n [channel] tabular form (limitable to one channel)
a [channel] away-text listing (limitable to one channel)
l [channel] long listing (limitable to one channel)
u users detailed infos to specified users
* [channel] listing of idle-times (own or specified channel)
@ host to specified host limited tabular form
without option you get a brief listing ("/list").
@@WIDT
Tell conversd about your screen width. Then formatted messages will use the
entire screen. It is set to 80 by default.
Your width-setting will be stored when using "/pers", see there.
@@----
rev3.12c/20001003

259
doc/conversd.xhf Executable file
View file

@ -0,0 +1,259 @@
***********************************************************************
* Hilfe zum PingPong-Release 3.13a (TNN) - Stand: 4.09.2004 by DAD213 *
***********************************************************************
Kommandos koennen abgekuerzt werden.
/Away [Text] markiert Dich als abwesend
/ALl Text Text an alle User Deines Kanals
/Beep Beep-Modus an/aus
/Channel n wechselt auf Kanal n
/CHARset [rein [raus]] setzt Zeichenwandler (ANSI ist Voreinstellung)
/Destinations listet erreichbare ping-pong Hosts
/EXClude User Text sendet Text an alle auf Deinem Kanal ausser User
/Filter [Calls] setzt Calls, deren Texte gefiltert werden sollen
/Help [Kommando] gibt Hilfe-Informationen
/Invite User laedt User auf Deinen Kanal ein
/Links [args] listet oder setzt (Sysops) conversd-Partner
/LISt listet alle Kanaele und ihre Themen
/LEave [Kanal] verlaesst Kanal oder derzeitigen Kanal
/Msg User|#Kanal Text sendet Text an User oder verbundenen Kanal
/ME [Text] sendet einen Aktionstext
/MOde [Kanal] Optionen setzt Kanaloptionen
/NIckname text setzt den eigenen Namen
/NONickname loescht einen gesetzten Namen
/NOTify [Calls] setzt Calls, deren Erscheinen gemeldet werden soll
/PERSonal [Text] setzt persoenliche Beschreibung
/PASSwort setzt persoenliches Passwort
/NIckname [Name] setzt Nickname
/SYSop macht dich zum Convers Sysop
/PRompt abcd Prompt setzen a=Query b=Normal c=Ctrl-g d=Ctrl-h
/Quit convers verlassen
/QUEry [User] startet/beendet private Konversation
/Topic [#Kanal] [Text] setzt Thema des Kanals. Thema=@ entfernt Thema
/UPtime wie lange laeuft dieser conversd ueberhaupt schon ?
/Verbose Laber-Modus an/aus
/VERSion zeigt Info zu dieser Version
/SYSInfo convers host information
/Who [N|*|A|L|U|@] zeigt User und Ihre Kanaele
/WIdth [Wert] setzt/zeigt Zeilenbreite
@@ALL
Wenn Du im /query Modus bist, wird Text mit vorangestelltem /all behandelt,
als wuerdest Du ohne /query arbeiten.
@@AWAY
/away setzt den Abwesendheitstext, den die anderen lesen koennen. Beim
Aufruf ohne Argument wird der Text geloescht und man gilt wieder als anwesend.
@@BEEP
(/beep /bell)
Hiermit wird das Klingelzeichen (^G), welches vor jeder Mitteilung gesendet
werden kann, ein- oder ausgeschaltet. Diese Kommando ist eigentlich eine
Untermenge des /prompt Befehls, siehe dort.
@@CHAR
Mit diesem Befehl kannst Du dem Convers mitteilen, welche Zeichensatzwandlung
Du haben moechtest. Die Syntax ist
/char [In-Typ [Out-Typ]]
Wenn Du z.B. mit einem Atari ST arbeitest, koenntest Du "/char atari" eingeben.
Wenn Du einen PC benutzt und Umlaute im TeX-Stil schreiben moechtest, gebe
"/char tex pc" ein, "/char ?" listet die Moeglichkeiten auf. Spiel ein
bisschen mit dieser Funktion.
Der Dank dafuer geht an Thommy,<dl9sau@zedat.fu-berlin.de> (Internet mail)
<dl9sau@db0sao.ampr.org> (AmPR-Net mail). Vorschlaege sollten an ihm
weitergeleitet werden.
Diese Einstellung wird bei "/pers" gespeichert (siehe dort).
Wichtig ist hier weniger der Rechnertyp, sondern der Zeichensatz, den das
verwendete Programm benutzt.
@@DEST
(/destinations /hosts)
Alle Pingpong-Hosts, die miteinander verbunden sind, werden aufgelistet. Die
Zahlen zeigen die Antwortszeiten in Sekunden. Mit "/d #" kann eine andere
Darstellung gewaehlt werden.
@@EXCL
(/exclude /imsg /iwrite)
Dieses Kommando ist das Gegenteil des /msg Befehls. Hiermit sendest Du Text
an alle User dieses Kanals ausser dem einen als ersten Parameter angegebenen.
Da der Text intern als privater Text an die Anderen verschickt wird, werden
die Links etwas mehr belastet :-)
@@FAID
*** User Liste mit (/W *)
*** Nickname setzen mit (/NI name)
*** Passwort setzen mit (/PASS neu passwort)
*** Personal text setzen mit (/Pers Name * QTH * LOC)
@@FILT
Wenn Du die Texte bestimmter User nicht lesen moechtest, so kannst Du sie
hiermit in eine Liste einfuegen. Alle Texte werden dann ausgefiltert, bei
persoenlichen Texten ("/msg") wird eine Rueckmeldung an den Absender geschickt.
Das Setzen/Loeschen geschieht wie bei "/notify", also z.B.
"/filter + dg7ncq - db4ut" setzt dg7ncq und loescht db4ut aus der Liste.
@@HELP
(/? /help)
Das Hilfekommando kann von zusaetzlichen Parametern gefolgt sein. Du hattest
bestimmt "/help help" eingetippt um dies hier zu sehen, gelle ? :-)
Der Schraegstrich darf hier nicht vor den fraglichen Kommandos stehen.
@@INVI
Es wird eine Einladung zum genannten User geschickt. Diese Einladung wird
durch das gesamte Netz geleitet. Wenn derjenige auf einem anderen Kanal
ist und Dein Kanal als privat eingerichtet ist, so kann er auf Deinen
Privatkanal wechseln. Wenn er im Befehlsinterpreter eines Knotens ist, so
empfaengt er die Einladung, er kann dann aber nicht direkt auf Deinen
Privatkanal kommen, weshalb er nochmals einzuladen ist.
@@JOIN
(/channel /join)
Verbindet Dich zusaetzlich mit dem gewuenschten Kanal. Im Gegensatz zu aelteren
conversd-Implementationen, verbleibt man auch noch im vorherigen Kanal, denn
es wird eine Mehrfach-Kanal-Verbindung unterstuetzt. Um einen Kanal zu
verlassen, musst Du "/leave" verwenden. Ohne Angabe eines Kanals, werden Infos
zu den von Dir benutzten Kanaelen ausgegeben.
@@LEAV
Mit diesem Befehl kannst Du entweder den derzeitigen oder den angegebenen
Kanal verlassen. Wenn dieser der letzte ist, so wird conversd verlassen.
@@LINK
Der momentane Linkstatus wird angezeigt. Dies sind normalerweise Hostname,
Linkstatus, Laufzeiten, Versionskodes und Statuszeit, gefolgt von der Zeit
des naechsten Connectversuches und Anzahl der Versuche (auf Disconnecteten
oder im Aufbau befindlichen Links), bei bestehender Verbindung werden die
Queue-Laengen und Byte-Statistiken angezeigt.
Wenn Du Sysop bist, kannst Du Verbindungen Setzen oder Loeschen. Es wird
dann auch noch zusaetzlich in Klammern der Verbindungsweg angezeigt.
Syntax: /l [@ Host]|[[+]|[-] Host [Port [via]]]
Mit "/l @ Host" koennen andere Hosts fernabgefragt werden (wird nicht von
allen Versionen unterstuetzt).
@@LIST
Alle Kanaele, ihre Themen, Optionen und User werden angezeigt.
@@ME
(/me /action)
Dieser Befehl dient dazu, den Usern auf Deinem Kanal eine Taetigkeit
anzuzeigen. Wenn du z.B. "/me gaehnt" eingibst, bekommen alle User dieses
Kanals folgendes angezeigt:
*** dad213@Dessau gaehnt
@@MODE
Das mode-Kommando ist eines der kompliziertesten. Es wird wie folgt benutzt:
/mode [<Kanal>] <+|-><t|i|s|m|p|l|o<User>>.
Die Optionen bedeuten folgendes:
t - Das Thema des Kanals laesst sich NUR von Kanal-Sysops aendern
i - Der Kanal wird Usern anderer Kanaele verheimlicht
s - Der Kanal ist geheim, die Kanalnummer wird nicht mehr angezeigt
m - Der Kanal ist moderiert, nur Kanal-Sysops duerfen schreiben
p - Der Kanal ist privat, man benoetigt eine Einladung zum Einloggen
l - Der Kanal ist lokal, Texte werden nicht weiterverteilt
o<User> - macht <User> zum Kanal-Sysop (kein - moeglich)
Das Plus setzt eine Option, der Strich loescht sie. Es sind Kombinationen
erlaubt, so wuerde "/mode 69 -s+todc6iq" folgendes bewirken: Kanal 69 ist
nicht mehr geheim, aber die Themen duerfen nur vom Kanal-Sysop gesetzt
werden. Zusaetzlich wird dc6iq ein Kanal-Sysop.
Ohne Angabe von Parametern werden die derzeitigen Optionen angezeigt.
Auf Kanal 0 sind keine Modes setzbar!
@@MSG
(/msg /send /write)
Sendet einen Text an einen speziellen User oder an einen verbundenem Kanal.
Wenn der Text an einen Kanal gehen soll, so muss man folgendes eingeben:
"/msg #<Kanal> <text>". Wenn das Ziel ein User ist, so kann er den Text
an den zusaetzlichen Sternchen erkennen. Z.B. wenn dc6iq eine Nachricht an
dc1ik mit "/m dc1ik Das ist ein Test" sendet, so erhaelt dc1ik folgendes:
"<*dc6iq*>: Das ist ein test".
@@NICKNAME
Setzt den eigenen Namen, der zusaetzlich vor dem Rufzeichen ausgegeben
wird. Der Name wird auch andere Convers-Hosts weitergeleitet. Ein gesetzter
Name kann mit den Kommandos "/nick @" oder "/nonickname" geloescht werden.
@@NONICKNAME
Loescht einen gesetzten Namen (siehe auch "/nick @").
@@NOTI
Du wirst informiert, wenn eine bestimmte Person in der Personenliste im
convers erscheint. Z.B. fuegt "/notify + dc1ik" dc1ik in die Liste ein,
"/notify - db4ut" entfernt db4ut aus der Liste. Das Einfuegen/Loeschen
mehrerer Calls in einem Kommando ist moeglich, z.b. bewirkt
"/notify + dc1ik db4ut - dc6iq dh2paf +dg3kcr", dass dc1ik, db4ut und dg3kcr
eingefuegt und dc6iq und dh2paf entfernt werden. Das Entfernen von Calls,
die nicht in der Liste stehen wird ignoriert.
@@PERS
(/note /personal)
Es kann eine kurze Beschreibung zu Deiner Person gesetzt werden, den die
anderen User mit "/who" sehen koennen. Z.B: "/pers Fred, Buechig, JN49fb".
Mit einem @ als Text wird sie geloescht. Diese Implementation merkt sich
bis zu 118 Zeichen der Beschreibung und setzt diese dann automatisch beim
Einloggen (die "/char" und "/width" Einstellungen werden dann auch
gespeichert und beim Einloggen gesetzt). Speichern ist auch ohne Setzen
moeglich, einfach ohne Text aufrufen.
@@PROM
Das prompt-Kommando nimmt vier Argumente in einer zusammenhaengenden Zeichen-
kette. "/prompt abcd" setzt "a" als "/query"-Prompt, "b" fuer den normalen
Prompt. "d" ist ein Zeichen um den Prompt zu loeschen (also normalerweise
Backspace (^H) oder Delete). "c" ist ein Zeichen, welches vor jedem Text,
den Du empfaengst, gesendet wird (normalerweise also ^G).
@@QUER
Der angegebene User ist in Zukunft der einzige Empfaenger fuer alle Texte,
die Du eingibst. Diese werden dann als private Texte an den User geschickt,
wie bei "/m". Zum Ausschalten, ohne Argument aufrufen, danach geht alles
wieder wie gewohnt an den Kanal. Sozusagen ein Privatmodus.
@@QUIT
(/bye /exit /quit)
Wenn Du das eingibst, verlaesst Du diesen wunderbaren Ping-Pong-Convers.
Das willst Du doch nicht wirklich? :-)
@@TOPI
Hiermit kann fuer den Kanal ein Thema gesetzt werden. Die anderen User
koennen dieses sehen, wenn sie "/who" oder "/list" eingeben. Wenn keine
Kanalnummer angegeben wird, so wird das Thema des aktiven Kanals gesetzt.
Wird eine Nummer angegeben, so musst Du auch auf diesem Kanal eingeloggt sein.
Um das Thema zu loeschen, ist als Thema ein "@" einzusetzen.
@@UPTI
Dieser Befehl zeigt an, wielange conversd schon aktiv ist.
@@VERB
Schaltet die Laber-Option ein/aus. Du bekommst dann viele Informationen
ueber Aktionen der User (Einloggen/Ausloggen/Texte-setzen/...), auch wenn
diese nicht auf Deinem Kanal sind.
@@VERS
Zeigt etwas Text zu dieser Version (in englisch).
@@WHO
(/users /who)
Dieser Befehl zeigt die eingeloggten User und hat mehrere Optionen:
n [Kanal] tabellarische Darstellung (auf einen Kanal begrenzbar)
a [Kanal] Abwesendheitsliste (auf einen Kanal begrenzbar)
l [Kanal] ausfuehrliche Liste (auf einen Kanal begrenzbar)
u Userliste ausfuehrliche Infos zu den Usern in der Userliste
* [Kanal] Liste der Idlezeiten (eigener oder angegebener Kanal)
@ Host auf Host begrenzte tabellarische Darstellung
ohne Option wird die kurze Darstellung, wie bei "/list", ausgegeben.
@@WIDT
Macht conversd Deine Bildschirmbreite (Zeichen/Zeile) bekannt. Die Meldungen
der anderen wird dann auf diese Breite gebracht. Voreingestellt ist 80.
Diese Einstellung wird bei "/pers" gespeichert (siehe dort).
@@NICK
/NIckname [nick] setzt den "nickname"
Setzt den Nickname auf "nick", so das fortan vor Deiner Messages
<dad213:chris> statt <dad213> gesendet wird.
Der Nickname wird auf dem Server Gespeichert und bei jedem Connect
automatisch gesetzt.
Der Nickname darf max. 10 Zeichen lang sein !!
Nur fuer Sysop's
~~~~~~~~~~~~~~~~
/NIchname list Zeigt alle eintraege in der nickname.txt
/NIckname save Speichert die nickname.txt
/NIckname del Call Loescht ein Rufzeichen aus der nickname.txt
@@PASS
/PASS neu [passwort] setzt das Passwort fuer den Convers.
Wenn Password-Authentication gewuenscht ist, nutze den "/pass" Befehl.
pass zeige zeigt das derzeitige Passwort.
neu [Passwort] setzt ein neues Passwort.
loeschen loescht das Passwort.
Ein Passwort kann bis zu 80 Zeichen lang sein.
@@SYSI
*** System Information [pp-3.13a] - Email: dad213@datel-dessau.de
*** PingPong-Release version PP-3.13a (18.08.2004/daa531/dad213)
@@SYS
/SYSop [nummer] Convers-Sysop werden
Nach Aufruf dieses Befehls wird eine Zufallsnummer zwischen 0 und 99999
angezeigt. Nimm jede Zahl, multipliziere mit der verbunden Geheimnummer
in der Konfiguration (TNN179.PAS) summiere sie auf, und antworte z.B mit "99999"
@@CTEXT
*** Looking up DL-Convers
*
* (Hilfe in Deutsch)
*
* ACHTUNG!! Neue Convers-Befehle siehe (/HELP)
*
@@----
rev3.13a/04.09.2004 by DAD213

351
doc/deutsch.txt Executable file
View file

@ -0,0 +1,351 @@
"Convers Sitzung wurde beendet.\rEnter command. Befehl HELP fuer Hilfe.\r"
"*** Du bist bereits im convers-mode.\r"
"Der Convers-Hostname ist zu lang (max.9 Zeichen)!\r"
"Convers-Hostname erfolgreich geaendert in %s.\r"
"Gesperrt!\r
"%s%s@%s ist Abwesend:\r %s\r"
"%s%s@%s ist wieder zurueck.\r"
"%s%s macht Dich zum Kanal-Sysop fuer Kanal %d\r"
"%s%s@%s ist jetzt Sysop fuer Kanal %d\r"
"Kanal %d"
"%s%s@%s auf %s setzt persoenlichen Text:\r %s\r"
"%s%s@%s auf %s entfernt persoenlichen Text.\r"
"%s%s@%s auf %s setzt Kanal-Topic:\r %s\r"
"%s%s@%s auf %s entfernt Kanal-Topic.\r",
"geheimen Kanal"
"unsichbaren Kanal"
"%s%s:%s@%s auf %s setzt persoenlichen Text:\r %s\r"
"%s%s:%s@%s verlaesst %s.\r"
"%s%s@%s verlaesst %s.\r"
"%s%s@%s verlaesst %s (%s).\r"
"%s%s:%s@%s betritt %s\r"
"%s%s@%s betritt %s\r"
"%s%s ist abwesend: %s"
"%sIhre Nachrichten werden dadurch Ignoriert %s"
"\r\a\a%sMessage von %s...\rBitte verbinden mit %s auf Kanal %d.\r\a\a\r"
"%s%s Einladung gesandt zu %s @ %s."
"%sUser %s ist bereits auf diesen Kanal."
"*** Unbekannter Befehl '/"
"'. Benutze /HELP fuer Hilfe.\r"
"*** Du bist abwesend oder etwa nicht ? :-)\r"
"*** Dies ist ein moderierter Kanal. Nur Kanal-Sysop koennen schreiben.\r"
"*** Gefragter User verliess Kanal.\r"
"%sDu bist jetzt Abwesend.\r"
"%sDu bist wieder da.\r"
"%sWarst du weg ? :-)\r"
"*** Beep modus %sgeschalten\r"
"%sDu bist jetzt auf Kanal %d. Hier sind %d User Online.\r"
"*** Topic wurde gesetzt von %s (%s):\r "
"*** Also zugefuegt:"
"kanal %d (privat)"
"kanal %d (%d benutzer)"
"%sKanalnummer muss im bereich 0..%d sein.\r"
"%sKanal %d ist bereits Standard.\r"
"%sDu brauchst eine Einladung, um den Kanal zu betreten %d.\r"
"%s%s@%s Versucht privaten Kanal zu betreten."
"%sKann Kanal nicht betreten %d kein freier Platz.\r"
"%sDu bist jetzt auf Kanal %d. "
"Du bist alleine.\r"
"Hier sind %d User Online.\r"
"*** Zeichensatz in/out ist %s/%s.\r"
"Unbekannter Zeichensatz: '%s'. Benutze ein von diesen:\r%s***\r
"*** Zeichensatz in/out gesetzt auf %s/%s.\r"
"Hilfe für diesen befehl nicht eingebaut...\rWrite it - or try anthor one :-)\r"
"Befehl nicht gefunden...\r"
"*** Kein weg gefunden zu %s\r"
"%sNeuer Standard-Kanal: %d.\r"
"%sDu verlaesst Kanal %d.\r"
"%sDu bist nicht im Kanal %d.\r"
"*** Request gesendet zu %s.\r"
"Du musst Sysop sein um ein neuen link setzen zu koennen\r"
"Link-Tabelle voll!\r"
"Argument Fehler!\r"
"%sDu hast den Kanal nicht betreten %d.\r"
"%sBenutzer nicht gefunden: %s.\r"
"%s%s ist Abwesend: %s\r"
"*** nicht existierenter Kanal !\r"
"*** Keine Optionen auf Kanal 0 !\r"
"*** Du bist kein Kanal-Sysop !\r"
"%s @ %s PingPong-Release %5.5s (TNN) - Benutze /HELP fuer Hilfe.\r"
"%sDu brauchst eine Einladung fuer Kanal %d.\r"
"%s%s@%s Versucht Privaten Kanal zu betreten."
"*** Du eroeffnest einen neuen Kanal %d.\r"
"*** Pers-text gesetzt auf.\rHallo, %s\r"
"*** Bitte dein personal text eintragen. ( /H PERS )\r"
"%sDu wirst benachrichtigt, wenn einer der folgenden\rUser sich ein-/ausloggt:\r"
"%s wird gefiltert:\r"
"*** %s ist Online.\r"
"gespeichert.\r"
"*** Kein Pers-Text gespeichert.\r"
"geloescht.\r"
"gespeichert.\r"
"*** Prompting mode %sgeschalten\r"
"ein"
"aus"
"Du musst Sysop sein um neu zu starten!\r"
"Link zu %s delocked.\r"
"%sBenutzer nicht gefunden: %.20s.\r"
"%sStarte private unterhaltung mit %s.\r"
"%sBeende private unterhaltung mit %s.\r"
"%sKanal-Topic auf Kanal %d enternt von %s (%s).\r"
"%sKanal-Topic gesetzt auf Kanal %d von %s /%s).\r"
"%sAktueller Kanal-Topic auf Kanal %d von %s (%s)\r "
"%sKein aktuller Kanal-Topic auf Kanal %d\r"
"%sKanal %d existiert nicht.\r"
"*** %s@%s rennt seit %s\r"
"*** Verbose mode %sgeschalten\r"
" Diese Convers Implantation ist urspruenglich von Dieter Deyke (DK5SG)\r geschrieben, und von Fred Baumgaten (DC6IG) modifiziert.\r Neu Implementierung und erweiterung von Odo Roscher <dl1xao@db0hhb.#hh.deu.eu>\r "
" Diese Version (3.13a) beinhaltet Passwort-Schutz und Nickname-funktion\r und wurde von Olli (DAA531) <daa531@gmx.de> erweitert/modifiziert.\r\r Diese Version (3.13a) wurde von Chris (DAD213)\r <dad213@datel-dessau.de> ins Deutsche uebersetzt.\r"
" Zeit Pers-Text\r"
"Login Status\r"
"Login Pers-Text\r"
"(anwesend)"
"\r Abwesend: "
" (seit "
" (WEG)"
"\r Letzte Aktivitaet: "
"*** Akltuelle Bildschirmbreite ist %d\r"
"*** erlaubt sind 32 bis 255\r"
"*** Bildschirmbreite gesetzt auf %d\r"
"*** Urgent message from operator (%s):\r "
"*** Links at %s"
"free"
"*** Nickname gesetzt auf: %s\r"
"Kein Login moeglich!\rRufzeichen %s ist am Host %s eingeloggt!\r"
"*** Dein Passwort wurde geloescht!\r"
"*** Kein Passwort gesetzt!\r"
"*** Dein Passwort lautet:\r%s\r"
"*** Es ist kein Passwort definiert!\r"
"*** Passwort wurde gesetzt!\r"
"*** Passwort muss mindestens 5 bzw. maximal 80 Zeichen enthalten!\r"
"*** Passwort fehlt!\r"
"*** Syntax: pass <show|new|del> [Neues Passwort]\r"
"*** Passwort ist korrekt!\r"
"*** Passwort ist falsch!\r"
"*** Topic wurde gesetzt von %s (%s):\r %s\r"
"\r*** %d User auf Kanal%s ***\r"
" Durchschnitt: %lu"
"\r%7s00 02 04 06 08 10 12 14 16 18 20 22\r%9s01 03 05 07 09 11 13 15 17 19 21 23 Stunde\r\r"
"\r%7s0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1\r"%7s0 6 2 8 0 6 2 8 0 6 2 8 0 6 2 8 0 6 2 8 0 6 2 8 0 6 2 8 h\r%7sMontag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag\r\r"
" Elap. Zeit\r%6s-3600 -3240 -2880 -2520 -2160 -1800 -1440 -1080 -720 -360 0 Sekunden\r\r"
"> DISCONNECT: Zu viele nicht-DAMA Polls (%u) !!\r"
"WARNUNG: nicht-DAMA Poll #%u, Trennung nach %u !!\r"
"Grafik geloescht!\r"
"SYSTEM-Grafik:\r"
"(G)raph (H)Stunde (B)aud\r (D)Tag (C)ircuits\r (W)oche (F)rei buffers\r (L)2-Links\r (N)odes\r (R)ounds\r (*) Alles\r"
"PORTGRAPH:\r(G)raph <PortNr> (H)our (I)nfo frames\r (D)ay (R)eject frames\r (W)eek (F)rmr frames\r (S)abm frames\r dis(C) frames\r"
" d(M) frames\r (*) All\r"
"\r*** vom DAMA-Master "
"%s<>%s gerissen"
"Sie sind gesperrt.\r"
"\r- Abgebrochen -\r\r"
"Sri, kein Text vorhanden!\r"
"CLI erfolglos!\r"
"Wartend auf AUTOBIN-Transfer...\r
"\rL2 - User:\rPo SrcCall DstCall LS Rx Tx Tr SRTT RxB TxB Baud ConTime Pr Da\r"
"\rL4 - User:\rCall Node S Rx Tx Tr Win SRTT RxB TxB Baud ConTime\r"
"frei"
"frei"
"\rHost-User:\rCH Call F NT RX TX ST RxB TxB Baud ConTime\r-------------------------------------------------------------------------\r" },
"\rTCPIP-User:\rIface SrcCall DstCall NT T3 RxB TxB Baud ConTime\r-------------------------------------------------------------------------\r"
"\r System Statistics: "
"\r Startup: "
"\r\r Port-Statistics:\r\r Links RxB TxB RxBaud TxBaud RxOver TxOver\r"
"\rTotal = "
" Bytes\r"
"\r Error-Statistics:\r\r" RxID RxLen RxCtl Resets\r"
"\rLink-Statistics:\r"
"\rLink to "
" via "
"\rFrames: I UI RR REJ RNR SABM/UA DISC/DM FRMR\r"
"Bytes: Total Info Header Overhead %I %RR %REJ %RNR\r"
" TQual:"
"\rIP-Gateway-Statistics:\r\r"
"free"
"free"
"Warnung - Port nicht activ.\r"
"Unzulaessiges Rufzeichen.\r"
"Unzulaessige Kennzeichnung.\r"
"free"
"free"
"Type-Port--Alias:Call------Route--------------Infotext------------\r"
"Benutzer nicht gefunden!\r"
"Das Sysop Passwort wurde geaendert!\r"
"Fehler: Das Passwort muss 80 Zeichen enthalten!\r"
"editing>%s\rEnter text. Ende mit '.' in einer neuen Zeile.\r"
"free"
"\r (min) (now) (max)\r Rounds/sec: %8lu %8lu %8lu\r"
" Free Buffers: %8u %8u %8u\rOverall Throughput:%18lu %8lu Baud\r Aktive L2-Links:%18u %8u\r Aktive Circuits:%18u %8u\r Aktive Nodes:%18u %8u\r"
"\r Aktive Sockets:%18u %8u\r"
"\r Buffer usage: %lu%%"
"\r Network Heap: %lu Bytes"
"\r CPU load: %lu%%"
"TX: Once:%11lu Repeated:%10lu IQual:"
" Copyright by NORD><LINK, free for non-commercial usage.\r See www.nordlink.org for further information.\r This version compiled for %d Ports, %d L2-Links and %d Circuits.\r %s\r"
"Du sprichst jetzt mit %s. Verlassen mit /q\r"
"\rNachricht von %s (benutze TALK <call> <text> um zurueck zu schreiben):\r %s\r"
"Consolen MyCall:%s\r"
"Unzulaessiger dateiname!\r"
"EDIT/LOAD durch anderen Sysop in gebrauch\r"
"Open error!\r"
"Datei error!\r"
"Statistik-Tabelle geloescht!\r"
"\rUnzulaessiger Port\r"
"\rPort abgeschalten\r"
"Kein Text\r"
"Unzulaessiger Call\r"
"Nachricht gesendet\r"
"Kein User\r"
"Keine Argumente\r"
"Keine mailbox!\r"
"Keine DX-cluster!\r"
"Alias zu lang, max. %u Zeichen.\r"
"Befehl zu lang, max. %u Zeichen.\r"
"can't create %s !\r"
"kann nicht oeffnen %s !\r"
"%lu Bytes frei\r"
"\r*** Nachricht vom Sysop: %s ***\r"
"%3u link(s) disconnected.\r"
"%s.TNB gespeichert...\r"
"Fehler: Tracen auf Port %u ist nicht erlaubt!!!\r"
"Fehler: Port %u ist nicht aktiv!!!\r"
"Warning: max. trace level von dieser TNN version ist %d\r"
"\rAllBuffer : %lu (%lu) a %lu Bytes\r"
"Wrong Owner: Buffer:%lu Wert:%d\r"
"FreeBuffer: %lu (%lu)\r"
"Errors : %lu\r"
"z.Z definierte aliasses:\r"
"Kein alias gespeichert\r"
"Alias gespeichert.\r"
"Kann nicht speichern, kein speicher.\r"
"Alias geloescht.\r"
"Kein solche definierte Namensabkuerzung, kann nicht loeschen.\r"
" nicht geloescht!\r"
" geloescht.\r"
" ist eingeschraenkt "
"zugaenglich machen verweigert\r"
"zum Zugang level-2\r"
"zu Maximum "
" simultanous Anschluesse\r"
"from using Port "
"Datei hat keine laenge!\r"
"Datei nicht gefunden!\r"
"Keine L2-link gefunden.\r"
"Fehler: Keine Portangabe oder ungueltiger Port! (Beispiel: MO S 1).\r Weitere Hilfe mit HELP MO .\r"
"Fehler: Sie haben keine optionen angegeben! (Beispiel:MO S 1).\r Weitere Hilfe mit HELP MO .\r"
" ist aus"
"Unzulaessiges program!\r"
"Unzulaessiger Hostcommand\r"
"%s\rNode / User unbekannt! Bitte Port angeben, wenn %s ein User ist:"
" (Telnetport ist gesperrt!)"
" (Httpdport ist gesperrt!)"
"Willkommen bei %s"
"* CHANNEL NOT CONNECTED *\a\n"
"CONNECTED to "
"DISCONNECTED fm "
"CONNECT REQUEST fm "
"INVALID COMMAND\r"
"Laenge = %d; Call = %s\n"
"\r receive %u"
" send %u unacked 0"
"INVALID VALUE: %u"
"nicht vorhanden"
"CHANNEL NOT CONNECTED"
"[FRAME EMPTY?!?]"
"[FRAME TOO LONG]"
"INVALID COMMAND: "
"INVALID EXTENDED COMMAND: "
"\rERROR : Port oder Call unzulaessig !\r"
"ARP-Tabelle von "
"\rDestination P Interface Callsign Digi Mode Timer\r"
"Meine IP address: "
" IP address : "
"kein weg zu "
"IP-Routes von "
"\rDestination------Len--Flags-Interface--Gateway----------Metric----\r"
"Unzulaessige IP addresse!\r"
"\rERROR : Unzulaessige IP-Adresse !\r"
"\rINP: frame error, len = %u, left = %u\r"
"\r[AX25 Fragment; %u Frame(s) to follow - original PID %X]\r"
"\r[AX25 Fragment; %u Frame(s) to follow]\r"
" (UNGUELTIGE ALIAS!)\r"
" (UNGUELTIGE IP ADDRESS!)\r"
"\rAlle Nodes die ueber %s geroutet werden zeigen:\r"
"Fehler: Connect-Status von 0 bis 1!\r"
"Fehler: Ungueltiger L4-Parameter!\r"
"Rufzeichen steht nicht in der Links-Liste!\r"
"Ungueltiger Befehl. Befehl HELP fuer Hilfe.\r"
"Commandline zu lang.."
" tabelle voll\r"
"TheNetNode wird beendet!\n"
"Date Time Port"
" Rx Tx Call\n"
" RX TX Call RX-Rej TX-Rej DAMA\n"
"Sri, kann tempfile nicht oeffnen...\r"
"%24.24s %6.6s: zurueckgewiesen (mailbox)\n"
"%lX-%lX (%lu Messages)\r"
"BROADCAST eingeschalten auf port %u (%s).\r"
"Server call: "
"\rMessage pool: "
"Empty\r"
"PACSAT BOX-Call ist jetzt "
"Filesystem neu geladen\r"
"CRC Fehler\n"
"Sprache %s kann nicht geladen werden.\r"
"Sprache ist auf %s eingestellt.\r"
"Fehler in Sprachdatei %s Zeile %d !!!\n%s\n"
"Folgende Sprachen wurden gefunden:\n"
"Es wurden keine Sprachdateien gefunden\n"
"Mein LogLevel ist %d\r"
"Fehler: Loglevel werte von 0 bis 4!\r"
"(%d/%d)\rAlias-:Call------IP--------------Mode-Port--PMode---Time----RX-----TX---Online-\r"
"Lausche auf UDP-port %u\r"
"AX25IP : kann nicht erstellen ip raw-socket: %s\n"
"AX25IP : kann nicht setzen non-blocking I/O auf ip raw-socket\n"
"AX25IP : kann nicht setzen SO_KEEPALIVE fuer ip : %s\n"
"AX25IP : kann nicht setzen IPTOS_THROUGHPUT fuer ip : %s\n"
"Fehler: startWinsock, fehler code: %d\n"
"AX25IP : kann nicht erstellen socket: %s\n"
"AX25IP : kann nicht setzen non-blocking I/O auf udp socket\n"
"AX25IP : kann nicht setzen SO_KEEPALIVE fuer udp : %s\n"
"AX25IP : kann nicht setzen IPTOS_THROUGHPUT fuer udp : %s\n"
"AX25IP : kann nicht erstellen udp socket: %s\n"
"Routing tabelle ist voll; eintragung ignoriert.\n"
"Ungueltige IP-Adresse!\r";
"Unzulaessige Option\r"
"Unzulaessiger Parameter\r"
"AX25IP-Port nicht eingeschaltet!!!\n"
"UDP-Port unzulaessig, nicht geaendert !!!\r"
"Fehler: Eingestellter UDP-Port misslungen, UDP-Port wurde nicht geaendert !!!\n"
"UDP-Port erfolgreich geaendert\r"
"Fehler in Sprachdatei %s.txt,\nmaximale Zeilenlaenge von %d ueberschritten (letzte Meldung %d)!!!\n"
"Ungueltige Sprache (%s)!!!\n"
"Fehler in Sprachdatei %s.txt,\nmaximale Zeilenlaenge von %d unterschritten (letzte Meldung %d)!!!\n"
"Fehler in Sprachdatei %s Zeile %d ist zu lang !!!\n"
"Fehler: Loglevel wert von 0 bis 3!\r"
"Mein TCP-Port: %u\r"
"TCP-Port nicht eingeschaltet !!!\n"
"TCP-Port nicht guelig, keine Aenderung !!!\r"
"Fehler: Einstellter TCP-Port misslungen, TCP-Port wurde nicht geaendert !!!\r"
"TCP-Port erfolgreich geaendert.\r"
"Kann nicht socket fuer IPX erstellen : %s\n"
"Kann nicht Bind IPX addresse: %s\n"
"Fehler: Error: can't set non-blocking I/O on IPX socket"
"Fehler: Winsock kann nicht initialisiert werden!\n"
"Fehler %s: Socket kann nicht erstellt werden!\n"
"Fehler %s: ioctlsocket kann nicht initialisiert werden!\n"
"Fehler %s: Bind kann nicht initialisiert werden!\n"
"Fehler %s: Listen kann nicht initialisiert werden!\n"
"form_referer string zu lang"
"Route ist bereits eingetragen, bei neueintrag erst loeschen!!!\n"
"Sie sind schon als Sysop angemeldet!.\n
"*** Conversd rennt seit: %s\r"
"Ungueltige Qualitaet!\r"
"*** Hostname ist %s.\r"
"Kein Senden moeglich, Port ist ausgeschaltet!\r"
"Timeout fuer Dynamische Lern-Routen ist %u sekunden.\r"
"HTML-Statistik ist %d.\r"
"Error: HTML-Statistic wert ungueltig (0 - 1)"
"Error: timeout wert ungueltig (0 - 86400) !\r"
" (Port ist gesperrt!)\r"
"\r*** Insgesamt %d User auf allen Kanaelen ***\r"

View file

@ -0,0 +1,199 @@
Commands may be abbreviated. Commands are:
/Away [text] Mark user as being away
/ALl text Send text to all users
/Beep Toggle Beep-Mode
/Channel n Switch to channel n
/CHARset [in [out]] Change terminal emulation (default ansi)
/Destinations List reachable ping-pong hosts
/Filter [calls] Set calls you want to filter
/Help [command] Print help information
/Invite user Invite user to join your channel
/IMsg user text Send Text to all on channel except user
/Links [args] List or setup links
/LISt List all channels and topics
/LEave [channel] Leaves specified or default channel
/Msg user|#channel text Send message to a user or joined channel
/ME text Write action to channel
/MOde [channel] options Set channel options
/NOtify [calls] Send notice if one of calls signs on
/Personal [text] Set personal description
/PRompt abcd Prompts a=query b=std c=ctrl-g d=ctrl-h
/Quit Terminate the convers session
/QUEry [user] Start/End a private conversation
/Topic [#chan] [text] Set channel topic. Text=@ removes topic
/UPtime How long is this conversd up ?
/Verbose Toggles verbose Flag
/VERSion Show version information
/Who [N|*|A|L|U|@] List users and their channel numbers
/WIdth [value] Set/show terminal width
@@ALL
If you are in /query mode, a text written with /all at the front will
be displayed as a normal convers text written to all users on this channel.
@@AWAY
/away sets an away-text for the other users. called with no additional
arguments, you are marked as being back again.
@@BEEP
(/beep /bell)
The beep command toggles a warning bell (^G) being sent before every message
coming from another user. This command really is a subset of the /prompt
command, see there.
@@CHAR
With this command, you can tell the convers deamon which type of umlauts you
prefer to use. The Syntax is /char [intype [outtype]]. For example, if you
work on an Atari st you could say: "/char atari atari". If you use a pc and
like to write your own umlauts in TeX style, "/char tex pc" may work. Use
"/char ?" to see a list. Play a bit around with this feature !
Special Thanks to Thommy, <dl9sau@zedat. fu-berlin.de> (Internet mail)
<dl9sau@db0sao.ampr.org> (AmPR-Net mail) who wrote this nice feature.
Suggestions to this feature should be redirected to him :-)
Your char-setting will be stored when using "/pers", see there.
Please notice; use the correct charset for your program, not for your type
of computer.
@@DEST
(/destinations /hosts)
All Pingpong hosts in the network being connected to each other are listed.
The numbers shown in the list are response times in seconds. Use "/d #" to
see another form of this list.
@@EXCL
(/exclude /imsg /iwrite)
The exclude command is the opposite of the /msg command. You can send
messages to all users on the channel except the one given as the first
parameter. Internally these messages are sent as private messages to the
users, so links are flooded a bit more :-)
@@FAID
Welcome to the convers, select the right conversion for umlauts (/char),
set your personal description (/pers)
and change (/join) to another channel of your interest, if you want.
Whith /who you get an overview of the channels, more help with /help.
Have fun.
@@FILT
If you don't want to read texts from certain users, you can set a list
of calls. Messages from this calls are discarded for you. The syntax is
similar to "/notify". E.g. "/filter + dc1ik - db4ut" adds the user dc1ik
to the filter and removes db4ut from the list.
@@HELP
(/? /help)
The help command may be invoked with an additional parameter. I believe you
hacked in "help help" to see this, right ? :-). better try out help options
that are followed by an additional command.
@@INVI
An invitation tho the named user is sent. The invite is passed through all
convers nodes in the net. If the user is on another channel, he will be able
to join your private channel. If he is in the commandinterpreter on a node,
he will receive the invitation message. In the latter case he will be unable
to join a private channel directly.
@@JOIN
(/channel /join)
Join another channel. Unlike other other conversd implementations Ping-Pong-
conversd supports multiple channel joins the same time. Thus the old channel
is not left. You may do this by invoking "/leave".
@@LEAV
Invoking this command you will leave the actual channel or the specified
channel. If the given channel is your last existence in the convers channel,
you'll quit the whole program.
@@LINK
The current link state is displayed. In the standard version, host name,
link state, link round trip times, neighbour revision codes and state time
followed by time of next try and count of connect tries (on disconnected or
connecting links) are shown, connected lines print out their queue length
and total transmit statistics.
If you are sysop, you may also set up or remove links at runtime.
Connection-info will be shown in brackets additionally.
Syntax: /l [@ host]|[[+]|[-] host [port [via]]]
With "/l @host" you are able to get info from host (not all versions support
this function).
@@LIST
All channels, their topics (if set), flags (if some) and users are displayed.
@@ME
If you want to display an action you take, you might use this command. E.g.
entering the line "/me yawns" all connected users in this channel will see
a message like: "*** dc6iq yawns"
@@MODE
The mode command is one of the most complicated ones. It is invoked with
/mode <channel> <+|-><t|i|s|m|p|l|o<name>>.
Flags may be a set of the following:
t - channel topic may be set by channel operators only
i - channel is invisible for users not on it
s - channel is secrect, only its number not displayed
m - channel is moderated, only channel-operators may talk
p - channel is private, invitation needed to join here
l - channel is local, no text forwarding to other nodes (NYI)
o<name> - make <name> a channel operator
The plus indicates an option to be set, a dash resets the option.
A combination of + and - is allowed so the following command will work:
"/mode 69 -s+todc6iq". Channel 69 is no longer secret, but topics may be
set only by channel operators. In addition the user dc6iq becomes a channel
operator.
Without parameters, the current settings will be listed.
On channel 0 it is impossible to set modes!
@@MSG
(/msg /send /write)
Send a text to one special user or a joined channel. If the message should
be redirected to a channel, The command must be invoked in this syntax:
"/msg #<channel> <text>". The adressee (if user) can indicate the private
character of the message due to additional asterisks in his received lines.
a mesage written by dc6iq to dc1ik looks like this: "/m dc1ik This is a Test"
will be received by dc1ik like this: "<*dc6iq*>: This is a test".
@@NOTI
You are notified if one person out of the notification list appears on any
channel in this convers. E.g. "/notify + dc1ik" adds the user dc1ik to the
notification list, "/notify - db4ut" removes him from the list. The list is
initially treated as if a plus "+"-sign was given, multiple lists may be
specified. The following command would be legal and would result in adding
dc1ik, db4ut and dg3kcr to the list, while removing dc6iq and dh2paf:
"/notify dh2paf + dc1ik db4ut - dc6iq dh2paf +dg3kcr"
Removing non-members to the list is ignored.
@@PERS
(/note /personal)
A brief description can be set up, accessible to all users via the "/who"-
command. A typical Message looks like this: "/pers Fred, Buechig, JN49fb".
The description can be deleted with "/pers @".
The digi stores up to 118 chars of this description and set it automatically
when you enter convers (the settings of "/char" and "/width" will be stored
and set on login, too). Storing is also possible with simply "/pers".
@@PROM
The prompt command takes up to four arguments in one concatenated string.
Thus "/prompt abcd" will set up "a" for the query prompt, "b" for the
standard prompt. "d" is the character to remove the prompt, and "c" is
displayed whenever a text is sent to you. Normally you make "c" a control-G
(beep char) and "d" a backspace or delete character (control-h or 0x7f).
@@QUER
The username given as argument will be the only recipient for all further
texts. They are send as private messages (just like /m). With no optional
argument, the further texts go into the whole channel again.
@@QUIT
(/bye /exit /quit)
Passing this command to conversd, you will retire from the famous Ping-Pong
conversation. I hope you enjoyed this stuff :-)
@@TOPI
A brief description of the channel topic can be set. Other users can look
it up with the "/who quick" or "/list" commands. If the channel number is
omitted, the topic will be set to the current channel, else to the desired
one. If no #channel is given, the topic will appear on the current channel,
if specified, the topic on that channel will be set (only if youre logged
on to that channel). To clear a topic, just try to set a topic like "@" :-)
An empty topic command diplays the current's channel topic.
@@UPTI
The uptime command tells us how long this conversd is up and running.
@@VERB
The verbose flag is toggled. You will be flooded with information if you
enable this feature.
@@VERS
Print out version information to this software.
@@WHO
(/users /who)
This command shows the users and has multiple options:
n [channel] tabular form (limitable to one channel)
a [channel] away-text listing (limitable to one channel)
l [channel] long listing (limitable to one channel)
u users detailed infos to specified users
* [channel] listing of idle-times (own or specified channel)
@ host to specified host limited tabular form
without option you get a brief listing ("/list").
@@WIDT
Tell conversd about your screen width. Then formatted messages will use the
entire screen. It is set to 80 by default.
Your width-setting will be stored when using "/pers", see there.
@@----
rev3.12c/20001003

View file

@ -0,0 +1,205 @@
Kommandos koennen abgekuerzt werden. Kommandos:
/Away [Text] markiert Dich als abwesend
/ALl Text Text an alle User Deines Kanals
/Beep Beep-Modus an/aus
/Channel n wechselt auf Kanal n
/CHARset [rein [raus]] setzt Zeichenwandler (ANSI ist Voreinstellung)
/Destinations listet erreichbare ping-pong Hosts
/EXClude User Text sendet Text an alle auf Deinem Kanal ausser User
/Filter [Calls] setzt Calls, deren Texte gefiltert werden sollen
/Help [Kommando] gibt Hilfe-Informationen
/Invite User laedt User auf Deinen Kanal ein
/Links [args] listet oder setzt (Sysops) conversd-Partner
/LISt listet alle Kanaele und ihre Themen
/LEave [Kanal] verlaesst Kanal oder derzeitigen Kanal
/Msg User|#Kanal Text sendet Text an User oder verbundenen Kanal
/ME Text sendet einen Aktionstext
/MOde [Kanal] Optionen setzt Kanaloptionen
/NOtify [Calls] setzt Calls, deren Erscheinen gemeldet werden soll
/Personal [Text] setzt persoenliche Beschreibung
/PRompt abcd Prompt setzen a=Query b=Normal c=Ctrl-g d=Ctrl-h
/Quit convers verlassen
/QUEry [User] startet/beendet private Konversation
/Topic [#Kanal] [Text] setzt Thema des Kanals. Thema=@ entfernt Thema
/UPtime wie lange laeuft dieser conversd ueberhaupt schon ?
/Verbose Laber-Modus an/aus
/VERSion zeigt Info zu dieser Version
/Who [N|*|A|L|U|@] zeigt User und Ihre Kanaele
/WIdth [Wert] setzt/zeigt Zeilenbreite
@@ALL
Wenn Du im /query Modus bist, wird Text mit vorangestelltem /all behandelt,
als wuerdest Du ohne /query arbeiten.
@@AWAY
/away setzt den Abwesendheitstext, den die anderen lesen koennen. Beim
Aufruf ohne Argument wird der Text geloescht und man gilt wieder als anwesend.
@@BEEP
(/beep /bell)
Hiermit wird das Klingelzeichen (^G), welches vor jeder Mitteilung gesendet
werden kann, ein- oder ausgeschaltet. Diese Kommando ist eigentlich eine
Untermenge des /prompt Befehls, siehe dort.
@@CHAR
Mit diesem Befehl kannst Du dem Convers mitteilen, welche Zeichensatzwandlung
Du haben moechtest. Die Syntax ist
/char [In-Typ [Out-Typ]]
Wenn Du z.B. mit einem Atari ST arbeitest, koenntest Du "/char atari" eingeben.
Wenn Du einen PC benutzt und Umlaute im TeX-Stil schreiben moechtest, gebe
"/char tex pc" ein, "/char ?" listet die Moeglichkeiten auf. Spiel ein
bisschen mit dieser Funktion.
Der Dank dafuer geht an Thommy,<dl9sau@zedat.fu-berlin.de> (Internet mail)
<dl9sau@db0sao.ampr.org> (AmPR-Net mail). Vorschlaege sollten an ihm
weitergeleitet werden.
Diese Einstellung wird bei "/pers" gespeichert (siehe dort).
Wichtig ist hier weniger der Rechnertyp, sondern der Zeichensatz, den das
verwendete Programm benutzt.
@@DEST
(/destinations /hosts)
Alle Pingpong-Hosts, die miteinander verbunden sind, werden aufgelistet. Die
Zahlen zeigen die Antwortszeiten in Sekunden. Mit "/d #" kann eine andere
Darstellung gewaehlt werden.
@@EXCL
(/exclude /imsg /iwrite)
Dieses Kommando ist das Gegenteil des /msg Befehls. Hiermit sendest Du Text
an alle User dieses Kanals ausser dem einen als ersten Parameter angegebenen.
Da der Text intern als privater Text an die Anderen verschickt wird, werden
die Links etwas mehr belastet :-)
@@FAID
Willkommen im Convers, passe die Wandlung der Umlaute an (/char),
setze Deine persoenliche Beschreibung (/pers)
und wechsele (/join) wenn Du moechtest auf einen anderen Kanal Deiner Wahl.
Eine Uebersicht der Kanaele erhaeltst Du mit /who , weitere Hilfe mit /help.
Viel Spass.
@@FILT
Wenn Du die Texte bestimmter User nicht lesen moechtest, so kannst Du sie
hiermit in eine Liste einfuegen. Alle Texte werden dann ausgefiltert, bei
persoenlichen Texten ("/msg") wird eine Rueckmeldung an den Absender geschickt.
Das Setzen/Loeschen geschieht wie bei "/notify", also z.B.
"/filter + dg7ncq - db4ut" setzt dg7ncq und loescht db4ut aus der Liste.
@@HELP
(/? /help)
Das Hilfekommando kann von zusaetzlichen Parametern gefolgt sein. Du hattest
bestimmt "/help help" eingetippt um dies hier zu sehen, gelle ? :-)
Der Schraegstrich darf hier nicht vor den fraglichen Kommandos stehen.
@@INVI
Es wird eine Einladung zum genannten User geschickt. Diese Einladung wird
durch das gesamte Netz geleitet. Wenn derjenige auf einem anderen Kanal
ist und Dein Kanal als privat eingerichtet ist, so kann er auf Deinen
Privatkanal wechseln. Wenn er im Befehlsinterpreter eines Knotens ist, so
empfaengt er die Einladung, er kann dann aber nicht direkt auf Deinen
Privatkanal kommen, weshalb er nochmals einzuladen ist.
@@JOIN
(/channel /join)
Verbindet Dich zusaetzlich mit dem gewuenschten Kanal. Im Gegensatz zu aelteren
conversd-Implementationen, verbleibt man auch noch im vorherigen Kanal, denn
es wird eine Mehrfach-Kanal-Verbindung unterstuetzt. Um einen Kanal zu
verlassen, musst Du "/leave" verwenden. Ohne Angabe eines Kanals, werden Infos
zu den von Dir benutzten Kanaelen ausgegeben.
@@LEAV
Mit diesem Befehl kannst Du entweder den derzeitigen oder den angegebenen
Kanal verlassen. Wenn dieser der letzte ist, so wird conversd verlassen.
@@LINK
Der momentane Linkstatus wird angezeigt. Dies sind normalerweise Hostname,
Linkstatus, Laufzeiten, Versionskodes und Statuszeit, gefolgt von der Zeit
des naechsten Connectversuches und Anzahl der Versuche (auf Disconnecteten
oder im Aufbau befindlichen Links), bei bestehender Verbindung werden die
Queue-Laengen und Byte-Statistiken angezeigt.
Wenn Du Sysop bist, kannst Du Verbindungen Setzen oder Loeschen. Es wird
dann auch noch zusaetzlich in Klammern der Verbindungsweg angezeigt.
Syntax: /l [@ Host]|[[+]|[-] Host [Port [via]]]
Mit "/l @ Host" koennen andere Hosts fernabgefragt werden (wird nicht von
allen Versionen unterstuetzt).
@@LIST
Alle Kanaele, ihre Themen, Optionen und User werden angezeigt.
@@ME
(/me /action)
Dieser Befehl dient dazu, den Usern auf Deinem Kanal eine Taetigkeit
anzuzeigen. Wenn du z.B. "/me gaehnt" eingibst, bekommen alle User dieses
Kanals folgendes angezeigt:
*** dc6iq gaehnt
@@MODE
Das mode-Kommando ist eines der kompliziertesten. Es wird wie folgt benutzt:
/mode [<Kanal>] <+|-><t|i|s|m|p|l|o<User>>.
Die Optionen bedeuten folgendes:
t - Das Thema des Kanals laesst sich NUR von Kanal-Sysops aendern
i - Der Kanal wird Usern anderer Kanaele verheimlicht
s - Der Kanal ist geheim, die Kanalnummer wird nicht mehr angezeigt
m - Der Kanal ist moderiert, nur Kanal-Sysops duerfen schreiben
p - Der Kanal ist privat, man benoetigt eine Einladung zum Einloggen
l - Der Kanal ist lokal, Texte werden nicht weiterverteilt
o<User> - macht <User> zum Kanal-Sysop (kein - moeglich)
Das Plus setzt eine Option, der Strich loescht sie. Es sind Kombinationen
erlaubt, so wuerde "/mode 69 -s+todc6iq" folgendes bewirken: Kanal 69 ist
nicht mehr geheim, aber die Themen duerfen nur vom Kanal-Sysop gesetzt
werden. Zusaetzlich wird dc6iq ein Kanal-Sysop.
Ohne Angabe von Parametern werden die derzeitigen Optionen angezeigt.
Auf Kanal 0 sind keine Modes setzbar!
@@MSG
(/msg /send /write)
Sendet einen Text an einen speziellen User oder an einen verbundenem Kanal.
Wenn der Text an einen Kanal gehen soll, so muss man folgendes eingeben:
"/msg #<Kanal> <text>". Wenn das Ziel ein User ist, so kann er den Text
an den zusaetzlichen Sternchen erkennen. Z.B. wenn dc6iq eine Nachricht an
dc1ik mit "/m dc1ik Das ist ein Test" sendet, so erhaelt dc1ik folgendes:
"<*dc6iq*>: Das ist ein test".
@@NOTI
Du wirst informiert, wenn eine bestimmte Person in der Personenliste im
convers erscheint. Z.B. fuegt "/notify + dc1ik" dc1ik in die Liste ein,
"/notify - db4ut" entfernt db4ut aus der Liste. Das Einfuegen/Loeschen
mehrerer Calls in einem Kommando ist moeglich, z.b. bewirkt
"/notify + dc1ik db4ut - dc6iq dh2paf +dg3kcr", dass dc1ik, db4ut und dg3kcr
eingefuegt und dc6iq und dh2paf entfernt werden. Das Entfernen von Calls,
die nicht in der Liste stehen wird ignoriert.
@@PERS
(/note /personal)
Es kann eine kurze Beschreibung zu Deiner Person gesetzt werden, den die
anderen User mit "/who" sehen koennen. Z.B: "/pers Fred, Buechig, JN49fb".
Mit einem @ als Text wird sie geloescht. Diese Implementation merkt sich
bis zu 118 Zeichen der Beschreibung und setzt diese dann automatisch beim
Einloggen (die "/char" und "/width" Einstellungen werden dann auch
gespeichert und beim Einloggen gesetzt). Speichern ist auch ohne Setzen
moeglich, einfach ohne Text aufrufen.
@@PROM
Das prompt-Kommando nimmt vier Argumente in einer zusammenhaengenden Zeichen-
kette. "/prompt abcd" setzt "a" als "/query"-Prompt, "b" fuer den normalen
Prompt. "d" ist ein Zeichen um den Prompt zu loeschen (also normalerweise
Backspace (^H) oder Delete). "c" ist ein Zeichen, welches vor jedem Text,
den Du empfaengst, gesendet wird (normalerweise also ^G).
@@QUER
Der angegebene User ist in Zukunft der einzige Empfaenger fuer alle Texte,
die Du eingibst. Diese werden dann als private Texte an den User geschickt,
wie bei "/m". Zum Ausschalten, ohne Argument aufrufen, danach geht alles
wieder wie gewohnt an den Kanal. Sozusagen ein Privatmodus.
@@QUIT
(/bye /exit /quit)
Wenn Du das eingibst, verlaesst Du diesen wunderbaren Ping-Pong-Convers.
Das willst Du doch nicht wirklich? :-)
@@TOPI
Hiermit kann fuer den Kanal ein Thema gesetzt werden. Die anderen User
koennen dieses sehen, wenn sie "/who" oder "/list" eingeben. Wenn keine
Kanalnummer angegeben wird, so wird das Thema des aktiven Kanals gesetzt.
Wird eine Nummer angegeben, so musst Du auch auf diesem Kanal eingeloggt sein.
Um das Thema zu loeschen, ist als Thema ein "@" einzusetzen.
@@UPTI
Dieser Befehl zeigt an, wielange conversd schon aktiv ist.
@@VERB
Schaltet die Laber-Option ein/aus. Du bekommst dann viele Informationen
ueber Aktionen der User (Einloggen/Ausloggen/Texte-setzen/...), auch wenn
diese nicht auf Deinem Kanal sind.
@@VERS
Zeigt etwas Text zu dieser Version (in englisch).
@@WHO
(/users /who)
Dieser Befehl zeigt die eingeloggten User und hat mehrere Optionen:
n [Kanal] tabellarische Darstellung (auf einen Kanal begrenzbar)
a [Kanal] Abwesendheitsliste (auf einen Kanal begrenzbar)
l [Kanal] ausfuehrliche Liste (auf einen Kanal begrenzbar)
u Userliste ausfuehrliche Infos zu den Usern in der Userliste
* [Kanal] Liste der Idlezeiten (eigener oder angegebener Kanal)
@ Host auf Host begrenzte tabellarische Darstellung
ohne Option wird die kurze Darstellung, wie bei "/list", ausgegeben.
@@WIDT
Macht conversd Deine Bildschirmbreite (Zeichen/Zeile) bekannt. Die Meldungen
der anderen wird dann auf diese Breite gebracht. Voreingestellt ist 80.
Diese Einstellung wird bei "/pers" gespeichert (siehe dort).
@@----
rev3.12c/20001003

View file

@ -0,0 +1,168 @@
# This is a sample of the file tnn.ini with all options and devices shown.
#-----------------------------------------------------------------------------
# Average rounds/sec (default is missing is 100) - the real value depends
# on processor power and system load. Increase this on heavy loaded systems
# and if you have high speed ports (76800 baud and up)
#rounds 200
# File permissions for files created by TNN - octal value as used by umask(2)
# default value = 000 (world readable/writable)
# use 077 to limit access to the owner of TNN
#perms 077
# Working directory for TNN
tnn_dir /usr/local/tnn/
# Unix-Socket for TNT hostmode interface (optional)
#tnn_socket /usr/local/tnn/tnn-socket
# Program to start before using any hardware ports (optional) - don't use
# any parameters!
#tnn_start kill_other_processes
# Number of buffers (optional; default = 10000)
buffers 10000
# file containing process id (mandatory)
tnn_procfile tnn.pid
#-----------------------------------------------------------------------------
# device 1 = Tokenring on /dev/ttyS0; 38400 Bd; Ports 0 and 1
device /dev/ttyS0
# lockfile for device 1
tnn_lockfile /var/lock/LCK..ttyS0
# speed on device 1
speed 38400
# type of KISS on device 1:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS, 3 = Tokenring (1st device only),
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 3
# L2-Port associated with device 1 - use several port lines, if kisstype = 3
port 0
port 1
#-----------------------------------------------------------------------------
# device 2 = standard KISS on /dev/ttyS1; 9600Bd; Port 2
device /dev/ttyS1
# lockfile for device 2
tnn_lockfile /var/lock/LCK..ttyS1
# speed on device 2
speed 9600
# type of KISS on device 2:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS,
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 0
# L2-Port associated with device 2
port 2
#-----------------------------------------------------------------------------
# device 3 = SMACK on /dev/ttyS2; 115200 Bd; Port 3
device /dev/ttyS2
# lockfile for device 3
tnn_lockfile /var/lock/LCK..ttyS2
# speed on device 3
speed 115200
# type of KISS on device 3:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS,
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 1
# L2-Port associated with device 3
port 3
#-----------------------------------------------------------------------------
# device 4 = RMNC-Kiss on /dev/ttyS3; 19200 Bd; Port 4
device /dev/ttyS3
# lockfile for device 4
tnn_lockfile /var/lock/LCK..ttyS3
# speed on device 4
speed 19200
# type of KISS on device 4:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS,
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 2
# L2-Port associated with device 4
port 4
#-----------------------------------------------------------------------------
# device 5 = Vanessa; Port 5
device Vanessa
# type of KISS on device 5:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS,
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 4
# L2-Port associated with device 5
port 5
#-----------------------------------------------------------------------------
# device 6 = SCC on /dev/scc0; Port 6
device /dev/scc0
# lockfile for device 6
tnn_lockfile /var/lock/LCK..scc0
# type of KISS on device 6:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS,
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 5
# L2-Port associated with device 6
port 6
#-----------------------------------------------------------------------------
# device 7 = TNC with TF 2.7b on /dev/ttyS4; 19200 Bd; Port 7
# WARNING! This configuration is NOT recommended for a standalone digipeater!
device /dev/ttyS4
# lockfile for device 7
tnn_lockfile /var/lock/LCK..ttyS4
# speed on device 7
speed 19200
# type of KISS on device 7:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS,
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 6
# L2-Port associated with device 7
port 7
#-----------------------------------------------------------------------------
# device 8 = IPX; Port 8
device ipx
# type of KISS on device 8:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS,
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 7
# L2-Port associated with device 8
port 8
#-----------------------------------------------------------------------------
# device 9 = AX25IP; Port 9
device ax25ip
# type of KISS on device 9:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS,
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 8
# L2-Port associated with device 9
port 9
#-----------------------------------------------------------------------------
# device 10 = Kernel-AX.25; Port 10 (example with Interface ax0)
device ax0
# type of KISS on device 10:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS,
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 10
# L2-Port associated with device 10
port 10
#-----------------------------------------------------------------------------
# device 11 = DG1KJD-Kernel-AX.25; Port 11 (example with Interface ax0)
device ax0
# type of KISS on device 11:
# 0 = KISS, 1 = SMACK, 2 = RMNC-KISS,
# 4 = Vanessa, 5 = SCC, 6 = TF (experimental!), 7 = IPX (1 IPX port only),
# 8 = AX25IP (1 AX25IP port only), 9 = Loop, 10 = Kernel-AX.25 Interface
# 11 = Kernel-AX.25 Interface for DG1KJD-Kernel
kisstype 11
# L2-Port associated with device 11
port 11
#
# END

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

351
doc/englisch.txt Executable file
View file

@ -0,0 +1,351 @@
"Convers session terminated.\rEnter command. Type HELP for help.\r"
"*** You are already in convers-mode.\r"
"The Convers-Hostname is to long (max.9 indications)!\r"
"Convers-Hostname successful changed in %s.\r"
"Locked!\r
"%s%s@%s has gone away:\r %s\r"
"%s%s@%s is back again.\r"
"%s%s made you a channel operator for channel %d\r"
"%s%s@%s is now a channel operator for channel %d\r"
"channel %d"
"%s%s@%s on %s set personal text:\r %s\r"
"%s%s@%s on %s removed personal text.\r"
"%s%s@%s on %s set channel topic:\r %s\r"
"%s%s@%s on %s removed channel topic.\r",
"secret channel"
"this invisible channel"
"%s%s:%s@%s on %s set personal text:\r %s\r"
"%s%s:%s@%s left %s.\r"
"%s%s@%s left %s.\r"
"%s%s@%s left %s (%s).\r"
"%s%s:%s@%s joined %s\r"
"%s%s@%s joined %s\r"
"%s%s is away: %s"
"%sYour messages are ignored by %s"
"\r\a\a%sMessage from %s...\rPlease join %s channel %d.\r\a\a\r"
"%s%s Invitation sent to %s @ %s."
"%sUser %s is already on this channel."
"*** Unknown command '/"
"'. Type /HELP for Help.\r"
"*** You are away, aren't you ? :-)\r"
"*** This is a moderated channel. Only channel operators may write.\r"
"*** Queried user left channel.\r"
"%sYou are marked as being away.\r"
"%sYou are no longer marked as being away.\r"
"%sActually you were marked as being here :-)\r"
"*** Beep mode %sabled\r"
"%sYou are talking to channel %d. There are %d users.\r"
"*** current Topic by: %s (%s):\r "
"*** Also attached:"
"channel %d (alone)"
"channel %d (%d users)"
"%sChannel number must be in the range 0..%d.\r"
"%sChannel %d is already default.\r"
"%sYou need an invitation to join the privat channel %d.\r"
"%s%s@%s try to join your privat channel."
"%scannot join channel %d, no more space.\r"
"%sYou are now talking to channel %d"
"You're alone.\r"
"There are %d users.\r"
"*** Charset in/out is %s/%s.\r"
"Unknown charset: '%s'. You may use one of them:\r%s***\r"
"*** Charset in/out set to %s/%s.\r"
"Help on this command not yet implemented ...\rWrite it - or try another one :-)\r"
"No such command...\r"
"*** no route to %s\r"
"%sDefault channel is now %d.\r"
"%sLeft channel %d.\r"
"%sYou were not on channel %d.\r"
"*** Reguest sent to %s.\r"
"You must be an operator to set a new links\r"
"Link table full !\r"
"Argument error !\r"
"%sYou have not joined channel %d.\r"
"%sNo such user: %s.\r"
"%s%s is away: %s\r"
"*** non existing channel !\r"
"*** no modes on channel 0 !\r"
"*** You are not on operator !\r"
"%s @ %s PingPong-Release %5.5s (TNN) - Type /HELP for help.\r"
"%sYou need an invitation to join channel %d.\r"
"%s%s@%s try to join your privat channel."
"*** You created a new channel %d.\r"
"*** Personal text and date set.\rHello, %s\r"
"*** Please set your personal text. ( /H PERS )\r"
"%sYou are notified if one of the following users sign on/off:\r"
"%sYou filter the messages of the following users:\r"
"*** %s is online.\r"
"and data saved.\r"
"*** No personal text save.\r"
"deleted.\r"
"and data set.\r"
"*** Prompting mode %sabled\r"
"en"
"dis"
"You must be an operator to restart!\r"
"Link to %s delocked.\r"
"%sNo such user: %.20s.\r"
"%sStarting privat conversation with %s.\r"
"%sEnding privat conversation with %s.\r"
"%sChannel topic on channel %d removed from %s (%s).\r"
"%sChannel topic set on channel %d from %s (%s).\r"
"%sCurrent channel topic on channel %d from %s (%s) is\r "
"%sNo current channel topic on channel %d.\r"
"%sChannel channel %d non existent.\r"
"*** %s@%s is up for %s\r"
"*** Verbose mode %sabled\r"
" This conversd implementation was originally written by Dieter Deyke\r <deyke@mdddhd.fc.hp.com>. It was modified and maintained up to version\r 3.11 by Fred Baumgarten, dc6iq. This implementation is partly rewritten,\r enhanced and maintained by "
"Odo Roscher <dl1xao@db0hhb.#hh.deu.eu>\r for TheNetNode and Xnet.\r"
" Idle Personal\r"
"Login State\r"
"Login Personal\r"
"(here)"
"\r Away: "
" (since "
" (AWAY)"
"\r Last Activity: "
"*** Current screen width is %d\r"
"*** Range 32 to 255\r"
"*** Screen width set to %d\r"
"*** Urgent message from operator (%s):\r "
"*** Links at %s"
"free"
"*** Nickname set to: %s.\r"
"none login possible!\rcall signal %s is logged in at the host %s!\r"
"*** your password was deleted!\r"
"*** no password set!\r"
"*** reads. your password:\r%s\r"
"*** it is not defined a password!\r"
"*** password was set!\r"
"*** password must contain at least 5 and/or maximally 80 indications!\r"
"*** is missing. to password!\r"
"*** Syntax: pass <show|new|del> [new password]\r"
"*** password is correct!\r"
"*** password is wrong!\r"
"*** current Topic by: %s (%s):\r %s\r"
"\r*** %d user on channel%s ***\r"
" Average: %lu"
"\r%7s00 02 04 06 08 10 12 14 16 18 20 22\r%9s01 03 05 07 09 11 13 15 17 19 21 23 Hour\r\r"
"\r%7s0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1\r"%7s0 6 2 8 0 6 2 8 0 6 2 8 0 6 2 8 0 6 2 8 0 6 2 8 0 6 2 8 h\r%7sMonday Tuesday Wednes. Thursd. Friday Saturd. Sunday\r\r"
" Elap. time\r%6s-3600 -3240 -2880 -2520 -2160 -1800 -1440 -1080 -720 -360 0 Seconds\r\r"
"> DISCONNECT: Too many non-DAMA Polls (%u) !!\r"
"WARNING: non-DAMA Poll #%u, Disconnect after %u !!\r"
"Graph cleared!\r"
"SYSTEMGRAPH:\r"
"(G)raph (H)our (B)aud\r (D)ay (C)ircuits\r (W)eek (F)ree buffers\r (L)2-Links\r (N)odes\r (R)ounds\r (*) All\r"
"PORTGRAPH:\r(G)raph <PortNr> (H)our (I)nfo frames\r (D)ay (R)eject frames\r (W)eek (F)rmr frames\r (S)abm frames\r dis(C) frames\r"
" d(M) frames\r (*) All\r"
"\r*** from DAMA-Master "
"%s<>%s broken"
"You are suspended.\r"
"\r- Aborted -\r\r"
"Sri, no text available!\r"
"CLI failed!\r"
"Waiting for AUTOBIN-Transfer...\r
"\rL2 - User:\r"Po SrcCall DstCall LS Rx Tx Tr SRTT RxB TxB Baud ConTime Pr Da\r"
"\rL4 - User:\rCall Node S Rx Tx Tr Win SRTT RxB TxB Baud ConTime\r"
"free"
"free"
"\rHost-User:\rCH Call F NT RX TX ST RxB TxB Baud ConTime\r-------------------------------------------------------------------------\r"
"\rTCPIP-User:\rIface SrcCall DstCall NT T3 RxB TxB Baud ConTime\r-------------------------------------------------------------------------\r"
"\r System Statistics: "
"\r Startup: "
"\r\r Port-Statistics:\r\r Links RxB TxB RxBaud TxBaud RxOver TxOver\r"
"\rTotal = "
" Bytes\r"
"\r Error-Statistics:\r\r" RxID RxLen RxCtl Resets\r"
"\rLink-Statistics:\r"
"\rLink to "
" via "
"\rFrames: I UI RR REJ RNR SABM/UA DISC/DM FRMR\r"
"Bytes: Total Info Header Overhead %I %RR %REJ %RNR\r"
" TQual:"
"\rIP-Gateway-Statistics:\r\r"
"free"
"free"
"Warning - Port not active.\r"
"Invalid callsign.\r"
"Invalid ident.\r"
"free"
"free"
"Type-Port--Alias:Call------Route--------------Infotext------------\r"
"No such User!\r"
"the Sysop password changed !\r"
"errors: The password must 80 indications contained !\r"
"editing>%s\rEnter text. End with '.' in a new line.\r"
"free"
"\r (min) (now) (max)\r Rounds/sec: %8lu %8lu %8lu\r"
" Free Buffers: %8u %8u %8u\rOverall Throughput:%18lu %8lu Baud\r Active L2-Links:%18u %8u\r Active Circuits:%18u %8u\r Active Nodes:%18u %8u\r"
"\r Active Sockets:%18u %8u\r"
"\r Buffer usage: %lu%%"
"\r Network Heap: %lu Bytes"
"\r CPU load: %lu%%"
"TX: Once:%11lu Repeated:%10lu IQual:"
" Copyright by NORD><LINK, free for non-commercial usage.\r See www.nordlink.org for further information.\r This version compiled for %d Ports, %d L2-Links and %d Circuits.\r %s\r"
"You are now talking with %s. Leave this mode with /q\r"
"Msg from %s (use TALK to reply): %s\r"
"Consolen MyCall:%s\r"
"Invalid filename!\r"
"EDIT/LOAD in use by other Sysop\r"
"Open error!\r"
"File error!\r"
"Statistic-table cleared!\r"
"\rInvalid Port\r"
"\rPort disabled\r"
"No Text\r"
"Invalid Call\r"
"Msg sent\r"
"No User\r"
"No Arguments\r"
"No mailbox!\r"
"No DX-cluster!\r"
"Alias too long, max. %u characters.\r"
"Command too long, max. %u characters.\r"
"can't create %s !\r"
"can't open %s !\r"
"%lu Bytes free\r"
"\r*** Msg from Sysop: %s ***\r"
"%3u link(s) disconnected.\r"
"%s.TNB saved...\r"
"errors: Tracen on Port %u is not permitted !!!\r"
"errors: Port %u is not active !!!\r"
"Warning: max. trace level of this TNN version is %d\r"
"\rAllBuffer : %lu (%lu) a %lu Bytes\r"
"Wrong Owner: Buffer:%lu Wert:%d\r"
"FreeBuffer: %lu (%lu)\r"
"Errors : %lu\r"
"Currently defined aliasses:\r"
"No aliasses defined\r"
"Alias stored.\r"
"Can't store, no memory.\r"
"Alias deleted.\r"
"No such alias defined, can't delete.\r"
" not deleted!\r"
" deleted.\r"
" is restricted "
"to Access denied\r"
"to level-2 access\r"
"to max "
" simultanous connections\r"
"from using Port "
"File has no length!\r"
"File not found!\r"
"No L2-link found.\r"
"errors: No indication of haven or invalid Port! (example: MO S1).\r further assistance with HELP MO.\r"
"errors: They indicated no options! (example: MO S 1).\r further assistance with HELP MO.\r"
" is off"
"Invalid program!\r"
"Invalid Hostcommand\r"
"%s\rNode / User unknown! Please specify port, if %s is a User:"
" (Telnetport is suspended!)"
" (Httpdport is suspended!)"
"Welcome to %s"
"* CHANNEL NOT CONNECTED *\a\n"
"CONNECTED to "
"DISCONNECTED fm "
"CONNECT REQUEST fm "
"INVALID COMMAND\r"
"length = %d; Call = %s\n"
"\r receive %u"
" send %u unacked 0"
"INVALID VALUE: %u"
"not available"
"CHANNEL NOT CONNECTED"
"[FRAME EMPTY?!?]"
"[FRAME TOO LONG]"
"INVALID COMMAND: "
"INVALID EXTENDED COMMAND: "
"\rERROR : Port or Call invalid !\r"
"ARP-Table of "
"\rDestination P Interface Callsign Digi Mode Timer\r"
"My IP address: "
" IP address : "
"No route to "
"IP-Routes of "
"\rDestination------Len--Flags-Interface--Gateway----------Metric----\r"
"Invalid IP address!\r"
"\rERROR : Invalid IP-Adresse !\r"
"\rINP: frame error, len = %u, left = %u\r"
"\r[AX25 Fragment; %u Frame(s) to follow - original PID %X]\r"
"\r[AX25 Fragment; %u Frame(s) to follow]\r"
" (INVALID ALIAS!)\r"
" (INVALID IP ADDRESS!)\r"
"\rAll Nodes over %s to be routing to show:\r"
"errors: connected-status from 0 to 1!\r"
"errors: Invalid L4-Parameter!\r"
"Call does not stand in the links List!\r"
"Invalid command. Try HELP.\r"
"Commandline too long.."
" table full\r"
"TheNetNode is terminated!\n"
"Date Time Port"
" Rx Tx Call\n"
" RX TX Call RX-Rej TX-Rej DAMA\n"
"Sri, can't open tempfile...\r"
"%24.24s %6.6s: rejected (mailbox)\n"
"%lX-%lX (%lu Messages)\r"
"BROADCAST enabled on port %u (%s).\r"
"Server call: "
"\rMessage pool: "
"Empty\r"
"PACSAT BOX-Call is now "
"Filesystem reloaded\r"
"CRC Error\n"
"language %s cannot be loaded .\r"
"language is adjusted to %s .\r"
"error in language file %s line %d !!!\n%s\n"
"the following languages found:\r"
"it no language files found\r"
"My LogLevel is %d\r"
"errors: Log level worth from 0 to 4!\r"
"(%d/%d)\rAlias-:Call------IP--------------Mode-Port--PMode---Time----RX-----TX---Online-\r"
"I am listening on UDP-port %u\r"
"AX25IP : cannot create ip raw-socket: %s\n"
"AX25IP : cannot set non-blocking I/O on ip raw-socket\n"
"AX25IP : cannot set SO_KEEPALIVE for ip : %s\n"
"AX25IP : cannot set IPTOS_THROUGHPUT for ip : %s\n"
"errors: startWinsock, error code : %d\n"
"AX25IP : cannot create socket: %s\n"
"AX25IP : cannot set non-blocking I/O on udp socket\n"
"AX25IP : cannot set SO_KEEPALIVE for udp : %s\n"
"AX25IP : cannot set IPTOS_THROUGHPUT for udp : %s\n"
"AX25IP : cannot bind udp socket: %s\n"
"Routing table is full; entry ignored.\n"
"Invalid IP address\r";
"Invalid Mode\r"
"Invalid Parameter\r"
"AX25IP-Port not switched on!!!\n"
"UDP-Port not valid, not changed !!!\r"
"ERROR: Changing UDP-Port failed, Port not changed !!!\n"
"UDP-Port successfully changed\r"
"errors in language file %s.txt,\nmaximum line length of %d exceeded (last line %d)!!!\n"
"invalid language (%s)!!!\n"
"errors in language file %s.txt, \n maximum line length of %d fell below (last line %d)!!!\n"
"error in language file %s line %d is too long !!!\n"
"errors: Log level worth from 0 to 3!\r"
"My TCP-Port: %u\r"
"httpd haven not switched on"
"TCP-Port not valid, not changed !!!\r"
"ERROR: Changing TCP-Port failed, Port not changed !!!\r"
"TCP-Port successfully changed\r"
"cannot create socket for IPX : %s\n"
"cannot bind IPX address: %s\n"
"Error: can't set non-blocking I/O on IPX socket"
"Errors: Winsock cannot be initialized!\n"
"Errors %s: Socket cannot be provided !\n"
"Errors %s: ioctlsocket cannot be initialized !\n"
"Errors %s: Bind cannot not be initialized !\n"
"Errors %s: Listen cannot be initialized!\n"
"form_referer str too long"
"A route to this callsign is already set up, delete it first!!!\n"
"you are already announced as Sysop!.\r
"*** Conversd runs since: %s\r"
"invalid quality!\r"
"*** Hostname is %s.\r"
"Can't send, Port is disabled!\r"
"Timeout for dynamically learned routes is %u seconds\r"
"My HTML-Statistic is %d.\r"
"Error: HTML-Statistic out of range (0 - 1)"
"Error: timeout out of range (0 - 86400) !\r"
" (Port is suspended!)\r"
"\r *** altogether %d user on all channels. ***\r"

BIN
doc/tnn178.pdf Executable file

Binary file not shown.

BIN
doc/tnn179_cb.doc Executable file

Binary file not shown.

BIN
doc/tnn179cb.pdf Executable file

Binary file not shown.

83
history/178mh01.his Executable file
View file

@ -0,0 +1,83 @@
= Neues Feature: direktes IP-Interface zu Linux-Kernel,
in include/all.h per #define aktivierbar, defaultmaessig deaktiviert
= Befehl "KERNELIF", kurz "KERN"
= KERN INIT: Initialisiert das Interface, es wird geprueft ob der Kernel die
benoetigten Funktionen bereitstellt. Unterstuetzt werden die
Kernel 2.0.x, 2.2.x und 2.4.x. Bei 2.0.x und 2.2.x muss die
benoetigte Funktionalitaet ueber ein Zusatzpaket hinzugefuegt
werden, bei 2.4.x ist nur eine Option beim Kernelcompilieren
entsprechend zu setzen.
Kernel 2.0.x/2.2.x: es sind zusaetzliche Programmpakete
erforderlich.
Kernel 2.4.x : bei "Network device support" der Unterpunkt
"Universal TUN/TAP device driver support", moeglichst fest in
den Kernel bauen, als Modul bisher nicht getestet.
Das Interface initialisiert sich NICHT von selbst, dies muss
explizit mit INIT erfolgen !!! Es ist sonst nicht nutzbar
und zeigt sich ziemlich bockig ;) Es erfolgt ein Warnhinweis,
falls zu diesem Zeitpunkt mit IPA noch keine Node-IP
festgelegt wurde. Die Interfacestatistik wird geloescht.
= KERN STATUS: Zeigt den momentanen Status und die Statistik des Interfaces an.
= KERN CLEAR: Loescht die Statistik, dies passiert auch bei "CLEAR" fuer
die Gesamtstatistik.
= KERN SETKIP: Setzt die IP des Linuxkernels. Hier kann entweder eine IP-
Adresse oder ein Hostname angegeben werden, letzterer wird
entsprechend aufgeloest *wenn* ein Nameserver verfuegbar ist.
Die Angabe einer IP-Nummer ist deshalb zu bevorzugen !
Bsp: "KERN SETKIP 44.130.13.110" oder
"KERN SETKIP db0uhi.ampr.org"
Dies muss passieren, bevor das Interface geUPt wird, ist dies
nicht geschehen kann das Interface nicht benutzt werden !!! Die
IP von tnn wird wie ueblich mit dem IPA-Kommando gesetzt, dies
muss ebenfalls vor dem UPpen passiert sein.
= KERN UP: Aktiviert das konfigurierte Interface. Es wird im Kernel ein
Interface mit dem Namen "tnn" erzeugt (mit ifconfig pruefbar)
und eine Route fuer tnn eingetragen (route). Dies passiert alles
automatisch auf der Basis der gesetzten IPs. Im tnn-IP-Router wird
ebenfalls ein passender Routeneintrag erzeugt.
Das Interface laesst sich nur UPpen wenn folgendes vorher passiert
ist: IPA, KERN INIT, KERN SETKIP <ip/hostname>.
= KERN DOWN: Deaktiviert das Interface zum Kernel. Das eingetragene Interface
und die automatisch im Kernel und tnn eingetragenen IP-Routen
werden geloescht, sonstige Routen im tnn-Router die auf das
Interface zeigen, bleiben eingetragen, sie funktionieren
aber natuerlich nicht mehr. Daten, die bei deDOWNtem Interface
durch noch bestehende Routeneintraege auf ein solches geroutet
werden, werden in den Biteimer befoerdert.
= allgemeines: etliche Kommandos sind nur nach vorheriger, erfolgreicher
Ausfuehrung anderer Kommandos moeglich oder haengen vom
derzeitigen Zustand des Interfaces ab. Wenn man etwas machen
will was derzeit nicht geht, erhaelt man (mehr oder weniger)
ausfuehrliche Meckermeldungen. Die Konfiguration eines Inter-
faces kann nur geaendert werden wenn es DOWN ist. Ausnahme:
IPA-Aenderungen, aber die werden bei aktivem Interface (noch)
nicht an den Kernel durchgereicht. Das Resultat ist denkbar
einfach: das Interface geht dann nicht mehr.
= Ablaufbeispiel:
- IPA 44.130.13.100
- KERN INIT
- KERN SETKIP 44.130.13.102 bzw. KERN SETKIP db0uhi.ampr.org
- (KERN STATUS zum gucken)
- KERN UP
- ...
- (eventuell zusaetzliche Routeneintraege mit IPR)
- ...
- KERN DOWN
= STAT zeigt auch die Statistik des Kernelinterfaces mit an, diese kann auch
direkt mit "STAT K" abgefragt werden wenn eincompiliert.
= Versionsbefehl zeigt Feature und Kernel als Interface an wenn eincompiliert

9
history/178mh03.his Executable file
View file

@ -0,0 +1,9 @@
= IPA-Befehl modifiziert, Angabe der Subnetz-Bits jetzt moeglich.
Es findet KEINE UEBERPRUEFUNG statt ob das Subnetz zur IP passt,
also selber ausrechnen ! (soll spaeter mal anders werden)
Bsp: IPA 44.130.13.100/32
= Meldung der eigenen IP und Subnetz-Bits per INP an andere Nodes
= bei "SP" (SaveParam) Speicherung der eigene IP jetzt auch mit den
Subnetz-Bits

36
history/178mh04.his Executable file
View file

@ -0,0 +1,36 @@
= Aenderung bei den Subnetz-Bits bei IPA: sind keine angegeben so melden
wir uns mit 32 weiter, das sorgt dafuer, dass wir nur die eigene IP an
uns ziehen und nicht alles.
= per INP empfangene IP-Adressen und Subnetz-Bits anderer Digis werden in
entsprechende IPR- und ARP-Eintraege umgesetzt.
(Info: anlegen/aendern ueber src/l3inp.c::update_options(..)
loeschen ueber src/l3tab.c::add_route(..., qual=0) ->del_route(...) )
= haben wir keine eigene IP (IPA 0.0.0.0) melden wir auch keine Subnetz-Bits
= ARP- und IPR-Eintraege werden nur gemacht wenn wir eine eigene IP
gesetzt haben und Parameter 12 gesetzt (!= 0) ist (siehe unten)
= neuer Par 12 ("AutoIPR")
0 : ausgeschaltet, KEINE automatischen IPR- und ARP-Ein/Austragungen
(damit kann man die Tabellen einfrieren wenn sie gefuellt sind !)
1 : automatische Ein/Austragung OHNE jegliche Pruefung der IP-Adressen
2 : automatische Ein/Austragung, unmoegliche IP-Adressen werden ignoriert
(x.x.x.0 x.x.x.255)
3 : automatische Ein/Austragung, es werden nur IP-Adressen beruecksichtigt,
die im GLEICHEN Netz wie man selbst und gueltig sind. (default)
(Bsp: hat man die IP 44.1.2.3 werden nur andere 44.x.x.x-IPs eingetragen)
Die Pruefung mit Stufe 3 ist *dringend* zu empfehlen, wer sich mal genau
anguckt was da z.T. fuer schrottige Adressen von einigen Knoten verbreitet
werden, weiss warum. Moechte man alles offen haben ist Stufe 1 zu waehlen,
man sollte sich dann aber nicht wundern, wenn z.B. das lokale Ethernet
ploetzlich in die Botanik geroutet wird !
Auf die Befehle IPR und ARP haben diese Einstellungen keine Wirkung, von
Hand sind jederzeit weitere (auch unsinnige) Eintragungen moeglich.
= IPA: IP-Adressen die auf .0 oder .255 enden werden nicht akzeptiert.
(.0: Netzwerkbasisadresse, .255: Broadcastadresse, beide sind lt. IP-Spec
nicht als Hostadressen zugelassen)

80
history/178mh05.his Executable file
View file

@ -0,0 +1,80 @@
= maximale Anzahl der moeglichen Connects von Usern zum Digi auf *einem Port*
jeweils fuer jeden Port seperat einstellbar
Aktivierung : in include/all.h das "#define USERMAXCON" entkommentieren
Anzahl der maximalen Connects einstellbar mit dem PORT-Befehl:
"PORT <Portnummer> MAXCON <Anzahl>",
die Anzeige des eingestellten Wertes erfolgt mit dem Kommando
"PORT *" !!!
Eine Anzahl von 0 deaktiviert die Funktion. (Voreinstellung)
Diese Einstellung gilt fuer *alle* User auf dem angegebenen Port, einzelne
User muessen weiterhin mit SUSPEND beschraenkt werden. Es werden nur neue
Connects abgelehnt wenn die maximale Anzahl erreicht ist, wird die Anzahl
auf einen Wert niedriger als die aktuelle Anzahl an Connects eines Users
eingestellt, so bleiben diese Verbindungen bestehen. Neue Verbindungen die
ueber die Maximalzahl hinausgehen werden von Knoten mit BUSY abgelehnt.
!!! ACHTUNG, WICHTIG !!! !!! ACHTUNG, WICHTIG !!! !!! ACHTUNG, WICHTIG !!!
"SP" schreibt auch MAXCON in parms.tnb wenn die Funktion eincompiliert ist,
eine TNN-Version OHNE diese Funktionalitaet kann dann die generierten PORT-
Zeilen NICHT (!!!) verstehen und IGNORIERT SIE KOMPLETT !!! (d.h. alle
Porteinstellungen fuer diesen Port bleiben WIRKUNGSLOS und der Port
deshalb ggf. auch falsch konfiguriert und funktioniert nicht !!!.
Abhilfe: jede Porteinstellung (oder nur die absolut wichtigen) in seperate
Zeilen schreiben. (oder mal den PORT-Befehl ueberarbeiten...)
Nachtrag: PORT wurde irgendwann veraendert, beschriebenes Verhalten tritt
bei unbekannten Befehlen nicht mehr auf.
= AutoIPR setzte zwar die Subnetze, aber nicht die Gateways. Korrigiert.
= das Kernelinterface funktionierte wegen Aenderungen am Kernel mit Kernel
2.4.6 nicht mehr. Jetzt geht es wieder, bei Problemen mit Kernel 2.2.x und
2.4.x-Kerneln VOR 2.4.6 die Kommentare in os/linux/kernelif.h beachten !!!
= bei "SP" wurden beim Dump der IPR- und ARP-Eintraege Eintraege, die auf den
Kernel-Port zeigten, nicht korrekt geschrieben. Jetzt ok.
= bei "SP" wird auch die Konfiguration des Kernel-Interfaces geschrieben
WENN das Interface konfiguriert UND zum diesem Zeitpunkt aktiv ist.
Damit soll sichergestellt werden, dass nur gueltige und funktionierende
Konfigurationen geschrieben werden.
= bei "SP" wird auch die Konfiguration der AX25IP-Routen geschrieben
= neuer Sysop-Befehl "ALIAS" zum Einrichten von Kommando-Aliassen.
Aktivierung: in include/all.h das "#define ALIASCMD" entkommentieren,
die maximale Laenge von Aliassen und den zugeordneten Kommandostrings
kann in include/typedef.h (ganz am Ende) geaendert werden, in der
Standardeinstellung koennen Aliasse acht Zeichen und die Kommandos 16
Zeichen lang sein.
!!! Das Alias und das Kommando werden in Grossbuchstaben konvertiert !!!
Liste der definierten Aliasse abrufen: "alias".
Alias hinzufuegen: "alias funkruf c db0xyz-12" legt das Kommandoalias
"FUNKRUF" an und verknuepft es mit dem Kommando
"C DB0XYZ-12".
Alias loeschen: "alias funkruf" loescht das zuvor definierte Alias "FUNKRUF",
falls solch ein Alias nicht existiert gibts ne Meckermeldung.
= INP: halbstuendlich einmal die ganze Nodesliste an den Nachbarn melden
(l3misc.c::brosrv10(...))
= INP: versteckte Nodes werden ignoriert wenn sie empfangen werden
(dafuer dass die erst gar nicht gemeldet werden ist eigentlich der
Ursprungsnode verantwortlich, aber einige andere Nodesofts kriegen
das anscheinend nicht gebacken)
= LINK-Befehl ueberarbeitet, durch Zufall eine nicht erkannte Abbruchbedingung
bei der Parameterauswertung gefunden (er suchte wild in der Gegend rum wenn
die Zeile nicht ganz gefuellt war, sprich nicht alle erwarteten Parameter
vorhanden waren)

47
history/178mh06.his Executable file
View file

@ -0,0 +1,47 @@
= Linux: serielle Ports (KISS, RKISS, TOKENRING usw.) bis 460300 Baud
= Linux: Interfaces des Kernel-AX.25 koennen als Ports verwendet werden
Aktivierung: #define KERNELIF (wie fuer das IP-Interface) muss aktiviert sein
Einstellen: in tnn.ini: als "device" den Interfacenamen (ax0, ax1 usw.)
angeben, "kisstype" auf den Wert 10 stellen
Bsp:
device ax0
kisstype 10
port 1
Das Interface muss natuerlich laufen wenn man sich daran binden will, also
das Kernel-AX.25 vor TNN starten, die Portparameter von TNN werden an das
Interface durchgereicht und falls von Kernel-Seite (z.b. durch kissparms)
Portparameter veraendert werden, so werden diese von TNN erkannt, durch
AutoParameter *alle* Parameter des Ports neu berechnet und an das Interface
zurueckuebertragen. Hierdurch kann es natuerlich vorkommen, dass die
vorher gesetzten Parameter wieder veraendert werden.
Treten waehrend des Betriebs Probleme mit einem Kernelinterface auf, so
wird der betreffende Port ausgetragen ("PORT x OFF"). Ein Wiedereinschalten
(mit den alten Einstellungen) ist ggf. mit "PORT x ON" moeglich.
DAMA-Master ist ungetestet, er sollte *NICHT* richtig funktionieren weil
wir nicht wissen wann das Interface das Frame wirklich fertig gesendet
hat !!! Aktivieren laesst er sich aber trotzdem, was dabei rauskommt
ist Glueckssache, der Kernel *kann* nicht melden wenn er fertig mit der
Aussendung ist. (ist nicht vorgesehen im Kernel-AX.25)
DAMA-Slave laesst sich wie gewohnt mit "DAMA S" ueber den Port-Befehl
aktivieren und sollte funktionieren.
= Linux: Watchdog beendet sich auch bei Fehlern auf der Pipe, der
Hauptprozess wird schneller gekillt.
= MHeard korrigiert, Fehler wenn User auf mehr als einem Port gehoert wurde
(DG8BR)
= in der LINK-Struktur Variable "brotim" (Broadcast-Timer) von BOOLEAN (???)
auf UWORD geaendert
= kosmetische Korrekturen beim VER-Befehl. Inzwischen waren dort so viele
anzeigbare Optionen moeglich dass die Ausgabe ziemlich chaotisch aussah.
Hinweis auf nordlink.org hinzugefuegt.

43
history/178mh07.his Executable file
View file

@ -0,0 +1,43 @@
= INP: voller Nodes-Broadcast nur noch einmal pro Stunde, Aenderungen wegen
Broadcast an l3netrom.c::inform_peer() wieder rueckgaengig gemacht,
bessere Methode fuer INP nun direkt in l3misc.c::brosrv10()
implementiert.
Es werden jetzt *alle* Nodes *unabhaengig* vom Horizont und den Filtern
bei der normalen Meldung gesendet !!! Dies soll sicherstellen, dass
auch Nodes, die bisher immer durch den Filter gefallen sind,
geupdated werden.
= INP: nach erster RTT-Messung sofort per zweiter Bake dem Nachbarn die RTT
mitteilen. Dies macht den Link sofort benutzbar und nicht wie bisher
erst nach der zweiten Bake. (nur bei Nachbarn die L3RTT unterstuetzen,
nicht bei Nachbarn die per BROAD arbeiten, funktioniert also auch bei
N/N+ Links)
= INP: wenn wir einen N/N+ Link aufbauen wollen senden wir die INP-Kennung
nicht mehr, empfangen wir INP-Faehigkeit des Nachbarn und wollen aber
N/N+, so ignorieren wir sie. Wollen wir I, der Nachbar kann(/will) das
aber nicht, so bauen wir N+ auf.
ACHTUNG: INP-Links muessen jetzt also mit I auf *beiden* Seiten
eingestellt werden sonst gibts nur N+ !!!!!!!!!!!!!!
= INP: Filter geaendert, Knoten die mit "#temp" als Alias gemeldet werden,
werden uebernommen und der Alias geloescht. (XNet-Fehler)
Andere geheime Aliasse werden weiterhin ignoriert.
= 7conn.c::isheard() durchsucht die die MHeard-Liste nun umgekehrt. (DG8BR)
= Aenderungen am Flexnet-Modul und am GO32-Watchdog von DG8BR
(siehe flex178mh06.his)
= Linux: pty-Schnittstellen bei einer Baudrate von 0 auf nichtblockierenden
IO-Modus stellen (NICHT auf echte ser. Schnitstellen anwenden !)
= bei wenigen freien Buffern (100) kontrollierter Ausstieg, so wenig Buffer
kommen nicht vor, nur bei "Bufferfressern". Damit der Digi dann nicht
stehen bleibt sondern wiederkommt wird hier kontrolliert abgebrochen
(Exitcode -2). Ggf. werden die Parameter (save_parms()) nicht mehr
gesichert wenn zu dem Zeitpunkt nicht wieder genug Buffer zur Verfuegung
stehen.

41
history/178mh08.his Executable file
View file

@ -0,0 +1,41 @@
= INP: Soll ein INP-Link aufgebaut werden, so wird die NODES-Bake nicht mehr
zusammen mit dem SABM waehrend des Verbindungsaufbaus gesendet.
= INP: Check der empfangenen Subnetzbits eines Nodes, ist deren Anzahl
kleiner oder gleich null oder groesser als 32, so werden die IP-
Daten des Nodes geloescht, der Node aber trotzdem uebernommen.
= INP: wird eine Abmeldung fuer einen Node empfangen, dann wird die Lifetime
dieses Knotens auf 0 gesetzt. Dies hilft anscheinend gegen Nodes die
mit einer Laufzeit von 0 in der Liste stehen und nicht ausgetragen werden
= Linux: Kernelinterfaceupdate wegen Fehlern in den Kerneln nach 2.4.6.
Es werden bei Fehlern jetzt ausfuehrlichere Meldungen
geschrieben, fuer den Kernelfehler gibt es ein Workaround:
Bei fehlerhaften 2.4.x-Kerneln heisst das Interface jetzt nicht
mehr 'tnn' sondern auch 'tunX'. (siehe Beschreibung fuer 2.2.x-Style).
Es erfolgt eine Info ueber den Namenswechsel beim UPpen des
Kernelinterfaces.
= pacsat.c und pacserv.c ueberarbeitet, bessere Beschreibung und Beseitigung
des Fehlers der Pacsat unter Linux gelegentlich abstuerzen liess (DH6BB)
= Fehler behoben, dass Pacsat eine nicht vorhandene Datei loeschen wollte
(DH6BB)
= Connect im FlexNet-Stil (c -3 etc.) moeglich
= in der Statistik werden die auf Links gesendeten UI-Frames erfasst, da bisher
hierzu die Monitorfunktion benutzt wurde, konnte nicht festgestellt werden
an welchen Nachbarn das Frame eigentlich gesendet worden war da das Ziel
NODES ist.
= Linux: externe Texte deren Filenamen exakt acht Zeichen lang waren konnten
nicht verwendet werden (DH6BB)
= bei AutoIPR wurden in Mode 2 und 3 keine Eintraege durch del_node()
geloescht. Korrigiert.

35
history/178mh09.his Executable file
View file

@ -0,0 +1,35 @@
= INP: die stuendliche Nodes-Meldung an den Nachbarn konnte Nodes aus der
Tabelle entfernen die noch abgemeldet werden sollten. Jetzt werden
nur noch Nodes angefasst die eine Laufzeit haben.
= ALIAS-Kommando komplett neu implementiert, die alte Variante schien
Memory-Leaks zu produzieren, neue Variante arbeitet jetzt mit der
Listenverwaltung aehnlich wie MHeard.
= Kommando-Aliasse werden bei SP in die Parameterdatei geschrieben
= NETROM: Filter ergaenzt der verhindert, dass Nodes mit geheimen
Alias beim RX des alten NETROM Nodes-Broadcasts eingetragen werden
(nur altes NETROM, UI-Broadcasts) (DG8BR)
= FlexNet: Maxtime-Meldung wieder ausgebaut, laesst manchmal den Link stehen
bleiben (DG8BR)
= L2: pollt der Digi einen User und erreicht die maximale Anzahl an Polls
(N2-Zaehler) weil keine Antwort erhalten wurde, dann bekommt der User
ein DISC. Bisher erfolgte keine Reaktion ausser dem stillen "vergessen"
der Verbindung.
= Callcheck beim Connect-Befehl nicht machen wenn der User Sysop ist
= Linux: Kernel-AX.25 Interfaces konnten nicht immer geoeffnet werden wegen
einem Fehler in der Fehlerbehandlung. Es werden jetzt detaillierte
Fehlermeldungen geschrieben wenn Operationen fehlschlagen.
= Linux: Funktion xtempnam() neu implementiert wegen Meldung des Compilers
dass die bisher verwendete Systemfunktion tempnam() nicht sicher sei.
Jetzt wird mkstemp() verwendet.
= Problem mit nicht ausgetragenen Nodes war wieder aufgetreten, Erkennung
ob ein Peer-Eintrag benutzt ist oder nicht in drop_unreachable_nodes()
geaendert (pp->used anstelle von pp->routes)

91
history/178mh10.his Executable file
View file

@ -0,0 +1,91 @@
= Linux: AX25IP und AXIPX aufgeraeumt und von eigenen select()-Funktionen
befreit bei {ax25ip,axipx}_recv(). Die Pruefung auf lesbaren
Descriptor geschieht nun mit in linux.c::update_timer(), dort wird
nun fuer alle Interfacetypen die einen Filedescriptor benutzen
(AX25IP, AXIPX, Kernel-AX.25, Kernel-IP) auf die jeweiligen RX-
Funktionen verzweigt. Diese Massnahme sollte bei Verwendung der
beiden Modi eine geringere Auslastung bei hoeherer Reaktions-
schnelligkeit erbringen. ACHTUNG: AXIPX nicht getestet !!!
= viele Aenderungen und Fixes von Odo, DL1XAO (siehe 178or*.his)
= Soll ein INP-Link aufgebaut werden UND die RTT-Messung UND der
Faehigkeitsabgleich laeuft noch, dann senden wir keine Node-Infos
im NETROM-Format an den Nachbarn falls die RTT-Bake nicht innerhalb
von ein paar Sekunden wieder zurueckgekommen ist (l3misc.c::brosrv10())
= L2: Aenderungen an der Statemachine wieder teilweise rueckgaengig gemacht
da mit DAMA nicht 100%ig vertraeglich, bei nicht-DAMA funktionsfaehig.
= Linux: Kernel-AX.25 mit dem Kernel-Stack von DG1KJD kompatibel gemacht.
Es erfolgt eine automatische Erkennung, welcher Stack vorliegt,
allerdings erfolgt eine Umschaltung in den KJD-Mode erst mit dem
ERSTEN EMPFANGENEN Frame !!! Frames, die auf einem KJD-Stack VORHER
gesendet werden, werden vom Stack als fehlerhaft erkannt und
NICHT GESENDET !!! Ein Setzen der L2-Parameter wie TX-Delay etc.
ist mit dem KJD-Stack zwar moeglich, wird aber noch nicht
unterstuetzt (mangels Testmoeglichkeit). Parameteraenderungen
(TX-Delay, TX-Tail etc.) muessen mit den fuer das jeweilige Interface
zur Verfuegung stehenden Tools erledigt werden !!!
= L4: Erweiterung des L4, es koennen Pakete jeglicher PID uebertragen
werden. Schaltbar per #define NEW_L4 in all.h. Funktioniert nur, wenn
Quell- und Zielknoten diese Modifikation unterstuetzen, d.h. nur
zwischen zwei TNN's !!! Defaultmaessig NICHT mit eincompiliert,
sollte nur zu Testzwecken eingeschaltet werden !!!
= ARP- und IPR-Eintraege werden (intern) markiert, ob sie von einer Automatik
(INP-Routenlerner) oder von Hand gemacht wurden. Ueber Automatik gelernte
Routen koennen von der Automatik UND von Hand (ARP/IPR-Befehl) ausgetragen
werden, von Hand gemachte Eintraege NUR von Hand. Dies verhindert, dass die
Automatik Eintraege austraegt, die schon vorher existent waren und
unabhaengig von den INP-Infos immer vorhanden sein sollen. So sind statische
Routen moeglich die nicht verloren gehen, auch wenn die INP-Infos zu diesem
Ziel entfernt werden.
!!! aus .tnb-Files geladene Eintraege gelten als VON HAND gemacht !!!
= l3ip.c: Cache fuer IP-Routinginformationen implementiert, war zwar in den
Kommentaren zum Code erwaehnt, aber nirgends implementiert. Steht
nun in rt_find(). Zu aktivieren in all.h, #define IPRTCACHE.
= L2 nun mit Extended-AX.25. Eincompilieren mit #define EAX25 in all.h.
Ob eine Gegenstation EAX.25 kann wird in MHeard vermerkt, aber nicht
gespeichert ! Ueber die zusaetzlichen Parameter EAXMAXF und EAXMODE beim
Port-Befehl laesst sich das Maxframe und das EAX.25-Verhalten auf dem Port
steuern. Hierbei gilt fuer EAXMODE folgendes:
0 nur AX.25 zugelassen, EAX.25-Verbindungen werden abgelehnt.
1 Mode nach Faehigkeiten der Gegenstation bzw. nach MHeard. (AX.25 und EAX.25)
2 nur EAX.25 zugelassen, AX.25-Verbindungen werden abgelehnt.
Bei Mode 1 erfolgt ein Fallback auf AX.25 wenn ein EAX.25-Connect zur
Gegenstation mit DM beantwortet wurde. Mode 1 ist standardmaessig
eingestellt.
EAXMAXF kann max. 127 sein, sollte jedoch 32 nicht ueberschreiten,
default ist 16. Bisher ist ein Maxframe groesser 7 noch nicht mit
allen Hardwareinterfaces getestet !!! Hier muss experimentiert werden.
(auf VANESSA funktionierts einwandfrei)
Die zusaetzlichen Parameter bei Port sind mit "P *" abrufbar.
Parameter 1 (NoAckBuf) sollte bei Verwendung von EAX.25 entsprechend
vergroessert werden, hier sollte mindestens 1,5 * groesstes verwendetes
EAX.25-Maxframe eingestellt werden, damit immer genug Daten da sind.
Die Maxframe-Automatik funktioniert analog wie bei AX.25 aber nur dann,
wenn sie bei AX.25 aktiviert worden ist ! Also dort beim Maxframe
ggf. das "a" machen (PO x MAXF=?a). Aenderung in Zukunft moeglich.
= Tokenring: mit neueren Rechnern, die mehrere tausend Runden pro Sekunde
schaffen, konnte der Tokenring auf ein fruehzeitiges "Timeout" laufen und
einen Tokenverlust annehmen weil zu viele Runden vergangen, das Token aber
noch nicht wieder da war, da ein von den Runden abhaengiger Zaehler benutzt
wurde. Jetzt wird ein echter Timer und ein Token-Timeout von zwei Sekunden
verwendet, Timeout einstellbar ueber TOKENTIMEOUT in all.h.
Dieser Fehler betraf die DOS und die Linux-Version !!!
= Auf Ports, die als Interlinks arbeiten, Persistence anders einstellen
(l2misc.c::autopar() und l3misc::islinkport())

23
history/178nk01.his Executable file
View file

@ -0,0 +1,23 @@
= L3 neu sortiert - es entfallen l3a.c, l3b.c l3c.c; iproute.c heisst nun
l3ip.c. Neu: l3inp.c, l3misc.c, l3nbr.c, l3netrom.c, l3rtt.c, l3tab.c,
l3var.c, l3vc.c, l7showl3.c. l3.h entfaellt, statt dessen gibt es nun
l3local.h (nur fuer L3) und l3global.h (fuer alle Layer).
Verbesserungsvorschlaege zur Aufteilung bzw. zu Filenamen sind willkommen!
= L3: Bei der automatischen Nachbarerkennung werden beim umschalten von NETROM
auf INP alle bisher als UI gesendeten Ziele erneut gemeldet.
= Node-Call in Kleinschrift anzeigen, wenn INP-Options vorhanden.
= GO32-Include-Files include/{hardware.h,kiss.h,pc.h,vanessa.h,api.h,api32.h}
nach os/go32 verschoben.
= Linux-Version: bei STAT wird "Free RAM (Fmem)" nicht mehr angezeigt.
= DG9OBU:
- neues Kernel-Interface fuer Linux-Version (s. history/178mh01.his
und history/kernelif.his).
- neuer Befehl AXIPR (s. history/axipr.his) für Einstellungen, die bisher
nur ueber ax25ip.cfg (incl. Neustart) vorgenommen werden konnten.
= Auto-Update der Konfigurationsdateien TNNxxx.PAS und TNNxxx.TNB.

13
history/178nk02.his Executable file
View file

@ -0,0 +1,13 @@
= DG9OBU: Kernel-Interface nun fuer 2.2er und 2.4er Kernel
= DG9OBU: IPR-Automatik
= Bei DAMA zusaetzliche Sendepause alle ca. 30s
= L4:
- Zielknoten des Circuits wird als Call gespeichert, nicht mehr als
Eintrag der Nodesliste
- itol3 nun ohne Prioritaet (wurde sowieso nicht tatsaechlich verwendet)
= Hostmode: Anzeige bei "ESC Y" korrigiert - der eigentliche Fehler, dass
numhsts manchmal <0 wird, ist damit nicht beseitigt!

32
history/178or01.his Executable file
View file

@ -0,0 +1,32 @@
Änderungen in or01:
- fdfl und co sind weg, ersetzt durch etwas flexibleres, kein fdefblk
mehr, sondern fname, was man auch noch ausbauen könnte, um die
Begrenzung bei edit oder uploads auf ein File zu umgehen.
- Der Convers ist ausschaltbar, er wird zwar nur durch Leeroutinen
ersetzt, aber zum Platz sparen reicht das.
- NOPORTINMON baut die Monitorausgabe etwas um, damit bestimmte
Hostmodeprg etwas glücklicher sind, leider beeinflußt dies auch
die Ausgabe beim Monitortrace.
- SETTAILTIME schaltet das Setzen der Tailtime ein, ist für TNC3
recht nützlich. Langfristig würde ich es begrüßen, wenn in der
Expert-version alle Pars des L1 setzbar sind, sie können ja gerne
automatisch vorberechnet werden, aber wenn man was dran drehen will,
kann man es dann wenigstens.
- Einige Funktionen, die ich in Assembler progr. hab, sind ausgedef't
---snip---
Notiz für Nils:
AutoIPR Prüfung... die Netzeeinteilung in Klassen gibs nimmer, folglich
ist die Prüfung auf *.255 *.0 nicht korrekt, dies muß abhängig von der
Maske passieren. HHB hat zB .64 und .127 als verbotene Adr. (/26).
in dem Sinne kann es auch keine /31er Maske geben, weil die beiden
entstehenden Adr. ebensolche Netz und BC Adr wären.

39
history/178or02.his Executable file
View file

@ -0,0 +1,39 @@
Änderungen in or02, ausgehend von mh09:
-Beenden der TNN bei < 100 Buffer in buffers.c nicht übernommen.
-Variablen in l2rx.c für MaxCon lokalisiert und abgemagert.
-Erweiterungen beim BC in eigne Funktion ausgelagert.
-In l3nbr.c eine Variable eingespart.
-ALIASCMD überarbeitet, Ersatz findet zentraler in ccpcmd() statt, wird mit
Listen realisiert und erlaubt es Parameter hinter den Aliassen zu übernehmen,
nur der Alias selbst wird in Großschreibung konvertiert.
-bezugnehmend auf mh05 History, ccpport überarbeitet, sodaß auch nichtaktivierte
Sachen "gesetzt" werden können, sie werden halt einfach überlesen.
-Da mir die po + Zeile zu breit wurde, hab ich die Überschrift 2-zeilig gemacht
-In l7ip.c ist mal wieder unser Problem mit der Bitmaske zu sehen, wir sollten
wirklich mal über eine sinnvolle Prüfung diskutieren. (siehe vorherige
History, unten) und
wer bits == 1 liefert kann doch auch nicht die Wahrheit sagen, hier könnte
man durchaus ein minimum von 2..4 bits fordern, max 32 (keine 31!) und alles
was außerhalb ist wird ignoriert und nicht umgeändert (gilt als Fehler)
(bzw. 8 minimum, da ampr.net 44.x.x.x/8 ist)
-In l7showl3.c; dump-raw-node-info hab ich nicht übernommen (war als Test
deklariert).
-dump_port etwas angepaßt f<>r meinen Kram.
-In search_file soll laut mh08-History ein Fehler sein, den muß mir aber erst
einer beweisen, da ich ihn bei Nachprüfung nicht finden kann, bzw. der Fehler
muß wenn, an anderer Stelle sein.
-In mh_port_lookup war ein if zuviel.

15
history/178or03.his Executable file
View file

@ -0,0 +1,15 @@
Änderungen in or03:
-Im Convers die Callprüfung korrigiert und die Benutzung von clilin
in cvs_cmds.c ausgebaut.
-valcal() Rückgabewert korrigiert.
-Bei ccp_call() das if vorsorglich geändert.
Änderungen in or03, ausgehend von mh10:
-nur Übernahme in l3misc.c

6
history/179.his Executable file
View file

@ -0,0 +1,6 @@
= neuen L4 vorerst wieder abgeschaltet um volle Kompatibilitaet zu anderen
Systemen zu wahren
= sonst keine Aenderungen seit pre8, nur Debugmodus ausgeschaltet und Hinweise
auf geaenderte Stellen aus dem Source entfernt, Adressen in der ALAS
aktualisiert, ReadMe auf Release angepasst

78
history/179mh01.his Executable file
View file

@ -0,0 +1,78 @@
+ An FlexNet-Nachbarn melden wir statt wie bisher nun jeden unserer Locals
nicht mehr einzeln, sondern nur noch wie bei FlexNet ueblich einen SSID-
Bereich.
Der gemeldete Bereich errechnet sich aus dem Knotencall sowie der minimalen
und maximalen SSID aller per Lokaleintrag (L/L+) angeschlossenen Ziele, die
das gleiche Call wie der Digi haben. Versteckte Locals (Alias mit '#' am
Anfang) werden ignoriert.
Die Berechnung des Bereiches erfolgt bei der Sendung des 0er-Frames beim
Linkaufbau zu einem FlexNet-Nachbarn. Es kann nun aber vorkommen, dass
nicht hinter allen SSID des gemeldeten Bereiches auch ein Local ist. Des
weiteren ist fuer andere Knoten nicht ersichtlich, dass DB0XYZ-4 gar nicht
direkt am Netz haengt, sondern sich eigentlich hinter DB0XYZ befindet. Aus
diesen Gruenden muessen nun auch folgende Linkwuensche akzeptiert werden:
* Linkwuensche, die an einen Local gerichtet sind. Diese Linkwuensche
werden mit der normalen Gateway-Funktion umgesetzt, der VIA-Schwanz
des eingehenden Links wird entfernt !
* Linkwuensche, die an eine SSID unseres gemeldeten Bereiches gerichtet
sind, hinter denen aber kein Local steckt. Diese Links landen nun ganz
normal im Knoten.
aber:
* Linkwuensche an Locals die es zwar gibt, die aber grad nicht erreichbar
sind (L+), bleiben unbeantwortet. In diesem Fall landet man auch nicht
im Digi !
Aendert sich der verfuegbare SSID-Bereich waehrend der Interlink zum FlexNet-
Nachbarn schon besteht, so wird kein Update des Bereichs an den Nachbarn
durchgefuehrt, da hierzu der Link gekappt werden muesste. (FlexNet sieht
hier nur die Moeglichkeit vor, nach einer Aenderung des SSID-Bereichs diesen
per Link-Reset neu zu melden)
Es ist nun auch moeglich, direkt auf den Einstiegen die Locals
unter deren Calls zu connecten. Dies wird spaeter vielleicht noch so
eingeschraenkt, dass dies nur auf Ports mit einem FlexNet-Interlink
moeglich ist, und auf allen anderen Ports wieder normal mit via connected
werden muss.
= Linux: Beim Aendern des UDP-Ports beim AXIPR-Befehl blieb TNN komplett
stehen. Es wurde keine Meldung ueber die positive Aenderung angezeigt.
(Problem gemeldet von Oliver Kern)
= Linux: Nicht existierende Kernel-AX.25-Interfaces wurden nicht korrekt als
nicht funktionierend gekennzeichnet, dadurch war beim Start ein
Haenger moeglich. Korrigiert.
= Linux: Die PCISCC4-Einsteckkarte ist nun mit Hilfe des 2.4.x-Treibers
von F6FBB mit normalem Kernel-AX.25 nutzbar. TNN verwaltet die
wichtigsten Portparameter selbst (TXD, TXT, PERS, Duplex) und
uebertraegt sie bei Aenderungen an die Karte. Fuer die korrekte
Konfiguration des angeschlossenen Modemtyps MUSS das zusaetzliche
Programm "setpciscc" verwendet werden !!! Mit diesem Programm
gemachte Aenderungen werden allerdings von TNN (noch) nicht wieder
uebernommen, da keine Benachrichtigung erfolgt.
Zu aktivieren in include/all.h -> #define PCISCC4_KAX25 einschalten,
aber NUR wenn ein 2.4-Kernel mit dem Treiber vorhanden ist !!! Mit einem
normalen 2.4-Kernel kann dann NICHT compiliert werden !!!
= L4: "PID-Race" beim neuen L4 behoben. PID-Uebermittlung sollte nun
fehlerfrei funktionieren.
= Der IP-Router baut nun auch ausgehend Extended-AX.25 auf, wenn die zu
connectende Station im MHeard mit EAX.25 gekennzeichnet ist.
= EAX25: Werte von EAXMODE beim PORT-Befehl geaendert:
Mode 0 : nur AX.25 (unveraendert)
Mode 1 : AX.25 und EAX.25, Connects nach MHeard (unveraendert, default)
Mode 2 : AX.25 und EAX.25, ausgehende Connects zuerst immer in EAX.25,
erfolgt nach zwei SABME keine Antwort, dann Rueckfall auf AX.25
Mode 3 : nur EAX.25 erlaubt (wie der alte Mode 2)
= Verbesserungsvorschlaege von DL1XAO eingepflegt
= In allen Files im Copyright die Jahreszahl angepasst

125
history/179mh02.his Executable file
View file

@ -0,0 +1,125 @@
= Linux: "Test"-Befehl konnte AX25IP und AX25IPX zum Absturz bringen.
Korrigiert.
+ Linux: AX25IP hat nun einen automatischen Routenlerner, der bei eingehenden
Connects den Absender in die AX25IP-Routentabelle mit aufnimmt und
mit einem inaktivitaets-Timeout versieht. Laeuft dieser ab (1 Stunde),
so wird der gelernte Knoten wieder ausgetragen. Gelernte Knoten
werden bei "SP" nicht mit ausgegeben ! Das neue Feld "Timeout" der
AX25IP-Routenausgabe (Befehl "axipr") gibt die restliche Lebenszeit
des Knotens bis zur Austragung an.
Einzuschalten in all.h, #define AX25IP_DYNLEARN.
Wird mit AXIPR (nur neue Syntax !!!) ein Timeout von 0 eingestellt,
so werden gelernte Knoten NICHT vergessen und verbleiben in der Liste !
Ihre IP wird aber weiterhin ueberprueft und geupdated wenn das Call
ploetzlich mit einer anderen IP gehoert wird (dyndns). Knoten mit einem
Timeout von 0 werden bei "SP" mit in die parms.tnb ausgegeben !
= Linux: LOOPBACK-Interface schaltbar gemacht, defaultmaessig ist es nun
deaktiviert. (hat wohl sowieso keiner benutzt, oder ???)
Wer es doch braucht, Einzuschalten in all.h, #define LOOPBACK
+ Linux: Code an vielen Stellen aufgeraeumt, mit zusaetzlichen Kommentaren
versehen und genauere Fehlermeldungen im L1 eingebaut.
= Linux: Neuer Kommandoparser und Syntax fuer AXIPR, der Befehl orientiert
sich nun grob am Linux "route"-Kommando.
ACHTUNG, es wird immer entweder NUR die neue ODER die alte Syntax
verstanden !!! => tnb's in der alten Syntax versteht der neue
Parser nicht und die AXIPRs fehlen dann !
Soll die alte Syntax (= der alte Parser) wieder verwendet werden,
dann #define AXIPROLDSYNTAX in all.h setzen ! Bei "SP" wird ebenfalls
in der neuen Syntax geschrieben falls nicht auf alte Syntax
zurueckdefine'd wurde.
Nochmal: neue TNNs verstehen die AXIPR-Kommandos in der tnn179.tnb
von alten Versionen nicht mehr (und umgekehrt) !!! Einen
Konverter gibt es (noch) nicht.
Nur Eintraege in der ax25ip.cfg werden von beiden Versionen
verstanden !
Die neue Syntax lautet wie folgt:
axipr {add, +} {call, "default"} <IP / Hostname> [<UDP> [<UDP-Port>]]
axipr {delete, del, -} {call, "default"}
axipr myudp [UDP-Port]
axipr {loglevel, log} [Loglevel] (NEU !!!, siehe ax25ip.cfg)
axipr timeout [seconds] (NEU !!!, siehe dyn. Routenlerner)
Ein paar Beispiele:
IP-Route hinzufuegen : axipr add dg9obu-1 1.2.3.4
UDP-Route hinzufuegen : axipr add dg9obu-1 1.2.3.4 udp 12345
Defaultroute (IP) : axipr + default 1.2.3.4
Route loeschen : axipr - dg9obu-1
Defaultroute loeschen : axipr del default
Loglevel aendern : axipr loglevel 3
UDP-Port aendern : axipr myudp 12345
Timeout aendern : axipr timeout 7200
Bei erfolgreicher Abarbeitung erfolgt bei den Kommandos keine erneute
Ausgabe der Liste und man erhaelt gleich wieder das Prompt. Nur im
Fehlerfall erfolgen Fehlerhinweise. Bei Verwendung der neuen Syntax
kann (eigentlich) auf die ax25ip.cfg verzichtet werden, alle
Einstellungen koennen nun dynamisch veraendert werden und sind ueber
die tnn179.tnb einlesbar.
Weiterhin wurde bei der alten und neuen Syntax ein kleiner Fehler
bei der MyUDP-Port-Aenderung behoben. Der UDP-Port konnte nicht
geaendert werden, falls es nicht mindestens eine aktive UDP-Route gab.
+ Anpassungen an GCC 3.4.0
+ Linux: Die CPU-Auslastung kann nicht aus /proc/loadavg ermittelt werden, da
dort etwas ganz anderes ausgesagt wird, naemlich die IO-Last. Die
echte CPU-Last wird nun intern selbst aus dem Verhaeltnis von
Uptime zu Idletime der letzten zehn Sekunden berechnet. Die Werte aus
/proc/loadavg werden zur Information weiterhin ausgegeben.
+ Neues L1-Interface: 6PACK (vorerst nur unter Linux)
6PACK ist ein zum KISS-Tokenring aehnliches, jedoch von Kanalzugriff weiter
ausgereiftes Protkoll. Die gesamte Steuerung des TNC erfolgt durch die
Software, der TNC ist nur ein dummer Befehlsempfaenger. Genau wie beim
Tokenring koennen mehrere TNC in Reihe geschaltet werden. Im TNC ist ein
spezielles EPROM mit einer 6PACK-Firmware notwendig !
Konfiguration: in der tnn.ini:
Als kisstype ist bei dem entsprechenden Device "12" anzugeben, danach fuer
jeden vorhandenen TNC eine "port"-Zeile (wie beim Tokenring). In der
tnn179.tnb muss bei diesen Ports nur "ON" eingetragen werden. Es sollten
immer genau so viele Ports wie TNC vorhanden sind zugeordnet werden !
Eine ausfuehrliche Beschreibung findet sich in der tnnini.all in os/linux/ini.
Mit dem neuen Befehl "6pack" kann eine Statistik und die aktuelle Zuordnung
von TNC zu den Ports abgerufen werden, eine Veraenderung von Parametern ist
nicht moeglich. Die Behandlung von moeglichen Fehlern des Rings wird
komplett ohne Eingriffsmoeglichkeit durchgefuehrt. Falls ein TNC fehlerhaft
sein sollte, so ist dies an den Checksum- und Reset-Zaehlern zu erkennen.
Achtung, dieser L1-Treiber befindet sich noch in der Erprobung, er sollte
nur nach ausgiebigen Tests produktiv eingesetzt werden ! Bitte etwaige
Fehler melden ! Ausserdem sind das Copyright und die Bestimmungen der aus
dem FlexNet-Paket stammenden 6PACK-Firmware fuer TNC2 zu bachten,
insbesondere was den Einsatz im CB-Funk betrifft !
= Linux: Die Ausfuehrung von Shellkommandos mit "sh" aus der tnn179.tnb und
anderen von dort gestarteten tnb-Files war nicht moeglich. Korrigiert.
= AX25IP: Probleme beim Empfang behoben, TCP hat nun Vorrang vor UDP wenn beides
aktiv ist. Bei eingeschaltetem Logging wird das Log nicht mehr
mit jedem empfangenen Paket unnoetig vollgeschrieben.
= L3VC: Bei der Meldung an FlexNet-Nachbarn wurden Locals, deren Call nicht
gleich dem des Knotens ist, nicht gemeldet. (DAC922 Stefan)
- Zielsystem "DOS16" entfernt und kleinere kosmetische Aenderungen (DG8BR Bernd)

114
history/179mh03.his Executable file
View file

@ -0,0 +1,114 @@
* "Mailbox" und "DX"-Kommando konnten fehlerhaft arbeiten, wenn keine Mailbox
oder kein DX-Cluster eingetragen wurde. Initialisierungen verschoben, wurden
offensichtlich ignoriert. (Compilerfehler ?)
* Diverse uninitialisierte Variablen gefixt und zusaetzliche Sicherheits-
initialisierungen eingebaut. Aufraeumen des Speichers bei Programmende.
= Der L2-RX ignorierte die "QST" ARP-UI-Frames, korrigiert.
= Linux: 6PACK hatte RX-Probleme auf TNC2 mit original 6PACK-Firmware, auf dem
TNC3 tritt das Problem nicht auf (fehlerhafte/unvollstaendige 6PACK-
Implementation im TNC3).
Weiterhin gibt es fuer den Sysop nun ein Kommando "6pack loglevel x",
wobei 0 <= x <= 4 gilt. Je groesser x, desto mehr Debugausgabe erfolgt
in eine Datei namens "6pack.log". Achtung, x = 4 ist sehr ausfuehrlich
und sollte nur benutzt werden, wenn ein Anlass besteht und auch genug
Plattenplatz vorhanden ist ! Es erfolgt keine Ausgabe der Meldungen auf
der Console bzw. im verbundenen Kanal, es wird nur in besagte Datei gelogt.
= Linux: AX25IP vereinheitlicht, so dass Aufgaben des L1-Treibers nicht wie bisher
an Stellen ausserhalb des Treibers erledigt werden.
= Linux: AX25IP: Korrektur eines Fehlers, der den Empfang bei IP-Links verhinderte.
= Linux: AX25IP: Mehr Frametypen fuehren beim dyn. Routenlerner nun zu einem
Eintrag.
= Linux: "ax25ip.cfg"-Konfigurationsdatei wurde bis zum Programmende offen
gehalten. Wird jetzt nach dem Einlesen wieder geschlossen.
= Linux: Vanessa nur deinitialisieren wenn auch eine Karte gefunden wurde,
Speicher nur unmappen wenn er auch gemapt war.
= Linux: Compilieren war ohne gesetzten "#define KERNELIF" nicht mehr moeglich.
= Linux: Lock-Files ordentlich abraeumen bei Fehlern waehrend des L1-Setups.
* Folgende schaltbare Funktionen wurden aus all.h entfernt und befinden sich
nun fest im Code:
+ IPRTCACHE IP-Routencache
+ REALROUTECOUNT Zaehlung der Routen zum Nachbar
* INP-Modul aufgeraeumt, hier war sehr viel versionsspezifischer Code bzgl.
erster INP-Implementationen. Dieser Code wird nun NICHT mehr mit compiliert,
er ist nur noch auf Knoten notwendig die mit TNN-Nachbarn mit Versionen
kleiner als 1.76 linken ! Wer diese Codeteile benoetigt, muss das
"#define OLD_INP" in all.h aktivieren, sonst werden so alte Nachbarn nicht
mehr verstanden ! Besagter Code wird asap dauerhaft entfernt, dies ist nur
eine Uebergangsloesung !!!
+ Linux: "sm02"-Patch integriert, fuer alle HDLC-Devices ("bc*"-Interfaces)
und SoundModem ("sm*") wird nun DCD und PTT vom Kernel abgefragt.
Einzuschalten mit "#define HDLC_DCDPTTSTAT" in all.h.
Fuer den SCC-Treiber kann nun ebenfalls die PTT-Information vom
Kernel erhalten werden, einzuschalten mit "#define SCC_DCDPTTSTAT".
Weiterhin kann nach einem kleinen Patch am Kernel auch der DCD-
Zustand der SCC-Devices abgefragt werden, hierzu ist zusaetzlich
der "#define OBU_SCC_DCD" zu aktivieren. Achtung, dies funktioniert
NUR mit veraendertem Kerneltreiber, mit "vanilla"-Kerneln bzw. deren
SCC-Treiber ist ein compilieren nicht mehr moeglich ! Naehere Infos
finden sich in "sccpatch.txt".
* Kommandozeile fuer externe Programme konnte ueberlaufen. Behoben. (sm04)
* Linux: Der Routenlerner muss die direkt gehoerte Station, also ggf. das
letzte Via, lernen und nicht unbedingt den eigentlichen Absender.
(sm04)
* Linux: AXIPR wertete in der alten Syntax bei "R +" die angegeben IP-Adresse
nicht korrekt aus.
* Linux: Interaktive Shell. Wird bei "sh" kein direkt auszufuehrender Befehl
angegeben, so erhaelt man eine interaktive Shell. Befehle wie z.B.
"sh ls -l" werden wie bisher direkt ausgefuehrt. Der Timeout fuer
nicht-interaktive Befehle betraegt weiterhin eine Minute, die
interaktive Shell hat hier fuenf Minuten mit Timeout-Warnung.
(Nur als Sysop, nicht fuer Benutzer verfuegbar)
+ Bei UI-Frames wird der via-Pfad ausgewertet und der Weg zum naechsten Hop
bestimmt. Es gelten die folgenden Einschraenkungen:
Falls das eigene Knotencall ...
... das naechste Via ist: Falls es noch weitere Via nach uns gibt UND der
naechste Hop per L2 erreichbar (also ein Local oder Flexnet-Nachbar) ist,
wird das Frame auf dem entsprechenden Port ausgegeben. Sind wir das letzte
Via in der Liste, dann wird geprueft, ob das Ziel ein Local oder ein lokaler
User ist und falls dem so ist, das Frame auf dem entsprechenden Port ausgegeben.
... nicht das naechste Via ist: Es wird geprueft, ob das gewuenschte Via
bekannt UND per L2 (Flexnet oder Local) erreichbar ist, und das Frame dann
auf dem entprechenden Port ausgegeben. Calls auf Userports werden hier nicht
als moegliche naechste Via-Ziele beruecksichtigt. Ebenfalls werden auf Ports
empfangene Frames, die nicht an uns gerichtet sind und wenn der Port keine
Interlinks hat, ignoriert.
Grundsaetzlich findet keine Ausgabe von UI-Frames statt, wenn das naechste
notwendige Ziel, also das naechste Via oder der Zielknoten, nur per NETROM
erreichbar ist. Der via-Pfad wird bis auf das Aendern des H-Bit beim eigenen
Call nicht veraendert !
Eventuell soll spaeter mal ein Flexnet-aehnliches UI-Forwarding implementiert
werden, da ich aber komplett im NETROM-Land sitze und keine Moeglichkeit habe
Flexnet zu beobachten, bin ich auf Traces unter genauer Angabe der Situation
angewiesen. Wer so etwas oder sogar Dokumentation beisteuen kann, bitte zuschicken.
(dg9obu@nordlink.org oder dg9obu@db0uhi.#nds.deu.eu)
Die schon im Code vorhandene Mailbaken-Funktion, die mit Hilfe des Knoten-Aliasses
eine gezielte Aussendung von UI-Frames auf bestimmten Ports ermoeglichte, ist
weiterhin unveraendert vorhanden.

109
history/179mh04.his Executable file
View file

@ -0,0 +1,109 @@
Aenderungen 179mh03 -> 179mh04:
-------------------------------
= INP meldet bei Aenderung der Knoten-IP oder Subnetzmaske dies allen
INP-faehigen Nachbarn.
= INP-Parser aufgeraeumt, die Auswertung von einem fehlerhaft empfangenen
Node fuehrt nun nicht mehr zum Abbruch der Auswertung des ganzen INP-Frames.
= Die mit #define OLD_INP bereits stillgelegten Codeteile wurden entfernt.
= Output-Programm modifiziert: Patch von DK2CRN eingebaut (zusaetzl.
Wartezeit fuer STROBE-Leitung) und zusaetzl. Pruefungen (DG9OBU).
= Ausgabe des SSID-Bereiches der Linkpartner beim "routes"-Befehl.
= AX.25 ARP-"QST"-Frames die noch erreichbare Ziele im VIA-Pfad haben,
reichen wir nun weiter, ist das naechste Ziel nicht erreichbar,
schmeissen wir sie weg.
Frames die uns als letztes VIA haben nehmen wir an, weil der Vorgaenger
es auf Grund des Pfades zu uns geschickt hat und wir kein weiteres Ziel
dafuer haben.
* Linux: make: Unterstuetzung von externen Linkerflags, make-Aufruf
beruecksichtigt nun die Variable "LDFLAGS_LIN" beim Linken.
Um z.B. mit dem gcc statische, gestrippte Binaries zu erhalten nimmt man z.B.:
"make LDFLAGS_LIN=-static LDFLAGS_LIN+=-s"
Die Variable wird auch an die makefiles in "contrib" durchgereicht.
* Linux: Erkennung fuer MIPS-Systeme beim Compilieren (WRT54G, MeshCube):
(aut. Erkennung oder "make MIPS=YES [...]" bei Crosscompilierung)
"contrib/output" wird fuer MIPS-Systeme NICHT mehr uebersetzt.
Dies ist fuer den WRT54G oder MeshCube gedacht, diese beiden haben
keinen parallelen Printerport wie die i386-kompatiblen Systeme.
"make" gibt hier einen kurzen Hinweis aus dass nichts gebaut wurde.
"Vanessa" wird ebenfalls fuer MIPS-Systeme NICHT mehr genutzt, aber
noch ein restl. Rumpf mit eincompiliert. Diese Hardware gibt es fuer
MIPS einfach nicht.
Diese Variable wird ebenfalls an makefiles in "contrib" durchgereicht.
* Linux: kleine Anpassung im Convers damit keine Meckermeldungen mehr
beim Compilieren mit dem GCC unter Linux ausgegeben werden
* Linux: mit dem Befehl "setshell" kann eine abweichende Shell gesetzt werden. Beim
Start wird die Umgebungsvariable SHELL gelesen und eine dort eingestellte
Shell uebernommen. Ist diese Variable leer so erfolgt eine Warnung und der Shell-
Mechanismus ist nicht nutzbar.
Wichtig fuer "busybox": die Shell sollte ein symbolischer Link sein damit
busybox weiss, was zu tun ist. Also nicht "setshell /bin/busybox" sondern
"setshell /bin/bash", wobei "/bin/bash" ein symbolischer Link auf "/bin/busybox"
sein muss.
Beispiel:
"setshell" liefert eine kurze Hilfe
"setshell ?" fragt die aktuelle Einstellung ab
"setshell /bin/sh" setzt /bin/sh als zu verwendende Shell
Das uebergebene Programm wird rudimentaer auf seine Eignung als ausfuehrbare
Datei untersucht (kein Socket, Verzeichnis etc., ausfuehrbar)
= L2-Connects mit Via-Pfad beruecksichtigen bei der Suche des naechsten Ziels
nun auch die MHeard-Liste wenn kein Ziel im L3 gefunden wurde. Der Via-Pfad
wird durchgereicht.
= Bei der verzoegerten Bestaetigung von Hop-to-Hop-Verbindungen konnte das UA-Frame
in seltenen Faellen mit falschen Flags gesendet werden. Die Flags des in diesem
Fall gesendeten UA-Frames sind nun fest verdrahtet (Response und Final -> "UA-").
= Linux: Schalter AXIPROLDSYNTAX ausgebaut, die AXIPR-Parser koennen nun umgeschaltet
werden, nach dem Start ist der *ALTE* Parser aktiv, damit alte Konfigurationen
problemlos gelesen werden koennen. Das Umschalten erfolgt wie folgt:
Alt -> Neu : "AXIPR P"
Neu -> Alt : "AXIPR OLD" oder "AXIPR O"
Ist der neue Parser zum Zeitpunkt von "sp" aktiv, so schreibt er den Umschaltebefehl
fuer Alt -> Neu mit in die tnb-Datei.
>>> Wer seine .tnb schon in neuer Syntax hat, der muss den Umschaltebefehl haendisch <<<
>>> nachtragen !!! <<<
(... oder man aendere den Source auf die bevorzugte Variante: os/linux/ax25ip.h, Zeile 93)
= Linux: Der Shell-Befehl nutzt nun eine Bibliotheksfunktion, um eine Shell abzuforken.
Hierdurch sollten die "ERROR while reading ..."-Fehler nun beseitigt sein.
Ursache dafuer waren offenbar nicht eindeutige Prozessgruppenzugehoerigkeiten und
Probleme mit dem gemeinsam verwendeten Descriptor.
>>> Die Benutzung der interaktiven Shell ist in tnb-Dateien nun blockiert !!! <<<
Damit steht TNN hoechtens eine Minute (Standard-Timeout) an einem Shell-Befehl.
In den Batchdateien sind nur noch Shellaufrufe in der Art "sh ls -l" moeglich, ein
"sh" hat keine Wirkung bzw. wird eine entsprechende Fehlermeldung in eine ggf.
offene Logdatei geschrieben.
Zum Linken von TNN ist nun zusaetzlich die "libutil"-Bibliothek erforderlich !
= Linux: 6PACK ruft nun auch bei offenem Ring weiter nach seinen TNC, dies wurde bisher
nur gemacht falls ueberhaupt irgendetwas empfangen wurde. Kleine Korrekturen
beim Schliessen des ser. Ports.

108
history/179mh05.his Executable file
View file

@ -0,0 +1,108 @@
Aenderungen 179mh04 -> 179mh05:
-------------------------------
Diese Version besteht hauptsaechlich aus Bugfixes, sowie einigen Funktionen,
die aus der CB-Variante uebernommen wurden. Im Einzelnen sind geaendert:
* Fix fuer Absturz bei Connect mit Via-Angabe.
* Alle Makros, die in CTEXT.TXT funktionieren, koennen nun auch in
QUIT.TXT verwendet werden.
= Linux: bei der nicht-interaktiven Shell konnte bei Kommandos, die keine
Rueckgabe erzeugten, die "ERROR while read()ing"-Meldung noch
erscheinen, obwohl kein Fehler vorlag. Korrigiert.
Weiterhin konnte die Ausgabe grosser Datenmengen
(sh cat /var/log/messages) dazu fuehren, dass eine Sicherheitsfunktion
ansprach und den ueberfuellten Link abwarf. Jetzt wird die Verbindung
nur noch mit maximal 100 ausstehenden Frames mit Daten aus der Shell
gefuellt.
= MHeard/L3MHeard zeigt nun bei Aenderung der Listengroesse nicht mehr die
Liste an, sondern gibt nur noch eine Meldung ueber die neue Groesse aus.
* Nickname-Unterstuetzung fuer den Convers. Es ist nun die Angabe eines Namens
moeglich, der zusaetzlich vor dem Rufzeichen angezeigt wird. Die Eingabe wird
an andere Convers-Hosts weitergeleitet, sofern sie die Nickname-Faehigkeit in
ihren Feature-Flags angezeigt haben. Die Umsetzung erfolgte in Anlehnung an
die Implementierung im tpp-convers 1.14, jedoch erfolgt die Anzeige des Nicknames
nicht so haeufig wie im Original.
Hinzugekommen sind die beiden Kommandos:
/NICKname <Name> oder "@" setzt den Namen, der @ loescht ihn
/NONickname loescht den Namen (wie "/nick @")
Angepasste Hilfedateien finden sich im Verzeichnis "doc" !
Einzuschalten mit dem #define CONVNICK in all.h. Ist es aktiviert, werden
andere Feature-Flags gesendet und die Version "3.14c" bzw. "pp-3.14t" gemeldet.
* Onlinehilfe angepasst und geupdated
= 6PACK: Ein weiterer Wachhund sorgt nun dafuer, dass der intern gespeicherte
PTT-Status des TNC rueckgesetzt wird, falls Infopakete des TNC verloren gehen.
= Datum im Copyright angepasst
* Linux: Das Interface zum Kernel heisst nun "tnn" statt "tun0" und wurde fuer
die 2.6er-Kernelreihe angepasst. Weiterhin ist nun die Angabe der
Subnetzbits fuer die Kernel-Seite des Interfaces moeglich.
(IP-Adresse/Subnetz-Bits).
Achtung, bei einigen Kerneln klappt die Aktivierung des Interfaces
nicht, obwohl kein Fehler gemeldet wird. In diesem Fall muss in der
Datei "kif_up.tnb" der Befehl "sh ifconfig <Interfacename> up" ein-
getragen werden. Der Interfacename ist "tnn".
+ Empfangene und gesendete FRMR-Pakete werden im Trace dekodiert.
* Connectbewertung komplett ueberarbeitet, dem User sind nun mehr Uebersteuerungs-
moeglichkeiten vorhanden. Die Angabe eines abweichenden Ports ist nun nur noch
als letzter Parameter moeglich ! (c db0abc ... {Portnummer, Portname})
* Linux: bei AX25IP ist der dynamische Routenlerner nun fest eingebaut, der Schalter
AX25IP_DYNLEARN in all.h ist somit entfallen.
* Linux: AX25IP arbeitet nun primaer mit Hostnamen statt mit IP-Adressen. Wird ein Host
angegeben der momentan nicht aufgeloest werden kann, so wird er mit der IP-
Adresse 0.0.0.0 in die Routentabelle aufgenommen und bei jedem gesendeten Frame
zu diesem Host ein Adressaufloesungsversuch unternommen. Somit koennen ueber
dynamisches IP erreichbare Hosts ohne Kenntnis der aktuellen IP eingetragen werden.
Wird statt eines Hostnamens eine IP-Adresse eingetragen, so wird diese direkt
uebernommen, der Hostname wird auf die IP-Adresse gesetzt.
Dynamische Routen werden nun bei "sp" ebenfalls in die parms.tnb geschrieben,
jedoch werden sie auskommentiert und sind somit nicht aktiv. Durch einen manuellen
Eingriff koennen diese Eintrage auf einfache Weise permanent gemacht werden.
Die Routentabelle wird in einem konfigurierbaren Intervall durchsucht
und alle Hostnamen in ihre aktuellen IP-Adressen aufgeloest. Sofern geaenderte IP-
Adressen nicht schon durch den Routenlerner aktualisiert werden, passiert dies nun.
Hinzugekommen ist der Befehl "LOOKUP <Sekunden>" beim AXIPR-Kommando (nur neue
Syntax !!!), eine Einstellung von 0 deaktiviert die Ausfuehrung, voreingestellt
sind 180 Sekunden. Achtung, steht kein erreichbarer Nameserver zur Verfuegung,
kann der Knoten eventuell kurz einfrieren, da die Systemfunktionen hier
blockieren.
* Linux: das uebermittelte Datum beim AutoBIN-Transfer war um einen Monat daneben.
* Linux: bei gleichzeitiger Benutzung von AX25IP IP- und UDP-Verbindungen, konnte
eine Sendung mit einer falschen Portnummer erfolgen (DH6BB)
* Die automatische Berechnung der Port-Parameter (Persistenz, L2-Retry, L2-Timer, ...)
kann uebersteuert werden. Werte, die weiterhin automatisch berechnet werden, werden
bei "po *" mit einem kleinen "a"-Suffix versehen, von Hand uebersteuerte Werte erscheinen
ohne Suffix. Soll ein nicht mehr automatisch berechneter Port-Parameter wieder in die
automatische Berechnung aufgenommen werden, so ist als Wert "a" anzugeben ("po 1 pers=a").
Standardmaessig werden alle Port-Parameter automatisch berechnet.
Die EXPERTPARAMETER muesen in all.h aktiviert sein ! (ist nun Standard)
* Neues Makro %f zum Einlesen einer Textdatei. Der Dateiname muss direkt hinter dem %f stehen,
nach dem Dateinamen ist ein Leerzeichen einzufuegen, welches spaeter nicht mit ausgegeben
wird. (DH6BB)
Bsp im Ctext: "Aktuelle Temperatur %f/usr/local/wx/wx.txt Grad Celsius"

20
history/179mh06.his Executable file
View file

@ -0,0 +1,20 @@
Aenderungen 179mh05 -> 179mh06:
-------------------------------
* Linux: der Routenlerner das ax25ip hatte ein Problem mit der Default-Route, was das
Lernen von neuen Verbindungen blockieren konnte.
* Linux: Konsolen- und Socketbehandlung modifiziert:
Wenn TNN im Hintergrund gestartet wird, fuehrt eine geschlossene Konsole oder
ein geschlossener Socket beim Schliessen des TTY nun nicht mehr dazu, dass
100% CPU gezogen werden.
Einmal als geschlossen bzw. fehlerhaft erkannte TTY werden nicht neu verbunden,
abgebrochene Sockets werden fuer eine neue Verbindung wiederhergestellt.
* Linux: neuer Kommandozeilenschalter "-v" fuer ausfuehrlichere Startmeldungen.
(nur bei Problemen interessant, nicht fuer den Regelbetrieb)
* Linux: kleinere Aufraeumarbeiten und Sicherheitspruefungen von Systemaufrufen hinzugefuegt.
* Linux/MIPS: PACSAT und einige x86-spezifische Sachen werden nicht mehr mit compiliert

9
history/179pre1.his Executable file
View file

@ -0,0 +1,9 @@
= MH zeigt bei gehoerten Stationen die EAX.25 verwenden dies hinter dem
Rufzeichen an
= kleine Aenderungen von Bernd DG8BR an l3vc.c.
= AX25IP-Routen konnten doppelt eingetragen werden, jetzt werden Routen
fuer ein Call das schon in der Liste steht nicht mehr angenommen,
der Eintrag muss zuerst geloescht werden. Es erfolgt eine Meckermeldung.

11
history/179pre2.his Executable file
View file

@ -0,0 +1,11 @@
= EAX.25: Keine Auswertung des EAX-Flags im Frame bei eingehenden Connects
mehr, die Umschaltung erfolgt nun nur noch bei Empfang von SABME.
= EAX.25: Neues Monitorformat bei I-Frames
= Fixes von DL1XAO an MHeard, Port und L7 eingearbeitet
= Externe Programme dem Paket hinzugefuegt, Copyrights aktualisiert
= Aenderungen am externen Programm pfhadd wegen Compilermeldung ueber
unklare Schleife

17
history/179pre3.his Executable file
View file

@ -0,0 +1,17 @@
= EAX.25: Interne Aenderungen, Einsparung vieler lokaler Variablen. TNN verhaelt
sich an einigen Stellen nun geringfuegig anders als das EAX25 des
Linuxkernels, eine Zusammenarbeit ist trotzdem problemlos moeglich.
Die jetzige Implementation haelt sich strikt an die Spezifikation.
Das maximal moegliche Maxframe wurde auf 32 begrenzt, standardmaessig
wird nun mit einem Maxframe von 16 gearbeitet.
= Linux: Behandlung von DG1KJD's AX.25-Kernelvariante geaendert, soll dieser
Kernel verwendet werden, dann ist dies mit "kisstype 11" in der
tnn.ini bei dem entsprechenden Port anzugeben. Die automatische
Erkennung ENTFAELLT hiermit ersatzlos da sie eine nicht behebbare
Schwaeche bei der Erkennung des Kerneltyps hatte, sie war darauf
angewiesen dass zuerst ein Frame empfangen werden musste bevor auf
dem KJD-Stack korrekt gesendet werden konnte. Die Portparameter fuer
KJD-Ports muessen weiterhin mit den entsprechenden Zusatztools
gesetzt werden, TNN kann dies mangels Testmoeglichkeit noch nicht.

19
history/179pre4.his Executable file
View file

@ -0,0 +1,19 @@
= Statistik des IP-Kernelinterfaces wurde beim CLEAR-Kommando nicht mit
geloescht. Korrigiert.
= Weitere Anpassungen wegen KJD-Kernel
= Im Linuxteil testweise alle Zaehlvariablen in Schleifen von i++ auf ++i
umgestellt da Praefixoperation keine temporaere Variable benoetigen.
Weiterhin alle Zaehlvariablen ohne weitere Bedeutung auf "register"
umgestellt.
+ Aenderungen von Bernd DG8BR am FlexNet-Modul:
l3vc.c
- Digisystem (X)NET hinzugefgt.
l7showl3.c
- Erkennung von XNET in Funktion "putrou" erweitert.
- Unbekannte Digiprogramme wurden nicht erkannt. Wurde nicht richtig
- beendet.

36
history/179pre5.his Executable file
View file

@ -0,0 +1,36 @@
* Zusaetzliche Makros fuer Prompt:
'%l' Anzahl aktiver L2-Links
'%p' Portnummer
'%P' Pseudo-Name des Ports
'%u' Anzahl der User auf dem aktuellen Port
'%%' %
Zur Erinnerung: diese und die anderen Prompt-Makros funktionieren auch
in CTEXT.TXT und CTEXT.<portnummer> !!!
* Linux: AX25IP umgekrempelt, es ist nun ein paralleler Betrieb von UDP und IP
moeglich. Ebenfalls kann die UDP-Portnummer, auf der TNN hoert, nun waehrend
des laufenden Betriebs geaendert werden.
ACHTUNG !!! Die entsprechenden Ports sind netzwerkseitig nur offen, wenn
es auch AXIPR-Routen gibt !!! So lange keine Route oder eine Defaultroute
eingetragen wurde, empfaengt TNN deshalb auch nix !!! Dies gilt fuer IP und
UDP jeweils getrennt, ohne IP-Routen kein IP-Empfang, ohne UDP-Routen kein
UDP-Empfang !!! Die Ports oeffnen und schliessen automatisch je nach
Vorhandensein von Routen. Ohne eingetragene Routen sind sie sowieso wertlos,
da TNN Sendeframes wegschmeisst, wenn es keine IP-Adresse ermitteln kann.
Fuer Empfangsversuche ist also z.B. eine Defaultroute zu 127.0.0.1 im
zu beobachtenden Mode notwendig.
Die standardmaessig geschlossenen Ports sollten auch gegen Angriffe aus
dem Internet schuetzen (Flooding etc.).
* Linux: Fehler im Kernel-AX.25 behoben, es war kein RX/TX mehr moeglich,
weitere Anpassungen wegen KJD-Kernel
* Der "Routes"-Befehl zeigt nun an, wie viele Routen wirklich auf einen
jeweiligen Nachbarn zeigen.
Die Zahl unter "Dst" gibt wie bisher an, wie viele Ziele von diesem
Nachbarn bekannt sind, unter "Rou" steht nun zusaetzlich, fuer wieviele
Ziele dieser Nachbar derzeit der beste Weg ist.

9
history/179pre6.his Executable file
View file

@ -0,0 +1,9 @@
* Diese Version wurde nie veroeffentlicht, sie enthielt nur Veraenderungen,
um unter AX25IP mehrere Ports zu ermoeglichen. Dies wird benoetigt, um
auf Knoten mit Internetlinks mehrere Verbindungen in Mode N oder N- zu
ermoeglichen. Um der Verlinkung via Internet keinen weiteren Vorschub
zu leisten, wurde die Ergebnisse nicht in den Code uebernommen.
Funktionieren tut das oben beschriebene dennoch in der nicht veroeffent-
lichten pre6. Teilweise Anpassungen sind noch notwendig, werden aber
nicht weiter verfolgt.

8
history/179pre7.his Executable file
View file

@ -0,0 +1,8 @@
= einige History-Files nachtraeglich geupdated
= Linux: Race-Condition bei Verwendung des Hostmode-Sockets behoben. Es
konnte vorkommen, dass TNN sich nicht starten liess, wenn der
Socket verwendet werden sollte. Starts mit Konsole gingen in diesem
Fall jedoch problemlos.
= Linux: kernelif.c: einige Newlines in Ausgaben in Returns geaendert

17
history/179pre8.his Executable file
View file

@ -0,0 +1,17 @@
= Probleme bei den neuen Makros behoben
= In l3tab.c::l3_find_route() wurde beim Aufbau des VIA-Feldes bei L2-Connects
eine nicht initialisierte Variable zum Vergleich herangezogen. Dies konnte
dazu fuehren, dass das VIA-Feld nicht korrekt aufgebaut wurde, weil
eventuell ein falscher Linkpartnertyp festgestellt wurde.
= Funktion l7utils.c::getdig() bereinigt, Rueckgabetyp war nicht mit erwartetem
Typ an anderen Stellen im Code identisch und konnte zu falschen Ergebnissen
fuehren.
= Linux: Problem mit dem Kernelinterface fuer KJD-Kernel behoben, es konnten
keine Interfaces geoeffnet werden.
= In all.h die schaltbaren Optionen neu gruppiert, selten benutzte Optionen
weiter unten eingetragen, ausserdem sind die L4-Erweiterungen nun standard-
maessig eingeschaltet.

67
history/axipr.his Executable file
View file

@ -0,0 +1,67 @@
!!!! ACHTUNG
!!!! Dies ist die ALTE Syntax des AXIPR-Kommandos !
!!!! ( siehe 179mh02.his fuer neue Syntax !!! )
-----------------------------------------------------------------------------
Die Datei ax25ip.cfg wird (erstmal) noch benoetigt fuer die Socket-
Initialisierung und Einstellung des Loglevel.
Syntax:
=======
AXIPR
Zeigt die derzeit gueltigen AXIP-Routen. Diese werden auch angezeigt, wenn
erfolgreich ein Eintrag zugefuegt oder geloescht wurde.
AXIPR R + <call> <host> [mode [udp-Port]]
Es wird eine Route eingetragen zum Rufzeichen <call> ueber den Host <host>.
Fuer <call> muss ein gueltiges Rufzeichen verwendet werden. Fuer <host> kann
sowohl eine IP-Adresse als auch ein Hostname (max. 32 Zeichen) angegeben
werden. Optional kann der fuer mode "IP" oder "UDP" gewaehlt werden. Fuer
mode UDP kann zusaetzlich der udp-Port des Zieles angegeben werden.
AXIPR R - <call>
Die Route zu <call> wird aus der Liste entfernt.
AXIPR D + <host> [mode [udp-Port]]
Es wird eine Default-Route eingetragen zum Host <host>. Fuer <host> kann
sowohl eine IP-Adresse als auch ein Hostname (max. 32 Zeichen) angegeben
werden. Optional kann der fuer mode "IP" oder "UDP" gewaehlt werden. Fuer
mode UDP kann zusaetzlich der udp-Port des Zieles angegeben werden.
AXIPR D -
Die Default-Route wird geloescht.
Wichtig! Man kann (vorerst) nur entweder IP-Routen verwenden, wenn man selbst
einen IP-Socket verwendet, oder es muessen UDP-Routen verwendet werden, wenn
man selbst einen UDP-Socket verwendet.
Beispiele:
==========
AXIPR R + DB0ABC db0abc.ampr.org
Traegt ein IP-Route zu DB0ABC mit der IP-Adresse von db0abc.ampr.org ein
AXIPR D + 44.55.66.77 UDP
Setzt die Defaultroute auf die IP 44.55.66.77 mit UDP-Protokoll auf dem
UDP-Defaultport (10093)
AXIPR R + DB0ABC-10 db0abc-u.ampr.org UDP 34567
Traegt eine UDP-Route auf Port 34567 bei DB0ABC-10 mit der IP-Adresse
von db0abc-u.ampr.org ein
AXIPR R - DB0ABC
Loescht den Routeneintrag fuer DB0ABC
AXIPR D -
Loescht die Default-Route

33
history/eax25.his Executable file
View file

@ -0,0 +1,33 @@
Hinweise zum Extended-AX.25:
============================
- Die Verwendung/Akzeptanz von EAX.25 laesst sich ueber den Wert von EAXMODE
beim PORT-Befehl steuern:
Mode 0 : nur AX.25 erlaubt, EAX.25 wird abgelehnt
Mode 1 : AX.25 und EAX.25, Connects nach MHeard (default)
Mode 2 : AX.25 und EAX.25, ausgehende Connects zuerst immer in EAX.25,
erfolgt nach zwei SABME keine Antwort, dann Rueckfall auf AX.25
Mode 3 : nur EAX.25 erlaubt, AX.25 wird abgelehnt
- BEIDE Seiten muessen EAX.25 unterstuetzen, Unterstuetzung ist derzeit
nur im Linux-Kernel, WAMPES, NETCHL und TNN vorhanden. Gegenstellen, die
nur AX.25 koennen, ignorieren die EAX.25-Frames entweder komplett oder
senden auf das SABME ein DM. Sollte eine AX.25-Station faelschlicherweise
einen EAX.25-Connect annehmen, dann kommt es frueher oder spaeter zum FRMR.
- Auf TNCs mit Hostmode AX.25-Firmware (TF 2.7b, TNC3 Turbofirmware etc.)
oder PC/Flexnet sehen EAX.25-Verbindungen im Monitor entweder komisch aus
(PID laeuft durch), oder werden gar nicht angezeigt !
- TNN's EAX.25 verhaelt sich passiv, Verbindungen werden nur mit EAX.25
aufgebaut, wenn die Zielstation damit in der MH-Liste vermerkt ist,
oder der EAXMODE-Parameter fuer den Port auf 2 oder 3 steht.
- Interlink-Ports (egal welcher Linkmode) verhalten sich wie normale Userports.
Man kann auch zu Flexnet-Linkpartnern EAX.25 einstellen, jedoch verstehen
diese es nicht und senden gleich ein DM. Hier also NIE EAXMODE 3 benutzen !
- Nach Aenderung des EAXMODEs eines Port muss ein bestehender Link geKILLt
werden, damit die neue Einstellung beruecksichtigt wird. Aenderungen am
EAXMAXFrame werden sofort wirksam.

27
history/flex178mh06.his Executable file
View file

@ -0,0 +1,27 @@
Aenderungen in der Flexroutine.
- l3vc.c
Es konnte passieren, das eine Tokenanforderung einfach an die Destinations
angehaengt wurde. Dort wurde es dann nicht gelesen.
Die Tokenabgabe wird nun in einem eigenen Frame geschickt.
- mh08
Die Änderung wieder rückgängig gemacht. Nach Studium des DigiWare-Code
kann man es so machen.
Eigentlich sollten wir es auch erkennen.
Diverse Kleinigkeiten geändert
Wir schicken nun auch eine Maxtime zum Nachbarn. Aber nur innerhalb der
Grenzen 1-3000. Wird in Parameter 02 eine 0 oder grosser 300000 einge-
tragen, dann senden wir maxtime = 3000.
Einige Notifymeldungen wegen Tokenbehandlung eingebaut.
Diese Notifymeldungen können, durch setzen der entsprechenden Zahl
in include/all.h (MAX_TRACE_LEVEL 9), unterdrückt werden.
-os/go32/go32.c
Beim Watchdog wird nun der letze Befehl und die Zeit in die debug.txt
geschrieben.
Hilft eventuell bei der Fehlersuche.

274
history/kernelif.his Executable file
View file

@ -0,0 +1,274 @@
Das IP-Kernelinterface von TNN
==============================
Das Kernelinterface ermoeglicht die direkte Kopplung des TNN-internen
IP-Routers an den IP-Router des Linuxkernels. Hierdurch koennen (bei reiner
IP-Kopplung an den Kernel) zusaetzliche Programme wie die AX.25-Utilities
eingespart werden. Ein Shell-Login in Linux ist ueber diese Funktion nicht
moeglich, hierfuer werden weiterhin die AX.25-Utilities benoetigt. Wird das
Interface aktiviert, so werden im Kernel-IP-Router und bei TNN automatisch
entsprechende Routeneintraege erzeugt, TNN erscheint dann wie eine
Netzwerkkarte im Kernel.
Voraussetzungen
===============
Das Kernelinterface wurde erfolgreich mit dem 2.2.x- und 2.4.x-Kerneltree
getestet, Kernel der 2.0.x-Serie sind bisher nicht getestet worden,
hier funktioniert unter Umstaenden auch das Tool fuer die 2.2.x-Kernel.
In jedem Fall muss die Netzwerkunterstuetzung fuer TCP/IP im Kernel vorhanden
sein. Dies ist aber eigentlich immer der Fall. Neuere Kernel bringen den
Treiber meist schon mit oder er liegt als Modul bei. Vor dem Start von
TNN sollte er ggf. mit "modprobe tun" geladen werden.
Da auf grundlegende Netzwerkfunktionen zugegriffen wird, sollte TNN mit
Root-Berechtigung laufen !!! Ansonsten funktionieren eventuell einige
Zugriffe nicht.
Das fuer Kernel 2.2.x benoetigte Paket "tun-1.1.tar.gz" ist bei DB0UHI-4
im Fileserver unter "/filesurf/linux/tun" oder im Internet unter
"http://vtun.sourceforge.net/tun/tun-1.1.tar.gz" zu finden.
Allgemeine Installation:
========================
Die Interfacefunktionalitaet ist per Voreinstellung deaktiviert. Um sie zu
aktivieren entfernt man die Kommentarzeichen um den Eintrag "#define KERNELIF"
in der Includedatei "all.h" im "include"-Unterverzeichnis. Danach ist TNN
mit "make" neu zu compilieren.
Installation unter Kernel 2.4.x und 2.6.x :
===========================================
Viele aktuelle Distributionen bringen TUN schon mit ! Meistens reicht
ein "modprobe tun".
Die Installation ist hier sehr einfach. Bei der Kernelkonfiguration mit
"make menuconfig", "make config" oder aehnlichen Tools muss bei dem Punkt
"Network device support" der Unterpunkt "Universal TUN/TAP device driver"
aktiviert werden. Dieser Treiber kann entweder fest in den Kernel oder als
Modul gebaut werden, wie man es macht ist Geschmackssache. Nachdem der Kernel
gebaut und installiert ist, muss noch mit den Befehlen "mkdir /dev/net" und
"mknod /dev/net/tun c 10 200" ein Device angelegt werden. Dies erfordert Root-
Berechtigung. Damit sind wir fertig.
!!! Wichtig: bitte das Kernel-interne TUN benutzen, nicht das tun-Paket !
!!! Trotzdem aber hiervon das Infofile mit den Installationsinfos
!!! lesen (schadet nicht).
Installation unter Kernel 2.2.x:
================================
Zuerst muss das Paket "tun-1.1.tar.gz" gemaess der Anleitung in dem Paket
installiert werden und die Moduleintraege gemacht werden. Es muessen danach
unter dem Verzeichnis "/dev" Eintraege mit den Namen "tun0" bis "tun9"
vorhanden sein.
Vor dem Start von TNN muss das tun-Modul entweder per "modprobe tun " oder
durch den Autoloader geladen werden (kontrollieren !!!). Falls Warnmeldungen
nach dem Hinzufuegen der char-major-Eintraege in /etc/modules.conf kommen
("modules.conf ist more recent...."), dann nochmal "depmod -a" ausfuehren.
Hiermit ist die Installation bereits abgeschlossen, der einzige Unterschied zu
der Kernel-2.4.x-Installation besteht nur darin, dass das erzeugte Interface
nicht "tnn" sonder "tun*" heisst, wobei * eine (beliebige) Zahl ist.
Steuerung des Interfaces:
=========================
Um das Interface zu steuern wurde der neue SYSOP(!)-Befehl "KERNELIF" oder kurz
"KERN" eingefuehrt. Die komplette Steuerung erfolgt ueber diesen Befehl und
seine Unterfunktionen. Ausserdem wurde der IPR-Befehl fuer die Routeneintraege
im TNN-Router erweitert um Routen auf das Kernelinterface legen zu koennen.
Das Interface initialisiert sich beim Start nicht automatisch ! Dies ist
beabsichtigt um durch eine eventuell fehlerhafte Erkennung des Interface-
Stils des Kernels keine Probleme zu verursachen.
Die Interfacefunktionen:
========================
Hier sollen zuerst die Funktionen im Einzelnen vorgestellt werden, ein
Ablaufbeispiel findet sich im Anhang.
Das Interface unterstuetzt die Unterfunktionen "INIT", "SETKIP", "DOWN", "UP",
"CLEAR" und "STATUS", alle sind nur fuer den Sysop verfuegbar.
KERN INIT: Initialisiert das Interface, es wird geprueft ob der Kernel die
benoetigten Funktionen bereitstellt. Das Interface initialisiert
sich NICHT von selbst, dies muss explizit mit INIT erfolgen !!!
Es ist sonst nicht nutzbar. An dieser Stelle erfolgt ein Warnhinweis
falls zu diesem Zeitpunkt mit "IPA" noch keine Node-IP festgelegt
wurde. Die Interfacestatistik wird geloescht. Ist das Initerface
bereits initialisiert laesst dich dieser Befehl nur auf ein im
DOWN-Zustand befindliches Interface anwenden.
KERN STATUS: Zeigt den momentanen Status und die Statistik des Interfaces an.
KERN CLEAR: Loescht die Statistik der empfangenen und gesendeten Bytes.
Dies passiert auch beim "CLEAR" fuer die Gesamtstatistik.
KERN SETKIP: Setzt die IP des Linuxkernels. Hier kann entweder eine IP-
Adresse oder ein Hostname angegeben werden, letzterer wird
entsprechend aufgeloest *wenn* ein Nameserver verfuegbar ist.
Die Angabe einer IP-Nummer ist deshalb zu bevorzugen !
Dieser Parameter *muss* unbedingt passieren, bevor das Interface
mit "KERN UP" aktiviert wird, ist dies nicht geschehen kann das
Interface nicht benutzt werden ! Die Node-IP von TNN wird wie
ueblich mit dem "IPA"-Kommando gesetzt, dies muss ebenfalls vorher
passiert sein.
Bsp: "KERN SETKIP 44.130.13.110" oder
"KERN SETKIP db0uhi.ampr.org"
Bei "KERN STATUS" wird grundsaetzlich nur die IP-Nummer angzeigt,
nicht aber ein eventuell angegebener Hostname.
KERN UP: Aktiviert ein *vollstaendig* konfiguriertes Interface, ist die
Konfiguration noch unvollstaendig wird entsprechend auf die
fehlenden Einstellungen hingewiesen.
Im Kernel wird ein Interface mit dem Namen "tnn" erzeugt
und eine Route mit der Node-IP fuer TNN im Kernel-IP-Router
eingetragen. Dies passiert alles automatisch auf der Basis der
gesetzten IP-Adressen. Im TNN IP-Router wird ebenfalls ein passender
Routeneintrag erzeugt.
!!! Bei Kernel-2.2.x-Style heisst das Interface "tun*" !!!
Das Interface laesst sich nur in den UP-Zustand schalten wenn
folgende Einstellungen erfolgt sind:
IPA <node-ip>, KERN INIT, KERN SETKIP <kernel-ip/hostname>.
KERN DOWN: Deaktiviert ein aktives Interface zum Kernel. Das eingetragene
Interface und die automatisch im Kernel und TNN eingetragenen
IP-Routen werden geloescht, sonstige Routen im TNN-Router die
auf das Interface zeigen bleiben eingetragen, sie funktionieren
aber natuerlich nicht mehr! Zusaetzliche Routen im Linux IP-Router
die auf das "tnn"-Interface zeigen werden geloescht !!!
!!! Bei Kernel-2.2.x-Style heisst das Interface "tun*" !!!
Daten, die auf ein im DOWN-Zustand befindliches Interface durch
noch bestehende Routeneintraege geroutet werden, werden ohne
weitere Nachricht geloescht !!!
allgemeines: Einige Kommandos sind nur nach vorheriger, erfolgreicher
Ausfuehrung anderer Kommandos moeglich oder haengen vom
derzeitigen Zustand des Interfaces ab. Wenn eine Aktion
ausgefuehrt werden soll die derzeit aufgrund des Zustandes
des Interfaces nicht moeglich ist, so erhaelt man eine
entsprechende Fehlermeldung.
Die Konfiguration eines Interfaces kann nur geaendert werden
wenn es im DOWN-Zustand ist. Ausnahme: IPA-Aenderungen, aber
diese werden bei aktivem Interface (noch) nicht an den Kernel
durchgereicht. Das Resultat ist denkbar einfach: das Interface
geht dann nicht mehr. Man muss das Interface einmal DOWN und
dann wieder UP schalten. Aber Vorsicht: zusaetzliche IP-Routen
im Linux-Kernel gehen verloren und muessen neu gesetzt werden.
Ablaufbeispiel:
===============
Nachfolgend ein Beispiel um den TNN-Knoten DB0UHI (44.130.13.100) mit dem
Linux-Kernel auf der Maschine zu verbinden. Dem Kernel wird dabei die
IP-Adresse 44.130.13.102 (db0uhi-u.ampr.org) zugewiesen. TNN-Befehle sind
gross geschrieben, Linux-Shellbefehle klein. Bei den SH-Kommandos ist die
Schreibweise zu beachten, die Linux-Shellbefehle muessen klein geschrieben
werden, die TNN-Befehle koennen wahlweise gross oder klein geschrieben werden.
- Zuerst die Node-IP des Knotens setzen: "IPA 44.130.13.100"
- Danach kann das Interface initialisiert werden: "KERN INIT"
- Jetzt muss die IP-Adresse festgelegt werden, die der Kernel
bekommen soll. Dies geschieht mit: "KERN SETKIP 44.130.13.102"
bzw. "KERN SETKIP db0uhi-u.ampr.org"
- Jetzt sollte die Konfiguration ueberprueft werden: "KERN STATUS".
Dies kann selbstverstaendlich auch schon vorher einmal gemacht
werden.
- Wenn alles ok ist kann das Interface aktiviert werden: "KERN UP"
Jetzt kann man noch diverse Checks durchfuehren:
- Auf TNN-Seite sollte nun ein Routeneintrag in die IP-Routingtabelle
erfolgt sein und auf den Port "KERNEL" zeigen. Pruefbar mit: "IPR"
- Auf Kernel-Seite sollte ein Interface mit dem Namen "tnn" existieren,
dies kann unter TNN mit dem Befehl "SH ifconfig" ueberprueft werden.
Die IP-Routen kann man sich mit "SH route" anzeigen lassen, hier sollte
eine Route erscheinen, die auf das tnn-Device zeigt.
- Jetzt kann man einen einfachen Test machen: "PING 44.130.13.102".
Hiermit PING't TNN den Kernel an. Wenn dies funktioniert ist das
Interface betriebsbereit, was es transportiert haengt jetzt nur noch
von den Routingeintraegen in TNN und im Kernel ab. Um Routen hinzuzufuegen
oder zu loeschen sind die Befehle "IPR" (TNN) und "route" (Kernel) zu
benutzen.
Das Interface sollte generell nur einmal am Anfang, z.B. aus der Startdatei
"tnn178.tnb" heraus, aktiviert werden. Aenderungen an einem aktiven Interface
sind nicht moeglich, es muss immer mit "KERN DOWN" deaktiviert werden bevor
z.B. neue IP-Adressen gesetzt werden. Die meisten Funktionen des Interface
verweigern dann die Befehlsausfuehrung mit entsprechenden Meldungen.
Aenderungen am IPR-Befehl:
==========================
Der IPR-Befehl zum Ein- und Austragen von Routen im TNN IP-Router wurde bei
dem Port-Abschnitt um den virtuellen Port "KERNEL" erweitert. Routen, die diesen
Port erhalten, zeigen auf das Kernel-Interface.
GANZ WICHTIG : sollte ein weiterer Port im System existieren dessen Name
"Kernel" (Gross-/Kleinschreibung egal) lautet, kann es nicht funktionieren !
Der Portname des realen Ports ist dann zu aendern !!!
Alles weitere zu IPR ist gleich geblieben findet sich in der zugehoerigen Hilfe.
Sonstiges:
==========
- Die Interfacestatistik kann auch mit "STAT K" abgerufen werden.
- Zu den moeglichen Portnamen fuer echte Ports siehe Hinweis bei den Aenderungen
am "IPR"-Befehl.
- Ist das Kernel-Interface-Feature eincompiliert erscheint auch ein Hinweis
beim "VER +"-Versions-Befehl.
******************************************************************************
Anbindung an Linux Kernel-AX.25:
================================
Einstellung ueber tnn.ini:
- bei "device" den Interfacenamen (siehe ifconfig) angeben
- "lockfile" bleibt frei
- "kisstype" auf den Wert "10" stellen, bei KJD-Kernel "11" verwenden
- bei "port" den gewuenschten Port angeben
Bsp:
device ax0
kisstype 10
port 1
Danach den Port ueber den PORT-Befehl mit ON aktivieren. Mit OFF laesst sich
ein Kernelport wieder abschalten, sollte waehrend des Betriebs eines Kernel-
ports ein Fehler auftreten so wird dieser Port eventuell deaktiviert, er
laesst sich ggf. wieder mit ON einschalten.

38
history/sccpatch.txt Executable file
View file

@ -0,0 +1,38 @@
Anleitung zum Patchen des SCC-Treibers V 3.0 von DL1BKE
-------------------------------------------------------
Der folgende Patch sollte mit fast allen Kerneln funktionieren, die
den SCC-Treiber in der Version "3.0.dl1bke" enthalten. Beiliegender DIFF
wurde auf einem 2.4.28-Kernel erzeugt, er sollte auch auf 2.2.x- und 2.6.x-
Kerneln mit etwas Handarbeit einzupflegen sein.
Das neue scc.h muss anschliessend noch in das Verzeichnis "/usr/include/linux"
kopiert werden, sonst motzt TNN beim compilieren weil er noch die alte
Version sieht !
--- snip ---
--- linux/drivers/net/hamradio/scc.c.orig 2002-11-29 00:53:13.000000000 +0100
+++ linux/drivers/net/hamradio/scc.c 2004-12-26 18:47:02.000000000 +0100
@@ -1400,6 +1400,7 @@
case PARAM_WAIT: return CAST(scc->kiss.waittime);
case PARAM_MAXDEFER: return CAST(scc->kiss.maxdefer);
case PARAM_TX: return CAST(scc->kiss.tx_inhibit);
+ case PARAM_DCD: return CAST(scc->dcd);
default: return NO_SUCH_PARAM;
}
--- linux/include/linux/scc.h.orig 2004-12-23 21:40:18.000000000 +0100
+++ linux/include/linux/scc.h 2004-12-26 18:44:48.000000000 +0100
@@ -50,6 +50,7 @@
PARAM_WAIT,
PARAM_MAXDEFER,
PARAM_TX,
+ PARAM_DCD,
PARAM_HWEVENT = 31,
PARAM_RETURN = 255 /* reset kiss mode */
};
--- snap ---
25.12.2004 DG9OBU

2
history/tnn178.his Executable file
View file

@ -0,0 +1,2 @@
= Speicher-Leck bei Pacsat behoben
= einige ungenutzte Funktionen entsorgt

4
history/tnn178a.his Executable file
View file

@ -0,0 +1,4 @@
= KISS / RKISS Fehler bei GO32-Version beseitigt
= kleine Aenderung im makefile, damit nicht mit jedem "make" alles neu
uebersetzt wird
= ipDefaultTTL -> 32

473
include/all.h Normal file
View file

@ -0,0 +1,473 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/all.h (maintained by: you) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
/************************************************************************/
/* Aktivierung einzelner Elemente in TNN */
/************************************************************************/
#define IPROUTE /* DB7KG's IP-Router */
#define PACSAT /* PACSAT-Server */
#define PPCONVERS /* PP-Convers einbauen */
#define GRAPH /* Graphische Statistiken */
#define PORTGRAPH /* Portspezifische Statistiken */
#define USER_PASSWORD /* Userpassword Option von SQ2FRB */
/*#define FLEXHOST*/ /* FlexNet durchmelden zu NET/ROM */
#define MAXFRAMEDEBUG /* zusaetzliche Anzeige bei Trace */
#define AUTO_UPDATE /* Automatisch CFG-Files updaten */
#define KERNELIF /* Interface zum Linuxkernel */
#define ALIASCMD /* Kommandoaliasse definierbar */
#define EAX25 /* Extended-AX.25 (modulo 128) */
#define USERMAXCON /* Connectanzahl-Limitierung */
#define SIXPACK /* 6PACK-Ring (vorerst nur Linux) */
#define NEW_L4 /* neuer L4 mit PID-Transport */
#define HDLC_DCDPTTSTAT /* DCD/PTT-Info bei HDLC-Devices */
#define SCC_DCDPTTSTAT /* DCD/PTT-Info bei SCC-Devices */
/*#define PCISCC4_KAX25*/ /* PCISCC4 unter Kernel 2.4.x mit */
/*#define OBU_SCC_DCD*/ /* mod. SCC-Treiber mit DCD */
/*#define LOOPBACK*/ /* Loopback-Funktion */
/* F6FBB-Treiber (KEIN KJD-Kernel)*/
/*#define SETTAILTIME*/ /* TX-Tailtime setzbar */
/*#define DAMASLAVE*/ /* DAMA-Slave-Modus */
/* noch unvollstaendig! */
/*#define L2PROFILER*/ /* Spielzeug fuer DB7KG */
/*#define L3TABDEBUG*/ /* L3-Nodetabellen-Debugging */
#define EXPERT /* EXPERTEN-Modus, mehr Paras */
#define BUFFER_DEBUG /* Bufferanalyse fuer Fehlersuche */
/*define INSANE_BUFFER_DEBUG*/ /* noch viel mehr Bufferanalyse */
/*#define CVS_ZAPPING*/ /* Diagnosetool fuer Convers */
/*#define PROFILING*/ /* Programm-Profiling-Tool */
#define NO_WATCHDOG /* Linux: kein Watchdog */
#define CONL3LOCAL /* Connect L3LOCAL verfeinert. */
#define CONVNICK /* Convers mit Nickname-Support */
#define EXPERTPARAMETER /* Port-Autoparameter schaltbar */
/************************************************************************/
/* */
/* Ab hier darf NICHTS mehr geaendert werden! Also FINGER WEG !!! */
/* DO NOT change below the point ! Keep your HANDS OFF ! */
/* */
/************************************************************************/
/* MIPS bekommt keinen Watchdog, die Systeme haben soweiso schon wenig */
/* Speicher, da muss nicht auch noch der Watchdog mit laufen */
/* PACSAT fliegt ebenfalls raus */
/* SCC-Sachen auch raus, da die Hardware nicht verfuegbar ist */
#ifdef MIPS
#define NO_WATCHDOG
#undef PACSAT
#undef SCC_DCDPTTSTAT
#undef OBU_SCC_DCD
#endif
#define MAX_TRACE_LEVEL 9 /* max. verfuegbarer Trace Level */
/* PORTGRAPH braucht GRAPH */
#ifdef PORTGRAPH
#define GRAPH
#endif
/************************************************************************/
/* Deaktivierung einzelner Elemente wenn fuer Zielsystem unmoeglich */
/* (Diese Definitionen duerfen nicht editiert werden !!!) */
/************************************************************************/
#ifndef __LINUX__
#undef KERNELIF
#undef PCISCC4_KAX25
#ifndef __WIN32__
#undef SIXPACK
#endif
#undef HDLC_DCDPTTSTAT
#undef SCC_DCDPTTSTAT
#undef OBU_SCC_DCD
#endif
#ifdef __WIN32__
/* Kein Watchdog */
#define NO_WATCHDOG
#endif /* WIN32 */
#ifdef __GO32__
#undef OS_STACK
#undef OS_IPLINK
#undef SPEECH
#endif /* __GO32__ */
#if defined(MC68K)
#undef PACSAT
#endif
/* Unser ganz privater Assert ******************************************/
#ifdef MC68302
#define HALT(x) {dbg(x); reboot_system();}
#else
#define HALT(x) {xprintf("Halted by " x); reboot_system();}
#endif
/* Unser ganz privater Debugger ****************************************/
#define dbg(x)
#if defined(ST) || defined(__LINUX__)
#undef dbg
#define dbg(x) wowarich=x
#endif
#ifdef MC68302
#undef dbg
#define dbg(x) *(char **)0x11CL=x
#endif
/************************************************************************/
/* Definition von Konstanten die in gesammten TNN genutzt werden. */
/************************************************************************/
#define LOOP for( ; ; ) /* Endlosschleife */
#if defined (__GO32__) || defined(__LINUX__) || defined(__WIN32__)
#define LINKNMBR 400
#else
#define LINKNMBR 250 /* maximale Anzahl Links */
#endif
#define NUMCIR 200 /* maximale Anzahl Circuits */
#ifndef L1TCPIP
#define MAXHST 30+1 /* maximale Anzahl Hostkanaele */
#define NUMPAT (LINKNMBR+NUMCIR+MAXHST)
/* Eintraege Patchcordliste */
#else
#define MAXHST 31 /* maximale Anzahl Hostkanaele */
#define NUMPAT (LINKNMBR+NUMCIR+MAXHST+MAXTCPIP)
/* Eintraege Patchcordliste */
#endif /* L1TCPIP */
#define DEFL2L 1
#define TAILTIME 3 /* Tailtime fuer die KISS-TNCs */
#define TOKENTIMEOUT 200 /* Timeout fuer Tokenring bis */
/* Token wieder da sein muss */
/* Achtung: Wert in 10ms-Ticks */
#define L2PNUM 16 /* Anzahl L2-Ports */
#if L2PNUM > 16
#error "L2PNUM >16 is not tested!"
#endif
#define DAMA_CH L2PNUM /* Anzahl der Dama-Kanaele */
#ifdef MC68302
# define MAXCOMS 3 /* Anzahl der seriellen Ports */
#else
# define MAXCOMS 4
#endif
#define MAXKISS MAXCOMS /* Anzahl der KISSLINKS */
#define MAXSUSPEND 50 /* Maximalanzahl Sperrungen */
#define MAXCVSHOST 10 /* Maximaleintraege ConversHosts */
#define MAXSTAT 16 /* Anzahl der Statistik-Eintraege */
#define MAXNMBSTN 16 /* Quantisierung Stationen/Port */
#define MINBUFF 256
#define NUL ((char) 0x00) /* ASCII-Zeichen */
#define BELL 0x07
#define BS 0x08
#define TAB 0x09
#define LF 0x0A
#define CR 0x0D
#define XON 0x11
#define XOFF 0x13
#define ESC 0x1B
#define DEL 0x7F
#define MONI 0x01 /* Monitor: I-Frames */
#define MONU 0x02 /* UI-Frames */
#define MONS 0x04 /* S-Frames */
#define MONC 0x08 /* Anzeige, auch wenn connected */
#define MONF 0x10 /* Anzeige des Info-Feldes */
#define MONT 0x20 /* Sende-/Empfangszeit */
#define MONL 0x40 /* Info-Laengen-Anzeige */
#define SECONDS_PER_DAY 86400L /* the number of seconds in one day */
#define SECONDS_PER_HOUR 3600L /* " " " " " " hour */
#define SECONDS_PER_MIN 60L /* " " " " " " min. */
#ifdef CRASHDEBUG
#define TRACE(x) wowarich2 = "x"
#else
#define TRACE(x)
#endif
/************************************************************************/
/* Einiges fuer TNC3 */
/************************************************************************/
#ifdef MC68302
#define __BOOLEAN
#include <apbind.h>
#undef stdout /* stdout Simulation */
extern FILE *stdout;
#define MAXPATH 20
#define xchdir(a);
#endif
/************************************************************************/
/* hier noch einige Sachen fuer PP-conversd */
/************************************************************************/
#define MAXCHANNEL 32767 /* hoechster conversd Kanal */
#if defined(__TURBOC__) || defined(__STDC__) || defined(__WIN32__)
#define __ARGS(x) x
#ifndef __DOTS
#define __DOTS ,...
#endif
#else
#define __ARGS(x) ()
#define const
#ifndef __DOTS
#define __DOTS
#endif
#endif
#if !defined (min)
#define min(a,b) ((a) >= (b) ? (b) : (a))
#define max(a,b) ((a) >= (b) ? (a) : (b))
#endif
/*#define uchar(x) ((x) & 0xff) wers braucht, solls anmachen, DL1XAO*/
#define uchar(x) (x)
#ifdef CONVNICK
#define REV "$Revision: 3.14c $"
#else
#define REV "$Revision: 3.12c $"
#endif
#define INIT 0 /* Befehle fuer personalmanager und convers_config */
#define SAVE 1
#define SET 2
#define GET 3
/************************************************************************/
/* Dateitrennungszeichen usw fuer das Filesystem festlegen */
/************************************************************************/
#define SEPARATORS "\\/" /* die DOS- und die Unix-Konvention */
/* File-Flags */
#define FF_LWR 1 /* Dateinamen sind immer klein */
#define FF_TXT 2 /* Unterscheidung TEXT/BIN bei open */
#ifdef __LINUX__
#define FILE_SEP '/' /* Linux und falcOS haben / */
#define FILE_FLAGS FF_LWR
#define NO_DISKDRIVE /* keine Laufwerksbuchstaben */
/* die folgenden Pfade koennen auch ueber einen Compilerswitch im */
/* makefile definiert werden */
#ifndef TEXTPATH
#define TEXTPATH "/usr/local/tnn/"
#endif
#ifndef TEXTCMDPATH
#define TEXTCMDPATH TEXTPATH "textcmd/"
#endif
#ifndef USEREXEPATH
#define USEREXEPATH TEXTPATH "userexe/"
#endif
#ifndef SYSEXEPATH
#define SYSEXEPATH TEXTPATH "sysexe/"
#endif
#ifndef MSGPATH
#define MSGPATH TEXTPATH "msg/"
#endif
#ifdef SPEECH
#ifndef SPEECHPATH
#define SPEECHPATH TEXTPATH "speech/"
#endif
#endif
#ifdef PACSAT
#ifndef PACSATPATH
#define PACSATPATH TEXTPATH "pacsat/"
#endif
#endif
#ifdef AXIPR_HTML
#ifndef HTMLPATH
#define HTMLPATH "/usr/local/httpd/htdocs/"
#endif
#endif
#define STRIPCHR CR
#define ENDCHR LF
#define PORTABLE
#else /* nicht __LINUX__ */
#define FILE_SEP '\\' /* DOS und ST haben das alte \ */
#define STRIPCHR LF
#define ENDCHR CR
#ifndef MC68302
#define FILE_FLAGS FF_TXT
#ifndef TEXTPATH
#define TEXTPATH "TNN\\"
#endif
#ifndef TEXTCMDPATH
#define TEXTCMDPATH TEXTPATH "TEXTCMD\\"
#endif
#ifndef USEREXEPATH
#define USEREXEPATH TEXTPATH "USEREXE\\"
#endif
#ifndef SYSEXEPATH
#define SYSEXEPATH TEXTPATH "SYSEXE\\"
#endif
#ifdef PACSAT
#ifndef PACSATPATH
#define PACSATPATH TEXTPATH "PACSAT\\"
#endif
#endif
#ifdef AXIPR_HTML
#ifndef HTMLPATH
#define HTMLPATH TEXTPATH
#endif
#endif
#ifndef MSGPATH
#define MSGPATH TEXTPATH "MSG\\"
#endif
#ifdef SPEECH
#ifndef SPEECHPATH
#define SPEECHPATH TEXTPATH "SPEECH\\"
#endif
#endif
#else /* MC68302 */
#define FILE_FLAGS FF_LWR
#define TEXTPATH "r:\\"
#define TEXTCMDPATH TEXTPATH
#define USEREXEPATH TEXTPATH
#define SYSEXEPATH TEXTPATH
#define MSGPATH TEXTPATH
#endif
#endif
#define GRAPH_LINES 15
#define GRAPH_INTERVAL 10 /* Alle 10 s einen neuen Wert speichern */
#define GRAPH_STD_ELEMENTS 60 /* 60 Elemente je Stunde */
#define GRAPH_DAY_ELEMENTS 48 /* 24 * 2 halbe Stunden je Tag */
#define GRAPH_WEK_ELEMENTS 56 /* 8 * 7 Tagesabschnitte je Woche */
#ifdef BUFFER_DEBUG
#define ALLOC_LEHEAD 1
#define ALLOC_MBHEAD 2
#define ALLOC_USRBLK1 3
#define ALLOC_USRBLK2 4
#define ALLOC_L2LINK 5
#define ALLOC_MB 6
#define ALLOC_MONBUF 7
#define ALLOC_CQBUF 8
#define ALLOC_IP_ROUTE 9
#define ALLOC_ARP_TAB 10
#define ALLOC_MHEARD 11
#define ALLOC_PACSATBLK 12
#ifdef USERPROFIL
#define ALLOC_USEPROF 13
#endif /* USEPROFIL. */
#ifdef TCP_STACK
#define ALLOC_TCPSTACK 14
#endif /* TCP_STACK. */
#ifdef L1TCPIP
#define ALLOC_L1TCPIP 15
#endif /* L1TCPIP */
#ifdef L1HTTPD
#define ALLOC_L1HTTPD_RX 16
#define ALLOC_L1HTTPD_TX 17
#endif /* L1HTTPD */
#ifdef L1IPCONV
#define ALLOC_L1IPCONV 18
#endif /* L1IPCONV */
#ifdef L1IRC
#define ALLOC_L1IRC 19
#endif /* L1IRC */
#define ALLOC_INPOPT 20
#define ALLOC_NO_OWNER 21
#define ALLOC_MAXELEMENTE 22
#else
#define ALLOC_LEHEAD
#define ALLOC_MBHEAD
#define ALLOC_USRBLK1
#define ALLOC_USRBLK2
#define ALLOC_L2LINK
#define ALLOC_MB
#define ALLOC_MONBUF
#define ALLOC_CQBUF
#define ALLOC_IP_ROUTE
#define ALLOC_ARP_TAB
#define ALLOC_MHEARD
#define ALLOC_PACSATBLK
#ifdef USERPROFIL
#define ALLOC_USEPROF
#endif /* USERPROFIL. */
#ifdef TCP_STACK
#define ALLOC_TCPSTACK
#endif /* TCP_STACK. */
#ifdef L1TCPIP
#define ALLOC_L1TCPIP
#endif /* L1TCPIP */
#ifdef L1HTTPD
#define ALLOC_L1HTTPD_RX
#define ALLOC_L1HTTPD_TX
#endif /* L1HTTPD */
#ifdef L1IPCONV
#define ALLOC_L1IPCONV
#endif /* L1IPCONV */
#ifdef L1IRC
#define ALLOC_L1IRC
#endif /* L1IRC */
#define ALLOC_INPOPT
#define ALLOC_NO_OWNER
#define ALLOC_MAXELEMENTE
#endif
/* End of include/all.h */

728
include/allmodif.h Executable file
View file

@ -0,0 +1,728 @@
/************************************************************************/
/* */
/* Modifizierungen von DAA531 Oliver Kern */
/* DAC922 Stefan */
/* */
/************************************************************************/
/************************************************************************/
/* */
/* AFU-Callcheck deaktiviert */
/* */
/************************************************************************/
#define CALLCHECK
#if defined(__WIN32__) || defined(__LINUX__)
/************************************************************************/
/* */
/* Port oeffnen / schliessen. */
/* */
/************************************************************************/
#define ATTACH
/************************************************************************/
/* */
/* AX25IP-Modul. */
/* */
/* Dynamische DNS Verwalten. */
/* Parameter Loglevel per Console einstellbar. */
/* Keine Frame verarbeiten beim einlesen der tnn179.tnb. */
/* Zusaetzliche Meldungen bei ein - und austragen von AXIPR-Routen. */
/* */
/************************************************************************/
#define AXIPR_UDP
#ifdef AXIPR_UDP
/************************************************************************/
/* */
/* AXIPR-Liste in HTML-Format schreiben. */
/* Datei: rstat.html, rstat.css. */
/* Verzeichnis wird in der TNN179.PAS angepasst. */
/* */
/************************************************************************/
#define AXIPR_HTML
#endif /* AXIPR_UDP */
#endif /* WIN32/LINUX */
/************************************************************************/
/* */
/* Allgemeiner Direktiv fuer alle Modifizierungen und Fixe. */
/* */
/************************************************************************/
#define MODIFIGLOBAL
#ifdef MODIFIGLOBAL
#define FUNCFIX /* Fix in einzelnen funktionen. */
#ifdef FUNCFIX
#define CONVTOPIC_FIX /* Fix in funktion send_topic. */
#define CONVNICK_FIX /* Fix in funktion nickname_command. */
#define MHEAX_LINKFIX /* Variable eax_link wurde nicht immer */
/* gesetzt, behoben. */
#define MHRXTXBYTESFIX /* Nur "Info-Bytes" werden gezaehlt, der */
/* AX25-Header wird abgezogen. */
#define L4NOBAKE /* Steht der Routing-TYP noch nicht fest, */
/* senden wir zum Nachbarn noch keine Bake */
/* irgendeiner Art. */
#define SEND_ASYNC_RESFIX /* Null-Zeichen setzen - sicher ist sicher. */
#define FLEX_TX_RTT_FIX /* Kein Doppelte Laufzeitmessung senden. */
#define LOCAL_ROUTEFIX /* hiermit setzen wir die LOCAL-Time runter */
/* von 400ms auf 10ms. Leider ist es vorge- */
/* kommen, das eine LOCAL-ROUTE im Netz bes-*/
/* ser geroutet wurde, als die von unseren */
/* Node. */
#define FLEXTIMEFIX /* Mess-Timeout erhoeht. */
#define FLEX_ROUTINGFIX /* Flex-GATE deaktivieren. */
#define AUTOBINAERFIX /* Fehler in "Load" behoben. (WPP) */
/* Paxcon funktioniert nun auch ab mh02. */
#define SAVEPARAMFIX /* Parameter in die TNN179.TNB speichern. */
#define CONFPATHFIX /* Der angegebene TEXTPATH in TNN179.PAS */
/* auch CONFPATH zuweisen !!! Wichtig, wenn */
/* Verzeichnisse wie MSG und interne */
/* Prozesse auf CONFPATH zugreifen. */
#define MSGPATHFIX /* Der MSG Path wird in der funktion main.c */
/* definiert von confpath. Nun ist es aber */
/* moeglich, das der confpath, wo TNN.EXE */
/* gestartet wurde, nicht stimmt, weil der */
/* TEXTPATH in der TNN179.PAS ganz anders */
/* definiert wurde. Als muessen wir das */
/* korrigieren. */
#define PARMS_PORTMOD /* den PORT Befehl mit dem PARMS Befehl */
/* tauschen. Mit dem Befehl P werden die */
/* Portparamter angezeigt. */
/* (Mehrfach gewuenscht!) */
/*************************************************************************/
/* */
/* UI-Frames von einem Port auf einen anderen Port durchreichen. */
/* */
/* Aenderungen: 1. Digipeater-Call -> TNN-Call */
/* 2. Auch auf RX-Port wo die Bake gehoert wurde senden. */
/* */
/*************************************************************************/
#define UIDIGIMOD
/*************************************************************************/
/* */
/* Gibt es keinen Weg zum Ziel (n call), Fehlermeldung ausgeben. */
/* */
/*************************************************************************/
#define NONODESFIX
/*************************************************************************/
/* */
/* Flexnet-Ziele -> nur noch in der Destinations-Liste angezeigen. */
/* Nodes-Ziele -> nur noch in der Nodes-Liste angezeigen. */
/* */
/*************************************************************************/
#define SHOW_DESTNODES
/*************************************************************************/
/* */
/* Nach erneuten SABM, Zeitmessung starten. */
/* */
/*************************************************************************/
#define RTTSTART_MOD
/*************************************************************************/
/* */
/* Standard-Baken Text deaktiviert. */
/* TheNetNode (Win32) (CB), 1.79cb52 (TEST:CB1GRH) */
/* */
/* Kann mit //BAKEFIX wieder aktiviert werden. */
/* */
/*************************************************************************/
#define BAKEFIX
/*************************************************************************/
/* */
/* UI-Frame mit POLL-Flag. . */
/* */
/*************************************************************************/
#define UIPOLLFIX
#endif /* FUNCFIX */
/*************************************************************************/
/* */
/* Aktiviert das Auto-Routing. */
/* */
/*************************************************************************/
#define AUTOROUTING
#ifdef AUTOROUTING
#define AUTO_ROUTE 0 /* AutoRoute, keine Speicherung in TNN179.TNB */
#define FIXED_ROUTE 1 /* FesteRoute, wird gespeichert in TNN179.TNB */
#endif /* AUTOROUTING */
/*************************************************************************/
/* */
/* Alias in kleinbuchstaben umwandeln. Wird ein Alias in GROSSBUCHSTABEN */
/* gespeichert, wird dieser Linkeintrag beim naechsten start NICHT */
/* eingelesen !!!. */
/* */
/*************************************************************************/
#define ALIASSAVEMOD
/*************************************************************************/
/* */
/* BEACON/BAKE . */
/* */
/* Beacon-Bake (Metric) erweitert auf 0..3. */
/* */
/* Ausgabe (BE 0 60 3 IDNET): */
/* DNO531 to STATUS UI^ pid F0 - 19.09.03 23:44:37 */
/* Links: 31, Convers: 25, Dest/Nodes: 267, Runtime: 31d,15h */
/* DNO530:39 CB0DLN:44 */
/* */
/* Beschreibung der Bake im einzelnen: */
/* Links: 32 -> aktuelle L2-Links im Knoten. */
/* Convers: 25 -> aktuelle anzahl user im Convers. */
/* Dest/Nodes: 267 -> aktuelle anzahl der Destination und Nodes. */
/* Runtime: 31d.15 -> Laufzeit der Knotensoftware. */
/* */
/*************************************************************************/
#define BEACON_STATUS
/*************************************************************************/
/* */
/* Modifizierung am Modul Convers */
/* */
/*************************************************************************/
#define CONVMOD
#ifdef CONVMOD
#define CONV_CHECK_USER /* Pruefung auf Doppel-Login. */
#define CONV_TOPIC /* Topic-Call sichern. */
#define CONVERS_HOSTNAME /* Convers-Hostname aendern. Es stehen 15 */
/* Zeichen zur Verfuegung. */
#define CONVERS_CTEXT /* In der Datei conversd.xhf unter @@CTEXT */
/* kann man einen zusaetzlichen CTEXT zu- */
/* zusammen basteln. */
#define CONVERS_LINKS /* Aenderungen an den Convers-Links. */
#define CONVERS_SYSINFO /* System-Ausgabe (wunsch DAD213) */
#define CONVERS_NO_NAME_OK /* Deaktivierung funktion name_ok. */
#define CONVERS_USERANZAHL /* Gesamtanzahl der Convers-User im Kanal. */
#endif /* CONVMOD */
/*************************************************************************/
/* */
/* Modifizierung am Modul CONNECT */
/* */
/*************************************************************************/
#define CONNECTMOD
#ifdef CONNECTMOD
/*************************************************************************/
/* */
/* User hat Port angegeben, dann gehen wir ueber L2. */
/* */
/*************************************************************************/
#define CONNECTMOD_GOPORT
/*************************************************************************/
/* */
/* Status-Meldungen "*** connected to" bzw. "*** reconnected to" */
/* eingebaut. */
/* */
/*************************************************************************/
#define CONNECTMOD_MSG
/*************************************************************************/
/* */
/* Auch wenn der Nachbar nicht erreichbar, wird ein L2-Link aufgebaut. */
/* */
/*************************************************************************/
#define CONNECTMOD_NODE_AVAI
/*************************************************************************/
/* */
/* Einstiegsknoten setzen. */
/* Das Rufzeichen was weitergeleitet wird, ist der Node, wo sich der */
/* User eingeloggt hat. Ist eine weitere Anpassung an Flexnet und */
/* Baycom-Systemen. */
/* */
/*************************************************************************/
#define CONNECTMOD_SET_NODE
#endif /* CONNECTMOD */
/*************************************************************************/
/* */
/* Connect-Zeit in Flexnet-Stil ausgeben. */
/* 1 CB0RIE CB1GLA IXF 0 0 0 13 136 138 96 13h,21m - */
/* ======= */
/*************************************************************************/
#define CONNECTTIME
/*************************************************************************/
/* */
/* System sauber runterfahren. */
/* Erweiterte Fehlersuche . */
/* (Hat mir schon einige Arbeit erspart.) */
/* */
/*************************************************************************/
#define DEBUG_MODUS
/*************************************************************************/
/* */
/* Editor erweitert. (ist noch nicht eingebaut) */
/* */
/*************************************************************************/
#define EDITOR
/*************************************************************************/
/* */
/* Damit setzt man einmalig das Consolen-Mycall. */
/* Speicherung erfolgt in der TNN179.TNB. Bei jeden neustart wird das */
/* neue Consolen-Mycall gesetzt. */
/* */
/*************************************************************************/
#define HOSTMYCALL
/*************************************************************************/
/* */
/* Modifizierung am Modul IPROUTE */
/* */
/* IP-Adresse 0.0.0.0 unter ARP sperren. */
/* Default IP-Adresse 0.0.0.0 unter IPR setzen. */
/* Ist eine default-route gesetzt, werden alle NICHT definierten */
/* IP-Adressen an diese default-route geschicht. */
/* */
/* default-route unter IPR eintragen: */
/* 0.0.0.0 + NETROM 192.168.100.10 */
/* Wichtig ist die Gateway Adresse !!! */
/* */
/*************************************************************************/
#define IPROUTEMOD
/*************************************************************************/
/* */
/* Ist der L4-Timeout abgelaufen, wird die Verbindung getrennt. */
/* Vor der Trennung schicken wir den User eine Meldung. */
/* */
/*************************************************************************/
#define L4TIMEOUTAUSGABE
/*************************************************************************/
/* */
/* L4-User killen (ccpkill kann nur L2). */
/* */
/*************************************************************************/
#define L4KILL
/*************************************************************************/
/* */
/* Modifizierung am Modul (L)INKS */
/* */
/*************************************************************************/
#define LINKSMOD
#ifdef LINKSMOD
/*************************************************************************/
/* */
/* Syntax Link ein/austragen fuer Sysop ausgeben. */
/* */
/*************************************************************************/
#define LINKSMODSYNTAXFIX
/*************************************************************************/
/* */
/* Stations-Beschreibung.unter Links-Liste. */
/* */
/*************************************************************************/
#define LINKSMODINFO
/*************************************************************************/
/* */
/* Zusaetzliche Meldungen bei ein/austragen von Links. */
/* */
/*************************************************************************/
#define LINKSMOD_MSG
/*************************************************************************/
/* */
/* Wenn kein Routing-TYP angegeben, dann gibt es eine Fehlermeldung. */
/* Der Routing-TYP muss korrekt gesetzt werden !!! */
/* */
/*************************************************************************/
#define LINKSMODROUTINGTYP
/*************************************************************************/
/* */
/* Routing-TYP LOCAL ohne Messung, ohne Weiterleitung */
/* und ohne Raute '#' im Alias. */
/* */
/* Routing-Typ "L-" */
/* */
/* Routing-TYP LOCAL ohne Messung, ohne Weiterleitung und versteckt. */
/* Die Route ist nur fuer den Sysop sichtbar. */
/* */
/* Routing-Typ "L#" */
/* */
/*************************************************************************/
/*#define LINKSMOD_LOCALMOD */
#endif /* LINKSMOD */
/*************************************************************************/
/* */
/* Jeder Link-Nachbar mit Routing-Protokoll bekommt keinen CTEXT von uns.*/
/* */
/*************************************************************************/
/*#define NOCTEXT */
/*************************************************************************/
/* */
/* Modifizierung am Modul MAKROS */
/* */
/*************************************************************************/
#define MAKROS
#ifdef MAKROS
/*************************************************************************/
/* */
/* Echte Useranzahl ausgeben. */
/* Dafuer Modifiziere ich das Makro "%u", da ich das eh fuer unnutze */
/* halte. Wer es im orignal zustand haben will, deaktiviert einfach */
/* //#define MAKRO_USER */
/* */
/*************************************************************************/
#define MAKRO_USER
/*************************************************************************/
/* */
/* Makros in TXT-Datei (info.txt/map.txt) im Verzeichnis TEXTCMD */
/* einsetzbar. */
/* */
/*************************************************************************/
#define MAKRO_FILE
/*************************************************************************/
/* */
/* Makro %v, Loginstring (TNN V1.79 (Win32). */
/* Code von DAC922 Stefan. */
/* */
/*************************************************************************/
#define MAKRO_NOLOGINSTR
#endif /* MAKROS */
/*************************************************************************/
/* */
/* Modifizierung am Modul (MH)EARD */
/* */
/* Modifizierung der MH-Liste (Flexnet-Stil) */
/* Einzelne Port Listen. */
/* MH-Listenlaenge einstellbar. */
/* Verschiedene MH-Listen Formate. */
/* */
/*************************************************************************/
#define MH_LISTE
/*************************************************************************/
/* */
/* Modifizierung am Modul (R)ORTPARAMETER */
/* */
/*************************************************************************/
#define PORTPARAMETER
#ifdef PORTPARAMETER
/*************************************************************************/
/* */
/* Manuelle Portparameter. */
/* */
/* Paketlaenge, Persistance, Slottime, IRTT(Frack), T2, T3, Retry. */
/* */
/*************************************************************************/
#define PORT_MANUELL
/*************************************************************************/
/* */
/* IPOLL-Frame (von TheFirmware uebernommen) */
/* */
/* Manuelle Portparamter: */
/* Paketlaenge: PO 0 I=128 */
/* (Ab welcher groesser soll IPOLL-Frame zuschlagen.) */
/* */
/* Retry PO 0 IR=3 */
/* (Wieviel mal das Frame Wiederholt werden soll). */
/* */
/*************************************************************************/
#define IPOLL_FRAME
/*************************************************************************/
/* */
/* Ist die L2_CONNECT_TIME abgelaufen, duerfen wir den Linkpartner Rufen.*/
/* Nach abgelaufener L2_CONNECT_RETRY wird die L2_CONNECT_TIME wieder */
/* hochgesetzt. Damit erreichen wir immer eine gewisse Pause beim */
/* LINKAUFBAU, wenn unsere Nachbar-Station grade mal nicht online ist. */
/* */
/*************************************************************************/
#define PORT_L2_CONNECT_TIME
/*************************************************************************/
/* */
/* Wie viel mal soll nach dem Linkpartner gerufen werden bis zur */
/* naechsten Pause. */
/* */
/*************************************************************************/
#define PORT_L2_CONNECT_RETRY
/*************************************************************************/
/* */
/* einzelne Ports sperren. Mode Parameter "l" (kleines "L") */
/* Beispiel: PO 0 mode=1200l */
/* Es duerfen nur LINK-Partner in der LINKS-LISTE Connecten, andere */
/* bekommen Stationen bekommen eine kleine Meldung "INTERLINK" bzw. */
/* man kann die Meldung selber in einer Datei festlegen (LOCK.TXT). */
/* */
/*************************************************************************/
#define PORT_SUSPEND
#endif /* PORTPARAMETER */
/*************************************************************************/
/* */
/* Verhindert das gleichzeitige senden auf mehreren Port's. */
/* Mode-Parameter "s". (po 0 mode=1200s) */
/* */
/* Noch nicht vollstaendig. */
/* */
/*************************************************************************/
#define PORT_SYNRONATION
/*************************************************************************/
/* */
/* Proxyfunktion (noch zu optimieren). */
/* */
/*************************************************************************/
#define PROXYFUNC
/*************************************************************************/
/* */
/* Modifizierung am Modul (R)OUTES */
/* */
/*************************************************************************/
#define ROUTESMOD
#ifdef ROUTESMOD
/*************************************************************************/
/* */
/* L3RTT-Anzeige / 10 */
/* */
/*************************************************************************/
#define ROUTESMOD_L3RTTSHOW
/*************************************************************************/
/* */
/* Alle Nodes die ueber den Linkpartner geroutet werden anzeigen. */
/* (Beispiel: R CB0GLA) */
/* */
/*************************************************************************/
#define ROUTESMODVIANODES
#endif /* ROUTESMOD */
/*************************************************************************/
/* */
/* System-Verzeichnisse anlegen. */
/* */
/*************************************************************************/
#define SETPATH
/*************************************************************************/
/* */
/* Sprachauswahl deutsch / englich fuer System und Convers-Meldungen. */
/* */
/* Ist erweiterbar fuer weitere Sprachen. */
/* */
/*************************************************************************/
#define SPEECH
/*************************************************************************/
/* */
/* Sysop-Passwort im laufenden Betrieb aendern. */
/* Das neue Passwort wird in der TNN179.TNB gespeichert und beim */
/* naechsten neustart eingelesen. */
/* */
/* SYNTAX: PASS dasistmeinpasswort */
/* (Passwortstring muss genau 80 Zeichen haben) */
/* */
/*************************************************************************/
#define SYSOPPASSWD
/*************************************************************************/
/* */
/* TCPIP-Service */
/* */
/* Interner TCP-Stack. */
/* TCPIP L1-Layer. */
/* OS-Stack (Win32 / Linux) */
/* TELNET-Server */
/* HTTPD-Server */
/* IPCONVER-Server */
/* TNN <IP-LINK> SAUPP. */
/* IRC-Server (noch nicht vollstaendig!) */
/* */
/*************************************************************************/
#define TCP_STACK
#define L1TCPIP
#define OS_STACK
#define L1TELNET
#define L1HTTPD
#define L1IPCONV
/* #define L1IRC */
#define OS_IPLINK
/*************************************************************************/
/* */
/* Modifizierung am Routing-TYP THENET.im zusammenhang mit X1J4-Knoten. */
/* */
/* L4TIMEOUT L4-Link no activity Timer (THENET-TYP). */
/* Ist der Timer abgelaufen, wird der Link */
/* getrennt, aber die Connects die ueber */
/* diesen Link laufen werden nicht getrennt. */
/* Bei Aktivitaet wird der Link wieder */
/* automatisch aufgebaut. */
/* */
/* L4QUALI Qualitaet einer Route setzen (THENET). */
/* (Beispiel: R CB0GLA QUAL=128) */
/* */
/* NOROUTE Route "#" im Alias zulassen. Ist ueber */
/* den L4PAR 7 0..1 einstellbar. */
/* */
/* */
/*************************************************************************/
#define THENETMOD
/*************************************************************************/
/* */
/* Modifizierung am Modul "TIMER". */
/* */
/*************************************************************************/
#define TIMERMOD
#ifdef TIMERMOD
/*************************************************************************/
/* */
/* Max. SRTT-Wert auf 250 festlegen. */
/* */
/*************************************************************************/
#define SRTTMAXMOD 250
/*************************************************************************/
/* */
/* SRTT-Wert updaten bei schnellen Links. */
/* */
/*************************************************************************/
#define T1TIMERMOD
/*************************************************************************/
/* */
/* Anfangswert fuer Smoothed Round Trip Timer setzen. */
/* */
/*************************************************************************/
#define SETISRTTMOD
#endif /* TIMERMOD */
/*************************************************************************/
/* */
/* Alle TCPIP-Interface bei der Auflistung nicht mit angezeigt, da ein */
/* connect auf den Port nicht moeglich ist. */
/* (Node / User unknown! Please specify port, if DD0DSD is a User:) */
/* */
/*************************************************************************/
#define TCPIP_NO_SHOW
/*************************************************************************/
/* */
/* L2-Timeout Manuell setzen. */
/* */
/* PA Timeout 60..54000. */
/* */
/*************************************************************************/
#define TIMEOUT_MANUELL
/*************************************************************************/
/* */
/* USER-PROFIL . */
/* */
/* Persoenliche Einstellungen, z.B. Passwort, Nickname verwalten. */
/* */
/*************************************************************************/
#define USERPROFIL
/*************************************************************************/
/* */
/* USER duerfen Monitoring. */
/* */
/*************************************************************************/
#define USER_MONITOR
/*************************************************************************/
/* */
/* Modifizierung der Userausgabe. */
/* */
/*************************************************************************/
#define USER_AUSGABE
#endif /* MODIFIGLOBAL */

132
include/conversd.h Executable file
View file

@ -0,0 +1,132 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/conversd.h (maintained by: DL1XAO) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
/*--------------------------------------------------------CVS_CVSD.C*/
#define GET_NXTLC 0
#define GET_ALL 1
#define GET_NXTCS 2
void appendformline __ARGS((CONNECTION *cp, char *prefix, char *text));
void appenddirect __ARGS((CONNECTION *cp, const char *string));
void appendstring __ARGS((CONNECTION *cp, const char *string));
void appendc __ARGS((CONNECTION *cp, const WORD n, const WORD ast));
void appendprompt __ARGS((CONNECTION *cp, const WORD ast));
void destroy_channel __ARGS((WORD number));
PERMLINK *permlink_of __ARGS((CONNECTION *cp));
void free_closed_connections __ARGS((void));
char *getarg __ARGS((char *line, WORD all));
char *ts __ARGS((time_t gmt));
void ts2 __ARGS((void));
char *ts3 __ARGS((time_t seconds, char *buffer));
char *ts4 __ARGS((time_t seconds));
void clear_locks __ARGS((void));
WORD count_user __ARGS((WORD channel));
#ifndef CONVNICK
void send_awaymsg __ARGS((char *name, char *host, time_t time, char *text));
#else
void send_awaymsg __ARGS((char *name, char *nick, char *host, time_t time, char *text));
#endif /* CONVNICK */
#ifndef L1IRC
void send_mode __ARGS((CHANNEL *chan));
void send_opermsg __ARGS((char *toname, char *hostname, char *fromname, WORD channel));
#else
void send_mode __ARGS((CHANNEL *chan, CONNECTION *, WORD oldflags));
void send_opermsg __ARGS((char *, char *, char *, WORD, int));
#endif /* L1IRC */
#ifndef CONVNICK
void send_persmsg __ARGS((char *name, char *host, WORD channel, char *text, time_t time));
void send_topic __ARGS((char *name, char *host, time_t time, WORD channel, char *text));
void send_user_change_msg __ARGS((char *name, char *host, WORD oldchannel, WORD newchannel, char *pers, time_t time));
#else
void send_persmsg __ARGS((char *name, char *nick, char *host, WORD channel, char *text, time_t time));
void send_topic __ARGS((char *name, char *nick, char *host, time_t time, WORD channel, char *text));
void send_uaddmsg __ARGS((CONNECTION *name));
void makeName __ARGS((CONNECTION*, char*));
void send_user_change_msg __ARGS((char *name, char *nick, char *host, WORD oldchannel, WORD newchannel, char *pers, time_t time));
#endif /* CONVNICK */
void send_msg_to_user __ARGS((char *fromname, char *toname, char *text));
void send_msg_to_channel __ARGS((char *fromname, WORD channel, char *text));
void send_invite_msg __ARGS((char *fromname, char *toname, WORD channel));
void update_destinations __ARGS((PERMLINK *p, char *name, time_t rtt, char *rev));
PERMLINK *update_permlinks __ARGS((char *name, CONNECTION *cp, WORD isperm));
void connect_permlinks __ARGS((void));
char *getflags __ARGS((WORD flag));
void Strcpy __ARGS((char *dst, char *src));
WORD Strcmp __ARGS((char *a, char *b));
void setstring __ARGS((char **adr, char *str, WORD max));
#ifdef CONV_CHECK_USER
CONNECTION *CheckUserCVS(char *);
#endif /* CONV_CHECK_USER */
/*--------------------------------------------------------CVS_SERV.C*/
CONNECTION *alloc_connection __ARGS((USRBLK *));
void free_connection __ARGS((CONNECTION *cp));
BOOLEAN invite_ccp __ARGS((char *, char *));
BOOLEAN connect_cvshost __ARGS((PERMLINK *));
void putcvsstr __ARGS((CONNECTION *, char *));
LONG queuelength __ARGS((CONNECTION *));
/*--------------------------------------------------------CVS_CMDS.C*/
void process_input __ARGS((CONNECTION *cp));
void bye_command __ARGS((CONNECTION *cp));
/*--------------------------------------------------------CVS_CVRT.C*/
WORD get_charset_by_name __ARGS((char *buf));
char *get_charset_by_ind __ARGS((WORD ind));
char *list_charsets __ARGS((void));
char *convertin __ARGS((WORD in, char *string));
char *convertout __ARGS((WORD out, char *string));
/* End of include/conversd.h */

243
include/cvs_cmds.h Executable file
View file

@ -0,0 +1,243 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/cvs_cmds.h (maintained by: DL1XAO) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
/*
* This is Ping-Pong convers/conversd derived from the wampes
* convers package written by Dieter Deyke <deyke@hpfcmdd.fc.hp.com>
*
* Modifications by Fred Baumgarten <dc6iq@insl1.etec.uni-karlsruhe.de>
* $Revision: 3.12 $$Date: 1996/03/03 10:09:47 $
*
* Modifications by Oliver Kern <daa531@gmx.de>
* $Revision: 3.13 $$Date: 17.08.2004 22:22 $
*/
/* zusammengefuehrtes USER.H und HOST.H, damit alle Kommandos samt
Kommandotabelle mit statischen Funktionen auskommen */
#include "tnn.h"
#ifdef PPCONVERS
#include "conversd.h"
#define ISO 0
extern char cnvinbuf[];
static CHANNEL *ins_channel __ARGS((WORD chan));
static BOOLEAN has_ChOp __ARGS((WORD chan));
static void disp_links __ARGS((CONNECTION *cp, char *user));
static void ed_list __ARGS((CONNECTION *cp, WORD which));
static WORD is_looped __ARGS((PERMLINK *l, char *host));
#ifdef CONVERS_NO_NAME_OK
#else
static BOOLEAN name_ok __ARGS((char *call));
#endif
static BOOLEAN host_ok __ARGS((char *call));
static void all_command __ARGS((CONNECTION *cp));
static void away_command __ARGS((CONNECTION *cp));
static void beep_command __ARGS((CONNECTION *cp));
static void channel_command __ARGS((CONNECTION *cp));
static void charset_command __ARGS((CONNECTION *cp));
static void cstat_command __ARGS((CONNECTION *cp));
static void filter_command __ARGS((CONNECTION *cp));
#ifndef L1IRC
static void help_command __ARGS((CONNECTION *cp));
#endif /* L1IRC */
#ifdef CONVERS_HOSTNAME
static void hostname_command __ARGS((CONNECTION *cp));
#endif
static void hosts_command __ARGS((CONNECTION *cp));
static void invite_command __ARGS((CONNECTION *cp));
static void imsg_command __ARGS((CONNECTION *cp));
#ifndef L1IRC
static void leave_command __ARGS((CONNECTION *cp));
static void links_command __ARGS((CONNECTION *cp));
#endif /* L1IRC */
static void list_command __ARGS((CONNECTION *cp));
#ifndef L1IRC
static void msg_command __ARGS((CONNECTION *cp));
#endif /* L1IRC */
static void me_command __ARGS((CONNECTION *cp));
static void mode_command __ARGS((CONNECTION *cp));
static void name_command __ARGS((CONNECTION *cp));
#ifdef CONVNICK
static void nickname_command __ARGS((CONNECTION *cp));
static void nonickname_command __ARGS((CONNECTION *cp));
#endif
static void notify_command __ARGS((CONNECTION *cp));
static void personal_command __ARGS((CONNECTION *cp));
static void prompt_command __ARGS((CONNECTION *cp));
static void query_command __ARGS((CONNECTION *cp));
static void restart_command __ARGS((CONNECTION *cp));
#ifdef CONVERS_SYSINFO
static void sysinfo_command __ARGS((CONNECTION *cp));
#endif
static void topic_command __ARGS((CONNECTION *cp));
static void uptime_command __ARGS((CONNECTION *cp));
static void verbose_command __ARGS((CONNECTION *cp));
static void version_command __ARGS((CONNECTION *cp));
static void width_command __ARGS((CONNECTION *cp));
static void who_command __ARGS((CONNECTION *cp));
static void wall_command __ARGS((CONNECTION *cp));
#ifdef CVS_ZAPPING
static void zap_command __ARGS((CONNECTION *cp));
#endif
static void h_away_command __ARGS((CONNECTION *cp));
static void h_cmsg_command __ARGS((CONNECTION *cp));
static void h_dest_command __ARGS((CONNECTION *cp));
static void h_host_command __ARGS((CONNECTION *cp));
static void h_invi_command __ARGS((CONNECTION *cp));
static void h_link_command __ARGS((CONNECTION *cp));
static void h_oper_command __ARGS((CONNECTION *cp));
static void h_ping_command __ARGS((CONNECTION *cp));
static void h_pong_command __ARGS((CONNECTION *cp));
static void h_rout_command __ARGS((CONNECTION *cp));
static void h_topi_command __ARGS((CONNECTION *cp));
#ifdef CONVNICK
static void h_uadd_command __ARGS((CONNECTION *cp));
#endif
static void h_udat_command __ARGS((CONNECTION *cp));
static void h_unknown_command __ARGS((CONNECTION *cp));
static void h_umsg_command __ARGS((CONNECTION *cp));
static void h_user_command __ARGS((CONNECTION *cp));
typedef struct cmdtable {
char *name;
void (*fnc)(CONNECTION *);
char *help;
WORD states;
} CMDTABLE;
static CMDTABLE cmdtable[] = {
{"?", help_command, "HELP", CM_USER},
{"away", away_command, "AWAY", CM_USER},
{"action", me_command, "ME", CM_USER},
{"all", all_command, "ALL", CM_USER},
{"beep", beep_command, "BEEP", CM_USER},
{"bell", beep_command, "BEEP", CM_USER},
{"bye", bye_command, "QUIT", CM_USER},
{"channel", channel_command, "JOIN", CM_USER},
{"charset", charset_command, "CHAR", CM_USER},
{"cstat", cstat_command, NULL, CM_UNKNOWN},
{"destinations", hosts_command, "DEST", CM_USER},
{"exit", bye_command, "QUIT", CM_USER},
{"exclude", imsg_command, "EXCL", CM_USER},
{"filter", filter_command, "FILT", CM_USER},
{"help", help_command, "HELP", CM_USER},
#ifdef CONVERS_HOSTNAME
{"hostname", hostname_command, "HOST", CM_UNKNOWN},
#endif
{"hosts", hosts_command, "DEST", CM_USER},
{"invite", invite_command, "INVI", CM_USER},
{"imsg", imsg_command, "EXCL", CM_USER},
{"iwrite", imsg_command, "EXCL", CM_USER},
{"join", channel_command, "JOIN", CM_USER},
{"links", links_command, "LINK", CM_USER},
{"leave", leave_command, "LEAV", CM_USER},
{"list", list_command, "LIST", CM_USER},
{"msg", msg_command, "MSG", CM_USER},
{"me", me_command, "ME", CM_USER},
{"mode", mode_command, "MODE", CM_USER},
{"name", name_command, NULL, CM_UNKNOWN},
#ifdef CONVNICK
{"nickname", nickname_command, "NICK", CM_USER},
{"nonickname", nonickname_command, "NONICK", CM_USER},
#endif
{"notify", notify_command, "NOTI", CM_USER},
{"note", personal_command, "PERS", CM_USER},
{"online", who_command, NULL, CM_UNKNOWN},
{"personal", personal_command, "PERS", CM_USER},
{"prompt", prompt_command, "PROM", CM_USER},
{"quit", bye_command, "QUIT", CM_USER},
{"query", query_command, "QUER", CM_USER},
{"restart", restart_command, NULL, CM_USER},
{"send", msg_command, "MSG", CM_USER},
#ifdef CONVERS_SYSINFO
{"sysinfo", sysinfo_command, "SYSI", CM_USER},
#endif
{"topic", topic_command, "TOPI", CM_USER},
{"users", who_command, "WHO", CM_USER},
{"uptime", uptime_command, "UPTI", CM_USER},
{"verbose", verbose_command, "VERB", CM_USER},
{"version", version_command, "VERS", CM_USER},
{"who", who_command, "WHO", CM_USER},
{"width", width_command, "WIDT", CM_USER},
{"wall", wall_command, NULL, CM_USER},
{"write", msg_command, "MSG", CM_USER},
#ifdef CVS_ZAPPING
{"zap", zap_command, NULL, CM_USER},
#endif
{"\377\200away", h_away_command, NULL, CM_HOST},
{"\377\200cmsg", h_cmsg_command, NULL, CM_HOST},
{"\377\200dest", h_dest_command, NULL, CM_HOST},
{"\377\200host", h_host_command, NULL, CM_UNKNOWN},
{"\377\200invi", h_invi_command, NULL, CM_HOST},
{"\377\200link", h_link_command, NULL, CM_HOST},
{"\377\200mode", mode_command, NULL, CM_HOST},
{"\377\200oper", h_oper_command, NULL, CM_HOST},
{"\377\200ping", h_ping_command, NULL, CM_HOST},
{"\377\200pong", h_pong_command, NULL, CM_HOST},
{"\377\200rout", h_rout_command, NULL, CM_HOST},
{"\377\200topi", h_topi_command, NULL, CM_HOST},
#ifdef CONVNICK
{"\377\200uadd", h_uadd_command, NULL, CM_HOST},
#endif
{"\377\200udat", h_udat_command, NULL, CM_HOST},
{"\377\200umsg", h_umsg_command, NULL, CM_HOST},
{"\377\200user", h_user_command, NULL, CM_HOST},
{NULL, 0, NULL, 0}
};
#endif
/* End of $RCSfile$ */

743
include/function.h Normal file
View file

@ -0,0 +1,743 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/function.h (maintained by: ???) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
#define VMSG if(bVerbose==TRUE)printf
/*-------------------------------------------- Funktionen in src/main.c */
void memerr(void);
void quit_program(int);
#ifdef ST /*------------------------------- Fuer ST ---------- */
void stime(time_t *);
BOOLEAN enable_port(UWORD);
BOOLEAN disable_port(UWORD);
void tzset(void);
char *tempnam(const char *, const char *);
#endif
#ifdef MC68302 /*------------------------------- Fuer TNC3 ---------*/
void stime(time_t *);
void getftime(char *, struct ftime *);
char *tempnam(const char *, const char *);
void mem_init(void);
#endif
/*------------------------------------------------ allgemeine Low-Level */
void DIinc(void);
void decEI(void);
BOOLEAN init_hardware(int argc, char *argv[]);
void exit_hardware(void);
void reboot_system(void);
void init_console(void);
void exit_console(void);
BOOLEAN ishget(void);
BOOLEAN ishput(void);
char hgetc(void);
void toggle_rts(void);
int xchdir(const char *);
int xaccess(const char *, int);
int xfindfirst(const char *, struct ffblk *, int);
int xfindnext(struct ffblk *);
FILE *xfopen(const char *, const char *);
int xremove(const char *);
int xrename(const char *, const char *);
char *normfname(char *);
void shellsrv(void);
BOOLEAN l7tosh(MBHEAD *);
BOOLEAN tnnshell(char *);
void tnnexec(char *);
unsigned long coreleft(void);
void update_timer(void);
#ifdef __GO32__
int access(const char *, int);
#endif
/*------------------------------------------ Funktionen in src/buffer.c */
void inithd(LHEAD *);
void init_buffers(void);
LEHEAD *ulink(LEHEAD *);
LEHEAD *relink(LEHEAD *, LEHEAD *);
#ifdef BUFFER_DEBUG
LEHEAD *allocb(int);
#else
LEHEAD *allocb(void);
#endif
void dealoc(MBHEAD *);
void dealmb(MBHEAD *);
void dealml(LEHEAD *);
void rwndmb(MBHEAD *);
void putchr(char, MBHEAD *);
#ifndef __WIN32__
char getchr(MBHEAD *);
#else
unsigned
char getchr(MBHEAD *);
#endif /* WIN32 */
UWORD get16(MBHEAD *);
void put16(UWORD, MBHEAD *);
ULONG get32(MBHEAD *);
void put32(ULONG, MBHEAD *);
BOOLEAN splcpy(WORD, MBHEAD *, MBHEAD *);
/*-------------------------------------------------- Funktionen in L1.C */
void l1rxtx(void);
void l1init(void);
void l1exit(void);
void l1timr(UWORD);
void kicktx(int);
void l1ctl(int, int);
WORD iscd(int);
int l1attach(int, char *);
void l1detach(int);
void l1hwstr(int, MBHEAD *);
void l1hwcfg(int, MBHEAD *);
void l1enum(MBHEAD *);
void l1stat(const char *, MBHEAD *);
void l1sclr(const char *);
/*---------------------------------------- Funktionen in src/callstr.c */
BOOLEAN cmpcal(const char *, const char *);
BOOLEAN cmpid(const char *, const char *);
BOOLEAN cmpidl(const char *, const char *);
void cpyid(char *, const char *);
void cpyidl(char *, const char *);
void addid(char *, const char *);
const char *ndigipt(const char *);
#ifdef MH_LISTE
const char *ydigipt(const char *viap);
#endif
void putvia(const char *, MBHEAD *);
void putfid(const char *, MBHEAD *);
void call2str(char *, char *);
void callss2str(char *, char *);
void str2call(char *, char *);
BOOLEAN c6mtch(const char *, const char *);
const char *dheardcall(const char *);
/*------------------------------------------ Funktionen in src/l2dama.c */
void iniDAMA(void);
void timDAMA(UWORD);
void clrDAMA(void);
void incDAMA(void);
void clearDT(UWORD);
void polDAMA(void);
void getMCs(void);
BOOLEAN multiconn(int, char *);
/*------------------------------------------ Funktionen in src/l2misc.c */
void l2(void);
void l2init(void);
void autopar(int);
void autopers(int);
BOOLEAN busy(int);
void l2profiler(void);
BOOLEAN istome(const char *);
int istomev(void);
void newlnk(void);
void dsclnk(void);
void inilnk(void);
void clrlnk(void);
void reslnk(void);
void acklnk(LNKBLK *);
void rejlnk(LNKBLK *);
LNKBLK *getlnk(UBYTE, char *, char *, char *);
void change_maxframe(LNKBLK *, int);
/*-------------------------------------------- Funktionen in src/l2rx.c */
void l2rx(void);
BOOLEAN takfhd(MBHEAD *);
void l2tolx(WORD);
void i2tolx(BOOLEAN);
void i2xclr(void);
void gateway_ui(char *, char *, char *, MBHEAD *);
/*------------------------------------------ Funktionen in src/l2stma.c */
void l2stma(STENTRY[]);
void l2newstate(WORD);
/*----------------------------------------- Funktionen in src/l2timer.c */
void l2timr(void);
void t2rrr(void);
void t2rnrr(void);
void t2rejr(void);
void setT1(void);
void clrT1(void);
void setT2(UBYTE);
void clrT2(void);
void setT3(void);
void clrT3(void);
void setRTT(void);
void clrRTT(void);
void chknoa(void);
void setiSRTT(void);
/*-------------------------------------------- Funktionen in src/l2tx.c */
void l2tx(void);
void clrstfl(void);
void sdfrmr(char);
void xnull(void);
void xrrc(void);
void xrrr(void);
void xrnrc(void);
void xrnrr(void);
void xrejr(void);
void xdm(void);
void xua(void);
void xsabm(void);
void xdisc(void);
void xfrmr(void);
void stxfad(void);
void sendS(UBYTE);
void stxcfr(void);
UBYTE setNR(UBYTE);
void sdl2fr(MBHEAD *, BOOLEAN);
MBHEAD *makfhd(int);
BOOLEAN itolnk(int, BOOLEAN, MBHEAD *);
char outsdI(void);
char itxwnd(void);
void sdoi(void);
void sdi(int, int);
void sdui(const char *, const char *, const char *, char, MBHEAD *);
BOOLEAN getfid(char *, MBHEAD *);
/* TEST DG9OBU */
BOOLEAN getfidc(char *, MBHEAD *);
/* ----------------------------------------- Funktionen in src/l3misc.c */
void l3init(void);
void i3tolnk(UBYTE, LNKBLK *, MBHEAD *);
void l3rx(void);
void l3tx(void);
void l3rest(void);
void brosrv(void);
BOOLEAN l2tol3(WORD);
BOOLEAN tol3sw(MBHEAD *);
void request_nrr(char *id, UID uid);
BOOLEAN islinkport(int);
BOOLEAN register_network(int,int);
void unregister_network(void);
/* TEST DG9OBU (gilt fuer alle noch folgenden Funktionen aus l3misc.c) */
TRILLIAN islocal(const char *);
#ifdef PROXYFUNC
BOOLEAN isproxy(const char *);
#endif
void getSSIDrange(int *, int *);
int maxSSID(void);
BOOLEAN SSIDinrange(int);
/* ------------------------------------------ Funktionen in src/l3nbr.c */
#ifndef LINKSMOD_MSG
void unregister_neigb(const char *, const char *, int);
#else
BOOLEAN unregister_neigb(const char *, const char *, int);
#endif /* LINKSMOD_MSG */
PEER *register_neigb(const char *, const char *, const char *, int, int
#ifdef LINKSMODINFO
,const char *
#endif /* LINKSMODINFO */
#ifdef AUTOROUTING
, UWORD
#endif /* AUTOROUTING */
);
/* ------------------------------------------ Funktionen in src/l3rtt.c */
void l3rtt_service(void);
BOOLEAN match(MBHEAD *, const char *);
/* ------------------------------------------ Funktionen in src/l3tab.c */
INDEX find_node_ssid_range(const char *);
INDEX find_node_this_ssid(const char *);
#define find_best_qual(index, pp, opt) do_find_best_qual(index, NULL, pp, opt)
#define find_best_notvia(index, notthis, pp, opt) do_find_best_qual(index, notthis, pp, opt)
unsigned do_find_best_qual(INDEX, PEER *, PEER **, int);
unsigned getquality(unsigned, PEER *);
int l3_find_route(char *, DEST *);
#define NODE_UNKNOWN 1
#define NODE_DOWN 2
#define NODE_AVAILABLE 0
int find_alias(char *);
BOOLEAN iscall(const char *, NODE **, PEER **, int);
void unregister_all_peers(void);
/* ------------------------------------------- Funktionen in src/l3vc.c */
void flex_route_query(char *);
/*---------------------------------------- Funktionen in src/l7showl3.c */
void ccpnod(void);
void ccpdest(void);
void nrr2usr(NRRLIST *, char);
void ccprou(void);
/*---------------------------------------------- Funktionen in src/l4.c */
void initl4(void);
void l4tx(void);
void l4rx(NODE *, NODE *, MBHEAD *);
BOOLEAN l4istome(char *, char *);
void l4rest(void);
void trasrv(void);
void newcir(void);
void discir(void);
BOOLEAN itocir(BOOLEAN, MBHEAD *);
MBHEAD *gennhd(void);
void l3tol4(NODE *);
#ifdef CONL3LOCAL
void ackcir(CIRBLK *cp);
void bsycir(void);
#endif
#ifdef L4KILL
UWORD KillL4(char *, char *);
#endif /* L4KILL */
/*------------------------------------------ Funktionen in src/l7time.c */
void timsrv(void);
void beacsv(void);
/*---------------------------------------------- Funktionen in src/l7.c */
void initl7(void);
void l2tol7(WORD, void *, WORD);
void disusr(UID);
BOOLEAN fmlink(BOOLEAN, MBHEAD *);
void seteom(MBHEAD *);
BOOLEAN send_msg(BOOLEAN, MBHEAD *);
BOOLEAN new_user(BOOLEAN, UID);
BOOLEAN itousr(UID, UID, BOOLEAN, MBHEAD *);
UID g_uid(void *, UBYTE);
UBYTE g_utyp(UID);
void *g_ulink(UID);
void resptc(UID);
void clrptc(UID);
/*------------------------------------------- Funktionen in src/l7ccp.c */
void l7rx(void);
void l7tx(void);
void ccpbea(void);
void ccpread(char *);
void ccpedi(void);
void ccpload(void);
void ccpsys(void);
void ccpuse(void);
void viaput(LINKTYP, UID, MBHEAD *);
void ccptim(void);
void ccpclr(void);
void ccpsta(void);
void ccptst(void);
void ccpver(void);
void ccplnk(void);
void ccpquit(void);
void ccpecho(void);
void ccptalk(void);
void ccpmail(void);
void ccpdxc(void);
#ifdef PADDLE
void ccppaddle(void);
#endif
/*------------------------------------------ Funktionen in src/l7cmds.c */
#ifdef ALIASCMD
void ccpalias(void);
void clean_aliaslist(void);
#endif
void ccpstart(void);
void ccppar(void);
void ccpres(void);
void ccpprompt(void);
#if defined(MC68302) || defined(__WIN32__)
void ccpdelete(void);
void ccpcopy(void);
void ccpdir(void);
#endif /* WIN32 */
#ifndef MC68302
void ccpshell(void);
#endif
void ccpport(void);
void ccphelp(void);
void ccpsusp(void);
void ccpreadb(void);
void ccpesc(void);
void ccpkill(void);
void ccpsave(void);
void ccptrace(void);
void ccprun(void);
void ccpdcd(void);
#ifdef BUFFER_DEBUG
void ccpbuf(void);
#endif
/*------------------------------------------ Funktionen in src/l7conn.c */
BOOLEAN isheard(char *, DEST *);
void ccpcon(char *);
void ccpcq(void);
void gateway(void);
BOOLEAN conn_ok(const char *);
/*------------------------------------------ Funktionen in src/l7host.c */
void init_host(void);
void exit_host(void);
void hostsv(void);
BOOLEAN runbatch(char *);
void hostim(void);
BOOLEAN hstreq(void);
void hstout(void);
BOOLEAN itohst(BOOLEAN, MBHEAD *);
void blieco(int);
void bliloe(void);
void bputbs(void);
void hstcmd(MBHEAD *);
void hstcon(char);
void hstdis(void);
void hstsen(BOOLEAN);
void hputid(char *);
void hputc(char);
void hputcc(char);
void hputby(UBYTE);
void hputbt(time_t *);
void hprintf(const char *, ...);
void hputs(const char *);
void hputmb(MBHEAD *);
void xprintf(const char *, ...);
/*--------------------------------------------------------CVS_CVSD.C*/
void send_proto __ARGS((const char *modul, const char *format __DOTS));
void send_proto_to __ARGS((int channel,char *modul, const char *format __DOTS));
char *personalmanager __ARGS((WORD, CONNECTION *, char *));
/*--------------------------------------------------------CVS_SERV.C*/
void convers_init __ARGS((void));
void conversd __ARGS((void));
BOOLEAN convers_input __ARGS((MBHEAD *));
void convers_output __ARGS((void));
void ccpcvs __ARGS((void));
/*---------------------------------------------------------- CVS_CMDS.C */
void bye_command2 __ARGS((CONNECTION *cp, char *reason));
/*---------------------------------------- Funktionen in src/l7hstcmd.c */
void Bcmd(void); /* Anzahl der Runden / Sekunde */
void Ccmd(void); /* An Console connecten */
void Dcmd(void); /* Von Console disconnecten */
void Ecmd(void); /* Ausgabe auf File umleiten */
void Gcmd(void); /* Hostmode-Poll */
void Icmd(void); /* Rufzeichen, Alias, Login-Passwort */
void Jcmd(void); /* JHOST ein/aus */
void Kcmd(void); /* Datum + Uhrzeit anzeigen */
void Lcmd(void); /* Status der Hostkanaele abfragen */
void Mcmd(void); /* Monitor einstellen */
void Qcmd(void); /* Programm verlassen: QUIT */
void Rcmd(void); /* Token-Recoveries anzeigen j/n */
void Scmd(void); /* Hostkanal waehlen */
void Tcmd(void); /* Token-Ring-Baudrate einstellen */
void Vcmd(void); /* Version abfragen */
void Ycmd(void); /* Connect zum Host erlaubt j/n */
void extcmd(void); /* erweiterte Befehle */
void hmputr(unsigned);
void rspini(unsigned);
void rspsuc(void);
void rsperr(int);
/*------------------------------------------ Funktionen in src/l7moni.c */
void monitor(MBHEAD *);
void moncmd(MBHEAD *, MONBUF *, char *, WORD);
/*----------------------------------------- Funktionen in src/l7utils.c */
void invcal(void);
void msgfrm(LINKTYP, UID, char *);
void puttfu(const char *);
void putmsg(const char *);
MBHEAD *putals(const char *);
MBHEAD *getmbp(void);
void putuse(LINKTYP, UID, MBHEAD *);
void putcvsu(USRBLK *, MBHEAD *);
void putdil(const char *, MBHEAD *);
void putid(const char *,MBHEAD *);
void putalt(char *,MBHEAD *);
void putcal(char *,MBHEAD *);
void puttim(time_t *, MBHEAD *);
void putnum(int,MBHEAD *);
void putlong(ULONG, BOOLEAN, MBHEAD *);
void putstr(const char *, MBHEAD *);
void putprintf(MBHEAD *, const char *, ...);
void putspa(WORD, MBHEAD *);
TRILLIAN getdig(WORD *, char **, BOOLEAN, char *);
TRILLIAN getcal(WORD *, char **, BOOLEAN ,char *);
BOOLEAN getport(WORD *, char **, WORD *);
TRILLIAN getide(WORD *, char **, char *);
UWORD nxtnum(WORD *, char **);
LONG nxtlong(WORD *, char **);
TRILLIAN fvalca(char *);
TRILLIAN valcal(char *);
BOOLEAN ismemr(void);
char *calofs(LINKTYP, UID);
BOOLEAN getlin(MBHEAD *);
BOOLEAN issyso(void);
BOOLEAN skipsp(WORD *, char **);
WORD getparam(WORD *, char **, WORD, WORD, WORD);
BOOLEAN nextspace(WORD *, char **);
void prompt(MBHEAD *);
void prompt2str(MBHEAD *, char *);
void putide(char *, MBHEAD *);
void putkbytes(ULONG, MBHEAD *);
void invmsg(void);
void dump_beacn(MBHEAD *);
void dump_convc(MBHEAD *);
void dump_links(MBHEAD *);
void dump_parms(MBHEAD *);
void dump_ports(MBHEAD *);
void dump_suspd(MBHEAD *);
#ifdef IPROUTE
void dump_ipr(MBHEAD *);
#endif
#ifdef KERNELIF
void dump_kernel(MBHEAD *);
#endif
#ifdef AX25IP
void dump_ax25ip(MBHEAD *);
#endif
void dump_divrs(MBHEAD *);
void save_parms(void);
void notify(int, const char * __DOTS);
BOOLEAN is_down_suspended(char *, int);
BOOLEAN is_suspended(USRBLK *);
void init_crctab(void);
BOOLEAN read_txt(void);
BOOLEAN do_file(char *);
BOOLEAN extern_command(void);
TRILLIAN intern_command(COMAND *);
void inv_cmd(void);
void program_load(MBHEAD *);
void start_autobin(void);
void get_password(void);
void out_ctext(char*, MBHEAD*);
int userport(USRBLK *);
void send_ctext(void);
void send_async_response(USRBLK *, const char *, const char *);
void ccp_par(const char *, PARAM *, int);
void ccp_call(char *);
int ptc_p_max(void *, UBYTE);
BOOLEAN is_iplink(void *, UBYTE);
void load_text(void);
/*------------------------------------------------ Funktionen in FILE.C */
BOOLEAN save_configuration(void);
BOOLEAN save_stat(void);
BOOLEAN load_configuration(void);
BOOLEAN load_stat(void);
void addslash(char *);
#ifdef PC
BOOLEAN good_file_name (const char *);
#endif
/*------------------------------------------- Funktionen in src/graph.c */
#ifdef GRAPH
void ccpgraph(void);
void graphclear(void);
void graph_timer(void);
BOOLEAN save_graph(void);
BOOLEAN load_graph(void);
#endif
#ifdef PORTGRAPH
void graph_actual_trxpeak(TPORTGRAPHELEMENT *, BOOLEAN);
#endif
/*-------------------------------------------------- Funktionen in MH.C */
void init_mh(void);
void exit_mh(void);
void save_mh(void);
void ccpl2mh(void);
void ccpl3mh(void);
BOOLEAN mhprm(char *, WORD, char *);
MHEARD *mh_lookup(MHTAB *, char *);
#ifdef MH_LISTE
MHEARD *mh_lookup_port(MHTAB *, char *, UWORD, int txrx);
#else
MHEARD *mh_lookup_port(MHTAB *, char *, UWORD);
#endif
void mh_update(MHTAB *, MHEARD *, char *, UWORD);
void mh_clear(MHEARD *);
MHEARD *mh_add(MHTAB *);
/*----------------------------------------------- Funktionen in 16550.C */
void clear_rs232(int);
void close_rs232(int);
void rts_off(int);
void rts_on(int);
int setbaud (int, int);
void setstopbits(int, int);
int rs232_in(int);
void rs232_out(int, int);
int rs232_read(int, UBYTE *, int);
void rs232_write(int, UBYTE *, UBYTE *);
int rs232_in_status(int);
int rs232_out_status(int);
void init_rs232(void);
#if defined (__DOS16__) || defined (__GO32__)
void read_envcom(char *, int *, int *, int *);
int open_rs232(int, int, int, int, int);
#endif
#ifdef ST
void read_envdev(char *, char *,char *);
int open_rs232(char *);
#endif
#ifdef MC68302
int open_rs232(int);
#endif
/*----------------------------------------------- Funktionen in TIMER.C */
void init_timer(void);
void exit_timer(void);
/*--------------------------------------------- Funktionen von MEM386.C */
#if defined (__DOS16__)
void done_umb(void);
void alloc_umb(void);
#endif
/*------------------------------------------ Funktionen in src/pacsat.c */
void ccpbox(void);
void ccppacsat(void);
LONG getdiskfree (char *);
/*------------------------------------------ Funktionen src/pacserv.c */
void filesystem_init(void);
void new_file(char *);
void pacsat_init(void);
void pacsrv(void);
void l7_to_pacsat(void);
/*------------------------------------------ Funktionen in linux/kernelif.c */
#ifdef KERNELIF
void ccpkif(void);
#endif
void route_age(void);
#ifdef AXIPR_HTML
void SetHTML(int, char *, PEER *, BOOLEAN);
#endif /* AXIPR_HTML */
#ifdef HOSTMYCALL
void ccpmyhost(void); /* Consolen-Mycall setzen. */
#endif
#ifdef SYSOPPASSWD
void ccppasswd(void); /* Sysop-Passwort aendern. */
#endif /* SYSOPPASSWD */
#ifdef BEACON_STATUS
char *convers_user(char *cuser);
void bake(void);
#endif
#ifdef IPOLL_FRAME
void sdipoll(void);
#endif /* IPOLL_FRAME */
#ifdef LINKSMOD_LOCALMOD
BOOLEAN CheckLocalLink(const char *); /* Pruefe auf LOCAL-Links "L-""L#"*/
#endif /* LINKSMOD_LOCALMOD */
#ifdef CONNECTMOD_SET_NODE
void SetMyNode(char *); /* Einstiegsknoten setzen. */
#endif /* CONNECTMOD_SET_NODE */
#ifdef PORT_SUSPEND
BOOLEAN is_port_suspended(USRBLK *u_block);
#endif
#ifdef CONNECTTIME /* Connect-Zeit in Flexnet-Stil ausgeben */
char *ConnectTime(unsigned long);
#endif /* CONNECTTIME */
/* End of include/function.h */

409
include/global.h Executable file
View file

@ -0,0 +1,409 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/global.h (maintained by: ???) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
/* Variablen fuer Level 1 */
extern char huge *RAMBOT; /* Zeiger auf Anfang des freien Speichers */
extern char huge *RAMTOP; /* Zeiger auf Ende des freien Speichers */
extern WORD actch; /* bearbeiteter Host-Kanal */
extern BOOLEAN tnb_ch;
extern WORD stamp;
extern WORD kick[];
extern WORD commandflag[];
extern WORD testflag[];
extern WORD show_recovery;
extern WORD watchdog; /* Watchdog, Timer erhoeht */
extern ULONG throughput; /* Gesammtdurchsatz */
extern ULONG thbps; /* Gesammtdurchsatz in bps */
extern ULONG thbps_max; /* Gesammtdurchsatz in bps */
#define WATCHDOG_TIMEOUT 18000 /* Nach 3 Minuten ohne RX Port reset */
extern char myid[]; /* Call (normal) + SSID (1 Bit linksgesch.) */
extern char hostid[]; /* Call fuer Host-Console */
extern char alias[]; /* Ident der Station */
extern char boxid[]; /* Rufzeichen der Mailbox */
extern char dxcid[]; /* Rufzeichen des Clusters */
extern UWORD convid; /* SSID fuer Convers */
extern UWORD testid; /* SSID fuer Linktest */
extern UWORD autoipr; /* automatische INP IP-Routen */
extern UWORD nmblks; /* Anzahl aktiver Level-2-Links (1..127) */
extern UWORD nmblks_max; /* Maximalanzahl der Level-2-Links */
/* empfangenes Frame : */
extern char rxfhdr[]; /* Header (Ziel/Quell/via-Id's), 0-term. */
extern UBYTE rxfctl; /* Kontrollbyte ohne P/F-Bit */
extern UBYTE rxfPF; /* V2-Frame: 0x10 = P/F gesetzt, 0 sonst */
extern UBYTE rxfCR; /* V2-Frame: 0x80 = Command-Frame */
/* 0x00 = Response-Frame */
extern BOOLEAN rxfDA; /* Frame ist DAMA-Frame */
#ifdef EAX25
extern UBYTE rxfctlE; /* zweites Controlbyte */
extern BOOLEAN rxfEAX; /* Frame ist Extended-AX.25-Frame */
#endif
extern int rxfprt; /* Empfangs-Port */
/* zu sendendes Frame : */
extern char txfhdr[L2AFLEN+1]; /* Header (Ziel/Quell/via-Id's), 0-term. */
extern UBYTE txfctl; /* Kontrollbyte ohne P/F-Bit */
#ifdef EAX25
extern UBYTE txfctlE; /* zweites Controlbyte */
extern BOOLEAN txfEAX; /* Kennzeichnung fuer EAX.25-Frames */
#endif
extern UBYTE txfPF; /* V2-Frame: 0x10 = P/F gesetzt, 0 sonst */
extern UBYTE txfCR; /* V2-Frame: 0x80 = Command-Frame */
/* 0x00 = Response-Frame */
extern int txfprt;
extern UWORD DamaSpeedFactor;
extern UWORD paclen;
extern UWORD dama_init; /* Anfangswert fuer DAMA Timer (10 ms) */
extern UWORD dama_max; /* Maximaler Aktivitaetszaehlerstand */
extern UWORD MaxPollCnt; /* Max. Anzahl von erlaubten Polls.. */
#define T3par 18000
extern UWORD nmbfre; /* "number free", Anzahl freier 32-Byte- */
/* Buffer (36 Byte mit Kopf) */
extern UWORD nmbfre_min; /* min Buffer */
extern UWORD nmbfre_max; /* max Buffer */
extern LHEAD freel; /* "free list", */
/* Listenkopf Freibuffer */
extern LHEAD rxfl; /* "rx frame list", */
/* Listenkopf empfangene Frames */
extern LHEAD stfl; /* "sent frame list", */
/* Listenkopf gesendete Frames */
extern LHEAD trfl; /* "trash frame list", */
/* Listenkopfe Frames fuer den Muelleimer */
extern LHEAD damarl[L2PNUM]; /* "DAMA random list" - fuer Frames ausser- */
/* halb der DAMA-Steuerung (UI / UA / DM) */
extern LHEAD txl2fl[L2PNUM]; /* "tx level 2 frame list", */
/* Listenkoepfe (je Port einer) zu sendende */
/* Frames */
extern LNKBLK *lnktbl; /* "link table", fuer jeden moeglichen */
/* Level-2-Link ein Eintrag */
extern LNKBLK *lnkpoi; /* "link pointer", globaler Zeiger auf den */
/* gerade aktuellen Linkblock (in lnktbl) */
extern LHEAD l2frel; /* Liste der freien Linkbloecke */
extern LHEAD l2actl[L2PNUM]; /* Aktive Linkbloecke je Port */
extern char l2als[L2CALEN]; /* Alias gross geschrieben fuer Connects */
/* und UI-Digipeating */
/****************************************************************************/
/*** Variable fuer Level 3 ***/
extern NETWORK *netp;
extern UWORD broint_ui; /* Broadcast-Interval */
extern UWORD broint_i; /* Broadcast-Interval */
extern UWORD timliv; /* Anfangswert Paketlebensdauer */
extern UWORD worqua; /* minimal Qualitaet fuer Autoupdate */
extern UWORD mymaxtime; /* max. Laufzeit zu einem Ziel */
#define autoqual 10
extern UWORD l3rtt_time; /* Uhr fuer L3-RTT Berechnung */
extern int num_nodes_max; /* bisher max. registrierte Nodes */
extern LHEAD l3rxfl; /* Level3 empfangene Frames */
extern LHEAD l3txl; /* Level3 zu senddende Frames */
extern MBHEAD *aliasbp; /* Alias-Liste fuer Flexnet */
/****************************************************************************/
/*** Variable fuer Level 4 ***/
extern UWORD trawir; /* Level4 vorgeschlagene Fenstergr. */
extern LHEAD l4rxfl; /* fuer Level4 eingegangene Frames */
extern UBYTE l4hdr0; /* Layer4 Header, Byte 1 */
extern UBYTE l4hdr1; /* Layer4 Header, Byte 2 */
extern UBYTE l4hdr2; /* Layer4 Header, Byte 3 */
extern UBYTE l4hdr3; /* Layer4 Header, Byte 4 */
extern UBYTE l4hdr4; /* Layer4 Header, Byte 5 */
extern UBYTE l4opco; /* Layer4 Opcode, Flags */
extern UBYTE l4pidx; /* Layer4 Antwort, Partnerindex */
extern UBYTE l4pcid; /* Layer4 Antwort, Partner-ID */
extern UBYTE l4ahd2; /* Layer4 Antwort, Byte 2 */
extern UBYTE l4ahd3; /* Layer4 Antwort, Byte 3 */
extern UBYTE l4aopc; /* Layer4 Antwort, Opcode */
extern UBYTE nmbcir; /* Anzahl aktiver Level-4-Circuits */
extern UBYTE nmbcir_max; /* Maximalanzahl der Level-4-Circuits */
extern const char *typtbl;
extern CIRBLK *cirtab; /* Circuit Tabelle */
extern CIRBLK *cirpoi; /* Pointer in Circuit Tabelle */
/************************************************************************/
/*** Variable fuer Level 7 */
extern char *clipoi; /* Pointer in CLI Zeile */
extern char clilin[256]; /* Zeile fuer CLI */
extern char usrcal[L2IDLEN]; /* Call des aktuellen Users */
extern char ncall[L2IDLEN]; /* Call des Nachbarn */
extern char ndigi[L2VLEN+1]; /* Digiliste zum Nachbarn */
#ifdef CONNECTMOD_SET_NODE
extern char updigi[L2IDLEN +1]; /* Einstiegsknoten vom aktuellen User */
#endif /* CONNECTMOD_SET_NODE */
extern UBYTE nport; /* Port des Nachbarn */
extern WORD clicnt; /* Zaehler fuer Zeichen in CLI Zeile */
extern UWORD paswle; /* Laenge des Passworts */
extern char paswrd[];
#ifndef TIMEOUT_MANUELL
#define ininat 3600
#endif /* TIMEOUT_MANUELL */
extern UWORD conctl; /* congestion control */
extern UWORD save_timer; /* automatisches Speichern Configuration */
extern UWORD nquali; /* Qualitaet des Knotens */
extern WORD tic1s; /* Zaehler fuer 100 x 10 ms = 1 s */
extern PORTINFO portpar[L2PNUM];/* Konfiguration der KISS-TNC's */
extern LHEAD usccpl; /* Kopf der CCP-User Liste */
extern LHEAD userhd; /* Kopf der User Liste */
extern USRBLK *userpo; /* Pointer in User Liste */
extern LHEAD cq_user; /* Liste User im CQ-Modus */
extern LHEAD cq_statl; /* Connect-Meldungen bei CQ */
extern PTCENT *ptctab; /* Patchcord Tabelle */
/************************************************************************/
/*** Variable fuer Host-Interface */
extern LHEAD smonfl;
extern LHEAD statml;
extern int monlin;
extern int stalin;
extern int numhsts;
extern BOOLEAN ishmod;
extern int Ypar;
extern MBHEAD *mifmbp;
extern char *blipoi; /* Pointer in bline */
extern char blixfl; /* X-on / X-off, Hostinterface */
extern BOOLEAN hostco; /* Flag Hostconnect erlaubt j/n */
extern WORD blicnt; /* zaehlt Zeichen in bline */
extern HOSTUS *hstubl; /* Kontrollblock fuer Host-User */
extern HOSTUS *hstusr; /* Pointer auf akt. Host User */
extern STAT mh[MAXSTAT];
extern PORTSTAT portstat[L2PNUM];
extern char textpath[];
extern char confpath[];
extern char msgpath[];
extern char textcmdpath[];
extern char userexepath[];
extern char sysopexepath[];
extern char pacsatpath[];
extern char exename[];
extern FILE *loadfp;
extern char loadname[];
extern char loadtmp[];
extern char anycall[];
extern char nullid[];
#define nulide nullid
extern char cqdest[]; /* Call fuer CQ-Ruf */
extern char dmmsg[]; /* Disconnect Meldung */
extern char conmsg[]; /* Connect Meldung */
extern char recmsg[]; /* Reconnect Meldung */
extern char failmsg[]; /* Failure with Meldung */
extern char invcalmsg[]; /* Invalid Call Meldung */
extern char promptstr[];
extern char pass[];
extern PARAM partab[];
extern int partablen;
/* Befehlstabelle */
extern COMAND cmdtab[];
extern COMAND syscmdtab[];
extern L1MODETAB l1modetab[];
extern HOSTCMD hostcmdtab[];
extern FILE *consfile;
extern WORD startup_running;
extern MHTAB l2heard;
extern MHTAB l3heard;
extern time_t start_time;
extern time_t clear_time;
extern UWORD tkbaud;
extern int tkcom;
extern ULONG bytecnt;
extern ULONG checksum;
extern UWORD crc;
extern UWORD crctab[];
extern UWORD syspro_flag;
extern char signon[];
extern char version[];
extern char cfgfile[];
#ifdef AUTO_UPDATE
extern char oldcfgfile[];
#endif
extern ULONG lastic;
extern volatile ULONG tic10;
extern UBYTE port_status;
extern SUSPEND sustab[];
extern UWORD dmagic;
#define MAGIC_L2PROFILE 2205 /* Par 1 = 2205 -> L2 Traffic */
/* Definitionen for PP-Convers */
extern WORD cvs_pc;
extern time_t currtime;
extern time_t boottime;
extern const char *convtype;
extern const char *myfeatures;
extern char *myhostname;
extern char myrev[];
extern char timestamp[];
extern PERMLINK *permarray[MAXCVSHOST];
extern CONNECTION *connections;
extern DESTINATION *destinations;
extern CHANNEL *channels;
extern LONG rounds_pro_sec; /* Anzahl Rounds/Sekunde */
extern LONG rounds_max_sec; /* Maximale Anzahl */
extern LONG rounds_min_sec; /* Minimale Anzahl */
extern LONG rounds_count; /* Zaehler fuer Rounds */
extern BEACON beacon[L2PNUM];
extern time_t t;
#if defined(CRASHDEBUG) || defined(__LINUX__)
extern char *wowarich;
extern char *wowarich2;
#endif
#ifdef PACSAT
extern WORD pacsat_enabled[];
extern UWORD pacsat_timer;
extern UWORD pacsat_frames;
extern UWORD pacsat_free;
extern LONG first_fid;
extern LONG last_fid;
extern char pacsatid[];
#endif
extern unsigned int_level; /* Interrupt-Vertiefungs-Level */
extern ULONG MEMORY_NEEDED; /* fuer Message Buffer */
extern UWORD proto;
extern char loginstr[];
extern char infostr[];
extern char author[];
extern BOOLEAN tnnb_aktiv;
extern time_t sys_time;
extern struct tm *sys_localtime;
#ifdef GRAPH
extern TGRAPH graph;
#endif
#ifdef AXIPR_HTML
extern char htmlpath[];
#endif
#ifdef MH_LISTE
extern UWORD MHdefault;
extern UWORD MHlen;
#endif
#ifdef TIMEOUT_MANUELL
extern UWORD ininat;
#endif /* TIMEOUT_MANUELL */
#ifdef HOSTMYCALL
extern char hostuserid[];
#endif
#ifdef BEACON_STATUS
extern UWORD statustim;
#endif
#ifdef AXIPR_UDP
extern BOOLEAN LookAX25IP; /* Wir durfen keine Frame lesen. */
#endif /* AXIPR_UDP */
#ifdef DEBUG_MODUS
extern char lastbuf[];
extern char *lastfunc;
#endif /* DEBUG_MODUS */
extern BOOLEAN bVerbose;
/* End of global.h */

100
include/host.h Executable file
View file

@ -0,0 +1,100 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/host.h (maintained by: DF6LN) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
#define HBUFLEN 256 /* Anzahl Zeichen maximal Hosteingabebuffer */
/* "host mode response", */
/* Hostmodeframe-Antworttypen : */
#define HMRINFO 0 /* "info" */
#define HMRSMSG 1 /* "success message" */
#define HMRFMSG 2 /* "failure message" */
#define HMRSTAT 3 /* "status" */
#define HMRMONH 4 /* "monitor header" */
#define HMRMONIH 5 /* "monitor I frame header" */
#define HMRMONI 6 /* "monitor I frame" */
#define HMRCONI 7 /* "connected I frame" */
/* "host mode state", */
/* Hostmode-Eingabezustaende : */
#define HMSCHNL 0 /* naechstes Eingabebyte ist Kanal */
#define HMSCMD 1 /* naechstes Eingabebyte ist Kommando */
#define HMSLEN 2 /* naechstes Eingabebyte ist Laenge */
#define HMSINPUT 3 /* naechste Eingabebytes sind Eingabetext */
/* Zpar-Flags : */
#define FZFLOW 0x01 /* Flow ein */
#define FZXONOFF 0x02 /* XON/XOFF ein */
/* ASCII-Kontrollzeichen : */
#define BELL 0x07 /* Klingel */
#define BS 0x08 /* Backspace */
#define TAB 0x09 /* Tab */
#define LF 0x0A /* Linefeed */
#define CR 0x0D /* Carriage Return */
#define CONTROLR 0x12 /* DC2 */
#define CONTROLU 0x15 /* NAK */
#define CONTROLX 0x18 /* CAN */
#define DEL 0x7F /* Delete */
/* Messagebuffer-Anwahl : */
#define MBINFO 0 /* alle Info-Pakete */
#define MBSTATUS 1 /* alle Statuspakete */
#define MBALL 2 /* alle Pakete */
#define HMEALC 0 /* Fehlermeldungen fuer rsperr */
#define HMEIPA 1
#define HMEICS 2
#define HMELIG 3
#define HMEFAO 4
#define HMEFNO 5
#define HMENWC 6
#define HMEPOR 7
/* End of include/host.h */

145
include/icmp.h Executable file
View file

@ -0,0 +1,145 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/icmp.h (maintained by: DG1KWA) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
/* SNMP MIB variables, used for statistics and control. See RFC 1066 */
#define icmpInMsgs Icmp_mib[1].value.integer
#define icmpInErrors Icmp_mib[2].value.integer
#define icmpInDestUnreachs Icmp_mib[3].value.integer
#define icmpInTimeExcds Icmp_mib[4].value.integer
#define icmpInParmProbs Icmp_mib[5].value.integer
#define icmpInSrcQuenchs Icmp_mib[6].value.integer
#define icmpInRedirects Icmp_mib[7].value.integer
#define icmpInEchos Icmp_mib[8].value.integer
#define icmpInEchoReps Icmp_mib[9].value.integer
#define icmpInTimestamps Icmp_mib[10].value.integer
#define icmpInTimestampReps Icmp_mib[11].value.integer
#define icmpInAddrMasks Icmp_mib[12].value.integer
#define icmpInAddrMaskReps Icmp_mib[13].value.integer
#define icmpOutMsgs Icmp_mib[14].value.integer
#define icmpOutErrors Icmp_mib[15].value.integer
#define icmpOutDestUnreachs Icmp_mib[16].value.integer
#define icmpOutTimeExcds Icmp_mib[17].value.integer
#define icmpOutParmProbs Icmp_mib[18].value.integer
#define icmpOutSrcQuenchs Icmp_mib[19].value.integer
#define icmpOutRedirects Icmp_mib[20].value.integer
#define icmpOutEchos Icmp_mib[21].value.integer
#define icmpOutEchoReps Icmp_mib[22].value.integer
#define icmpOutTimestamps Icmp_mib[23].value.integer
#define icmpOutTimestampReps Icmp_mib[24].value.integer
#define icmpOutAddrMasks Icmp_mib[25].value.integer
#define icmpOutAddrMaskReps Icmp_mib[26].value.integer
#define NUMICMPMIB 26
/* Internet Control Message Protocol */
/* Message types */
#define ICMP_ECHO_REPLY 0 /* Echo Reply */
#define ICMP_DEST_UNREACH 3 /* Destination Unreachable */
#define ICMP_QUENCH 4 /* Source Quench */
#define ICMP_REDIRECT 5 /* Redirect */
#define ICMP_ECHO 8 /* Echo Request */
#define ICMP_TIME_EXCEED 11 /* Time-to-live Exceeded */
#define ICMP_PARAM_PROB 12 /* Parameter Problem */
#define ICMP_TIMESTAMP 13 /* Timestamp */
#define ICMP_TIME_REPLY 14 /* Timestamp Reply */
#define ICMP_INFO_RQST 15 /* Information Request */
#define ICMP_INFO_REPLY 16 /* Information Reply */
#define ICMP_ADDR_MASK 17 /* Address mask request */
#define ICMP_ADDR_MASK_REPLY 18 /* Address mask reply */
#define ICMP_TYPES 19
/* Internal format of an ICMP header */
typedef struct icmp_ {
char type;
char code;
union icmp_args {
int mtu;
int unused;
unsigned char pointer;
ipaddr address;
struct {
int id;
int seq;
} echo;
} args;
unsigned checksum;
} ICMP ;
#define ICMPLEN 8 /* Length of ICMP header on the net */
#define NULLICMP (union icmp_args *)NULL
/* Destination Unreachable codes */
#define ICMP_NET_UNREACH 0 /* Net unreachable */
#define ICMP_HOST_UNREACH 1 /* Host unreachable */
#define ICMP_PROT_UNREACH 2 /* Protocol unreachable */
#define ICMP_PORT_UNREACH 3 /* Port unreachable */
#define ICMP_FRAG_NEEDED 4 /* Fragmentation needed and DF set */
#define ICMP_ROUTE_FAIL 5 /* Source route failed */
#define NUNREACH 6
/* Time Exceeded codes */
#define ICMP_TTL_EXCEED 0 /* Time-to-live exceeded */
#define ICMP_FRAG_EXCEED 1 /* Fragment reassembly time exceeded */
#define NEXCEED 2
/* Redirect message codes */
#define ICMP_REDR_NET 0 /* Redirect for the network */
#define ICMP_REDR_HOST 1 /* Redirect for the host */
#define ICMP_REDR_TOS 2 /* Redirect for Type of Service, or-ed with prev */
#define NREDIRECT 3
void icmp_output(IP *,MBHEAD *,unsigned ,unsigned ,union icmp_args *);
MBHEAD *htonicmp(ICMP *,MBHEAD *);
void icmp_input(IP *,MBHEAD *);
/* End of $RCSfile$ */

354
include/ip.h Executable file
View file

@ -0,0 +1,354 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/ip.h (maintained by: DG1KWA) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
/* IP protocol field values */
#define ICMP_PTCL 1 /* Internet Control Message Protocol */
#define TCP_PTCL 6 /* Transmission Control Protocol */
#define UDP_PTCL 17 /* User Datagram Protocol */
#define RSPF_PTCL 73 /* Radio Shortest Path First Protocol */
#define MAXTTL 255 /* Maximum possible IP time-to-live value */
/* DoD-style precedences */
#define ROUTINE 0x00
#define PRIORITY 0x20
#define IMMEDIATE 0x40
#define FLASH 0x60
#define FLASH_OVER 0x80
#define CRITIC 0xa0
#define INET_CTL 0xc0
#define NET_CTL 0xe0
/* Amateur-style precedences */
#define AM_ROUTINE 0x00
#define AM_WELFARE 0x20
#define AM_PRIORITY 0x40
#define AM_EMERGENCY 0x60
/* Class-of-service bits */
#define LOW_DELAY 0x10
#define THROUGHPUT 0x08
#define RELIABILITY 0x04
/* IP TOS fields */
#define PREC(x) ((x)>>5 & 7)
#define DELAY 0x10
#define THRUPUT 0x8
#define RELIABLITY 0x4
/* structure for an ip address (long) */
typedef unsigned long ipaddr;
/* Format of a MIB entry for statistics gathering */
typedef struct mib_entry {
const char *name;
struct {
unsigned int integer;
} value;
} MIB_ENTRY;
#define TLB 30 /* Default reassembly timeout, sec */
#define IPVERSION 4 /* IP-Version 4.0 */
#define IP_MAXOPT 40 /* Largest option field, bytes */
/* SNMP MIB variables, used for statistics and control. See RFC 1066 */
#define ipForwarding Ip_mib[1].value.integer
#define ipDefaultTTL Ip_mib[2].value.integer
#define ipInReceives Ip_mib[3].value.integer
#define ipInHdrErrors Ip_mib[4].value.integer
#define ipInAddrErrors Ip_mib[5].value.integer
#define ipForwDatagrams Ip_mib[6].value.integer
#define ipInUnknownProtos Ip_mib[7].value.integer
#define ipInDiscards Ip_mib[8].value.integer
#define ipInDelivers Ip_mib[9].value.integer
#define ipOutRequests Ip_mib[10].value.integer
#define ipOutDiscards Ip_mib[11].value.integer
#define ipOutNoRoutes Ip_mib[12].value.integer
#define ipReasmTimeout Ip_mib[13].value.integer
#define ipReasmReqds Ip_mib[14].value.integer
#define ipReasmOKs Ip_mib[15].value.integer
#define ipReasmFails Ip_mib[16].value.integer
#define ipFragOKs Ip_mib[17].value.integer
#define ipFragFails Ip_mib[18].value.integer
#define ipFragCreates Ip_mib[19].value.integer
#define NUMIPMIB 19
/* IP header, INTERNAL representation */
typedef struct ip_struct {
unsigned char version; /* IP version number */
unsigned char ihl; /* Internet Header Length */
unsigned char tos; /* Type of service */
unsigned length; /* Total length */
unsigned id; /* Identification */
unsigned offset; /* Fragment offset in bytes */
struct {
unsigned char df; /* Don't fragment flag */
unsigned char mf; /* More Fragments flag */
} flags;
unsigned char ttl; /* Time to live */
unsigned char protocol; /* Protocol */
unsigned checksum; /* Header checksum */
ipaddr source; /* Source address */
ipaddr dest; /* Destination address */
unsigned char options[IP_MAXOPT];/* Options field */
unsigned optlen; /* Length of options field, bytes */
} IP;
#define TCP_MAXOPT 4 /* max Anzahl als Option-Bytes */
typedef unsigned long SEQ;
typedef unsigned long ACK;
/* TCP header */
typedef struct tcp_struct {
unsigned srcPort; /* Source-Port */
unsigned dstPort; /* Destination-POrt */
SEQ seqnum; /* Sequence Number */
ACK acknum; /* Acknowledgement Number */
unsigned char data_offset; /* Data Offset 4 Bits */
unsigned char res; /* reserviert */
unsigned flags; /* Flags */
unsigned window; /* Window */
unsigned checksum; /* Checksum */
unsigned urgentPointer; /* Urgent Pointer */
unsigned char options[TCP_MAXOPT]; /* Options and Padding */
} TCP;
/* UDP header */
typedef struct udp_struct {
unsigned srcPort;
unsigned dstPort;
unsigned length;
unsigned checksum;
} UDP;
#define NULLIP (IP *)NULL
#define IPLEN 20 /* Length of standard IP header */
/* Fields in option type byte */
#define OPT_COPIED 0x80 /* Copied-on-fragmentation flag */
#define OPT_CLASS 0x60 /* Option class */
#define OPT_NUMBER 0x1f /* Option number */
/* IP option numbers */
#define IP_EOL 0 /* End of options list */
#define IP_NOOP 1 /* No Operation */
#define IP_SECURITY 2 /* Security parameters */
#define IP_LSROUTE 3 /* Loose Source Routing */
#define IP_TIMESTAMP 4 /* Internet Timestamp */
#define IP_RROUTE 7 /* Record Route */
#define IP_STREAMID 8 /* Stream ID */
#define IP_SSROUTE 9 /* Strict Source Routing */
/* Timestamp option flags */
#define TS_ONLY 0 /* Time stamps only */
#define TS_ADDRESS 1 /* Addresses + Time stamps */
#define TS_PRESPEC 3 /* Prespecified addresses only */
/* structure for routing tables */
typedef struct iproute
{
struct iproute *nextip;
struct iproute *previp;
#ifdef BUFFER_DEBUG
UBYTE owner; /* Muss an 9. Bytestelle stehen */
#endif
ipaddr dest;
ipaddr gateway;
unsigned metric;
unsigned timer;
unsigned char bits;
#ifdef __WIN32__
unsigned char Interface;
#else
unsigned char interface;
#endif
unsigned char flags;
#define RTDYNAMIC 0x01 /* dynamic ip-address */
unsigned char spare_byte;
UBYTE port;
BOOLEAN automatic_flag;
} IP_ROUTE;
#define NULLROUTE (IP_ROUTE *)NULL
/* Cache for the last-used routing entry, speeds up the common case where
* we handle a burst of packets to the same destination
*/
/*typedef struct rt_cache {
ipaddr target;
IP_ROUTE *route;
} RT_CACHE;
*/
typedef struct arp_tab
{
struct arp_tab *nextar;
struct arp_tab *prevar;
#ifdef BUFFER_DEBUG
UBYTE owner; /* Muss an 9. Bytestelle stehen */
#endif
ipaddr dest;
unsigned timer;
char dgmode;
UBYTE hwtype;
char publish_flag;
char state;
char callsign[7];
char digi[15];
WORD port;
BOOLEAN automatic_flag;
} ARP_TAB;
#define NULLARP (ARP_TAB *)NULL
#define ARP_NETROM 0
#define ARP_AX25 3
#define MAXHWALEN 10
#define IPTYPE 42
#define ARP_REQUEST 1
#define ARP_REPLY 2
#define REVARP_REQUEST 3
#define REVARP_REPLY 4
typedef struct arp
{
unsigned hardware;
unsigned protocol;
unsigned char hwalen;
unsigned char pralen;
unsigned opcode;
unsigned char shwaddr[MAXHWALEN];
ipaddr sprotaddr;
unsigned char thwaddr[MAXHWALEN];
ipaddr tprotaddr;
} ARP;
#define NULLBUF ( void * )NULL
/* Pseudo-header for TCP and UDP checksumming */
typedef struct pseudo_header {
ipaddr source; /* IP source */
ipaddr dest; /* IP destination */
unsigned char protocol; /* Protocol */
unsigned length; /* Data field length */
} PSEUDO_HEADER;
#define NULLHEADER (struct pseudo_header *)NULL
#ifdef IPROUTE
/* src/l7ip.c */
void ccpipr(void);
void showroute(IP_ROUTE *,MBHEAD *);
void show_ip_addr(ipaddr,MBHEAD *);
BOOLEAN get_ip_addr(ipaddr *,WORD *,char **);
void ccparp(void);
void showarp(ARP_TAB *,MBHEAD *);
void ccpipa(void);
void ccpipb(void);
void ccpips(void);
BOOLEAN rt_add(ipaddr,unsigned int ,ipaddr,int ,unsigned int ,unsigned int ,int, BOOLEAN);
BOOLEAN route_find(IP_ROUTE **,ipaddr *,ipaddr,unsigned int );
BOOLEAN rt_drop(ipaddr,unsigned int, BOOLEAN);
BOOLEAN arp_add(ipaddr, WORD, char *, const char *, unsigned int,
unsigned int, BOOLEAN, BOOLEAN);
BOOLEAN find_arp(ARP_TAB * *,ipaddr, WORD );
BOOLEAN arp_drop(ipaddr, WORD, BOOLEAN);
void arpsrv(void);
void ccpping(void);
BOOLEAN l2toip(WORD);
/* src/iproute.c */
void ipinit(void );
void ipserv(void );
void ip_route(MBHEAD * );
void arp_service(MBHEAD *);
IP_ROUTE *rt_find(ipaddr);
void nr_iface(MBHEAD *,ipaddr );
void l2_iface(MBHEAD *,unsigned int ,ipaddr,unsigned int );
ARP_TAB *res_arp(ipaddr, unsigned int );
MBHEAD *htonip(IP *,MBHEAD *, BOOLEAN );
int ip_send(ipaddr,ipaddr,unsigned ,unsigned ,unsigned ,MBHEAD *,unsigned short ,unsigned short ,unsigned );
unsigned short eac(long );
unsigned short cksum(PSEUDO_HEADER *,MBHEAD *,unsigned short );
void arp_request(ipaddr,unsigned,unsigned);
void arp_send( unsigned, char *);
void ccp_ip_help(ipaddr *, const char *);
BOOLEAN pingem(ipaddr target,int seq,int id, int len, char *opt);
#define NR4_OP_PID 0
#define NR_PROTO_IP 0x0c
typedef struct ipportpar {
WORD ipMode; /* Mode-Flags fuer diesen Port */
#define ARP_OK 0x0001 /* ARP erlaubt */
#define IP_FORWARDING 0x0002 /* das Weiterleiten von IP-Frames */
WORD mtu; /* Maximale Blockgroesse */
} IPPORTPAR;
extern LHEAD arprxfl; /* Empfangene ARP-Frames */
extern IPPORTPAR IPpar[]; /* fuer jeden L2-Port + NETROM */
#define NETROM_PORT L2PNUM
#ifdef KERNELIF
#define KERNEL_PORT L2PNUM + 1
#endif
#define is_my_ip_addr( address ) ( address == my_ip_addr )
#define is_broadcast_address( address ) ( bcast_ip_addr != 0 && bcast_ip_addr == address )
#else
#define l2toip(x) FALSE
#endif /* IPROUTE */
/* End of $RCSfile$ */

72
include/ipv.h Executable file
View file

@ -0,0 +1,72 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/ipv.h (maintained by: DG1KWA) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
/* SNMP MIB variables, used for statistics and control. See RFC 1066 */
extern struct mib_entry Ip_mib[NUMIPMIB+1];
extern struct mib_entry Icmp_mib[NUMICMPMIB+1];
extern LHEAD IP_Routes; /* Routing table */
extern LHEAD iprxfl;
extern LHEAD rprxfl;
extern LHEAD Arp_tab;
extern ipaddr my_ip_addr;
extern ipaddr bcast_ip_addr;
extern int my_ip_bits;
extern IP ip; /* structure for decoded ip header */
extern unsigned short id_cntr; /* datagram serial number for ip_send */
extern struct arp arp;
extern UWORD ARPrunning;
extern UWORD ARPtimer;
extern UWORD ARPcounter;
/* End of ipv.h */

31
include/l1attach.h Executable file
View file

@ -0,0 +1,31 @@
typedef struct attprt /* Attach-Port-Struktur */
{
const char *attstr; /* Device-Name */
int attnum; /* Device-Nummer */
} ATTPRT;
typedef struct atttyp /* Attach-KissType-Struktur */
{
const char *attstr; /* KissType */
int attnum; /* Nummer */
} ATTTYP;
unsigned short my_udp;
BOOLEAN tokenflag;
#ifdef VANESSA
extern BOOLEAN van_test(int);
#endif
#ifdef SIXPACK
int iDescriptor;
#endif /* SIXPACK */
void ccpattach(void);
void ccpdetach(void);
void dump_attach(MBHEAD *mbp);
void tf_set_kiss(DEVICE *);
/* End of include/l1attach.h */

36
include/l1httpd.h Executable file
View file

@ -0,0 +1,36 @@
#ifdef L1TCPIP
#define L1HTTPD /* HTTPD-Interface. */
#define KISS_HTTPD 23 /* HTTPD KISS-Types */
#define HTP_ID 1 /* Interface-ID HTTPD. */
#define DEFAULT_HTTPD_PORT 10080 /* Default Port 10080. */
#define HTTPDLOG "httpd.log" /* Logdatei zum mit schreiben von */
/* System- und Errormeldungen. */
#define HEADLEN 1024 /* Maximale HTML-Headerlaenge */
#define TCP_NULL 0 /* leer/dummy */
#define TCP_URI 1 /* html laden. */
#define TCP_BUSY 2 /* Sender Busy. */
#define TCP_CMD 3 /* Befehl ausfuehren */
#define TCP_BIN 4 /* Binaertransfer . */
#define MIME_JPG "image/jpeg"
#define MIME_GIF "image/gif"
#define MIME_TXT "text/html"
#define MIME_BIN "application/x-binary"
#define MIME_WAV "audio/wav"
#define MIME_MP3 "audio/x-mpeg"
extern TRILLIAN GetContensHTP(char); /* Aktuelle Zeichen auswerten. */
extern void ccphttpd(void); /* HTTPD-Server Einstellung aendern/setzen. */
extern void TcpipHttpd(MBHEAD *);
extern void putv( MBHEAD *, int); /* Konvertierung IBM/HTML. */
extern BOOLEAN load_uri(void); /* Externe HTML-Datei laden. */
extern void PutHtmlEnd(void);
#endif /* L1TCPIP */
/* End of include/l1httpd.h */

70
include/l1ipconv.h Executable file
View file

@ -0,0 +1,70 @@
#ifdef L1TCPIP
#define KISS_IPCONV 24 /* IPConv KISS-Types */
#define CVS_ID 2 /* Interface-ID IPCONV. */
#define CP_IPCONV 85
#define DEFAULT_IPCONV_PORT 13600 /* Default Port. */
#define IPCONV_TXT "ipconv.txt" /* Fuer Login-Prompt. */
#define IPCONVLOG "ipconv.log" /* Logdatei zum mit schreiben von */
/* System- und Errormeldungen. */
#define MAX_ROUTEN 10 /* Max. 10 Eintraege. */
struct iptbl /* TBL fuer IP-Convers-Links. */
{
char name[L2IDLEN];
ULONG ipaddr;
UBYTE hostname[64 + 1];
UWORD port;
UWORD l2port;
BOOLEAN linkflag;
};
struct iptbl ip_tbl[MAX_ROUTEN];
/* Anzahl der aktuellen IP-CONVERS-Routen auf 0 setzen. */
extern int ip_tbl_top;
extern TRILLIAN GetContensCVS(char); /* Aktuelle Zeichen auswerten. */
extern void ccpipconv(void); /* IPConv-Server Einstellung aendern/setzen. */
extern void IPConvLogin(void);
#ifdef OS_IPLINK
extern int IPConvSearch(char *); /* Rufzeichen in der IPC-TBL suchen. */
extern void IPConvAddTBL(char *, /* IPConvers-Link eintragen. */
unsigned char *,
struct hostent *,
unsigned short,
BOOLEAN);
extern int IPConvConnect(char *,/* Ein Connect zum TCPIP-Nachbarn aufbauen. */
char *,
BOOLEAN);
extern BOOLEAN IPConvGetName(WORD *,
char **,
BOOLEAN,
char *);
extern BOOLEAN IPConvGetIP(WORD *,
char **,
unsigned char *);
extern int IPConvIS(char *,
DEST *);
extern int IPConvConnectOS(char *,
char *,
BOOLEAN);
extern void IPConvDump(MBHEAD *);
extern BOOLEAN IPConvDelTBL(char *);
#endif /* OS_IPLINK */
#endif /* L1TCPIP */
/* End of include/l1ipconv.h */

32
include/l1irc.h Executable file
View file

@ -0,0 +1,32 @@
#ifdef L1IRC
#define KISS_IRC 25 /* IRC KISS-Types */
#define IRC_ID 3 /* Interface-ID IRC. */
#define DEFAULT_IRC_PORT 13601 /* Default Port. */
#define IRC_TXT "irc.txt" /* Fuer Login-Prompt. */
#define IRCLOG "irc.log" /* Logdatei zum mit schreiben von */
#define ISO_STRIPED 1
/* Channel schliessen. */
extern void leave_command(CONNECTION *);
/* Nachricht verschicken, */
extern void msg_command(CONNECTION *);
extern void links_command(CONNECTION *);
extern void help_command(CONNECTION *);
extern void SendIrcNick(CONNECTION *);
/* Username weiterleiten. */
extern void IrcLinkUser(char *);
/* Nickname weiterleiten. */
extern void IrcLinkNick(char *);
extern void ProcessIrcInput(char *, CONNECTION *);
extern void ccpirc(void); /* IRC-Server Einstellung aendern/setzen. */
#endif /* L1IRC */

201
include/l1tcpip.h Executable file
View file

@ -0,0 +1,201 @@
#ifdef L1TCPIP
#ifdef L1TELNET
#include "l1telnet.h" /* Telnet-Interface. */
#endif /* L1TELNET */
#ifdef L1HTTPD
#include "l1httpd.h" /* HTTPD-Interface. */
#endif /* L1HTTPD */
#ifdef L1IPCONV
#include "l1ipconv.h" /* IPCONVERS-Interface. */
#endif /* L1IPCONV */
#ifdef L1IRC
#include "l1irc.h" /* IRC Chat-Server */
#endif /* L1IRC */
#define TXLEN 2048 /* Maximale TX-Packetlaenge */
#define RXLEN 2048 /* Maximale.RX-Packetlaenge */
#define CE_TCPIP 11 /* Fuer Meckermeldung. */
#define IPADDR 16 /* Max.-Laenge IP-Adresse. */
#define TCP_USER 8 /* TCPIP-User/Link. */
#define MAXTCPIP 32 /* Max: Anzahl der TCPIP-User/Link. */
#define HNLEN 64 /* Maximale laenge eines Hostnamen. */
#define T3PARA 60 /* T3-Timer abgelaufen, wuerd geprueft ob */
/* der Socket noch aktiv ist. */
#define MAXINTERFACE 4 /* Maximale Anzahl aller TCPIP-Interface. */
#define TCP_TX_FREE 0 /* Sender ist frei. */
#define TCP_TX_BUSY 1 /* Sender ist belegt. */
#define INT_STACK 1 /* Interner TCP-Stack. */
extern UWORD nmbtcp; /* Anzahl aktiver TCPIP-Links. */
extern UWORD nmbtcp_max; /* Maximale anzahl der TCPIP-Links */
typedef struct
{
UWORD Interface; /* Nummer vom Interface. */
BOOLEAN actively; /* Interface aktiv/deaktiv. */
UWORD tcpport; /* TCP-Port. */
int OsSock; /* OS-Socket. */
int ISock; /* Interner Socket. */
int l2port; /* L2-Port vom Interface. */
int log; /* Loglevel. */
char name[10 + 1]; /* Interfacename. */
} T_INTERFACE;
extern T_INTERFACE ifp[MAXINTERFACE];
typedef struct ReadRX /* Empfangsbuffer. */
{
struct ReadRX *next; /* Naechster Listeneintrag */
struct ReadRX *prev; /* Vorheriger Listeneintra */
#ifdef BUFFER_DEBUG
UBYTE owner; /* Muss an 9. Bytestelle stehen */
#endif
MBHEAD *Data; /* RX-Buffer. */
int Sock;
UWORD Interface; /* TCPIP-Interface. */
UWORD Mode; /* Stack-Mode. */
} READRX;
typedef struct SendTX /* Sendebuffer. */
{
struct SendTX *next; /* Naechster Listeneintrag */
struct SendTX *prev; /* Vorheriger Listeneintra */
#ifdef BUFFER_DEBUG
UBYTE owner; /* Muss an 9. Bytestelle stehen */
#endif
MBHEAD *Data; /* TX-Buffer. */
int Sock;
UWORD Interface; /* TCPIP-Interface. */
UWORD Mode; /* Stack-Mode. */
} SENDTX;
typedef struct TCPIP /* TCPIP-User/Link */
{
struct TCPIP *next; /* Naechster Listeneintrag */
struct TCPIP *prev; /* Vorheriger Listeneintra */
#ifdef BUFFER_DEBUG
UBYTE owner; /* Muss an 9. Bytestelle stehen */
#endif
char ip[IPADDR + 1]; /* IP-Adresse */
char rxbuf[RXLEN + 1]; /* RX-Buffer recv */
char txbuf[TXLEN + 1]; /* TX-Buffer send */
char cmd[TXLEN + 1]; /* Befehlszeile vom User. */
int sock; /* Socket. */
BOOLEAN mode; /* Socket-Mode. (OS-Socket / Inter. Socket)*/
char Upcall[L2IDLEN]; /* Updown Login Rufzeichen */
char Downcall[L2IDLEN]; /* Down Login Rufzeichen */
char disflg; /* Flag: Verbindung trennen. */
UWORD port; /* Einstiegsport (0..15) */
UWORD noacti; /* Timer fuer keine Aktivitaet */
UWORD T3; /* Timer T3, "inactive link timer" */
UWORD inlin; /* eingelaufene Zeilen */
UWORD outlin; /* auszugebende Zeilen */
UWORD Interface; /* Aktuelle Interface. */
int activ; /* Interface aktiv/deaktiv. */
int login; /* Ist User angemeldet. */
int cmdlen; /* Laenge der Befehlszeile. */
int RecvLen; /* Rueckgabewert fuer recv */
int rxc; /* Zaehler fuer RX-BUFFER */
int txc; /* Zaehler fuer TX-BUFFER */
int sum; /* Zaehler fuer gesendete.Zeichen. */
#ifdef L1HTTPD
UBYTE status; /* USER-Status */
int http; /* Conversion IBM -> HTML. */
FILE *fp; /* Datei laden. */
#endif /* L1HTTPD */
#ifdef L1IPCONV
BOOLEAN CVSlink; /* Linkpartner. */
BOOLEAN Intern; /* Connect Intern. */
#ifdef L1IRC
BOOLEAN IrcMode; /* irc-client. */
#endif /* L1IRC */
#endif /* L1IPCONV */
BOOLEAN LoginPrompt; /* Prompt senden. */
BOOLEAN cr; /* Return durchlaufen. */
WORD state; /* Connected, Disconnected setzen. */
LHEAD inbuf; /* Listenkopf Eingabebuffer */
LHEAD outbuf; /* Listenkopf Ausgabebuffer */
char txstatus; /* Sender frei/busy. */
} TCPIP;
extern TCPIP *tcptbl; /* Zeiger auf die TBL. */
extern TCPIP *tcppoi; /* Zeiger auf den aktuellen TCPIP-User. */
extern LHEAD tcpfrel; /* Liste der freien Linkbloecke. */
extern LHEAD tcpactl; /* Liste der aktiven Linkbloecke. */
extern LHEAD rxflRX; /* Empfangsliste */
extern LHEAD rxflTX; /* Sendeliste */
extern int tcp_tbl_top; /* Anzahl der aktuellen TCP-User. */
extern void TcpipSRV(void); /* TCPIP-Service. */
extern void InitTCP(void); /* TCPIP Initialisieren. */
extern void InitIFC(void); /* Interface Initialisieren. */
extern void L1ExitTCP(WORD); /* TCPIP-Interface schliessen. */
extern void L1ctlTCP(int, int); /* Level 1 Kontrolle */
extern BOOLEAN TcpDCD(int); /* DCD-Status liefern. */
extern BOOLEAN L1InitTCP(UWORD, int, int); /* TCPIP-Port Initialisieren. */
extern void HwstrTCP(UWORD, int, MBHEAD *);/* Portinfo-String (PORT-Befehl)*/
extern int CheckPortTCP(int); /* Pruefe, auf TCP-Port's. */
extern void DumpTCP(MBHEAD *); /* TCPIP-Einstellungen sichern. */
extern BOOLEAN itoTCP(BOOLEAN, MBHEAD *); /* Info vom L7 an TCP-Interf. senden*/
extern void SetDiscTCP(void); /* User hat ein Disconnect eingeleitet. */
extern void TimerTCP(void); /* Noactivity-Timer fuer alle TCPIP Connect's. */
extern int KillTCP(UWORD, char *,WORD); /* TCPIP-User/Link(s) KILLEN. */
extern int ReadSockTCP(void); /* Zeichen vom Socket holen. */
extern BOOLEAN CheckContens(char); /* Pruefe Loginzeichen. */
extern void TcpipRelink(MBHEAD *); /* Eingehende Daten weiterleiten. */
extern MBHEAD *SetBuffer(void); /* Buffer besorgen. */
extern int SetupTCP(char *, unsigned short); /* Sock Initialisieren.*/
T_INTERFACE *SearchIf(UWORD); /* Das gesuchte Interface ermitteln */
/* und den Interfacezeiger setzen. */
extern void MhUpdateTCP(MBHEAD *, /* Buffer */
BOOLEAN); /* Flag fuer RX/TX-Bytes. */
extern BOOLEAN LoginTCP(MBHEAD *);
extern void RelinkTCP(MBHEAD *); /* Packet umhaengen. */
extern void DiscTCP(void); /* Alle Parameter auf default zuruecksetzen */
/* und den User aus der Liste nehmen. */
extern int AddUserTCP(T_INTERFACE *, /* Neue User hinzufuegen, */
unsigned, /* vorrausgesetzt es sind noch */
char *); /* freie Sockets vorhanden. */
extern void SetDefaultWorthTCP(unsigned, /* Defaultwerte setzen. */
char *,
int ,
UWORD ,
BOOLEAN);
extern void WriteLogTCP(BOOLEAN, /* System- und Errormeldungen */
const char *, /* in einer Logdatei schreiben. */
...);
#define T_LOGL1 if(ifpp->log > 0)(void)WriteLogTCP /* System-Meldungen in */
/* einer Logdatei schreiben. */
#define T_LOGL2 if(ifpp->log > 1)(void)WriteLogTCP /* System- und Error- */
/* meldungen in einer Logdatei schreiben. */
#define T_LOGL3 if(ifpp->log > 2)(void)WriteLogTCP /* ALLE Log-Meldungen */
/* schreiben. */
extern T_INTERFACE *SetInterface(UWORD);
#define KISS_TCPIP 22 /* 1. TCPIP-Interface */
/* 22 Telnet */
/* 23 Httpd */
/* 24 IPConv */
/* 25 IRC */
#define KISS_MAX 25 /* letztes Interface */
#endif /* L1TCPIP */
/* End of include/l1tcpip.h */

19
include/l1telnet.h Executable file
View file

@ -0,0 +1,19 @@
#ifdef L1TCPIP
#define L1TELNET /* TELNET-Interface. */
#define KISS_TELNET 22 /* Telnet KISS-Types */
#define TEL_ID 0 /* Interface-ID TELNET. */
#define DEFAULT_TELNET_PORT 10023 /* Default Port 10023. */
#define TELNET_TXT "telnet.txt" /* Fuer Login-Prompt. */
#define TELNETLOG "telnet.log" /* Logdatei zum mit schreiben von */
/* System- und Errormeldungen. */
extern TRILLIAN GetContensTEL(char); /* Aktuelle Zeichen auswerten. */
extern void ccptelnet(void); /* TELNET-Server Einstellung aendern/setzen. */
#endif /* L1TCPIP */
/* End of include/l1telnet.h */

172
include/l2.h Executable file
View file

@ -0,0 +1,172 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/l2.h (maintained by: DF6LN) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
#define DEF_N2 20 /* Default: Retries */
/* (bei DAMA: DEF_N2 / 2) */
#define L2_ALPHA1 7 /* Faktor fuer steigenden L2RTT */
#define L2_ALPHA2 15 /* Faktor fuer fallenden L2RTT */
#define L2_BETA 4 /* Multiplikator fuer FRACK-Ber. */
/**************************************************************************/
#define L2CALEN 6 /* Laenge Call im Level 2 */
#define L2IDLEN (L2CALEN + 1) /* Laenge Call + SSID = ID */
#define L2INUM 2 /* Anzahl ID's im an/von-Feld */
#define L2VNUM 8 /* Anzahl ID's im via-Feld */
#define L2ILEN (L2INUM * L2IDLEN) /* Laenge an/von-Feld */
#define L2VLEN (L2VNUM * L2IDLEN) /* Laenge via-Feld */
#define L2AFLEN (L2ILEN + L2VLEN) /* Laenge Level 2 Adressfeld */
#define L2HLEN (L2AFLEN + 2) /* 10 * 7 = 70 Bytes Adresse */
/* + 1 Byte Control */
/* + 1 Byte PID */
/* ----- */
/* 72 */
#define L2MILEN 256 /* max. Laenge des Info-Feldes */
#define L2MFLEN (L2MILEN+L2HLEN) /* maximale Framelaenge L2 */
/* 72 Header */
/* + 256 Byte Info */
/* ----- */
/* 328 Bytes */
/**************************************************************************/
/* "layer 2 state", (state, s.u.) : */
#define L2SDSCED 0 /* disconnected */
#define L2SLKSUP 1 /* link setup */
#define L2SFRREJ 2 /* frame reject */
#define L2SDSCRQ 3 /* disconnect request */
#define L2SIXFER 4 /* information transfer */
#define L2SRS 5 /* REJ sent */
#define L2SWA 6 /* waiting acknowledge */
#define L2SDBS 7 /* device busy */
#define L2SRBS 8 /* remote busy */
#define L2SBBS 9 /* both busy */
#define L2SWADBS 10 /* waiting ack and device busy */
#define L2SWARBS 11 /* waiting ack and remote busy */
#define L2SWABBS 12 /* waiting ack and both busy */
#define L2SRSDBS 13 /* REJ sent and device busy */
#define L2SRSRBS 14 /* REJ sent and remote busy */
#define L2SRSBBS 15 /* REJ sent and both busy */
#define L2SHTH 16 /* waiting l7 partner connect */
/* "layer 2 message", Status vom Level 2 : */
#define L2MNIX 0 /* keine Nachricht */
#define L2MCONNT 1 /* CONNECTED to */
#define L2MDISCF 2 /* DISCONNECTED from */
#define L2MBUSYF 3 /* BUSY from */
#define L2MFAILW 4 /* LINK FAILURE with */
#define L2MLRESF 5 /* LINK RESET from */
#define L2MLREST 6 /* LINK RESET to */
#define L2MFRMRF 7 /* FRAME REJECT from */
#define L2MFRMRT 8 /* FRAME REJECT to */
#define L2MBUSYT 9 /* BUSY to */
/* "layer 2 control", Frametypen : */
/* */
/* Command/ Poll/ */
/* Typ Gruppe Response Final */
/* ---------------------------------------- */
#define L2CI 0x00 /* I I C P */
#define L2CUI 0x03 /* UI U C/R P/F */
#define L2CSABM 0x2F /* SABM U C P */
#define L2CDISC 0x43 /* DISC U C P */
#define L2CUA 0x63 /* UA U R F */
#define L2CDM 0x0F /* DM U R F */
#define L2CFRMR 0x87 /* FRMR U R F */
#define L2CRR 0x01 /* RR S C/R P/F */
#define L2CREJ 0x09 /* REJ S C/R P/F */
#define L2CRNR 0x05 /* RNR S C/R P/F */
#ifdef EAX25
#define L2CSABME 0x6F /* SABM U C P */
#endif
/* "layer 2 control", spezielle Bits : */
#define L2CPF 0x10 /* Poll/Final */
#define L2CCR 0x80 /* Command/Response */
#define L2CH 0x80 /* "has been repeated" */
#define L2CEOA 0x01 /* End of Address */
#define L2CDAMA 0x20 /* geloeschtes Bit = DAMA */
#ifdef EAX25
#define L2CEAX 0x40 /* geloeschtes Bit = Extended AX.25 Frame */
#endif
/* "layer 2 control", Masken : */
#define L2CNOIM 0x01 /* "no I mask", kein I-Frame */
#define L2CNOSM 0x02 /* "no S mask", kein S-Frame */
#define L2CNONRM 0x03 /* "no N(R) mask", kein N/R-Frame */
/* "layer 2 control", Protokollidentifier */
#define L2CPID 0xF0 /* kein L3 Protokoll */
#define L2CFRAG 0x08 /* AX25 Fragmentierung */
#define L2CNETROM 0xCF /* NET/ROM TheNet(Node) Interlink-Protokoll */
#define L2CTEXNET 0xC3 /* TexNet (Kompatibilitaetsgruende), wie CF */
#define L2CIP 0xCC /* eingekapseltes IP-Frame */
#define L2CARP 0xCD /* eingekapseltes ARP-Frame */
#define L2CFLEXNET 0xCE /* FlexNet-Protokoll */
/* "layer 2 control", Flags (flag, s.u.) : */
#define L2FDAMA1 0x0001 /* benutzt fuer DAMA-Runden-Steuerung */
#define L2FDAMA2 0x0002 /* benutzt fuer DAMA-Runden-Steuerung */
#define L2FCTEXT 0x0004 /* 1 = C-Text schon mal gesendet */
#define L2FDACK 0x0008 /* 1 = Frame wartet auf Bestaetigung */
#define L2FCMDEL 0x0010 /* Maxframe verzoegert vergroessern */
#define L2FREPEAT 0x0020 /* Frames sollen wiederholt werden */
#define L2FBUSY 0x0040 /* Device busy (ich !) */
#define L2FDSLE 0x0080 /* "disc if send list empty" */
#define L2FDIMM 0x0100 /* "disconnect immedialtly" */
#define L2FACKHTH 0x0400 /* ankommende HTH-Verbindung bestaetigen */
#define L2FREJHTH 0x0800 /* ankommende HTH-Verbindung ablehnen */
/* im Framebufferkopf (l2fflag, s.u.) : */
#define L2FT1ST 0x0001 /* nach Aussendung ist T1 zu starten */
#define L2FUS 0x0002 /* Sendeframe ist U- oder S-Frame (nicht */
/* digipeatet) */
/* End of include/l2.h */

97
include/l2s.h Executable file
View file

@ -0,0 +1,97 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/l2s.h (maintained by: DF6LN) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
/* Zugriff anderer Module auf die State-Tabellen */
/**************************************************************************/
/*
* nicht aufgefuehrte Tabellen werden durch das Programm direkt
* ausgefuehrt
*/
extern STENTRY stbl00[]; /* I WITH POLL (COMMAND) */
extern STENTRY stbl00dama[]; /* I WITH POLL (COMMAND, DAMA) */
extern STENTRY stbl01[]; /* I WITHOUT POLL (COMMAND) */
extern STENTRY stbl01dama[]; /* I WITHOUT POLL (COMMAND, DAMA) */
extern STENTRY stbl02[]; /* RR WITH POLL (COMMAND) */
extern STENTRY stbl03[]; /* RR WITHOUT POLL (COMMAND) */
#define stbl04 stbl02 /* REJ WITH POLL (COMMAND) */
#define stbl05 stbl03 /* REJ WITHOUT POLL (COMMAND) */
extern STENTRY stbl06[]; /* RNR WITH POLL (COMMAND) */
extern STENTRY stbl07[]; /* RNR WITHOUT POLL (COMMAND) */
extern STENTRY stbl08[]; /* SABM EITHER (COMMAND) */
extern STENTRY stbl08a[]; /* SABM EITHER (COMMAND, VIA) */
extern STENTRY stbl09[]; /* DISC EITHER (COMMAND) */
extern STENTRY stbl10[]; /* RR WITH FINAL (RESPONSE) */
#ifdef DAMASLAVE
extern STENTRY stbl10a[]; /* DAMA Poll */
#endif
#define stbl11 stbl03 /* RR WITHOUT FINAL (RESPONSE) */
#define stbl12 stbl10 /* REJ WITH FINAL (RESPONSE) */
#define stbl13 stbl03 /* REJ WITHOUT FINAL (RESPONSE) */
extern STENTRY stbl14[]; /* RNR WITH FINAL (RESPONSE) */
#define stbl15 stbl07 /* RNR WITHOUT FINAL (RESPONSE) */
extern STENTRY stbl16[]; /* UA EITHER (RESPONSE) */
extern STENTRY stbl17[]; /* DM EITHER (RESPONSE) */
extern STENTRY stbl18[]; /* FRMR EITHER (RESPONSE) */
extern STENTRY stbl19[]; /* LOCAL START COMMAND */
extern STENTRY stbl20[]; /* LOCAL STOP COMMAND */
extern STENTRY stbl20a[]; /* LOCAL STOP COMMAND, FORCED */
extern STENTRY stbl21[]; /* STATION BECOMES BUSY */
extern STENTRY stbl22[]; /* BUSY CONDITION CLEARS */
extern STENTRY stbl23[]; /* T1 EXPIRES (VERSION 2) */
extern STENTRY stbl24[]; /* T3 EXPIRES */
extern STENTRY stbl25[]; /* N2 IS EXCEEDED */
extern STENTRY stbl26[]; /* INVALID N(S) RECEIVED no Poll */
extern STENTRY stb26b[]; /* INVALID N(S) RECEIVED Poll */
extern STENTRY stbl27[]; /* INVALID N(R) RECEIVED */
#define stbl28 stbl27 /* UNRECOGNIZED FRAME RECEIVED */
/* End of include/l2s.h */

88
include/l3global.h Executable file
View file

@ -0,0 +1,88 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/l3.h (maintained by: ???) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
/* Layer 3 Mode Flags --------------------------------------------------*/
#define DG 1
#define VC 2
#define VC_FAR 4
#define OPTIONS_MASK (DG+VC+VC_FAR)
#define DIRTY 60001U
/* Layer 3 Nodes Options -----------------------------------------------*/
#define OPT_SSID_RANGE 0x100 /* SSID-Bereich anzeigen */
#define OPT_ALIAS 0x200 /* ALIAS ausgeben */
#define OPT_VCTEST 0x400 /* VC Routentest */
#define OPT_DGTEST 0x800 /* DG Routentest (NRR) */
#define ISCALLMASK (1<<0)
#define ISIDENTMASK (1<<1)
#define ISMINQUAL (1<<2)
#define ISMAXQUAL (1<<3)
#define ISNBRCALL (1<<4)
/* NRR-Options */
#define LT_MASK 0x7F
#define ECHO_FLAG 0x80
/* INP Option and Framing Codes */
#define INP_RIF 0xFF
#define INP_EOP 0x00
#define INP_ALIAS 0 /* Alias */
#define INP_IPA 1 /* IP-Adresse + Subnet */
/* Kennung fuer IP-Frames ueber Netrom */
#define L3TCPUDP 0

182
include/l3local.h Executable file
View file

@ -0,0 +1,182 @@
/************************************************************************/
/* */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* ***** ***** */
/* *************** *************** */
/* ***************** ***************** */
/* *************** *************** */
/* ***** ***** TheNetNode */
/* ***** ***** Portable */
/* ***** ***** Network */
/* ***** ***** Software */
/* */
/* File include/l3local.h (maintained by: ???) */
/* */
/* This file is part of "TheNetNode" - Software Package */
/* */
/* Copyright (C) 1998 - 2008 NORD><LINK e.V. Braunschweig */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the NORD><LINK ALAS (Allgemeine Lizenz fuer */
/* Amateurfunk Software) as published by Hans Georg Giese (DF2AU) */
/* on 13/Oct/1992; either version 1, or (at your option) any later */
/* version. */
/* */
/* This program is distributed WITHOUT ANY WARRANTY only for further */
/* development and learning purposes. See the ALAS (Allgemeine Lizenz */
/* fuer Amateurfunk Software). */
/* */
/* You should have received a copy of the NORD><LINK ALAS (Allgemeine */
/* Lizenz fuer Amateurfunk Software) along with this program; if not, */
/* write to NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/* Dieses Programm ist PUBLIC DOMAIN, mit den Einschraenkungen durch */
/* die ALAS (Allgemeine Lizenz fuer Amateurfunk Software), entweder */
/* Version 1, veroeffentlicht von Hans Georg Giese (DF2AU), */
/* am 13.Oct.1992, oder (wenn gewuenscht) jede spaetere Version. */
/* */
/* Dieses Programm wird unter Haftungsausschluss vertrieben, aus- */
/* schliesslich fuer Weiterentwicklungs- und Lehrzwecke. Naeheres */
/* koennen Sie der ALAS (Allgemeine Lizenz fuer Amateurfunk Software) */
/* entnehmen. */
/* */
/* Sollte dieser Software keine ALAS (Allgemeine Lizenz fuer Amateur- */
/* funk Software) beigelegen haben, wenden Sie sich bitte an */
/* NORD><LINK e.V., Hinter dem Berge 5, D-38108 Braunschweig */
/* */
/************************************************************************/
#define L3_RTT_TIME 180 /* Messintervall in Sekunden-Schritten */
#define LEARN (59999U) /* Lernqualitaet */
#define HORIZONT (60000U) /* alles darueber ist ausgefallen */
#define ROUTE_TIMEOUT 21 /* 21 Minuten */
#define MESSTIME 180
#define DEFAULT_LT 10 /* fuer alle unbekannten Ziele */
#ifdef FLEXHOST /* Hosting auch fuer FlexNet-Fernziele? */
#define HOST_MASK (VC+VC_FAR+DG)
#else
#define HOST_MASK (VC+DG)
#endif
#define FLEX_MASK VC|VC_FAR
/* Layer 3 Broadcast Typs ----------------------------------------------*/
#define ALL 1 /* alle Nodes broadcasten */
#define CHANGES 2 /* nur Aenderungen broadcasten */
#define LEARNQUAL 2 /* Qualitaet eines Fastlearns */
#define DONT_CHANGE_QUAL 65535U /* Qualitaet nicht aendern */
#define DONT_CHANGE_SSID (-1) /* SSID nicht aendern */
#define DONT_CHANGE_ALIAS (nulide) /* Alias nicht aendern */
#define DONT_CHANGE_LT (-1) /* LT nicht aendern */
/* End of include/l3.h */
/* Definitionen, die nur im L3 verwendet werden */
#define RTT_MIN 1 /* Grenzwerte fuer SRTT 1ms..<60s */
#define RTT_MAX 59999L
#define RTT_ALPHA1 7
#define RTT_ALPHA2 8
#define RTT_BETA 3
#define IGNORE_RTT 0 /* Messung ignorieren */
#define cpyals(x,y) memmove(x,y,6)
#define cmpals(x,y) (!strnicmp(x,y,6))
extern UWORD flexmode;
extern UWORD max_lt;
extern char orgnod[];
extern char desnod[];
extern char time_to_live;
extern int max_nodes;
extern int max_peers;
extern int num_nodes_max;
/* ------------------------------------------ Funktionen in src/l3inp.c */
void propagate_node_update(INDEX);
BOOLEAN rx_inp_broadcast(PEER *, MBHEAD *);
void add_inp_info(MBHEAD **, NODE *, PEER *, unsigned, unsigned, int);
void send_inp_nodebeacon(PEER *);
/* ----------------------------------------- Funktionen in src/l3misc.c */
BOOLEAN register_network(int, int);
void unregister_network(void);
BOOLEAN ge6chr(char *, MBHEAD *);
void pu6chr(char *, MBHEAD *);
void cpyidl2(char *, const char *);
void nrr_rx(MBHEAD *, PEER *);
void send_nrr_frame(NRRLIST *);
/* ------------------------------------------ Funktionen in src/l3nbr.c */
void discnbp(PEER *);
BOOLEAN connbr(PEER *);
void disnbr(PEER *);
PEER *getnei(const char *, const char *, int);
void toneig(PEER *, MBHEAD *);
void newnbr(PEER *);
PEER *ispeer(void);
void rxneig(PEER *, MBHEAD *);
/* --------------------------------------- Funktionen in src/l3netrom.c */
void netrom_rx(PEER *);
void rx_broadcast(PEER *, MBHEAD *);
void sdl3ui(PEER *, MBHEAD *);
void brosnd(MBHEAD **, PEER *);
void inform_peer(PEER *, int);
/* ------------------------------------------ Funktionen in src/l3rtt.c */
void send_l3srtt_frame(PEER *);
void rtt_metric(PEER *, long);
void rx_l3rtt_frame(PEER *, MBHEAD *, char huge *, WORD);
/* ------------------------------------------ Funktionen in src/l3tab.c */
PEER *register_peer(void);
void unregister_peer(PEER *);
int add_node(const char *);
void del_node(int);
void drop_unreachable_nodes(void);
int add_route(PEER *, const char *, unsigned);
void update_route(PEER *, INDEX, unsigned);
void update_lt(PEER *, INDEX, int);
BOOLEAN update_alias(INDEX, const char *);
BOOLEAN update_ssid(int, int);
void update_peer_quality(PEER *, unsigned long, unsigned long);
void reset_peer(PEER *);
void connect_peer(PEER *);
void disconnect_peer(PEER *);
void set_peer_typ(PEER *, int);
BOOLEAN check_destot(INDEX);
void check_all_destot(void);
void destot(int);
void update_primary_peer(char *);
/* ------------------------------------------- Funktionen in src/l3vc.c */
void local_flex_srv(void);
void local_status(PEER *, WORD);
void flex_status(PEER *, WORD);
void flex_rx(PEER *, MBHEAD *);
void flexnet_rx(PEER *);
#ifdef MC68302 /* Haelt den L3 zusehr auf */
# undef MAX_TRACE_LEVEL
# define MAX_TRACE_LEVEL 0
#endif
/* End of include/l3local.h */

175
include/l3sock.h Executable file
View file

@ -0,0 +1,175 @@
#ifdef TCP_STACK
#define TCP_SOCKET 1 /* Status: Socket erstellen */
#define TCP_BIND 2 /* Status: Socket binden. */
#define TCP_LISTEN 3 /* Status: Socket auf Listen setzen.*/
#define TCP_CONNECTED 4 /* Status: Es gibt eine Verbindung. */
#define TCP_CLOSED 0 /* Socket leeren/entsorgen. */
#define TCP_SYNCON 1 /* Verbindungsaufbau bestaetigen. */
#define TCP_ESTABLISHED 2 /* Status Stabil . */
#define TCP_ACKSENT 3 /* ACK-Bestaetigung senden. */
#define TCP_PSHSENT 4 /* Frame an den Nachbarn schicken. */
#define TCP_ACKWAIT 5 /* Warte auf ACK-Bestaetigung. */
#define TCP_CLOSE 6 /* Status schliessen. (7 bis 15) */
#define TCP_FINSENT 7 /* Socket sofort schliessen. */
#define TCP_FINWAIT 8 /* Warte auf FIN & ACK-Bestaetigung. */
#define TCP_FINACKWAIT 9 /* Warte auf ACK-Bestaetigung. */
#define TCP_ACKWAITFIN 10 /* Warte auf ACK, danach FIN senden. */
#define TCP_PSHWAITFIN 11 /* Sende alle offenstehende Packete. */
#define TCP_PSHSENTFIN 12 /* Naechstes Packet senden. */
#define TCP_FINSENTCLOSED 13 /* Nach ACK-Bestaetigung, FIN & ACK-Senden.*/
#define TCP_ACKWAITCLOSED 14 /* Warte auf ACK-Bestaetigung, Socket entf.*/
#define TCP_RSTSENT 15 /* Verbindung zuruecksetzen. */
#ifndef SOCK_STREAM
#define SOCK_STREAM 1 /* stream socket */
#endif
#ifndef AF_INET
#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
#endif
#ifndef INADDR_ANY
#define INADDR_ANY (ULONG)0x00000000
#endif
#define NUM_SOCKETS 32 /* Max. Socket's */
typedef unsigned int Socklen_t;
typedef struct _fd_set
{
unsigned int fd_count; /* how many are SET? */
Socklen_t fd_array[FD_SETSIZE]; /* an array of SOCKETs */
} Fd_set;
#define FD_SET_T(fd, set) do { \
Socklen_t __i; \
for (__i = 0; __i < ((Fd_set *)(set))->fd_count; __i++) { \
if (((Fd_set *)(set))->fd_array[__i] == (fd)) { \
break; \
} \
} \
if (__i == ((Fd_set *)(set))->fd_count) { \
if (((Fd_set *)(set))->fd_count < FD_SETSIZE) { \
((Fd_set *)(set))->fd_array[__i] = (fd); \
((Fd_set *)(set))->fd_count++; \
} \
} \
} while(0)
#define FD_ZERO_T(set) (((Fd_set *)(set))->fd_count=0)
extern BOOLEAN GetSocket(Socklen_t, Fd_set *);
#define FD_ISSET_T(fd, set) GetSocket((Socklen_t)(fd), (Fd_set *)(set))
struct In_addr {
union {
struct { UBYTE s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { UWORD s_w1,s_w2; } S_un_w;
ULONG _S_addr;
} _S_un;
#define _S_addr _S_un._S_addr
/* can be used for most tcp & ip code */
};
struct Sockaddr_in
{
short sin_family;
UWORD sin_port;
struct In_addr sin_addr;
char sin_zero[8];
};
struct Sockaddr
{
UWORD sa_family; /* address family */
char sa_data[14]; /* up to 14 bytes of direct address */
};
struct Timeval
{
long tv_sec; /* seconds */
long tv_usec; /* and microseconds */
};
typedef struct tsocket /* Struktur Socketliste */
{
struct tsocket *next;
struct tsocket *prev;
#ifdef BUFFER_DEBUG
UBYTE owner; /* Muss an 9. Bytestelle stehen */
#endif
ACK RecvNext; /* Naechstes Frame Empfangen. */
SEQ SendNext; /* Naechstes Frame Senden. */
ACK SendUnacked; /* Noch nicht gesende Frames. */
unsigned long IpDest; /* IP-Adresse vom Nachbarn. */
int Socket; /* Socket. */
int Domain; /* Domain. */
int Type; /* Protokoll-Typ (TCP oder UDP). */
int PacNum; /* Frame-Zaehler. */
/* TCP-Header. */
unsigned DestPort; /* Destination-Port */
unsigned LocalPort; /* Local-Port setzen. */
unsigned short MaxListen; /* Groesse der Warteschlange. */
unsigned short Listen; /* Momentan in der Warteschlange. */
unsigned char UrgPointer; /* Urgent Pointer */
UBYTE State; /* Socket-Status. */
UBYTE TState; /* Socket-Status. */
UBYTE tos; /* Type of service */
BOOLEAN RecvEvent; /* Select markieren, Empfang. */
BOOLEAN SendEvent; /* Select markieren, Senden. */
} TSOCKET;
extern TSOCKET sockets[NUM_SOCKETS];
extern int Socket(int, /* Ein socket anlegen. */
int,
int);
extern int Bind (int, /* Socket binden. */
struct Sockaddr *,
Socklen_t);
extern int Listen(int, /* Lausche auf Socket. */
int);
extern int Select(int, /* Den Socket auf Aktivitaet pruefen. */
Fd_set *,
Fd_set *,
Fd_set *,
struct Timeval *);
extern int Accept(int , /* Verbindungsbau annehmen/ablehnen. */
struct Sockaddr *,
Socklen_t *);
extern int Recv (int , /* Daten Empfangen. */
char *,
int ,
int);
extern int Send (int , /* Daten Senden. */
char *,
int,
int);
extern void Close (int); /* Socket schliessen. */
extern int SearchSock(int); /* Den Socket aus der Socketliste suchen. */
extern void DelSocket(int); /* Socket als unbenutzt markieren. */
/* konvertiert die Kurzganzzahl hostshort Rechner- nach Netzwerk-Byteordnung. */
extern unsigned short Htons(unsigned short);
/* konvertiert die Kurzganzzahl netshort von Netzwerk-nach Rechner-Byteordnung*/
extern unsigned short Ntohs(unsigned short);
/* konvertiert die Langganzzahl hostlong von Rechner-nach Netzwerk-Byteordnung*/
extern unsigned long Htonl(unsigned long);
/* konvertiert die Langganzzahl netlong von Netzwerk- nach Rechner-Byteordnung*/
extern unsigned long Ntohl(unsigned long);
#endif /* TCP_STACK. */
/* End of include/l3sock.h. */

91
include/l3tcp.h Executable file
View file

@ -0,0 +1,91 @@
extern LHEAD rxSegment; /* RX TCP-Segmente */
extern LHEAD txSegment; /* TX TCP-Segment. */
extern LHEAD rxDaten; /* RX-Buffer. */
#define TCP_HEADER 20 /* TCP-Headerlaenge. */
#define TCP_OPTION 8 /* TCP-Optionslaenge. */
/* TCP-Option-Flags */
#define TFIN 0x01 /* Socket schliessen. */
#define TSYN 0x02 /* Verbindungsaufbau starten. */
#define TRST 0x04 /* Verbindung zurueck setzen. */
#define TPSH 0x08 /* Daten senden. */
#define TACK 0x10 /* Bestaetigungen. */
#define TURGE 0x20 /* Flag ignored */
#define WINSIZE 512 /* Fenstergroesse festlegen. */
/* TCP-Options */
#define OPTEND 516 /* End of Option List. */
#define OPTNOO 257 /* No-Operation. */
#define OPTMSS 512 /* Maximum Segment Size. */
#define OPTPA3 1026
#define TCP_TIMEOUT 30 /* Timer-Wert fuer Segment Wiederholungen. */
#define TCP_MAX_RETRY 7 /* Maximal Wiederholen. */
typedef struct datenrx /* Struktur fuer RX-Bufferung. */
{
struct datenrx *next;
struct datenrx *prev;
#ifdef BUFFER_DEBUG
UBYTE owner; /* Muss an 9. Bytestelle stehen */
#endif
MBHEAD *Data; /* RX-Buffer eines Segment. */
int Sock; /* Socket vom Segment. */
} DATENRX;
typedef struct stackrx /* Struktur RX-Segment Empfang. */
{
struct stackrx *next;
struct stackrx *prev;
#ifdef BUFFER_DEBUG
UBYTE owner; /* Muss an 9. Bytestelle stehen */
#endif
MBHEAD *Data; /* Buffer eines Segment . */
IP *IpHdr; /* IP-Header. */
} STACKRX;
typedef struct stacktx /* Struktur TX-Segment senden. */
{
struct stacktx *next;
struct stacktx *prev;
#ifdef BUFFER_DEBUG
UBYTE owner; /* Muss an 9. Bytestelle stehen */
#endif
MBHEAD *Data; /* Buffer. */
int Sock; /* Socket. */
unsigned short Flags; /* TCP-Flags. */
unsigned char TState; /* TCP-Statusaenderung. */
int Timer; /* Timer. */
time_t TimeLast; /* */
int Retry; /* Retry-Zaehler. */
} STACKTX;
extern void StackInitTCP(void); /* TCP Initialisieren */
extern void StackSRV(void) ; /* TCP-Service */
extern void StackTimer(void); /* Timer fuer Frame-Wiederholungen. */
extern void SendTcpFlag(register int,/* Frame fuer IP-Router vorbereiten. */
MBHEAD *,
unsigned int,
unsigned short,
unsigned short,
unsigned short);
extern void TCPIPProcess(register IP *,/* Eingehende TCP-Daten weiter-*/
register MBHEAD *);/* leiten in die RX-Seg.-liste*/
extern void PutTXStack(register int, /* Neues TX-Segment in die Sende-*/
MBHEAD *, /* liste anlegen/anhaengen. */
int,
unsigned short,
unsigned char);
extern void DelSock(int); /* Entsorge alle Buffer vom Socket. */
extern DATENRX *GetBuffer(TSOCKET *); /* Einen Eintrag aus der RX-Liste holen.*/
/* End of include/l3tcp.h. */

Some files were not shown because too many files have changed in this diff Show more