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