Opis protokołu Onet Czat

Opis protokołu kamerek

  1. Połączenie
  2. Ogólny zarys działania protokołu
  3. Autoryzacja
  4. Przykładowy przebieg sesji
  5. Opis pakietów
  6. Opis pakietów wysyłanych przez klienta
  7. Przykłady implementacji
  8. Kontakt

1. Połączenie

Połączenie z serwerem Kamerek nawiązujemy na adresie IP 212.244.48.54 i porcie 5008.

2. Ogólny zarys działania protokołu

Wszystkie dane otrzymywane jak i wysyłane do serwera muszą być kodowane w formacie ISO-8859-2.

Pakiety najłatwiej identyfikować za pomocą id które znajduje się na początku każdego pakietu jako trzycyfrowy ciąg cyfr.

Jeśli pakiet nie ma podanej liczby bajtów podane po id pakietu jak na przykład:

232 0 CMODE 0

To oznacza to, że kończy się on wraz ze znakiem końca linii (\n).

Jeśli natomiast posiada on podaną liczbę bajtów, np:

254 1489 USER_COUNT_UPDATE

Musimy pobrać po nim jego dane, czyli 1489 bajtów które przyjdą po pakiecie.

Należy również zwrócić uwagę na to, że pakiety przychodzą zaraz po sobie czyli więc zaraz po jednym pakiecie, przychodzi pakiet drugi.

3. Autoryzacja

Po poprawnym połączeniu się musimy się autoryzować. Pierwsi wysyłamy pakiet powitalny, który wygląda tak:

CAUTH 1234567890123456 3.1(applet)

Za pomocą tego pakietu identyfikujemy naszego klienta o czym mówi pierwsza część pakietu (CAUTH). Niestety nie wiem co oznacza druga wartość pakietu ale z tego co zauważyłem zawsze przyjmuje ona wartość 1234567890123456 (przynajmniej przy łączeniu przez applet). Trzecia wartość to najprawdopodobniej identyfikacja wersji appletu lub identyfikacja protokołu kamerek z którego chcemy korzystać.

W odpowiedzi na nasze zapytanie serwer powinien nam zwrócić pakiet oznaczający poprawne rozpoznanie klienta, który wygląda mniej więcej tak:

268 0 OK

Teraz czas na właściwą autentykację. Wysyłamy do serwera pakiet o mniej więcej takiej budowie:

AUTH L02w3h_QDSgD0ErPcXJBwRXkyK4CgkRB 3.1(applet)

Pierwszej części chyba nie muszę tłumaczyć. Druga część to nasz UOKey (TODO: trzeba dopisać jak go uzyskać) a trzecia - ponownie podana wersja.

Po poprawnej autentykacji uzyskamy kilka pakietów:

231 0 OK kkszysiu2
232 0 CMODE 0
264 0 CODE_ACCEPTED ffffffff 2147483647
233 0 QUALITY_FACTOR 1

Nie znam przeznaczenia pakietów o id 232, 264 i 233. Pakiet 231 oznacza, że zostaliśmy poprawnie zalogowani. Po tym pakiecie zaczniemy odbierać interesujące nas pakiety, które się nam przydadzą.

4. Przykładowy przebieg sesji

