Find file
Fetching contributors…
Cannot retrieve contributors at this time
52 lines (35 sloc) 2.63 KB
Protokoll der Pentawall
=======================
Folgende Liste beschreibt das Verhalten von sebseb7/pentawall - in carwe/pentawallsim sind nur die Opcodes 02 und 03 implementiert.
Das Protokoll basiert auf einem Socket (aktuell TCP/IP an 172.22.99.6:1338), auf dem Pakete gesendet werden, dabei beginnt jedes Paket mit einem Opcode und endet mit einem Zeilenumbruch (0x0d0a). (XXpaket\r\n)
Je zwei Byte auf dem Socket beschreiben ein Byte des Protokolls. Auf dem Socket werden nur ASCII-Zeichen gesendet (konkret "0-9a-fA-F\r\n").
Die Opcodes gehen also von 00 bis FF und jedes andere Zeichen auch.
Die Koordinaten beginnen links oben mit 1;1 - der x-Wert geht nach rechts und y dementsprechend nach unten. Wenn komplette Frames gesendet werden, beginnt man mit 1;1 und sendet dann Zeile um Zeile.
TCP-Verbindungen werden bei Nichtbenutzung nach einiger Zeit (5 Minuten) getrennt. Wenn es nötig ist, die Verbindung lännger offen zu halten, kann ein keep-alive gesendet werden.
Es wird immer das höchste Prioritätslevel angezeigt, das von einer aktiven Verbindung ausgewählt ist. Neue Verbindungen starten auf Level 1, das niedrigste Level ist Level 0, welches angezeigt wird, wenn keine Verbindungen bestehen. Level 0 wird gespeichert und wird nach einem Crash oder Restart des Server-Prozesses wiederhergestellt, jedoch nicht nach einem Abschalten des Hosts (tmpfs). Die Daten von höheren Leveln bleiben nicht erhalten, wenn man auf ein niedrigeres Level wechselt und dann wieder auf das höhere Level.
Die Maximaldauer von Aufnahmen (Opcode 05) ist auf 5 Minuten begrenzt.
Opcodes
-------
Opcode Client->Server Server->Client:
01 keep-alive "ok"
02 put pixel "ok"/"bad"
03 put frame "ok"/"bad"
04 set priority "ok"
05 start record "ok"
06 stop record ID (Dateiname)
keep-alive
----------
Um den Timeout der TCP-Verbindungen zu umgehen, kann ein noop/keep-alive gesendet werden: 01\r\n
put pixel:
----------
Paket-Inhalt ist im Format xxyyrrggbb, je zwei Byte beschreiben als ASCII-Zeichen hexadezimal die x-, y-Koordinate sowie den r-,g- und b-Anteil
z.B. Pixel (16;15) soll maximales Gelb (255;255;0) sein: 100fffff00
insgesamt muss dann gesendet werden: 02100fffff00\r\n
put frame:
----------
Paket-Inhalt besteht aus x*y * rrggbb in ASCII-hexadezimaler Schreibweise (r-,g- und b-Anteil) ohne Trennung hintereinander gesendet (Zeilen->Spalten), der Server trennt die Zeilen anhand seiner Konfiguration.
z.B.: 03ffffff000000ffffff000000... ...000000ffffff\r\n
set priority:
-------------
Setzt das Level, in das die Daten dieser TCP-Verbindung geleitet werden. Das höchste von irgend einer Verbindung gewählte Level wird angezeigt.
z.B.: 0403\r\n