E – K ermit – Kermit zum Einbetten

Source: https://kermitproject.org/ek.html

Open-Source-Ankündigung: Mit Wirkung zum 30. März 2011 wird E-Kermit mit Version 1.6 „wie besehen“ unter der überarbeiteten 3-Klausel-BSD-Lizenz veröffentlicht .

E-Kermit 1.8 vom 26. Mai 2021 behebt einen Fehler in der Unix-Demoversion, bei dem die Befehlszeilenargumente -B und -T (um den Binär- bzw. Textdateiübertragungsmodus zu erzwingen) vertauscht wurden. Vielen Dank an Todd Markley für die Meldung.

27. Mai 2021: Alle FTP-Links auf dieser Seite wurden in HTTP/HTTPS umgewandelt, da Chrome und Firefox und wer weiß was andere Browser sie nicht mehr unterstützen; Details hier .

EK (Embedded Kermit, E-Kermit) ist eine in ANSI C geschriebene Implementierung des Kermit-Dateiübertragungsprotokolls, die für die Einbettung in Geräte oder Firmware, für die Verwendung in Echtzeitanwendungen oder für die Erstellung von DLLs und Bibliotheken konzipiert ist. EKSW ist eine neue Version von E-Kermit, die echte Sliding-Windows-Paketübertragung umfasst. EK und EKSW sollten wieder in einer einzigen Codebasis vereint werden, aber bisher ist das noch nicht geschehen.

Was E-Kermit macht

EK führt nur zwei Funktionen aus: Senden von Dateien und Empfangen von Dateien. Es ist kompakt, tragbar und vollständig wiedereintrittsfähig. Auf SPARC (RISC), kermit.o beträgt etwa 25K. Bei Intel (CISC) sind es etwa 15.000. Durch die Reduzierung der Puffergrößen und die Eliminierung optionaler oder unerwünschter Funktionen können kleinere Größen erreicht werden.

Was E-Kermit NICHT macht

EK beinhaltet keine Client/Server-Funktionen; eine Befehls- oder Skript-Programmiersprache; Zeichensatzkonvertierung; Transportverschlüsselung; oder jede Form der Kommunikation oder Dateieingabe/-ausgabe. Es wählt keine Modems an, es stellt keine Verbindungen her, es verfügt nicht über einen integrierten TCP/IP-Stack oder eine Schnittstelle zu einem externen. Wenn Sie diese Funktionen benötigen, sollten Sie ein vollständiges Kermit-Programm wie C-Kermit oder Kermit 95 verwenden .

EK ist keine Anwendung selbst, sondern eine Unterroutine, die von Ihrer Masteranwendung aufgerufen wird. Es ist nur für Entwickler nützlich, die die Masteranwendung oder Aufrufumgebung sowie die Datei- und Kommunikations-E/A-Routinen bereitstellen müssen. Die anrufende Umgebung muss ihrerseits die Kommunikationsverbindung herstellen und konfigurieren, falls eine erforderlich ist und nicht bereits geöffnet ist. Für Unix werden eine Beispielaufrufumgebung und E/A-Unterstützung bereitgestellt.

Kunden haben EK an verschiedene Umgebungen und Plattformen angepasst, darunter den Palm Pilot, verschiedene Arten von Technikerausrüstung (z. B. für die Diagnose und Wartung von Mobilfunkmasten), und manchmal bringen sie ihre Anpassungen oder I/O-Routinen bei, und wir können diese zur Verfügung stellen auf einer strikten Ist-Basis. Wir sind nicht in der Lage, vom Kunden bereitgestellten Code zu unterstützen oder zu warten. Wenn also beispielsweise eine neue Version von EK veröffentlicht wird, werden vom Kunden bereitgestellte Module nicht unbedingt aktualisiert. Der vom Kunden bereitgestellte Code umfasst:

  • Serieller Anschluss und Datei-E/A für Microsoft Windows 9x/ME/NT/2000/XP/Vista/7 für EK 1.3 und höher.
  • Wind River VxWorks für EK 1.1.
  • EK 1.2 in Java übersetzt .

