Differences
This shows you the differences between two versions of the page.
|
cor4_server [2005/09/30 22:16] ivivan |
— (current) | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Cor4 szerver kapcsolat ====== | ||
| - | A kapcsolat titkosítására [[http://en.wikipedia.org/wiki/RC6_cipher|RC6]] kódot használnék, 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ó [[http://en.wikipedia.org/wiki/MD5|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 [[cor4app_tipusok|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 [[http://en.wikipedia.org/wiki/Base64|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 a SELECT SQL utasítás által visszaadott táblázat 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 [[cor4app_tipusok|tipusnak]] megfelelően történik. | ||
| - | |||
| - | ^ Érték ^ Megnevezés ^ Értékkészlet ^ | ||
| - | | 1 | integer | -2<sup>32</sup>...2<sup>32</sup>-1 | | ||
| - | | 2 | string | | | ||
| - | | 3 | boolean | true/false | | ||
| - | |||
| - | ==== 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 | 16 0 0 0 | | ||
| - | | Csomag tipus | 5 | | ||
| - | | Mezőnevek | 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 | 2 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 | 3 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 | 4 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 | 5 0 0 0 8 0 97 98 97 108 105 103 101 116 | | ||