# HG changeset patch # User masca@cpw.pidgin.im # Date 1275859632 0 # Node ID 23b7b1b817c892d3177faa74524d51d307483665 # Parent acc66653b4ffffdc49b562f6271b512246d4fab8# Parent 432e3331f6073ca734ace1f874314e9ddc82c81c merge of '5af6a35c4c39341b79cc8d61c700da2b874b9b6b' and 'b4a877b5d355860851acfe7ac186ba5d4f88d684' diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/Makefile.am --- a/libpurple/protocols/msn/Makefile.am Wed Jun 02 20:51:24 2010 +0000 +++ b/libpurple/protocols/msn/Makefile.am Sun Jun 06 21:27:12 2010 +0000 @@ -34,6 +34,8 @@ object.h \ oim.c\ oim.h\ + p2p.c \ + p2p.h \ page.c \ page.h \ servconn.c \ diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/Makefile.mingw --- a/libpurple/protocols/msn/Makefile.mingw Wed Jun 02 20:51:24 2010 +0000 +++ b/libpurple/protocols/msn/Makefile.mingw Sun Jun 06 21:27:12 2010 +0000 @@ -52,6 +52,7 @@ notification.c \ object.c \ oim.c\ + p2p.c \ page.c \ servconn.c \ session.c \ diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/directconn.c --- a/libpurple/protocols/msn/directconn.c Wed Jun 02 20:51:24 2010 +0000 +++ b/libpurple/protocols/msn/directconn.c Sun Jun 06 21:27:12 2010 +0000 @@ -31,25 +31,10 @@ #include "slp.h" #include "slpmsg.h" +#include "p2p.h" -#pragma pack(push,1) -typedef struct { - guint32 session_id; - guint32 seq_id; - guint64 offset; - guint64 total_size; - guint32 length; - guint32 flags; - guint32 ack_id; - guint32 ack_uid; - guint64 ack_size; -/* guint8 body[1]; */ -} MsnDcContext; -#pragma pack(pop) - -#define DC_PACKET_HEADER_SIZE sizeof(MsnDcContext) #define DC_MAX_BODY_SIZE 8*1024 -#define DC_MAX_PACKET_SIZE (DC_PACKET_HEADER_SIZE + DC_MAX_BODY_SIZE) +#define DC_MAX_PACKET_SIZE (P2P_PACKET_HEADER_SIZE + DC_MAX_BODY_SIZE) static void msn_dc_calculate_nonce_hash(MsnDirectConnNonceType type, @@ -368,51 +353,6 @@ } static void -msn_dc_parse_binary_header(MsnDirectConn *dc) -{ - MsnSlpHeader *h; - MsnDcContext *context; - - g_return_if_fail(dc != NULL); - - h = &dc->header; - /* Skip packet size */ - context = (MsnDcContext *)(dc->in_buffer + 4); - - h->session_id = GUINT32_FROM_LE(context->session_id); - h->id = GUINT32_FROM_LE(context->seq_id); - h->offset = GUINT64_FROM_LE(context->offset); - h->total_size = GUINT64_FROM_LE(context->total_size); - h->length = GUINT32_FROM_LE(context->length); - h->flags = GUINT32_FROM_LE(context->flags); - h->ack_id = GUINT32_FROM_LE(context->ack_id); - h->ack_sub_id = GUINT32_FROM_LE(context->ack_uid); - h->ack_size = GUINT64_FROM_LE(context->ack_size); -} - -static const gchar * -msn_dc_serialize_binary_header(MsnDirectConn *dc) { - MsnSlpHeader *h; - static MsnDcContext bin_header; - - g_return_val_if_fail(dc != NULL, NULL); - - h = &dc->header; - - bin_header.session_id = GUINT32_TO_LE(h->session_id); - bin_header.seq_id = GUINT32_TO_LE(h->id); - bin_header.offset = GUINT64_TO_LE(h->offset); - bin_header.total_size = GUINT64_TO_LE(h->total_size); - bin_header.length = GUINT32_TO_LE(h->length); - bin_header.flags = GUINT32_TO_LE(h->flags); - bin_header.ack_id = GUINT32_TO_LE(h->ack_id); - bin_header.ack_uid = GUINT32_TO_LE(h->ack_sub_id); - bin_header.ack_size = GUINT64_TO_LE(h->ack_size); - - return (const gchar *)&bin_header; -} - -static void msn_dc_send_cb(gpointer data, gint fd, PurpleInputCondition cond) { MsnDirectConn *dc = data; @@ -507,10 +447,11 @@ { const gchar *h; - h = msn_dc_serialize_binary_header(dc); - memcpy(p->data, h, DC_PACKET_HEADER_SIZE); + h = (gchar*) msn_p2p_header_to_wire(&dc->header); - memcpy(p->data + offsetof(MsnDcContext, ack_id), dc->nonce, 16); + memcpy(p->data, h, P2P_PACKET_HEADER_SIZE); + + memcpy(p->data + offsetof(MsnP2PHeader, ack_id), dc->nonce, 16); msn_dc_enqueue_packet(dc, p); } @@ -520,7 +461,7 @@ { MsnDirectConnPacket *p; - p = msn_dc_new_packet(DC_PACKET_HEADER_SIZE); + p = msn_dc_new_packet(P2P_PACKET_HEADER_SIZE); dc->header.session_id = 0; dc->header.id = dc->slpcall->slplink->slp_seq_id++; @@ -537,7 +478,7 @@ { MsnDirectConnPacket *p; - p = msn_dc_new_packet(DC_PACKET_HEADER_SIZE); + p = msn_dc_new_packet(P2P_PACKET_HEADER_SIZE); dc->header.id = dc->slpcall->slplink->slp_seq_id++; dc->header.length = 0; @@ -551,10 +492,10 @@ guchar nonce[16]; gchar nonce_hash[37]; - if (packet_length != DC_PACKET_HEADER_SIZE) + if (packet_length != P2P_PACKET_HEADER_SIZE) return FALSE; - memcpy(nonce, dc->in_buffer + 4 + offsetof(MsnDcContext, ack_id), 16); + memcpy(nonce, dc->in_buffer + 4 + offsetof(MsnP2PHeader, ack_id), 16); if (dc->nonce_type == DC_NONCE_PLAIN) { if (memcmp(dc->nonce, nonce, 16) == 0) { @@ -604,11 +545,11 @@ MsnDirectConnPacket *p; guint32 length; - length = msg->body_len + DC_PACKET_HEADER_SIZE; + length = msg->body_len + P2P_PACKET_HEADER_SIZE; p = msn_dc_new_packet(length); - memcpy(p->data, &msg->msnslp_header, DC_PACKET_HEADER_SIZE); - memcpy(p->data + DC_PACKET_HEADER_SIZE, msg->body, msg->body_len); + memcpy(p->data, &msg->msnslp_header, P2P_PACKET_HEADER_SIZE); + memcpy(p->data + P2P_PACKET_HEADER_SIZE, msg->body, msg->body_len); p->sent_cb = msn_dc_send_packet_cb; p->msg = msn_message_ref(msg); @@ -658,7 +599,7 @@ msn_slplink_process_msg( dc->slplink, &dc->header, - dc->in_buffer + 4 + DC_PACKET_HEADER_SIZE, + dc->in_buffer + 4 + P2P_PACKET_HEADER_SIZE, dc->header.length ); @@ -732,7 +673,15 @@ return; if (dc->state != DC_STATE_FOO) { - msn_dc_parse_binary_header(dc); + MsnP2PHeader *context; + MsnP2PHeader *h; + + /* Skip packet size */ + context = (MsnP2PHeader *)(dc->in_buffer + 4); + + h = msn_p2p_header_from_wire(context); + memcpy(&dc->header, h, P2P_PACKET_HEADER_SIZE); + g_free(h); } switch (msn_dc_process_packet(dc, packet_length)) { diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/directconn.h --- a/libpurple/protocols/msn/directconn.h Wed Jun 02 20:51:24 2010 +0000 +++ b/libpurple/protocols/msn/directconn.h Sun Jun 06 21:27:12 2010 +0000 @@ -34,6 +34,7 @@ #include "slp.h" #include "slplink.h" #include "slpmsg.h" +#include "p2p.h" typedef enum { @@ -100,7 +101,7 @@ GQueue *out_queue; /**< The outgoing packet queue */ int msg_pos; /**< The position of next byte to be sent in the actual packet */ - MsnSlpHeader header; /**< SLP header for parsing / serializing */ + MsnP2PHeader header; /**< SLP header for parsing / serializing */ /** The callback used for sending information to the peer about the opened socket */ void (*send_connection_info_msg_cb)(MsnDirectConn *); diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/msg.c --- a/libpurple/protocols/msn/msg.c Wed Jun 02 20:51:24 2010 +0000 +++ b/libpurple/protocols/msn/msg.c Sun Jun 06 21:27:12 2010 +0000 @@ -28,6 +28,7 @@ #include "msn.h" #include "msg.h" #include "msnutils.h" +#include "p2p.h" MsnMessage * msn_message_new(MsnMsgType type) @@ -163,29 +164,26 @@ void msn_message_parse_slp_body(MsnMessage *msg, const char *body, size_t len) { - MsnSlpHeader header; + MsnP2PHeader *header; + MsnP2PHeader wire; const char *tmp; int body_len; tmp = body; - if (len < sizeof(header)) { + if (len < sizeof(wire)) { g_return_if_reached(); } /* Extract the binary SLP header */ - memcpy(&header, tmp, sizeof(header)); - tmp += sizeof(header); + memcpy(&wire, tmp, sizeof(wire)); + tmp += sizeof(wire); - msg->msnslp_header.session_id = GUINT32_FROM_LE(header.session_id); - msg->msnslp_header.id = GUINT32_FROM_LE(header.id); - msg->msnslp_header.offset = GUINT64_FROM_LE(header.offset); - msg->msnslp_header.total_size = GUINT64_FROM_LE(header.total_size); - msg->msnslp_header.length = GUINT32_FROM_LE(header.length); - msg->msnslp_header.flags = GUINT32_FROM_LE(header.flags); - msg->msnslp_header.ack_id = GUINT32_FROM_LE(header.ack_id); - msg->msnslp_header.ack_sub_id = GUINT32_FROM_LE(header.ack_sub_id); - msg->msnslp_header.ack_size = GUINT64_FROM_LE(header.ack_size); + header = msn_p2p_header_from_wire(&wire); + + memcpy(&msg->msnslp_header, (char*)header, sizeof(*header)); + + g_free(header); /* Extract the body */ body_len = len - (tmp - body); @@ -298,8 +296,9 @@ if (content_type != NULL && !strcmp(content_type, "application/x-msnmsgrp2p")) { - MsnSlpHeader header; - MsnSlpFooter footer; + MsnP2PHeader *header; + MsnP2PHeader wire; + MsnP2PFooter footer; int body_len; if (payload_len - (tmp - tmp_base) < sizeof(header)) { @@ -310,18 +309,14 @@ msg->msnslp_message = TRUE; /* Extract the binary SLP header */ - memcpy(&header, tmp, sizeof(header)); - tmp += sizeof(header); + memcpy(&wire, tmp, sizeof(wire)); + tmp += sizeof(wire); - msg->msnslp_header.session_id = GUINT32_FROM_LE(header.session_id); - msg->msnslp_header.id = GUINT32_FROM_LE(header.id); - msg->msnslp_header.offset = GUINT64_FROM_LE(header.offset); - msg->msnslp_header.total_size = GUINT64_FROM_LE(header.total_size); - msg->msnslp_header.length = GUINT32_FROM_LE(header.length); - msg->msnslp_header.flags = GUINT32_FROM_LE(header.flags); - msg->msnslp_header.ack_id = GUINT32_FROM_LE(header.ack_id); - msg->msnslp_header.ack_sub_id = GUINT32_FROM_LE(header.ack_sub_id); - msg->msnslp_header.ack_size = GUINT64_FROM_LE(header.ack_size); + header = msn_p2p_header_from_wire(&wire); + + memcpy(&msg->msnslp_header, (char*)header, sizeof(*header)); + + g_free(header); body_len = payload_len - (tmp - tmp_base) - sizeof(footer); @@ -384,7 +379,7 @@ char * msn_message_gen_slp_body(MsnMessage *msg, size_t *ret_size) { - MsnSlpHeader header; + MsnP2PHeader *header; char *tmp, *base; const void *body; @@ -398,19 +393,13 @@ body = msn_message_get_bin_data(msg, &body_len); - header.session_id = GUINT32_TO_LE(msg->msnslp_header.session_id); - header.id = GUINT32_TO_LE(msg->msnslp_header.id); - header.offset = GUINT64_TO_LE(msg->msnslp_header.offset); - header.total_size = GUINT64_TO_LE(msg->msnslp_header.total_size); - header.length = GUINT32_TO_LE(msg->msnslp_header.length); - header.flags = GUINT32_TO_LE(msg->msnslp_header.flags); - header.ack_id = GUINT32_TO_LE(msg->msnslp_header.ack_id); - header.ack_sub_id = GUINT32_TO_LE(msg->msnslp_header.ack_sub_id); - header.ack_size = GUINT64_TO_LE(msg->msnslp_header.ack_size); + header = msn_p2p_header_to_wire(&(msg->msnslp_header)); - memcpy(tmp, &header, 48); + memcpy(tmp, header, 48); tmp += 48; + g_free(header); + if (body != NULL) { memcpy(tmp, body, body_len); @@ -475,21 +464,15 @@ if (msg->msnslp_message) { - MsnSlpHeader header; - MsnSlpFooter footer; + MsnP2PHeader *header; + MsnP2PFooter footer; + + header = msn_p2p_header_to_wire(&(msg->msnslp_header)); - header.session_id = GUINT32_TO_LE(msg->msnslp_header.session_id); - header.id = GUINT32_TO_LE(msg->msnslp_header.id); - header.offset = GUINT64_TO_LE(msg->msnslp_header.offset); - header.total_size = GUINT64_TO_LE(msg->msnslp_header.total_size); - header.length = GUINT32_TO_LE(msg->msnslp_header.length); - header.flags = GUINT32_TO_LE(msg->msnslp_header.flags); - header.ack_id = GUINT32_TO_LE(msg->msnslp_header.ack_id); - header.ack_sub_id = GUINT32_TO_LE(msg->msnslp_header.ack_sub_id); - header.ack_size = GUINT64_TO_LE(msg->msnslp_header.ack_size); + memcpy(n, header, 48); + n += 48; - memcpy(n, &header, 48); - n += 48; + g_free(header); if (body != NULL) { diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/msg.h --- a/libpurple/protocols/msn/msg.h Wed Jun 02 20:51:24 2010 +0000 +++ b/libpurple/protocols/msn/msg.h Sun Jun 06 21:27:12 2010 +0000 @@ -58,6 +58,7 @@ #include "session.h" #include "transaction.h" #include "user.h" +#include "p2p.h" typedef void (*MsnMsgCb)(MsnMessage *, void *data); @@ -67,41 +68,6 @@ #define MSG_OIM_BODY_DEM "\n\n" #define MSG_OIM_LINE_DEM "\n" -typedef enum -{ - SLP_HF_NO_FLAG = 0x0, /**< No flags specified */ - SLP_HF_OUT_OF_ORDER = 0x1, /**< Chunk out-of-order */ - SLP_HF_ACK = 0x2, /**< Acknowledgement */ - SLP_HF_PENDING_INVITE = 0x4, /**< There is a pending invite */ - SLP_HF_BINARY_ERROR = 0x8, /**< Error on the binary level */ - SLP_HF_MSN_OBJ_DATA = 0x20, /**< MsnObject data */ - SLP_HF_WML2009_COMP = 0x1000000, /**< Compatibility with WLM 2009 */ - SLP_HF_FILE_DATA = 0x1000030 /**< File transfer data */ -} SlpHeaderFlag; -/* Info From: - * http://msnpiki.msnfanatic.com/index.php/MSNC:P2Pv1_Headers#Flags - * http://trac.kmess.org/changeset/ba04d0c825769d23370511031c47f6be75fe9b86 - * #7180 - */ - -typedef struct -{ - guint32 session_id; - guint32 id; - guint64 offset; - guint64 total_size; - guint32 length; - guint32 flags; - guint32 ack_id; - guint32 ack_sub_id; - guint64 ack_size; -} MsnSlpHeader; - -typedef struct -{ - guint32 value; -} MsnSlpFooter; - /** * A message. */ @@ -123,8 +89,8 @@ guint total_chunks; /**< How many chunks in this multi-part message */ guint received_chunks; /**< How many chunks we've received so far */ - MsnSlpHeader msnslp_header; - MsnSlpFooter msnslp_footer; + MsnP2PHeader msnslp_header; + MsnP2PFooter msnslp_footer; GHashTable *header_table; GList *header_list; diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/p2p.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/msn/p2p.c Sun Jun 06 21:27:12 2010 +0000 @@ -0,0 +1,45 @@ +#include "internal.h" + +#include "p2p.h" + +MsnP2PHeader * +msn_p2p_header_from_wire(MsnP2PHeader *wire) +{ + MsnP2PHeader *header; + + header = g_new(MsnP2PHeader, 1); + + header->session_id = GUINT32_FROM_LE(wire->session_id); + header->id = GUINT32_FROM_LE(wire->id); + header->offset = GUINT64_FROM_LE(wire->offset); + header->total_size = GUINT64_FROM_LE(wire->total_size); + header->length = GUINT32_FROM_LE(wire->length); + header->flags = GUINT32_FROM_LE(wire->flags); + header->ack_id = GUINT32_FROM_LE(wire->ack_id); + header->ack_sub_id = GUINT32_FROM_LE(wire->ack_sub_id); + header->ack_size = GUINT64_FROM_LE(wire->ack_size); + + return header; +} + +MsnP2PHeader * +msn_p2p_header_to_wire(MsnP2PHeader *header) +{ + MsnP2PHeader *wire; + + wire = g_new(MsnP2PHeader, 1); + + wire->session_id = GUINT32_TO_LE(header->session_id); + wire->id = GUINT32_TO_LE(header->id); + wire->offset = GUINT64_TO_LE(header->offset); + wire->total_size = GUINT64_TO_LE(header->total_size); + wire->length = GUINT32_TO_LE(header->length); + wire->flags = GUINT32_TO_LE(header->flags); + wire->ack_id = GUINT32_TO_LE(header->ack_id); + wire->ack_sub_id = GUINT32_TO_LE(header->ack_sub_id); + wire->ack_size = GUINT64_TO_LE(header->ack_size); + + return wire; + +} + diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/p2p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/msn/p2p.h Sun Jun 06 21:27:12 2010 +0000 @@ -0,0 +1,50 @@ +#ifndef MSN_P2P_H +#define MSN_P2P_H + + +#pragma pack(push,1) +typedef struct { + guint32 session_id; + guint32 id; + guint64 offset; + guint64 total_size; + guint32 length; + guint32 flags; + guint32 ack_id; + guint32 ack_sub_id; + guint64 ack_size; +/* guint8 body[1]; */ +} MsnP2PHeader; +#pragma pack(pop) + +typedef struct +{ + guint32 value; +} MsnP2PFooter; + +typedef enum +{ + P2P_NO_FLAG = 0x0, /**< No flags specified */ + P2P_OUT_OF_ORDER = 0x1, /**< Chunk out-of-order */ + P2P_ACK = 0x2, /**< Acknowledgement */ + P2P_PENDING_INVITE = 0x4, /**< There is a pending invite */ + P2P_BINARY_ERROR = 0x8, /**< Error on the binary level */ + P2P_MSN_OBJ_DATA = 0x20, /**< MsnObject data */ + P2P_WML2009_COMP = 0x1000000, /**< Compatibility with WLM 2009 */ + P2P_FILE_DATA = 0x1000030 /**< File transfer data */ +} MsnP2PHeaderFlag; +/* Info From: + * http://msnpiki.msnfanatic.com/index.php/MSNC:P2Pv1_Headers#Flags + * http://trac.kmess.org/changeset/ba04d0c825769d23370511031c47f6be75fe9b86 + * #7180 + */ + +#define P2P_PACKET_HEADER_SIZE sizeof(MsnP2PHeader) + +MsnP2PHeader * +msn_p2p_header_from_wire(MsnP2PHeader *wire); + +MsnP2PHeader * +msn_p2p_header_to_wire(MsnP2PHeader *header); + +#endif /* MSN_P2P_H */ diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/slp.c --- a/libpurple/protocols/msn/slp.c Wed Jun 02 20:51:24 2010 +0000 +++ b/libpurple/protocols/msn/slp.c Sun Jun 06 21:27:12 2010 +0000 @@ -34,6 +34,7 @@ #include "user.h" #include "switchboard.h" #include "directconn.h" +#include "p2p.h" #include "smiley.h" @@ -518,7 +519,7 @@ /* DATA */ slpmsg = msn_slpmsg_new(slplink); slpmsg->slpcall = slpcall; - slpmsg->flags = SLP_HF_MSN_OBJ_DATA; + slpmsg->flags = P2P_MSN_OBJ_DATA; slpmsg->info = "SLP DATA"; msn_slpmsg_set_image(slpmsg, img); msn_slplink_queue_slpmsg(slplink, slpmsg); diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/slpcall.c --- a/libpurple/protocols/msn/slpcall.c Wed Jun 02 20:51:24 2010 +0000 +++ b/libpurple/protocols/msn/slpcall.c Sun Jun 06 21:27:12 2010 +0000 @@ -29,6 +29,7 @@ #include "slpcall.h" #include "slp.h" +#include "p2p.h" /************************************************************************** * Main @@ -204,7 +205,7 @@ body = slpmsg->buffer; body_len = slpmsg->offset; - if (slpmsg->flags == SLP_HF_NO_FLAG || slpmsg->flags == SLP_HF_WML2009_COMP) + if (slpmsg->flags == P2P_NO_FLAG || slpmsg->flags == P2P_WML2009_COMP) { char *body_str; @@ -265,9 +266,9 @@ } g_free(body_str); } - else if (slpmsg->flags == SLP_HF_MSN_OBJ_DATA || - slpmsg->flags == SLP_HF_WML2009_COMP & SLP_HF_MSN_OBJ_DATA || - slpmsg->flags == SLP_HF_FILE_DATA) + else if (slpmsg->flags == P2P_MSN_OBJ_DATA || + slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) || + slpmsg->flags == P2P_FILE_DATA) { slpcall = msn_slplink_find_slp_call_with_session_id(slplink, slpmsg->session_id); @@ -293,7 +294,7 @@ msn_slpcall_session_init(slpcall); } #endif - else if (slpmsg->flags == SLP_HF_ACK) + else if (slpmsg->flags == P2P_ACK) { /* Acknowledgement of previous message. Don't do anything currently. */ } diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/slplink.c --- a/libpurple/protocols/msn/slplink.c Wed Jun 02 20:51:24 2010 +0000 +++ b/libpurple/protocols/msn/slplink.c Sun Jun 06 21:27:12 2010 +0000 @@ -30,6 +30,7 @@ #include "switchboard.h" #include "slp.h" +#include "p2p.h" #ifdef MSN_DEBUG_SLP_FILES static int m_sc = 0; @@ -298,7 +299,7 @@ * reusing the same one all the time. */ msg = slpmsg->msg; - real_size = (slpmsg->flags == SLP_HF_ACK) ? 0 : slpmsg->size; + real_size = (slpmsg->flags == P2P_ACK) ? 0 : slpmsg->size; if (slpmsg->offset < real_size) { @@ -333,9 +334,9 @@ g_list_append(slpmsg->msgs, msn_message_ref(msg)); msn_slplink_send_msg(slplink, msg); - if ((slpmsg->flags == SLP_HF_MSN_OBJ_DATA || - slpmsg->flags == (SLP_HF_WML2009_COMP & SLP_HF_MSN_OBJ_DATA) || - slpmsg->flags == SLP_HF_FILE_DATA) && + if ((slpmsg->flags == P2P_MSN_OBJ_DATA || + slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) || + slpmsg->flags == P2P_FILE_DATA) && (slpmsg->slpcall != NULL)) { slpmsg->slpcall->progress = TRUE; @@ -359,7 +360,7 @@ slpmsg = data; - real_size = (slpmsg->flags == SLP_HF_ACK) ? 0 : slpmsg->size; + real_size = (slpmsg->flags == P2P_ACK) ? 0 : slpmsg->size; slpmsg->offset += msg->msnslp_header.length; @@ -379,9 +380,9 @@ else { /* The whole message has been sent */ - if (slpmsg->flags == SLP_HF_MSN_OBJ_DATA || - slpmsg->flags == (SLP_HF_WML2009_COMP & SLP_HF_MSN_OBJ_DATA) || - slpmsg->flags == SLP_HF_FILE_DATA) + if (slpmsg->flags == P2P_MSN_OBJ_DATA || + slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) || + slpmsg->flags == P2P_FILE_DATA) { if (slpmsg->slpcall != NULL) { @@ -417,21 +418,21 @@ slpmsg->msg = msg = msn_message_new_msnslp(); - if (slpmsg->flags == SLP_HF_NO_FLAG) + if (slpmsg->flags == P2P_NO_FLAG) { msg->msnslp_header.session_id = slpmsg->session_id; msg->msnslp_header.ack_id = rand() % 0xFFFFFF00; } - else if (slpmsg->flags == SLP_HF_ACK) + else if (slpmsg->flags == P2P_ACK) { msg->msnslp_header.session_id = slpmsg->session_id; msg->msnslp_header.ack_id = slpmsg->ack_id; msg->msnslp_header.ack_size = slpmsg->ack_size; msg->msnslp_header.ack_sub_id = slpmsg->ack_sub_id; } - else if (slpmsg->flags == SLP_HF_MSN_OBJ_DATA || - slpmsg->flags == (SLP_HF_WML2009_COMP & SLP_HF_MSN_OBJ_DATA) || - slpmsg->flags == SLP_HF_FILE_DATA) + else if (slpmsg->flags == P2P_MSN_OBJ_DATA || + slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) || + slpmsg->flags == P2P_FILE_DATA) { MsnSlpCall *slpcall; slpcall = slpmsg->slpcall; @@ -496,7 +497,7 @@ } static MsnSlpMessage * -msn_slplink_create_ack(MsnSlpLink *slplink, MsnSlpHeader *header) +msn_slplink_create_ack(MsnSlpLink *slplink, MsnP2PHeader *header) { MsnSlpMessage *slpmsg; @@ -504,7 +505,7 @@ slpmsg->session_id = header->session_id; slpmsg->size = header->total_size; - slpmsg->flags = SLP_HF_ACK; + slpmsg->flags = P2P_ACK; slpmsg->ack_id = header->id; slpmsg->ack_sub_id = header->ack_id; slpmsg->ack_size = header->total_size; @@ -514,7 +515,7 @@ } static void -msn_slplink_send_ack(MsnSlpLink *slplink, MsnSlpHeader *header) +msn_slplink_send_ack(MsnSlpLink *slplink, MsnP2PHeader *header) { MsnSlpMessage *slpmsg = msn_slplink_create_ack(slplink, header); @@ -542,7 +543,7 @@ slpmsg = msn_slpmsg_new(slpcall->slplink); slpmsg->slpcall = slpcall; - slpmsg->flags = SLP_HF_FILE_DATA; + slpmsg->flags = P2P_FILE_DATA; slpmsg->info = "SLP FILE"; slpmsg->size = purple_xfer_get_size(xfer); @@ -566,7 +567,7 @@ } void -msn_slplink_process_msg(MsnSlpLink *slplink, MsnSlpHeader *header, const char *data, gsize len) +msn_slplink_process_msg(MsnSlpLink *slplink, MsnP2PHeader *header, const char *data, gsize len) { MsnSlpMessage *slpmsg; guint64 offset; @@ -595,9 +596,9 @@ slpmsg->slpcall = msn_slplink_find_slp_call_with_session_id(slplink, slpmsg->session_id); if (slpmsg->slpcall != NULL) { - if (slpmsg->flags == SLP_HF_MSN_OBJ_DATA || - slpmsg->flags == (SLP_HF_WML2009_COMP & SLP_HF_MSN_OBJ_DATA) || - slpmsg->flags == SLP_HF_FILE_DATA) + if (slpmsg->flags == P2P_MSN_OBJ_DATA || + slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) || + slpmsg->flags == P2P_FILE_DATA) { PurpleXfer *xfer = slpmsg->slpcall->xfer; if (xfer != NULL) @@ -661,9 +662,9 @@ } } - if ((slpmsg->flags == SLP_HF_MSN_OBJ_DATA || - slpmsg->flags == (SLP_HF_WML2009_COMP & SLP_HF_MSN_OBJ_DATA) || - slpmsg->flags == SLP_HF_FILE_DATA) && + if ((slpmsg->flags == P2P_MSN_OBJ_DATA || + slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) || + slpmsg->flags == P2P_FILE_DATA) && (slpmsg->slpcall != NULL)) { slpmsg->slpcall->progress = TRUE; @@ -704,10 +705,10 @@ msn_directconn_send_handshake(directconn); #endif } - else if (slpmsg->flags == SLP_HF_NO_FLAG || slpmsg->flags == SLP_HF_WML2009_COMP || - slpmsg->flags == SLP_HF_MSN_OBJ_DATA || - slpmsg->flags == (SLP_HF_WML2009_COMP & SLP_HF_MSN_OBJ_DATA) || - slpmsg->flags == SLP_HF_FILE_DATA) + else if (slpmsg->flags == P2P_NO_FLAG || slpmsg->flags == P2P_WML2009_COMP || + slpmsg->flags == P2P_MSN_OBJ_DATA || + slpmsg->flags == (P2P_WML2009_COMP | P2P_MSN_OBJ_DATA) || + slpmsg->flags == P2P_FILE_DATA) { /* Release all the messages and send the ACK */ diff -r acc66653b4ff -r 23b7b1b817c8 libpurple/protocols/msn/slplink.h --- a/libpurple/protocols/msn/slplink.h Wed Jun 02 20:51:24 2010 +0000 +++ b/libpurple/protocols/msn/slplink.h Sun Jun 06 21:27:12 2010 +0000 @@ -81,7 +81,7 @@ void msn_slplink_send_slpmsg(MsnSlpLink *slplink, MsnSlpMessage *slpmsg); void msn_slplink_send_queued_slpmsgs(MsnSlpLink *slplink); -void msn_slplink_process_msg(MsnSlpLink *slplink, MsnSlpHeader *header, const char *data, gsize len); +void msn_slplink_process_msg(MsnSlpLink *slplink, MsnP2PHeader *header, const char *data, gsize len); void msn_slplink_request_ft(MsnSlpLink *slplink, PurpleXfer *xfer); void msn_slplink_send_msg(MsnSlpLink *slplink, MsnMessage *msg);