EK umfasst die folgenden Kermit-Protokollfunktionen:

  • Lange Pakete
  • Schiebefenster mit Go-Back-to- N- Fehlerbehebung (echte selektive Wiederholung in EKSW).
  • Wiederholungskomprimierung
  • Präfixieren und Entfernen des Präfixes für Steuerzeichen
  • 8.-Bit-Präfix (zur Übertragung von 8-Bit-Daten auf 7-Bit-Links) (= Parität)
  • Attributpakete (Typ, Größe und Datum)
  • Senden und Empfangen einzelner oder mehrerer Dateien.
  • Automatische Umschaltung zwischen Text- und Binärmodus pro Datei.
  • Alle drei Blockprüfarten (6- und 12-Bit-Prüfsumme, 16-Bit-CRC).
  • Statusberichte (Protokollstatus, Dateiname, Größe, Zeitstempel, bisherige Bytes).
  • Stornierung der Übertragung durch eine der Parteien.

Die folgenden Funktionen des Kermit-Protokolls sind nicht implementiert:

  • Schiebefenster mit selektiver Weiterleitung (außer in EKSW)
  • Zeichensätze
  • Sperrschichten
  • Kundenserver

Zeitüberschreitungen liegen in der Verantwortung des Kermit-Programms am anderen Ende der Verbindung oder, falls in E-Kermit selbst erforderlich, der plattformabhängigen Paketleseroutine, die Sie schreiben würden.

Ab Version 1.5 enthält E-Kermit Präprozessorkonstruktionen, mit denen Sie verschiedene Funktionen wie lange Pakete, Schiebefenster und Blockprüfungen höherer Ordnung ausschließen können, um den kleinstmöglichen Speicherbedarf zu erzielen, und kann auch in einer Nur-Empfangs-Konfiguration erstellt werden .

DAS STEUERPROGRAMM

EK ist für den Einsatz in einer kooperativen Multitasking-Umgebung konzipiert, erfordert jedoch keine solche Umgebung. Das Steuerungsprogramm übernimmt die Terminplanung. Folgendes muss (und/oder kann) das Steuerungsprogramm tun:

  • Öffnen Sie ggf. das Kommunikationsgerät, falls vorhanden.
  • Falls gewünscht, versetzen Sie das Kommunikationsgerät, falls vorhanden, in den „Paketmodus“.
  • Initialisieren Sie die Kermit-Struktur mit den gewünschten Betriebsparametern.
  • Anruf kermit(K_INIT, ...) Kermit initialisieren zu lassen.
  • Wenn Sie Dateien senden, rufen Sie an Kermit(K_SEND) um die Übertragung zu starten.

(Wenn E-Kermit Dateien empfangen soll, wartet es passiv auf das erste Paket vom Dateisender; es gelangt also einfach in die Paketschleife.) In der Paketschleife führt E-Kermit Folgendes aus:

  • Ruft einen Puffer ab und liest ein eingehendes Paket hinein.
  • Prüft auf Benutzerunterbrechung.
  • Anrufe kermit(K_RUN, ...) um den nächsten Schritt im Protokoll auszuführen.
  • Tut, was immer es will (z. B. andere Aufgaben ausführen).
  • Beendet oder setzt die Schleife basierend auf fort Kermit() Rückgabe Code.

Jedes Mal, wenn das Steuerprogramm die aufruft Kermit() Funktion, die ihm die Erlaubnis erteilt, ein Paket zu verarbeiten; also ein Paket = eine Zeitscheibe. Wenn das Steuerprogramm nichts anderes zu tun hat, verarbeitet es Pakete einfach kontinuierlich, wie ein normales Kermit-Programm. Während in der Datenübertragungsschleife jeder Kermit() Der Aufruf gibt eine Struktur zurück, die Folgendes enthält:

  • Der aktuelle Protokollstatus;
  • Der aktuelle Dateiname;
  • Die Größe der Datei, falls bekannt, oder -1;
  • Der Zeitstempel der Datei, falls bekannt;
  • Die Anzahl der bisher übertragenen Bytes.

