diff options
author | Jorge Villase?or <masca@cpw.pidgin.im> | 2010-07-29 20:54:50 +0000 |
---|---|---|
committer | Jorge Villase?or <masca@cpw.pidgin.im> | 2010-07-29 20:54:50 +0000 |
commit | 6080790680a07c6429f113c000ff56503f24e19b (patch) | |
tree | 151a61157f939c6cba320d26779312bf07a88123 | |
parent | 78f525e658d53c8723833a4c7e8cc4d207c6439c (diff) | |
download | pidgin-6080790680a07c6429f113c000ff56503f24e19b.tar.gz |
Split a little more msn_slplink_process_msg. I think this way is easier to read.
-rw-r--r-- | libpurple/protocols/msn/slplink.c | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/libpurple/protocols/msn/slplink.c b/libpurple/protocols/msn/slplink.c index c778526b7c..f11fb901f5 100644 --- a/libpurple/protocols/msn/slplink.c +++ b/libpurple/protocols/msn/slplink.c @@ -568,6 +568,29 @@ process_complete_msg(MsnSlpLink *slplink, MsnSlpMessage *slpmsg, MsnP2PHeader *h msn_slpcall_destroy(slpcall); } +static void +slpmsg_add_part(MsnSlpMessage *slpmsg, MsnSlpMessagePart *part) +{ + if (slpmsg->ft) { + slpmsg->slpcall->u.incoming_data = + g_byte_array_append(slpmsg->slpcall->u.incoming_data, (const guchar *)part->buffer, part->size); + purple_xfer_prpl_ready(slpmsg->slpcall->xfer); + } + else if (slpmsg->size && slpmsg->buffer) { + if (G_MAXSIZE - part->size < part->header->offset + || (part->header->offset + part->size) > slpmsg->size + || slpmsg->offset != part->header->offset) { + purple_debug_error("msn", + "Oversized slpmsg - msgsize=%lld offset=%" G_GUINT64_FORMAT " len=%" G_GSIZE_FORMAT "\n", + slpmsg->size, part->header->offset, part->size); + g_return_if_reached(); + } else { + memcpy(slpmsg->buffer + part->header->offset, part->buffer, part->size); + slpmsg->offset += part->size; + } + } +} + void msn_slplink_process_msg(MsnSlpLink *slplink, MsnSlpMessagePart *part) { @@ -600,27 +623,7 @@ msn_slplink_process_msg(MsnSlpLink *slplink, MsnSlpMessagePart *part) } } - if (slpmsg->ft) - { - slpmsg->slpcall->u.incoming_data = - g_byte_array_append(slpmsg->slpcall->u.incoming_data, (const guchar *)part->buffer, part->size); - purple_xfer_prpl_ready(slpmsg->slpcall->xfer); - } - else if (slpmsg->size && slpmsg->buffer) - { - if (G_MAXSIZE - part->size < offset - || (offset + part->size) > slpmsg->size - || slpmsg->offset != offset) - { - purple_debug_error("msn", - "Oversized slpmsg - msgsize=%lld offset=%" G_GUINT64_FORMAT " len=%" G_GSIZE_FORMAT "\n", - slpmsg->size, offset, part->size); - g_return_if_reached(); - } else { - memcpy(slpmsg->buffer + offset, part->buffer, part->size); - slpmsg->offset += part->size; - } - } + slpmsg_add_part(slpmsg, part); if ((slpmsg->flags == P2P_MSN_OBJ_DATA || slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) || |