[send]: CAUTH 1234567890123456 3.1(applet)
[recv]: 268 0 OK
[send]: AUTH XeMKz_NmTIjXdTfDNLACR3IVpO1k0o7N 3.1(applet)
[recv]: 231 0 OK kkszysiu3
[recv]: 232 0 CMODE 0
[recv]: 264 0 CODE_ACCEPTED ffffffff 2147483647
[recv]: 233 0 QUALITY_FACTOR 1
[recv]: 250 12519 OK
<< Zalogowano i mozemy pobierac pakiety z protokolu kamerek. >>
[recv]: 251 30 UPDATE
magdula77:1:5/0/#Tarnów/0:0::0
[recv]: 251 34 UPDATE
luukkaass:1:3/0/#kamera_sex/0:0::0
[recv]: 251 31 UPDATE
jeeaas:1:2/0/#Towarzyski/0:1::0
[recv]: 251 112 UPDATE
[send]: SUBSCRIBE_BIG * Delikatna
[send]: KEEPALIVE_BIG Delikatna
malysynek123:1:3/0/#Bi/0,3/0/#BEZ_MAJTECZEK/0:3::0
[recv]: 251 20 UPDATE
pokryty_mgla:1::0::0
[recv]: 251 9 UPDATE
adass24:-
[recv]: 251 17 UPDATE
marcinqqu:1::0::0
[recv]: 254 1534 USER_COUNT_UPDATE 
[recv]: 252 0 USER_STATUS Delikatna 
[recv]: 253 0 USER_VOTES Delikatna 38
[recv]: 202 5320 IMAGE_UPDATE_BIG Delikatna
[recv]: 251 56 UPDATE
bernifl:1:5/0/#Częstochowa/0,3/0/#kamera_sex/0:0:01235:0
[recv]: 251 34 UPDATE
piotrek28:1:2/0/#Towarzyski/0:0::0
[send]: KEEPALIVE_BIG Delikatna
[recv]: 202 5402 IMAGE_UPDATE_BIG Delikatna
[recv]: 251 73 UPDATE
sony68:1:3/0/#Ukryta_kamera/0,3/0/#BEZ_MAJTECZEK/0,3/0/#kamera_sex/0:1::0
[recv]: 251 20 UPDATE
pokryty_mgla:1::0::0
[send]: KEEPALIVE_BIG Delikatna
[recv]: 251 74 UPDATE
arkado1:1:2/0/#A_MOZE_ZDRADA/0,2/0/#Towarzyski/0,2/0/#30_i_40_latki/0:0::0
[recv]: 202 5982 IMAGE_UPDATE_BIG Delikatna
[recv]: 251 16 UPDATE
facet_40_opole:-
[send]: KEEPALIVE_BIG Delikatna
[recv]: 202 5411 IMAGE_UPDATE_BIG Delikatna

Pakiety oznaczone jako [send] to pakiety wysyłane przez klienta do serwera a [recv] - pakiety odbierane.

5. Opis pakietów

Uwaga: nie są to pewnie wszystkie pakiety używane przez protokół. Opisałem tylko te pakiety, które poznałem. Jeśli odkryjesz nowy pakiet, proszę do mnie pisać na maila, złapać mnie na czacie lub pisać na mój numer GG: 5120225.

Pakiet, który odbieramy przy poprawnej identyfikacji klienta po wysłaniu CAUTH:

268 0 OK

Pakiet który odbieramy po poprawnej autentykacji użytkownika:

231 0 OK kkszysiu2

Pakiety te przychodzą zaraz po pakiecie 231. Nie wiem niestety co oznaczają:

232 0 CMODE 0
264 0 CODE_ACCEPTED ffffffff 2147483647
233 0 QUALITY_FACTOR 1

Pakiet przychodzi zaraz po pakiecie 233. Zawiera on szczegółową listę użytkowników zalogowanych do kamerek i nadających obraz wraz z dodatkowymi danymi:

250 10118 OK

Druga część pakietu 10118 oznacza długość danych pakietu które musimy pobrać.

Dane te wyglądają mniej więcej tak:

A0mlody_on24:1:3/0/#Ukryta_kamera/0,3/0/#BEZ_MAJTECZEK/0,3/0/#kamera_sex/0:0:4:0
A_FajnyPtaszek:1:3/0/#SEX_CZAT/0,3/0/#BEZ_MAJTECZEK/0,3/0/#chcę_sexu/0,3/0/#kamera_sex/0:4::47
a_mirekm_de:1:2/0/#Towarzyski/0,5/0/#DEUTSCHLAND/0:0:01234:0

