# HG changeset patch # User masca@cpw.pidgin.im # Date 1275599228 0 # Node ID e03f912141dde83bfbe70e12e91b96e0aae53e2b # Parent 712c8ddcf5ed6408b86c2b17811f7b50a9e12f66 Start moving p2p specific code to its own module. diff -r 712c8ddcf5ed -r e03f912141dd libpurple/protocols/msn/directconn.c --- a/libpurple/protocols/msn/directconn.c Wed Jun 02 09:33:21 2010 +0000 +++ b/libpurple/protocols/msn/directconn.c Thu Jun 03 21:07:08 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, @@ -356,13 +341,13 @@ msn_dc_parse_binary_header(MsnDirectConn *dc) { MsnSlpHeader *h; - MsnDcContext *context; + MsnP2PBinaryHeader *context; g_return_if_fail(dc != NULL); h = &dc->header; /* Skip packet size */ - context = (MsnDcContext *)(dc->in_buffer + 4); + context = (MsnP2PBinaryHeader *)(dc->in_buffer + 4); h->session_id = GUINT32_FROM_LE(context->session_id); h->id = GUINT32_FROM_LE(context->seq_id); @@ -378,7 +363,7 @@ static const gchar * msn_dc_serialize_binary_header(MsnDirectConn *dc) { MsnSlpHeader *h; - static MsnDcContext bin_header; + static MsnP2PBinaryHeader bin_header; g_return_val_if_fail(dc != NULL, NULL); @@ -493,9 +478,9 @@ const gchar *h; h = msn_dc_serialize_binary_header(dc); - memcpy(p->data, h, DC_PACKET_HEADER_SIZE); + memcpy(p->data, h, P2P_PACKET_HEADER_SIZE); - memcpy(p->data + offsetof(MsnDcContext, ack_id), dc->nonce, 16); + memcpy(p->data + offsetof(MsnP2PBinaryHeader, ack_id), dc->nonce, 16); msn_dc_enqueue_packet(dc, p); } @@ -505,7 +490,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++; @@ -522,7 +507,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; @@ -536,10 +521,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(MsnP2PBinaryHeader, ack_id), 16); if (dc->nonce_type == DC_NONCE_PLAIN) { if (memcmp(dc->nonce, nonce, 16) == 0) { @@ -589,11 +574,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); @@ -643,7 +628,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 ); diff -r 712c8ddcf5ed -r e03f912141dd libpurple/protocols/msn/msg.h --- a/libpurple/protocols/msn/msg.h Wed Jun 02 09:33:21 2010 +0000 +++ b/libpurple/protocols/msn/msg.h Thu Jun 03 21:07:08 2010 +0000 @@ -67,23 +67,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; diff -r 712c8ddcf5ed -r e03f912141dd libpurple/protocols/msn/slp.c --- a/libpurple/protocols/msn/slp.c Wed Jun 02 09:33:21 2010 +0000 +++ b/libpurple/protocols/msn/slp.c Thu Jun 03 21:07:08 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 712c8ddcf5ed -r e03f912141dd libpurple/protocols/msn/slpcall.c --- a/libpurple/protocols/msn/slpcall.c Wed Jun 02 09:33:21 2010 +0000 +++ b/libpurple/protocols/msn/slpcall.c Thu Jun 03 21:07:08 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 712c8ddcf5ed -r e03f912141dd libpurple/protocols/msn/slplink.c --- a/libpurple/protocols/msn/slplink.c Wed Jun 02 09:33:21 2010 +0000 +++ b/libpurple/protocols/msn/slplink.c Thu Jun 03 21:07:08 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; @@ -294,7 +295,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) { @@ -329,9 +330,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; @@ -355,7 +356,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; @@ -375,9 +376,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) { @@ -413,21 +414,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; @@ -500,7 +501,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; @@ -538,7 +539,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); @@ -591,9 +592,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) @@ -657,9 +658,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; @@ -700,10 +701,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 */