Wenn Sie fertig sind, führt das Steuerprogramm Folgendes aus:

  • Stellt das Kommunikationsgerät wieder her und (falls gewünscht) schließt es.

Die Funktionscodes, die das Steuerprogramm aufrufen kann Kermit() mit sind:

K_INIT -- Datenstrukturen initialisieren.

K_SEND -- (Nur Senden) – Senden einleiten.

K_RUN -- Führen Sie das Protokoll aus.

K_STATUS -- Gibt einen Statusbericht in der k_response-Struktur zurück.

K_QUIT -- Hören Sie sofort und leise auf.

K_ERROR -- Fehlerpaket senden, dann beenden.

Die Rückkehrcodes der Kermit() Funktion sind:

X_OK -- OK, Protokoll aktiv.

X_FERTIG -- OK, Protokoll abgeschlossen.

X_ERROR -- Fataler Fehler.

X_STATUS -- Gibt den Status als Antwort auf K_STATUS zurück.

(Tatsächlich wird der Status bei jedem Anruf neu abgestimmt.) Protokollstatuscodes sind:

-1 -- Fataler Fehler

0 -- Empfänger (Protokoll läuft nicht)

1 -- Empfänger wartet auf S-Paket

2 -- Empfänger wartet auf F- oder B-Paket

3 -- Empfänger wartet auf A- oder D-Paket

4 -- Empfänger wartet auf D- oder Z-Paket

10 -- Absender (Protokoll läuft nicht)

11 -- Absender hat S-Paket gesendet (Start)

12 -- Absender hat F-Paket gesendet (Dateiname)

13 -- Absender hat ein Paket gesendet (Attribute)

14 -- Der Absender hat ein D-Paket (Daten) gesendet.

15 -- Vom Absender gesendetes Z-Paket (EOF)

16 -- Der Absender hat ein B-Paket (EOT) gesendet.

DATEI ÜBERTRAGUNG

Da EK in erster Linie zum Einbetten konzipiert ist, verwendet es kein Streaming oder (außer in EKSW) echte Schiebefenster (obwohl ein Großteil des Schiebefenstercodes vorhanden ist). Dies hat folgende Gründe:

  • Durch die Verwendung des regulären ACK/NAK-Protokolls kann das Steuerprogramm nach jedem Paket die Kontrolle wiedererlangen. Dies ermöglicht Multitasking, die Erstellung einer grafischen Dateiübertragungsanzeige usw. Streaming- oder Sliding-Fenster könnten das Steuerungsprogramm für längere Zeit außer Betrieb setzen.
  • Streaming oder echte Schiebefenster würden die Schnittstelle zwischen dem Steuerungsprogramm und dem bilden Kermit() Modul viel komplizierter und würde tatsächlich viele Protokolldetails in den Bereich des Steuerprogramms verschieben, wo sie nicht hingehören.
  • Streaming kann nur über zuverlässige Verbindungen (z. B. TCP/IP) verwendet werden, Geräte mit integrierter Kommunikation verwenden jedoch im Allgemeinen serielle Ports.

Der Mangel an echten Schiebefenstern in EK wird dadurch kompensiert, dass EK vorgibt, sie zu unterstützen, ohne dies wirklich zu tun. Dadurch kann der sendende Partner Pakete „streamen“, anstatt nach jedem Paket auf ACKs zu warten, solange kein Fehler vorliegt. Wenn ein Fehler vorliegt, lautet die Wiederherstellungsstrategie „Zurück zu n “ (oder in manchen Fällen möglicherweise „Fehler aus“) und nicht „selektive Wiederholung“. EKSW, ein separates Programm, das nicht in EK integriert wurde (aber integriert werden sollte), unterstützt echte Schiebefenster mit selektiver Wiederholung; Das heißt, es werden nur die Pakete erneut übertragen, die tatsächlich übertragen werden müssen.

