initial commit
This commit is contained in:
commit
6e56114b94
238 changed files with 113512 additions and 0 deletions
86
LICENSE
Executable file
86
LICENSE
Executable 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
97
README.TXT
Executable 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
10
README.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# TheNetNode-CB
|
||||||
|
TheNetNode from Nordlink><, 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
86
alas.txt
Executable 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
157
contrib/makefile
Executable 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
126
contrib/msgmsy/makefile
Executable 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
15
contrib/msgmsy/msg.his
Executable 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
23
contrib/msgmsy/msg.inf
Executable 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
62
contrib/msgmsy/msg.sys
Executable 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
78
contrib/msgmsy/msg.usr
Executable 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
950
contrib/msgmsy/msg_lin.c
Executable 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
41
contrib/msgmsy/msy.his
Executable 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
26
contrib/msgmsy/msy.inf
Executable 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
1725
contrib/msgmsy/msy_lin.c
Executable file
File diff suppressed because it is too large
Load diff
87
contrib/onlhelp/makefile
Executable file
87
contrib/onlhelp/makefile
Executable 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
404
contrib/onlhelp/oh.c
Executable 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
1683
contrib/onlhelp/ohs.txt
Executable file
File diff suppressed because it is too large
Load diff
2300
contrib/onlhelp/ohu.txt
Executable file
2300
contrib/onlhelp/ohu.txt
Executable file
File diff suppressed because it is too large
Load diff
115
contrib/output/makefile
Executable file
115
contrib/output/makefile
Executable 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
195
contrib/output/output.c
Executable 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
110
contrib/pfhadd/makefile
Executable 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
195
contrib/pfhadd/output.c
Executable 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
21
contrib/top/config.top
Executable 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
106
contrib/top/makefile
Executable 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
842
contrib/top/top_gnu.c
Executable 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
207
doc/conversd.g
Executable 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
259
doc/conversd.xhf
Executable 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
351
doc/deutsch.txt
Executable 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"
|
199
doc/diverse_doc/Beipieldateien/conversd.g
Normal file
199
doc/diverse_doc/Beipieldateien/conversd.g
Normal 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
|
205
doc/diverse_doc/Beipieldateien/conversd.xhf
Normal file
205
doc/diverse_doc/Beipieldateien/conversd.xhf
Normal 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
|
168
doc/diverse_doc/Beipieldateien/tnnini.all.txt
Normal file
168
doc/diverse_doc/Beipieldateien/tnnini.all.txt
Normal 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
|
BIN
doc/diverse_doc/TNN Kurzanleitung User.pdf
Normal file
BIN
doc/diverse_doc/TNN Kurzanleitung User.pdf
Normal file
Binary file not shown.
BIN
doc/diverse_doc/TNN179mh05.pdf
Normal file
BIN
doc/diverse_doc/TNN179mh05.pdf
Normal file
Binary file not shown.
BIN
doc/diverse_doc/tnn179_cb.doc
Normal file
BIN
doc/diverse_doc/tnn179_cb.doc
Normal file
Binary file not shown.
BIN
doc/diverse_doc/tnn179_cb.pdf
Normal file
BIN
doc/diverse_doc/tnn179_cb.pdf
Normal file
Binary file not shown.
BIN
doc/diverse_doc/tnn179_cb2004.pdf
Normal file
BIN
doc/diverse_doc/tnn179_cb2004.pdf
Normal file
Binary file not shown.
BIN
doc/diverse_doc/tnn179_cb2006.pdf
Normal file
BIN
doc/diverse_doc/tnn179_cb2006.pdf
Normal file
Binary file not shown.
BIN
doc/diverse_doc/tnn179_cb_2.pdf
Normal file
BIN
doc/diverse_doc/tnn179_cb_2.pdf
Normal file
Binary file not shown.
351
doc/englisch.txt
Executable file
351
doc/englisch.txt
Executable 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
BIN
doc/tnn178.pdf
Executable file
Binary file not shown.
BIN
doc/tnn179_cb.doc
Executable file
BIN
doc/tnn179_cb.doc
Executable file
Binary file not shown.
BIN
doc/tnn179cb.pdf
Executable file
BIN
doc/tnn179cb.pdf
Executable file
Binary file not shown.
83
history/178mh01.his
Executable file
83
history/178mh01.his
Executable 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
9
history/178mh03.his
Executable 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
36
history/178mh04.his
Executable 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
80
history/178mh05.his
Executable 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
47
history/178mh06.his
Executable 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
43
history/178mh07.his
Executable 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
41
history/178mh08.his
Executable 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
35
history/178mh09.his
Executable 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
91
history/178mh10.his
Executable 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
23
history/178nk01.his
Executable 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
13
history/178nk02.his
Executable 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
32
history/178or01.his
Executable 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
39
history/178or02.his
Executable 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
15
history/178or03.his
Executable 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
6
history/179.his
Executable 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
78
history/179mh01.his
Executable 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
125
history/179mh02.his
Executable 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
114
history/179mh03.his
Executable 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
109
history/179mh04.his
Executable 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
108
history/179mh05.his
Executable 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
20
history/179mh06.his
Executable 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
9
history/179pre1.his
Executable 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
11
history/179pre2.his
Executable 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
17
history/179pre3.his
Executable 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
19
history/179pre4.his
Executable 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
36
history/179pre5.his
Executable 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
9
history/179pre6.his
Executable 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
8
history/179pre7.his
Executable 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
17
history/179pre8.his
Executable 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
67
history/axipr.his
Executable 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
33
history/eax25.his
Executable 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
27
history/flex178mh06.his
Executable 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
274
history/kernelif.his
Executable 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
38
history/sccpatch.txt
Executable 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
2
history/tnn178.his
Executable file
|
@ -0,0 +1,2 @@
|
||||||
|
= Speicher-Leck bei Pacsat behoben
|
||||||
|
= einige ungenutzte Funktionen entsorgt
|
4
history/tnn178a.his
Executable file
4
history/tnn178a.his
Executable 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
473
include/all.h
Normal 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
728
include/allmodif.h
Executable 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
132
include/conversd.h
Executable 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
243
include/cvs_cmds.h
Executable 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
743
include/function.h
Normal 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
409
include/global.h
Executable 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
100
include/host.h
Executable 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
145
include/icmp.h
Executable 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
354
include/ip.h
Executable 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
72
include/ipv.h
Executable 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
31
include/l1attach.h
Executable 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
36
include/l1httpd.h
Executable 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
70
include/l1ipconv.h
Executable 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
32
include/l1irc.h
Executable 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
201
include/l1tcpip.h
Executable 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
19
include/l1telnet.h
Executable 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
172
include/l2.h
Executable 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
97
include/l2s.h
Executable 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
88
include/l3global.h
Executable 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
182
include/l3local.h
Executable 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
175
include/l3sock.h
Executable 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
91
include/l3tcp.h
Executable 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
Loading…
Reference in a new issue