summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJorge Villase?or <masca@cpw.pidgin.im>2010-07-29 20:54:50 +0000
committerJorge Villase?or <masca@cpw.pidgin.im>2010-07-29 20:54:50 +0000
commit6080790680a07c6429f113c000ff56503f24e19b (patch)
tree151a61157f939c6cba320d26779312bf07a88123
parent78f525e658d53c8723833a4c7e8cc4d207c6439c (diff)
downloadpidgin-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.c45
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) ||