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

Reply via email to