Niestety nie potrafię jeszcze powiedzieć co oznaczają niektóre dane. Na pewno możemy z tego wyciągnąć w których pokojach siedzi użytkownik a info o każdym użytkowniku jest oddzielone od siebie znakiem nowej linii (\n).

Kolejnym pakietem który często będziemy odbierać to pakiet 251:

251 49 UPDATE

Pakiet uaktualnia dane o użytkowniku. Nie wiem jednak co oznacza większość wartości. Dane pakietu wyglądają mniej więcej tak:

wiktor_320:1:2/0/#Towarzyski/0,2/0/#igunia/0:0::0

Co jakiś czas serwer przysyła nam również pakiet:

254 1489 USER_COUNT_UPDATE

Zawiera on liczbę użytkowników zalogowanych do kamerek. Przykładowe dane pakietu wyglądają tak:

niespodzianka_ona 4 0
NieznajomA2011 33 4
O_chcesz_popatrz 5 18

Pierwsza część to nick użytkownika. Druga - liczba obserwujących jego kamerkę a trzecia - liczbę głosów użytkownika.

Gdy poprosimy serwer o odbieranie obrazu z danej kamerki pierwszymi pakietami jakie otrzymamy bedą pakiety 252 i 253:

Pakiet 252 zawiera status użytkownika kamerki. Jeśli użytkownik nie ma ustawionego statusu pakiet ma 0 ilość danych, jeśli jednak user ustawił status wartość bajtów będzie wiekszą a pakiet będzie zawierał za sobą dane. Warto o tym pamiętać:

252 0 USER_STATUS Delikatna

Lub:

252 41 USER_STATUS pati28ash
SETSTATUS zapraszam na pokoj london spoko

Kolejnym pakietem który otrzymamy będzie pakiet 253 który tym razem zawsze ma wartość bajtów równą zeru i zawiera liczbę głosów użytkowników na daną kamerkę w ostatniej części pakietu, np:

253 0 USER_VOTES Delikatna 38

Następnie po każdym wysłanym pakiecie KEEPALIVE będziemy otrzymywać pakiet:

202 5411 IMAGE_UPDATE_BIG Delikatna

Który jest dla nas najbardziej interesujący bo w swoich danych przenosi on obraz w formacie JPG z kamerki internetowej użytkownika :)

412 0 SUBSCRIBE_FAILED olgusia32

Pakiet ten występuję gdy nie udało się ustanowić połączenie z kamerką.

413 0 SUBSCRIBE_DENIED aliina

Nie wiem kiedy występuje ten pakiet ale kiedyś go odebrałem :P

408 0 NO_SUCH_USER_SUBSCRIBE LenCia

Pakiet występuje gdy próbujemy nawiązać połączenie z użytkownikiem który nie jest online/nie istnieje.

405 0 USER_GONE Restonka

Pakiet odbieramy gdy użytkownik opuści czat/wyłączy kamerkę.

6. Opis pakietów wysyłanych przez klienta

SUBSCRIBE_BIG * kkszysiu

Nawiązywanie połączenia z użytkownikiem kamerki.

UNSUBSCRIBE_BIG * kkszysiu

Kończenie połączenia z kamerką.

KEEPALIVE_BIG kkszysiu

Prośba do serwera o wysłanie nowego obrazu z kamerki. Obraz jest aktualizowany co sekundę. Jeśli serwer nie ma jeszcze nowego obrazu z kamerki zakolejkuje on naszą prośbę i wyśle nam dane gdy je otrzyma. Nowy obraz pojawia się średnio co sekundę (dlatego nie ma sensu wysyłać częściej tego pakietu do serwera).

7. Przykłady implementacji

PyOnetCzat

Biblioteka napisana w Pythonie, zawiera implementację protokołu kamerek i kilka przykładów jej użycia.

http://github.com/kkszysiu/pyonetczat

8. Kontakt

W razie pytań i niejasności zapraszam na czat (pokój #testy lub #scc), nr. GG 5120225 lub kontakt mailowy pod adresem kkszysiu gmail com.