Da EK in erster Linie für die Einbettung gedacht ist, wird davon ausgegangen, dass Round-Trip-Verzögerungen auf jeden Fall kein großer Faktor sein werden. Verbindungen sind im Allgemeinen lokal, kurz, relativ schnell und, wenn die Verbindung effektiv flusskontrolliert ist, fehlerfrei. Wenn keine effektive Flusskontrolle vorhanden ist, können Geschwindigkeit und/oder Paketlänge und/oder Fenstergröße auf eine Kombination von Werten eingestellt werden, die den Durchsatz maximiert und den Datenverlust minimiert.

QUELLCODE

Die Quelldateien sind:

Plattform.h

Header-Datei für alle erforderlichen plattformspezifischen #includes oder Definitionen. Erforderlich, auch wenn es leer ist, weil kermit.c beinhaltet es.

kermit.h

Header-Datei für alle Module. Definition von k_data Und k_response Strukturen.

kermit.c

Dies ist die Kermit-Protokoll-Engine. Es wird vollständig durch seine Anrufdaten gesteuert. Alle Statusinformationen werden in der Kermit-Datenstruktur gespeichert, die per Referenz vom Hauptmodul und zwischen allen Funktionen im Kermit-Modul und wieder zurück an das Hauptmodul übergeben wird; Daher sollte es für dasselbe Modul möglich sein, mehrere Dateien gleichzeitig über verschiedene Verbindungen zu übertragen. Darüber hinaus gibt es im Kermit-Modul keine Bibliotheksverweise, überhaupt keine, nicht einmal stdio (außer wenn Debugging aktiviert ist) und nein /usr/include/* Header-Dateien sind enthalten. Regeln für kermit.c :

  • Keine globalen Variablen (außer zum Debuggen) oder Puffer.
  • Keine Initialisierung von Arrays durch den Compiler.
  • Aus Sicherheitsgründen werden auch keine automatischen Skalare initialisiert.
  • Keine Bibliotheks- oder Systemaufrufe, nein #include <...> .
  • Die gesamte Kommunikations-E/A erfolgt durch Funktionen, die in separaten Modulen definiert sind.

Der einzige Einstiegspunkt für die kermit.c Modul ist das Kermit() Funktion:

int kermit(struct k_data * k, struct k_response * r)

Die k- Struktur enthält alle Betriebsparameter, Variablen, Zustandsinformationen und Puffer; Die r- Struktur hält den Aufrufer über den aktuellen Status des Protokolls, den Dateinamen und die Dateiinformationen sowie den Übertragungsfortschritt (bisherige Bytes) auf dem Laufenden.

Haupt c

Beispiel-Steuerungsprogramm. Im Unix-Testbed ist dies nur das Traditionelle hauptsächlich() , das Befehlszeilenargumente liest, das Protokoll initialisiert, dann das Protokollmodul in einer zustandsgesteuerten Schleife aufruft, bis seine Arbeit erledigt ist, und dann bereinigt. In der eingebetteten Umgebung würden diese Funktionen in das Steuerungsprogramm integriert.

unixio.c

I/O-Funktionen für Unix. Ersetzen Sie Ihr eigenes Modul, das diese Funktionen in der Zielumgebung implementiert, und ändern Sie Ihre Build-Prozedur, um eine Verknüpfung damit herzustellen. Nachfolgend werden Einstiegspunkte und Aufrufkonventionen beschrieben.

DIE UNIX-VERSION

Die Entwicklung von EK erfolgt auf einer herkömmlichen Unix-Plattform wie Mac OS, AIX, Solaris, HP-UX usw. oder heutzutage eher auf einer Variante von BSD oder Linux, in der EK als Kermit im Remote-Modus erstellt wird Dateiübertragungsprogramm, ähnlich wie G-Kermit, und mit einem Desktop-Kermit wie K95 oder C-Kermit getestet. HINWEIS: Die Unix-Version funktioniert über stdin/stdout; die „Linie“ ist auf die dümmste Art und Weise konditioniert ( system("stty ...") ). Dies führt zu unterschiedlichen Ergebnissen; Beispielsweise könnten Downloads von EK auf Solaris mit 17 Kcps laufen, wohingegen Downloads von Linux im selben Netz auf denselben PC mit 1700 Kcps laufen könnten. Dies ist kein Grund zur Sorge, da EK nicht für den Produktionseinsatz unter Unix gedacht ist, das bereits über G-Kermit und C-Kermit für die Produktion verfügt.

Das Unix-Makefile hat die folgenden Ziele (es ist einfach, weitere hinzuzufügen):

gcc: Erstellen Sie mit gcc (Standard).

CC: Bauen Sie mit CC.

PS: Erstellen Sie für HP-UX.

gccnd: Mit gcc erstellen, kein Debuggen.

gprof: Mit gcc erstellen, Profilerstellung einschließen.

sauber: Objekt- und Kerndateien entfernen.

Das Makefile erstellt eine ausführbare Unix-Datei namens „ek“ (eingebetteter Kermit). Die Probe hauptsächlich() Die Routine bietet eine einfache Befehlszeilenschnittstelle:

$ ./ek -h

Verwendung: ./ek-Optionen

Optionen:

-r Dateien empfangen

-s Dateien Dateien senden

-p [neoms] Parität: keine, gerade, ungerade, Markierung, Leerzeichen

-b [123] Blockprüfungstyp: 1, 2 oder 3 (Standard = 3)

-k Behält unvollständig empfangene Dateien

-B Binärmodus erzwingen

-T Textmodus erzwingen

-R Remote-Modus (vs. lokal)

-L Lokaler Modus (im Vergleich zu Remote)

-E -Nummer Simulierte Fehlerrate (0-100)

-d Erstellt debug.log

-h Hilfe (diese Nachricht)

$

Wenn Sie beim Senden von Dateien weder Text noch Binär angeben, scannt EK jede Datei und wählt basierend auf ihrem Inhalt den Text- oder Binärmodus.

Der Modus „Remote vs. Local“ wird nur verwendet, um den Test auf Tastaturunterbrechung der Dateiübertragung zu aktivieren.

PORTIERUNG AUF EINE NEUE PLATTFORM

Version 1.0 von EK wurde von Airvana, Inc, Chelmsford MA, auf VxWorks portiert. Das vollständige VxWorks EK 1.1-Paket ist mit Genehmigung von Airvana als Beispiel für ein Produktionssystem enthalten (beachten Sie, dass sich die EK-API seitdem geringfügig geändert hat, sodass der VxWorks-Code aktualisiert werden muss, bevor er verwendet werden kann). So portieren Sie es auf eine neue Plattform:

  • Fügen Sie einen neuen Makefile-Eintrag für Ihr Ziel hinzu oder schreiben Sie Ihre eigene Build-Prozedur.
  • Ein ... kreieren Plattform.h Datei für Ihre Plattform. Dies kann alle gewünschten #includes oder Definitionen umfassen und kann auch zum Überschreiben bestimmter Definitionen in verwendet werden kermit.h :
    #define NODEBUG ohne Debugging-Code zu erstellen.
    #define HAVE_UCHAR Wenn UCHAR ist bereits definiert oder Typdefinition würde zu unsigned char.
    #define HAVE_ULONG Wenn ULONG ist bereits definiert oder Typdefinition Würde zu lange unsigniert sein.
    #define IBUFLEN die gewünschte Größe für den Dateieingabepuffer sein.
    #OBUFLEN definieren die gewünschte Größe für den Dateiausgabepuffer sein.
    #define FN_MAX die maximale Länge für einen Dateinamen sein.
    #define P_PKTLEN um die standardmäßige maximale Paketlänge zu überschreiben.
    #define P_WSLOTS um die standardmäßigen maximalen Fensterschlitze zu überschreiben.
  • Ersetzen Sie die Probe Haupt c mit Ihrem eigenen Steuerungsprogramm. Verwenden Sie dieselben Header-Dateien und Aufrufkonventionen wie im Beispiel.
  • Kopieren unixio.c Zuxxx io.c (Name Ihrer Wahl), bearbeiten Sie es so, dass es auf Ihrer Plattform mit genau denselben Aufrufkonventionen funktioniert, und passen Sie Ihr Build-Verfahren an, um es mit Ihrem neuen zu verknüpfenxxx io Modul statt Unixio . Beachten Sie, dass die Eingabe- und Ausgabepuffer gefüllt werden ( i_buf[] Und o_buf[] ) muss in Ihrem definiert seinxxx io Routine.

Hier ein paar Tipps zum Erstellen eines I/O-Moduls:

Von den Geräte-E/A-Routinen wird erwartet, dass sie Kommunikationsparameter selbst verwalten, einschließlich Geschwindigkeit der Kommunikationsleitung, Parität und Flusskontrolle. Insbesondere kümmert sich Kermit nicht um Parität, muss aber trotzdem darüber informiert werden. Dies erfolgt im Setup per hauptsächlich() . Dein readpkt() Und tx_data() Routinen sollten bei Bedarf Parität entfernen bzw. hinzufügen. Bei seriellen Verbindungen kann der UART möglicherweise dafür programmiert werden.

API-Änderung zwischen EK 1.1 und 1.2: Aufrufkonventionen (Funktionsargumentlisten und Rückgabewerte) wurden zwischen Version 1.1 und 1.2 geändert, hauptsächlich um allen Routinen konsistenten Zugriff auf die k- Struktur zu ermöglichen und auch um dem Aufrufer ein besseres Feedback zu geben . Bei jeder Änderung wird sowohl das alte als auch das neue Format angezeigt.

Die Geräte-E/A-Funktionen sind:

int

devopen(char * Gerät)

Öffnet das angegebene Kommunikationsgerät. Könnte auch ein Netzwerkhost sein, was auch immer. Gibt 0 bei einem Fehler zurück, 1 bei Erfolg.

int

devsettings(char * Einstellungen)

Dieser nimmt alle erforderlichen Einstellungen für das Gerät vor, wie z. B. Geschwindigkeits- und Flusskontrolle für ein serielles Gerät. Da es keine Möglichkeit gibt, die relevanten Parameter zu kennen, benötigt diese Routine einfach eine Zeichenfolge, die ein beliebiges Format haben kann, z. B. „ 9600;8N1 " oder " speed=57600;flow=rts/cts "; die devsettings-Routine muss die Zeichenfolge analysieren. Gibt 0 bei Fehler und 1 bei Erfolg zurück.

int

devrestore(void)

Falls gewünscht, Gerät wieder zurückstellen devsettings() gefunden, z. B. kurz vor dem Schließen.

int

devclose(void)

Schließt das Kommunikationsgerät.

int

readpkt(UCHAR * buffer, struct k_data * k) (1.1)

readpkt(struct k_data * k, UCHAR * buffer, int length) (1.2)

Diese Routine muss genau das tun, was das Beispiel tut: nach dem Anfang des Pakets suchen und dann alle Zeichen bis zum Ende des Pakets (aber nicht einschließlich) in den Paketpuffer kopieren, dessen Adresse angegeben ist. Sie sollten dies so effizient wie möglich programmieren und dabei alle Ihnen zur Verfügung stehenden Tricks verwenden: nicht blockierende gepufferte Lesevorgänge usw. Wenn Sie möchten, dass Ihr Kermit-Programm eine Zeitüberschreitung erleidet, fügen Sie den Code hier ein. HINWEIS: Zeitüberschreitungen sind nicht erforderlich, da die Wahrscheinlichkeit, dass der Kermit-Partner von ek keine Zeitüberschreitung erleiden kann, bei etwa 0 liegt. Das EK 1.2-Format setzt k als erstes Argument für die Konsistenz mit anderen Routinen und fügt ein Pufferlängenargument hinzu.

Beachten Sie die F_CTRLC-Funktion. Dies ist standardmäßig aktiviert. Dadurch kann EK aus dem Paketmodus ausgebrochen werden, indem ihm drei aufeinanderfolgende Strg-C-Befehle im Datenstrom gesendet werden. Normalerweise müssten Sie dies nicht deaktivieren, denn selbst wenn der Absender das Präfix „Strg-C“ „entfernt“, würden drei davon in einer Reihe normalerweise zu einer Wiederholungszählungssequenz zusammengefasst.

int

tx_data(UCHAR * Daten, int Länge, kurze Parität) (1.1)

tx_data(struct k_data * k, UCHAR * data, int length) (1.2)

Auch hier müssen Sie die Parität berücksichtigen (sofern dies nicht automatisch vom Kommunikationsgerät oder Treiber erfolgt). Diese Routine sollte sowohl effizient als auch robust sein. Es soll den gesamten Datenstring übertragen, sonst schlägt es fehl. Siehe die unixio.c Beispiel dafür, was ich mit „robust“ meine. In EK 1.2 und höher wird die Paritätseinstellung aus der k- Struktur übernommen .

Die Datei-E/A-Funktionen sind wie folgt; Natürlich können sie zum Lesen oder Schreiben von allem verwendet werden – nicht nur von Dateien: Speicher, Band, Karten, Laserstrahlen, Instrumentensteuerungen und was auch immer. Es spielt keine Rolle, wie Sie diese Routinen nennen, aber die Argumentliste und der Rückgabetyp müssen wie gezeigt sein; Auch wenn Sie ihnen andere Namen geben, müssen Sie die Prototypen ändern kermit.h :

int

openfile(UCHAR * Dateiname, int Modus, struct k_date * k) (1.1)

openfile(struct k_date * k, UCHAR * Dateiname, int-Modus) (1.2)

Öffnet die benannte Datei im angegebenen Modus (1 = Lesen, 2 = Schreiben, 3 = Anhängen). Gibt X_OK bei Erfolg und X_ERROR bei Fehler zurück.

ULONG

fileinfo(UCHAR * Dateiname, UCHAR * buf, int buflen, short * type, short mode) (1.1)

fileinfo(struct k_data * k,UCHAR * filename,UCHAR * buf,int buflen,short * type,short mode) (1.2)

Ruft Informationen über die angegebene vorhandene lokale Datei ab: Größe, Datum und, wenn mode == 0, den Dateityp (Text oder Binär). buf und buflen gelten für die Datums-/Uhrzeitzeichenfolge der Datei. Gibt X_OK oder X_ERROR zurück.

int

readfile(struct k_data *)

Liest einen Puffer aus der Eingabedatei und konvertiert das Datensatzformat in das standardmäßige Kermit Stream CRLF, wenn die Übertragung im Textmodus erfolgt. Gibt X_OK oder X_ERROR zurück.

int

writefile(struct k_data *, CHAR * buffer, int length)

Schreibt einen Puffer in die Ausgabedatei und konvertiert bei der Übertragung im Textmodus auch das standardmäßige CRLF-Datensatzformat von Kermit Stream in das lokal erforderliche Format. Gibt X_OK oder X_ERROR zurück.

int

closefile(struct k_data *, UCHAR-Code, int-Modus)

Schließt die Datei. Bei Ausgabedateien werden dadurch natürlich alle ausstehenden Puffer in die Datei geleert, bevor sie geschlossen wird. Anschließend prüft es, ob der sendende Kermit die Dateiübertragung abgebrochen hat, bevor sie abgeschlossen war (Code == 'D'). In diesem Fall wird die Teildatei verworfen, anstatt sie zu behalten. Der Modus gibt an, ob es sich um eine Eingabe- oder Ausgabedatei handelt, sodass unvollständig empfangene Dateien bei Bedarf gelöscht werden können. Gibt X_OK oder X_ERROR zurück.

Die genauen Aufrufkonventionen finden Sie im unixio.c Datei.

DEBUGGING

Wenn EK ohne definiertes NODEBUG erstellt wurde, dann, wenn Sie Folgendes einschließen -D Option in der Befehlszeile erstellt die Unix-basierte Beispielversion von EK eine Austestungsprotokoll Datei in ihrem aktuellen Verzeichnis. In der Produktionsversion würden Sie -DNODEBUG zu den CFLAGS des C-Compilers hinzufügen, um den Debugcode zu entfernen. Die oben angezeigten Größen beinhalten das Debuggen. Sie können die Debug-Funktion beliebig in Ihrem plattformspezifischen I/O-Modul implementieren.

VERÖFFENTLICHUNGSGESCHICHTE

Ausführung

Datum

Beschreibung

1.1

07.10.2002

Erstveröffentlichung. VxWorks-Version immer noch auf diesem Stand.

1.2

28.01.2003

Verbesserte API, Java-Port (der sich immer noch auf diesem Niveau befindet).

1.3

04.03.2004

Dateiübertragung mit HyperTerminal beheben.

1.4

20.03.2004

Korrigieren Sie den Empfang leerer Dateien.

1.5

10.04.2004

Problem mit A-Paketen beheben, superkleine und/oder reine Empfangskonfigurationen zulassen.

1,51

23.09.2004

Anpassung an Philips XAG30 (John Dunlap)

EKSW 0,94

24.06.2010

Echte Schiebefenster mit selektiver Neuübertragung ( John Dunlap )

1.6

30.03.2011

Veröffentlicht und veröffentlicht unter der 3-Clause Revised BSD License .

1.7

06.06.2011

FORCE-3-Protokoll, funktioniert zusammen mit C-Kermit 9.0 ( hier erklärt )

1.8

26.06.2021

Problem mit den Befehlszeilenargumenten -B und -T behoben (nur Unix-Demo)

HERUNTERLADEN

Es stehen mehrere verschiedene E-Kermit-Implementierungen zum Download zur Verfügung. E-Kermit selbst, Version 1.8, ist die primäre Version. Version 1.7 bleibt verfügbar. Bei den anderen handelt es sich um Anpassungen an verschiedene Plattformen oder Sprachen, die in früheren Versionen von E-Kermit vorgenommen wurden, wie im vorherigen Abschnitt angegeben; Mit anderen Worten: Die in E-Kermit 1.3, 1.4 und 1.5 gefundenen Korrekturen sind nicht in den VxWorks- oder Java-Versionen enthalten, und die VxWorks-Version verwendet die E-Kermit 1.1-API anstelle der verbesserten Version 1.2. EKSW weist einige Modifikationen an der API und andere Inkonsistenzen auf, die rückgängig gemacht werden sollten, bevor es in EK 1.6 integriert werden kann, ist aber problemlos eigenständig verwendbar. Tatsächlich ist dies die Version, die in der neuen Generation der Apex-EM-Ozeanschwimmer zum Einsatz kommtund wurde unter widrigeren Bedingungen gründlicher getestet als möglicherweise jede andere Kermit-Protokollimplementierung. Daraus entsteht Version 1.7, die das neue Force-3 -Paketprotokoll zur Fehlerprüfung implementiert. (EKSW sollte das irgendwann auch bekommen.)

Name

Beschreibung

Teer *

Reißverschluss

Quelldaten

E-Kermit 1.8

Portierbar auf alle Plattformen, mit Unix-Demo.

Herunterladen

Herunterladen

Herunterladen

E-Kermit 1.7

Portierbar auf alle Plattformen, mit Unix-Demo.

Herunterladen

Herunterladen

Herunterladen

EKSW 0,94

E-Kermit mit echten Schiebefenstern, angepasst an Linux.

Herunterladen

Herunterladen

Herunterladen

EKVX 1.1

E-Kermit 1.1 angepasst an VxWorks.

Herunterladen

Herunterladen

Herunterladen

Java

E-Kermit 1.2 auf Java konvertiert

Herunterladen

Herunterladen

Herunterladen

Simirid

Kermit-Protokoll-Stresstester [ Beschreibung ]

Herunterladen

Herunterladen

Herunterladen

* Nicht komprimiert, keine Notwendigkeit, sie sind sehr klein.