W razie potrzeby konwertujemy przychodzącą wiadomość w czystym tekście
do HTML-a.
---
 src/handlers.c |   31 ++++++++++++++++++++++++++++---
 1 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/src/handlers.c b/src/handlers.c
index 9100e1b..764c5a0 100644
--- a/src/handlers.c
+++ b/src/handlers.c
@@ -790,6 +790,7 @@ static int gg_session_handle_recv_msg(struct gg_session 
*sess, uint32_t type, co
        const struct gg_recv_msg *r = (const struct gg_recv_msg*) packet;
        const char *payload = packet + sizeof(struct gg_recv_msg);
        const char *payload_end = packet + length;
+       size_t len;
 
        gg_debug_session(sess, GG_DEBUG_FUNCTION, "** gg_handle_recv_msg(%p, 
%d, %p);\n", packet, length, e);
 
@@ -828,6 +829,7 @@ static int gg_session_handle_recv_msg(struct gg_session 
*sess, uint32_t type, co
        }
 
        e->type = GG_EVENT_MSG;
+       memset(&e->event, 0, sizeof(e->event));
        e->event.msg.msgclass = gg_fix32(r->msgclass);
        e->event.msg.sender = gg_fix32(r->sender);
        e->event.msg.time = gg_fix32(r->time);
@@ -839,11 +841,22 @@ static int gg_session_handle_recv_msg(struct gg_session 
*sess, uint32_t type, co
                goto fail;
        }
 
+       len = gg_message_text_to_html(NULL, (char*) e->event.msg.message, 
sess->encoding, e->event.msg.formats, e->event.msg.formats_length);
+       e->event.msg.xhtml_message = malloc(len + 1);
+
+       if (e->event.msg.xhtml_message == NULL) {
+               gg_debug_session(sess, GG_DEBUG_MISC, "// 
gg_session_handle_recv_msg() out of memory\n");
+               goto fail;
+       }
+
+       gg_message_text_to_html(e->event.msg.xhtml_message, (char*) 
e->event.msg.message, sess->encoding, e->event.msg.formats, 
e->event.msg.formats_length);
+
        gg_session_send_msg_ack(sess, gg_fix32(r->seq));
        return 0;
 
 fail:
        free(e->event.msg.message);
+       free(e->event.msg.xhtml_message);
        free(e->event.msg.recipients);
        free(e->event.msg.formats);
        return -1;
@@ -904,6 +917,7 @@ static int gg_session_handle_recv_msg_80(struct gg_session 
*sess, uint32_t type,
        }
 
        e->type = (type != GG_RECV_OWN_MSG) ? GG_EVENT_MSG : 
GG_EVENT_MULTILOGON_MSG;
+       memset(&e->event, 0, sizeof(e->event));
        e->event.msg.msgclass = gg_fix32(r->msgclass);
        e->event.msg.sender = gg_fix32(r->sender);
        e->event.msg.time = gg_fix32(r->time);
@@ -932,7 +946,7 @@ static int gg_session_handle_recv_msg_80(struct gg_session 
*sess, uint32_t type,
                }
        } else {
                if (offset_plain > sizeof(struct gg_recv_msg80)) {
-                       int len;
+                       size_t len;
 
                        len = gg_message_html_to_text(NULL, packet + 
sizeof(struct gg_recv_msg80));
                        e->event.msg.message = malloc(len + 1);
@@ -960,8 +974,19 @@ static int gg_session_handle_recv_msg_80(struct gg_session 
*sess, uint32_t type,
                        gg_debug_session(sess, GG_DEBUG_MISC, "// 
gg_session_handle_recv_msg_80() out of memory\n");
                        goto fail;
                }
-       } else
-               e->event.msg.xhtml_message = NULL;
+       } else {
+               size_t len;
+
+               len = gg_message_text_to_html(NULL, (char*) 
e->event.msg.message, sess->encoding, e->event.msg.formats, 
e->event.msg.formats_length);
+               e->event.msg.xhtml_message = malloc(len + 1);
+
+               if (e->event.msg.xhtml_message == NULL) {
+                       gg_debug_session(sess, GG_DEBUG_MISC, "// 
gg_session_handle_recv_msg_80() out of memory\n");
+                       goto fail;
+               }
+
+               gg_message_text_to_html(e->event.msg.xhtml_message, (char*) 
e->event.msg.message, sess->encoding, e->event.msg.formats, 
e->event.msg.formats_length);
+       }
 
        gg_session_send_msg_ack(sess, gg_fix32(r->seq));
        return 0;
-- 
1.7.6.1

_______________________________________________
libgadu-devel mailing list
libgadu-devel@lists.ziew.org
http://lists.ziew.org/mailman/listinfo/libgadu-devel

Reply via email to