Strict Standards: Declaration of action_plugin_importoldindex::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /var/www/html/lib/plugins/importoldindex/action.php on line 8

Strict Standards: Declaration of action_plugin_popularity::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /var/www/html/lib/plugins/popularity/action.php on line 57

Strict Standards: Declaration of action_plugin_safefnrecode::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /var/www/html/lib/plugins/safefnrecode/action.php on line 66

Strict Standards: Declaration of action_plugin_importoldchangelog::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /var/www/html/lib/plugins/importoldchangelog/action.php on line 182

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/lib/plugins/importoldindex/action.php:8) in /var/www/html/inc/actions.php on line 180
 cor4:app:server [Cor4 WIki]

Cor4 szerver kapcsolat

A kapcsolat titkosítására RC6 kódot használunk, melynek legfontosabb tulajdonsága, hogy szimmetrikus, azaz mindössze egy kódra van szükség, ami ráadásul tetszőleges jelsorozat lehet (nem kell prímnek lennie).

Az alapötlet szerint ez a kód a jelszó MD5 kódja, így a kliensen nincs szükség sem a jelszó sem a kód tárolására valamint a jelszó ismerete nélkül az esetleges elkapott üzenet is értelmezhetetlen marad.

A kommunikáció bináris csomagokat alkalmaz a nagy adatmennyiségek hatékony átvitele céljából. Minden csomag egy négy bájtos hosszal kezdődik, amely a teljes csomag (a négy bájtos hosszon kívüli) méretét adja meg. A csomag hossza kódolt üzenet esetén is kódolatlan. Ezután egy bájton a csomag tipusa következik, majd az egyes csomagokra jellemző adatok.

A következőkben az egyes üzenetek formátumát foglalom össze. Az egyes tipusokról itt olvashat bővebben.

Általános csomagok

OK

Megnevezés Tipus Érték
Csomag hossz integer
Csomag tipus byte 00
Megválaszolt csomag tipusa byte
Véletlen adat string

ERROR

Megnevezés Tipus Érték
Csomag hossz integer
Csomag tipus byte 255
Megválaszolt csomag tipusa byte
Hibakód integer
Hiba szövege string
Véletlen adat string

Kapcsolatfelvétel, bontás

LOGIN

A kliens küldi a szervernek. Az egyetlen kódolatlan üzenet, mely egyelőre csak a felhasználó nevét és a kliensverzió számát tartalmazza.

A válasz már kódolt. Amennyiben a megadott felhasználó létezik, akkor a válasz egy OK üzenet, amely a felhasználó jelszavának MD5 kódjával kódolt. Amennyiben a megadott felhasználó nem létezik, akkor a válasz egy ERROR üzenet véletlenszerű kóddal kódolva.

Megnevezés Tipus Érték
Csomag hossz integer
Csomag tipus byte 01
Felhasználó neve string
Kliens verzió 4 byte 1.2.3.4

DISCONNECT

A kliens küldi a szervernek, melynek hatására a szerver egyszerűen megszakítja a kapcsolatot.

Megnevezés Tipus Érték
Csomag hossz integer
Csomag tipus byte 02

Adminisztráció

CHPASS

A kliens küldi a szervernek a jelszó megváltoztatása céljából. A szerver ennek hatására egy OK vagy egy ERROR üzenetet küld. Nyilvánvalóan a jelszó csak az OK üzenet visszajelzése esetén valósul meg. A kódolás a következő bejelentkezésig nem változik.

Megnevezés Tipus Érték
Csomag hossz integer
Csomag tipus byte 03
Új jelszó MD5 kódja base64 kódolva string

Adatbázis műveletek

QUERY

A kliens által küldött lekérdezést tartalmazza. Mivel a szerver mögött tetszőleges adatbáziskezelő lehet, érdemes odafigyelni arra, hogy a küldött lekérdezés minden adatbáziskezelő által emészthető legyen.

Amennyiben a lekérdezés hibát okoz a szerver ERROR üzenettel válaszol. Amennyiben a lekérdezés egy SELECT SQL utasítás, akkor a visszaadott csomag RESULT tipusú. Minden egyéb esetben (UPDATE, INSERT stb.) egy OK üzenetet kapunk.

Megnevezés Tipus Érték
Csomag hossz integer
Csomag tipus byte 04
Lekérdezés string

RESULT_HEAD

A szerver által adott válasz a QUERY üzenetre.

Megnevezés Tipus Érték
Csomag hossz integer
Csomag tipus byte 05
Mezőnevek stringlist
Mezőtipusok n db byte az egyes bájtok a megfelelő oszlop tipusát adják meg a lentebbi táblázat szerint
Sorok száma integer

Ezután az üzenet után Sorok száma számú RESULT_ROW üzenet következik.

Az alábbi táblázat adja meg a Mezőtipusok mezőben definiált tipusok jelentését. A tárolás a tipusnak megfelelően történik.

Érték Megnevezés Értékkészlet
1 integer -232…232-1
2 string
3 boolean true/false
4 numeric tetszőleges szám 1)
5 date

RESULT_ROW

A lekérdezés eredményének egyes sorai.

Megnevezés Tipus Érték
Csomag hossz integer
Csomag tipus byte 06
Sorszám integer a csomag lekérdezésbeli sorszáma
Adat raw a fejléc által definiált mezők elválasztójel nélkül

Példa

Példaként álljon itt egy két oszlopos lekérdezés eredménye (SELECT id,nev FROM varos LIMIT 5), ahol az id integer tipusú, a nev pedig természetesen string. A számok decimális számok.

Megnevezés Érték
Csomag hossz 18 0 0 0
Csomag tipus 5
Mezőnevek 2 0 0 0 2 0 105 100 3 0 110 101 118
Mezőtipusok 1 2
Sorok száma 5 0 0 0
Megnevezés Érték
Csomag hossz 21
Csomag tipus 6
Sorszám 1 0 0 0
Adatok 1 0 0 0 8 0 98 117 100 97 112 101 115 116 5
Megnevezés Érték
Csomag hossz 16
Csomag tipus 6
Sorszám 2 0 0 0
Adatok 1 0 0 0 5 0 122 111 109 98 97
Megnevezés Érték
Csomag hossz 18
Csomag tipus 6
Sorszám 3 0 0 0
Adatok 1 0 0 0 7 0 114 97 107 97 109 97 122
Megnevezés Érték
Csomag hossz 14
Csomag tipus 6
Sorszám 4 0 0 0
Adatok 1 0 0 0 3 0 97 98 97
Megnevezés Érték
Csomag hossz 19
Csomag tipus 6
Sorszám 5 0 0 0
Adatok 1 0 0 0 8 0 97 98 97 108 105 103 101 116
1) a PostgreSQL numeric tipusa gyakorlatilag tetszőleges szám tárolására alkalmas; a kliens által maximum 16-17 értékes jegy kerül tárolásra

cor4/app/server.txt · Last modified: 2021/01/05 11:39 (external edit)