[libgadu-devel] Wiadomości przychodzące i zamiana HTML-a na czysty tekst
Witam, Funkcja gg_session_handle_recv_msg_80() zakłada, że zawsze dostanie wiadomość w czystym tekście, natomiast wiadomość w formacie HTML jest opcjonalna. Jednak, jak widzę, w przypadku dostania wiadomości w formacie HTML wiadomość w czystym tekście jest całkowicie ignorowana i do pola message struktury gg_event_msg jest przypisywany wynik funkcji gg_message_html_to_text() z argumentem zawierającym przesłaną nam wiadomość HTML. I tutaj rodzi się problem, bo jeśli klient libgadu postanowi przeczytać atrybuty formatowania zamiast wiadomości HTML (tak robi Kadu), a wynik funkcji gg_message_html_to_text() będzie się różnił od wiadomości oryginalnie przesłanej przez rozmówcę, to wynikiem będzie błędne wyświetlenie sformatowanej wiadomości. Taka sytuacja ma miejsce w przypadku rozmowy z Infobotem, który w wiadomościach czystym tekstem znaki nowej linii koduje jako \r\n, a nie jako \n, jak oryginalny klient. Trudno mi sobie wyobrazić, jak w rozsądny sposób można by dostosować do takiego przypadku funkcję gg_message_html_to_text(), więc moje pytanie brzmi, dlaczego właściwie libgadu dokonuje konwersji HTML-a do czystego tekstu, zamiast wziąć to, co wysłał rozmówca? Prosta łata, którą załączam, zdaje się rozwiązywać problem i moje testowanie jej w rozmowie z klientem libgadu (Kadu), oryginalnym klientem GG 10.5, botem Infobot oraz botem Allegro nie wykazało żadnych problemów. Pozdrawiam, Bartosz diff --git a/src/handlers.c b/src/handlers.c index a843b4b..17e22f9 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -926,23 +926,7 @@ static int gg_session_handle_recv_msg_80(struct gg_session *sess, uint32_t type, } } - if (sess-encoding == GG_ENCODING_CP1250) { - e-event.msg.message = (unsigned char*) strdup(packet + offset_plain); - } else { - if (offset_plain sizeof(struct gg_recv_msg80)) { - int len; - - len = gg_message_html_to_text(NULL, packet + sizeof(struct gg_recv_msg80)); - e-event.msg.message = malloc(len + 1); - - if (e-event.msg.message == NULL) -goto fail; - - gg_message_html_to_text((char*) e-event.msg.message, packet + sizeof(struct gg_recv_msg80)); - } else { - e-event.msg.message = (unsigned char*) gg_encoding_convert(packet + offset_plain, GG_ENCODING_CP1250, sess-encoding, -1, -1); - } - } + e-event.msg.message = (unsigned char*) gg_encoding_convert(packet + offset_plain, GG_ENCODING_CP1250, sess-encoding, -1, -1); if (offset_plain sizeof(struct gg_recv_msg80)) e-event.msg.xhtml_message = gg_encoding_convert(packet + sizeof(struct gg_recv_msg80), GG_ENCODING_UTF8, sess-encoding, -1, -1); ___ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel
[libgadu-devel] Propozycja zmian w obsłudze przesyłania formatowanych wiadomości HTML
Witam, W Kadu stwierdziliśmy, że miło by było pozbyć się kodu odpowiedzialnego za formatowanie wiadomości GG za pomocą atrybutów i pracować wyłącznie na HTML-u. Stąd propozycja kilku zmian w libgadu. Jestem gotów je zaimplementować, chciałbym tylko się dogadać, jak to ma być zrobione i w czy w ogóle wszystkim to pasuje. Oto propozycje: 1. Stripować nieprzewidzanie przez protokół znaczniki HTML w odebranych wiadomościach (np. script zamieniać na lt;scriptgt;). 2. Jeśli otrzymujemy tylko wiadomość czystym tekstem, konwertować ją do HTML-a. Tutaj widzę, że jest właściwie gotowa funkcja do tego celu. 3. Dodać możliwość wysyłania wiadomości poprzez podanie tylko HTML-a - libgadu zajęło by się przekonwertowaniem go do czystego tekstu z atrybutami formatowania. Pytanie tylko, jak takie funkcje mogłoby się nazywać? Pozdrawiam, Bartosz ___ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel
Re: [libgadu-devel] Propozycja zmian w obsłudze przesyłania formatowanych wiadomości HTML
On Wed, May 11, 2011 at 04:05:02PM +0200, Bartosz Brachaczek wrote: Czy w ogóle wszystkim to pasuje. Mnie pasuje jeśli klient nieznające htmla (ekg, ekg2) będą dalej działac. 1. Stripować nieprzewidzanie przez protokół znaczniki HTML w odebranych wiadomościach (np. script zamieniać na lt;scriptgt;). script jest prawidłowym znacznikiem HTML, opisanym między innymi w [1]. [1] http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.1 Pozdr. ___ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel
Re: [libgadu-devel] Wiadomości przychodzące i zamiana HTML-a na czysty tekst
On Wed, May 11, 2011 at 02:57:52PM +0200, Bartosz Brachaczek wrote: Łata, którą załączam, zdaje się rozwiązywać problem i moje testowanie jej w rozmowie z klientem libgadu (Kadu), oryginalnym klientem GG 10.5, botem Infobot oraz botem Allegro nie wykazało żadnych problemów. Racja, skoro korzystamy z odebranych formatek (a nie przerabiamy ich z htmla), to powinniśmy też korzystać z orygianlnej wiadomości. Chyba, że lepszym rozwiązaniem byłoby właśnie konwertowanie, Wojtek? Pozdr. ___ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel
Re: [libgadu-devel] Propozycja zmian w obsłudze przesyłania formatowanych wiadomości HTML
Witam, 1. Stripować nieprzewidzanie przez protokół znaczniki HTML Moim zdaniem Bartkowi chodziło o nie przewidziane znaczniki w protokole GG, a nie o specyfikację HTML. Wyobraźmy sobie, co by było gdybyśmy pozwolili wykonywać JavaScript naszym klientom. BTW. Czy ktos testował jak na script zareaguje oficjalny klient? Pozdrawiam Koko Software -- From: Jakub Zawadzki darkja...@darkjames.ath.cx Sent: Wednesday, May 11, 2011 5:16 PM To: libgadu developement list libgadu-devel@lists.ziew.org Subject: Re: [libgadu-devel] Propozycja zmian w obsłudze przesyłania formatowanych wiadomości HTML On Wed, May 11, 2011 at 04:05:02PM +0200, Bartosz Brachaczek wrote: Czy w ogóle wszystkim to pasuje. Mnie pasuje jeśli klient nieznające htmla (ekg, ekg2) będą dalej działac. 1. Stripować nieprzewidzanie przez protokół znaczniki HTML w odebranych wiadomościach (np. script zamieniać na lt;scriptgt;). script jest prawidłowym znacznikiem HTML, opisanym między innymi w [1]. [1] http://www.w3.org/TR/html4/interact/scripts.html#h-18.2.1 Pozdr. ___ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel ___ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel
Re: [libgadu-devel] Wiadomości przychodzące i zamiana HTML-a na czysty tekst
Dnia 2011-05-11, śro o godzinie 14:57 +0200, Bartosz Brachaczek pisze: (...) Trudno mi sobie wyobrazić, jak w rozsądny sposób można by dostosować do takiego przypadku funkcję gg_message_html_to_text(), więc moje pytanie brzmi, dlaczego właściwie libgadu dokonuje konwersji HTML-a do czystego tekstu, zamiast wziąć to, co wysłał rozmówca? Dlatego, że w HTML-u jest unikod, w czystym tekście CP1250. Idea była taka, żeby dowolny klient mógł się posługiwać unikodem bez konieczności parsowania HTML-a, ustawiając jedynie odpowiednie kodowanie. Jedyne wyjście to chyba parsowanie HTML-a na tyle, na ile jest to potrzebne do zapewnienia zgodności ze starym parsowaniem, tj. b, u, i, img i atrybut color w span. Myślicie, że wystarczy parsowanie jedynie tych tagów, żeby tylko zapewnić zgodność z Gadu-Gadu 10 i samym libgadu? Pozdr, Wojtek ___ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel
Re: [libgadu-devel] Propozycja zmian w obsłudze przesyłania formatowanych wiadomości HTML
Dnia 2011-05-11, śro o godzinie 16:05 +0200, Bartosz Brachaczek pisze: 1. Stripować nieprzewidzanie przez protokół znaczniki HTML w odebranych wiadomościach (np. script zamieniać na lt;scriptgt;). Nie rozumiem dlaczego w ogóle mielibyśmy w cokolwiek ingerować. Jeśli ktoś będzie chciał napisać dwa boty, które przesyłają między sobą MathML-a albo tunelować XMPP to nie powinniśmy mu przeszkadzać. 2. Jeśli otrzymujemy tylko wiadomość czystym tekstem, konwertować ją do HTML-a. Tutaj widzę, że jest właściwie gotowa funkcja do tego celu. Jak najbardziej. Do zrobienia w parę minut. Trzeba tylko pamiętać o tym, żeby to samo zaimplementować w gg_session_handle_recv_msg(). 3. Dodać możliwość wysyłania wiadomości poprzez podanie tylko HTML-a - libgadu zajęło by się przekonwertowaniem go do czystego tekstu z atrybutami formatowania. Pytanie tylko, jak takie funkcje mogłoby się nazywać? Patrz wcześniejszy wątek. Trzeba rozszerzyć funkcję gg_message_html_to_text() tak, żeby zwracała też atrybuty. Jeśli chcesz zaimplementować powyższe, to daj znać, żebym niepotrzebnie się za to nie zabierał. Pozdr, Wojtek ___ libgadu-devel mailing list libgadu-devel@lists.ziew.org http://lists.ziew.org/mailman/listinfo/libgadu-devel