Spis treści: 1. Format listy kontaktów ekg 2. Format konfiguracji ekg 3. Format konfiguracji zapisanej na serwerze 4. Format historii ekg 5. Format emotikon (Adam Osuchowski ) * * * 1. Format listy kontaktów ekg Lista kontaktów z pliku ,,userlist'' jest tego samego formatu co eksportowana z windowsowego klienta: imię;nazwisko;pseudonim;wyświetlana_nazwa;telefon;grupy;numer;email ekg może dopisać użytkownika do kilku metagrup: __blocked - użytkownik blokowany __offline - jesteśmy niedostępni dla użytkownika __ignored_ - użytkownik jest ignorowany z danym poziomem __ignored - wszystkie zdarzenia związane z użytkownikiem są ignorowane * * * 2. Format konfiguracji ekg Plik konfiguracyjny ,,config'' zawiera kolejne wpisy postaci: set bind alias on Jeśli pierwszy wyraz nie jest jednym ze znanych, jest traktowany jako nazwa zmiennej, po której występuje jej wartość -- chodzi o zachowanie kompatybilności z innymi klientami. Jeśli wartość zmiennej zaczyna się od znaku o kodzie 1, to następująca po nim wartość zmiennej jest zakodowana używając base64. * * * 3. Format konfiguracji zapisanej na serwerze Jeśli użytkownik umieści na serwerze również konfigurację, wszystkie zmienne (oprócz ,,uin'' i ,,password'', bo te nie są wysyłane) zostaną zapisane w skróconej postaci. Każda zmienna jest opisana przez swoją dwuliterową nazwę (nie można używać cyfr). Jeśli zmienna jest zmienną liczbową, zaraz po nazwie umieszcza się jej wartość, a za nią kolejną zmienną. Jeśli zmienna jest tekstowa i jest pusta, po nazwie umieszczany jest minus ,,-'' i za nim kolejna zmienna. Jeśli pierwszy znak zmiennej tekstowej jest plusem ,,+'', zawartość zmiennej została zakodowana w base64 i kończy się znakiem dwukropka ,,:''. Jeśli pierwszym znakiem nie jest plus, treść zmiennej znajduje się zaraz za nazwą i również kończy się dwukropkiem. Po dwukropku znajduje się kolejna zmienna. Widać zatem, że zmienne, w których występuje dwukropek lub średnik, albo zaczynają się od plusa, muszą zostać zakodowane w base64. Oto przykłady: dc1di127.0.0.1:ts+JUg6JU0gAA==:qr- dc (display_color) = 1 di (dcc_ip) = "127.0.0.1" ts (timestamp) = "%H:%M " qr (quit_reason) = (brak) Tak zapisana lista zmiennych jest umieszczana w oddzielnych wpisach listy kontaktów. Zamiast imienia jest ,,__config'', gdzie jest kolejną liczbą, ale w rzeczywistości nie ma większego znaczenia. Lista zmiennych jest dzielona po 24 znaki i umieszczana w pięciu kolejnych polach listy kontaktów. w ostatnim polu znajduje się losowa liczba udająca numerek osoby. Przy odbiorze nie ma znaczenia liczba po ,,__config'', nie ma znaczenia podział na kolejne pola. Wszystko jest i tak sklejane w jeden ciąg znaków i dopiero potem analizowane. * * * 4. Format historii ekg W zależności od ustawienia klienta, historia może być umieszczona w pojedynczym pliku (domyślnie ~/.gg/history) lub w osobnych plikach, po każdym na osobny numerek rozmówcy (domyślnie ~/.gg/history/). Pliki mogą być skompresowane za pomocą gzip -- w takim wypadku mają rozszerzenie ,,.gz''. Wpisy są w formacie CSV, tj. każdy wpis znajduje się w oddzielnej linii, a jego poszczególne kolumny są oddzielone przecinkami. Jeżeli któraś kolumna zawiera znak przecinka, nowej linii, cudzysłów, backslash, to cała zawartość kolumny zostaje ujęta w cudzysłów i zapisana jak ciąg znaków języka C. Możliwe wpisy to: - wysyłana wiadomość lub rozmowa: chatsend,,,, msgsend,,,, - odebrana wiadomość lub rozmowa: chatrecv,,,,, msgrecv,,,,, - ignorowana wiadomość lub rozmowa, gdy włączono opcję log_ignored: chatrecvign,,,,, msgrecvign,,,,, - zmiana stanu: status,,,[:port],, status,,,[:port],,, gdzie: - - numer nadawcy, odbiorcy lub osoby zmieniającej stan, - - pseudonim osoby, - - domyślnie ilość sekund od 1 stycznia 1970r. UTC, ale użytkownik może zmienić format tego pola za pomocą zmiennej log_timestamp, - - jeśli jest nieznany, zapisuje się ,,0.0.0.0'', - - jeden z ,,avail'', ,,busy'', ,,invisble'' i ,,notavail''. * * * 5. Format emotikon (Adam Osuchowski ) Za pomocą oryginalnego klienta GG można wysłać sekwencje znakowe, które będą się zamieniać na odpowiednie ikony. Z oczywistych względów w ekg wykonać się tego nie da (może ktoś kiedyś zrobi wsparcie dla aaliba ;))). Sekwencje te, zamieniane są więc na inne sekwencje. Np. sekwencja: może być zamieniona na: :-* lub podobną, wedle uznania użytkownika. Aby skorzystać z możliwości rozwijania tego typu makr w otrzymywanych wiadomościach, należy je sobie wcześniej zdefiniować. Robi się to w pliku ~/.gg/emoticons. Każda linia tego pliku definiuje jedno makro, a jej format jest następujący: Należy zwrócić uwagę na to, że do oddzielenia emoticonu od jego rozwinięcia służą tylko i wyłącznie tabulatory (jeden lub więcej). Spowodowane jest to występowaniem spacji w oryginalnych GG-owych emoticonach. Przykładowy zestaw definicji można znaleźć w docs/emoticons.sample. Nie zawiera on wszystkich definicji, bo nie miałem na tyle inwencji, żeby je powymyślać. :)) $Id$