pidgin/pidgin
Clone
Summary
Browse
Changes
Graph
Bump the version for release
release-2.x.y
v2.10.12
2015-12-31, Gary Kramlich
2ac1dcb9eb2e
Bump the version for release
/**
* @file p2p.h MSN P2P functions
*
* purple
*
* Purple is the legal property of its developers, whose names are too numerous
* to list here. Please refer to the COPYRIGHT file distributed with this
* source distribution.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
#ifndef MSN_P2P_H
#define MSN_P2P_H
typedef
struct
{
guint32
session_id
;
guint32
id
;
/**
* In a MsnSlpMessage:
* For outgoing messages this is the number of bytes from buffer that
* have already been sent out. For incoming messages this is the
* number of bytes that have been written to buffer.
*/
guint64
offset
;
guint64
total_size
;
guint32
length
;
guint32
flags
;
guint32
ack_id
;
guint32
ack_sub_id
;
guint64
ack_size
;
/* guint8 body[1]; */
}
MsnP2PHeader
;
#define P2P_PACKET_HEADER_SIZE (6 * 4 + 3 * 8)
typedef
struct
{
guint8
header_len
;
guint8
opcode
;
guint16
message_len
;
guint32
base_id
;
GSList
*
header_tlv
;
guint8
data_header_len
;
guint8
data_tf
;
guint16
package_number
;
guint32
session_id
;
GSList
*
data_tlv
;
/* guint8 body[1]; */
}
MsnP2Pv2Header
;
typedef
struct
{
guint16
protocol_version
;
guint16
implementation_id
;
guint16
version
;
guint16
reserved
;
guint32
caps
;
}
P2PPeerInfo
;
typedef
enum
{
TF_FIRST
=
0x01
,
/**< The first package. */
TF_MSNOBJ
=
0x04
,
/**< Payload contains binary data for MsnObject. */
TF_FILE
=
0x06
/**< Payload contains binary data. */
}
TF
;
typedef
enum
{
P2P_HEADER_TLV_TYPE_PEER_INFO
=
0x01
,
/**< Client peer info */
P2P_HEADER_TLV_TYPE_ACK
=
0x02
,
/**< ACK */
P2P_HEADER_TLV_TYPE_NAK
=
0x03
/**< NAK */
}
P2PHeaderTLVType
;
typedef
enum
{
P2P_DATA_TLV_REMAINING
=
0x01
,
/**< Indicates the remaining data to transfer.*/
}
P2PDataTLVType
;
typedef
enum
{
P2P_PI_PVER
=
0x0200
,
P2P_PI_IMP_ID
=
0
,
P2P_PI_VER
=
0x0e00
,
P2P_PI_RES
=
0
,
P2P_PI_CAPS
=
0x0000010f
}
P2PPeerInfoVal
;
typedef
struct
{
guint32
value
;
}
MsnP2PFooter
;
#define P2P_PACKET_FOOTER_SIZE (1 * 4)
typedef
enum
{
MSN_P2P_VERSION_ONE
=
0
,
MSN_P2P_VERSION_TWO
=
1
,
}
MsnP2PVersion
;
typedef
struct
{
MsnP2PVersion
version
;
union
{
MsnP2PHeader
v1
;
MsnP2Pv2Header
v2
;
}
header
;
MsnP2PFooter
footer
;
}
MsnP2PInfo
;
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_FILE
=
0x10
,
/**< File */
P2P_MSN_OBJ_DATA
=
0x20
,
/**< MsnObject data */
P2P_CLOSE
=
0x40
,
/**< Close session */
P2P_TLP_ERROR
=
0x80
,
/**< Error at transport layer protocol */
P2P_DC_HANDSHAKE
=
0x100
,
/**< Direct Handshake */
P2P_WLM2009_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
*/
typedef
enum
{
P2P_APPID_SESSION
=
0x0
,
/**< Negotiating session */
P2P_APPID_OBJ
=
0x1
,
/**< MsnObject (Display or Emoticon) */
P2P_APPID_FILE
=
0x2
,
/**< File transfer */
P2P_APPID_EMOTE
=
0xB
,
/**< CustomEmoticon */
P2P_APPID_DISPLAY
=
0xC
/**< Display Image */
}
MsnP2PAppId
;
typedef
enum
{
P2P_OPCODE_NONE
=
0x00
,
P2P_OPCODE_SYN
=
0x01
,
P2P_OPCODE_RAK
=
0x02
}
MsnP2Pv2OpCode
;
MsnP2PInfo
*
msn_p2p_info_new
(
MsnP2PVersion
version
);
MsnP2PInfo
*
msn_p2p_info_dup
(
MsnP2PInfo
*
info
);
void
msn_p2p_info_free
(
MsnP2PInfo
*
info
);
size_t
msn_p2p_header_from_wire
(
MsnP2PInfo
*
info
,
const
char
*
wire
,
size_t
max_len
);
char
*
msn_p2p_header_to_wire
(
MsnP2PInfo
*
info
,
size_t
*
len
);
size_t
msn_p2p_footer_from_wire
(
MsnP2PInfo
*
info
,
const
char
*
wire
);
char
*
msn_p2p_footer_to_wire
(
MsnP2PInfo
*
info
,
size_t
*
len
);
void
msn_p2p_info_to_string
(
MsnP2PInfo
*
info
,
GString
*
str
);
gboolean
msn_p2p_msg_is_data
(
const
MsnP2PInfo
*
info
);
gboolean
msn_p2p_info_is_valid
(
MsnP2PInfo
*
info
);
gboolean
msn_p2p_info_is_first
(
MsnP2PInfo
*
info
);
gboolean
msn_p2p_info_is_final
(
MsnP2PInfo
*
info
);
void
msn_p2p_info_create_ack
(
MsnP2PInfo
*
old_info
,
MsnP2PInfo
*
new_info
);
gboolean
msn_p2p_info_require_ack
(
MsnP2PInfo
*
info
);
gboolean
msn_p2p_info_is_ack
(
MsnP2PInfo
*
info
);
void
msn_p2p_info_init_first
(
MsnP2PInfo
*
new_info
,
MsnP2PInfo
*
old_info
);
guint32
msn_p2p_info_get_session_id
(
MsnP2PInfo
*
info
);
guint32
msn_p2p_info_get_id
(
MsnP2PInfo
*
info
);
guint64
msn_p2p_info_get_offset
(
MsnP2PInfo
*
info
);
guint64
msn_p2p_info_get_total_size
(
MsnP2PInfo
*
info
);
guint32
msn_p2p_info_get_length
(
MsnP2PInfo
*
info
);
guint32
msn_p2p_info_get_flags
(
MsnP2PInfo
*
info
);
guint32
msn_p2p_info_get_ack_id
(
MsnP2PInfo
*
info
);
guint32
msn_p2p_info_get_ack_sub_id
(
MsnP2PInfo
*
info
);
guint64
msn_p2p_info_get_ack_size
(
MsnP2PInfo
*
info
);
guint32
msn_p2p_info_get_app_id
(
MsnP2PInfo
*
info
);
void
msn_p2p_info_set_session_id
(
MsnP2PInfo
*
info
,
guint32
session_id
);
void
msn_p2p_info_set_id
(
MsnP2PInfo
*
info
,
guint32
id
);
void
msn_p2p_info_set_offset
(
MsnP2PInfo
*
info
,
guint64
offset
);
void
msn_p2p_info_set_total_size
(
MsnP2PInfo
*
info
,
guint64
total_size
);
void
msn_p2p_info_set_length
(
MsnP2PInfo
*
info
,
guint32
length
);
void
msn_p2p_info_set_flags
(
MsnP2PInfo
*
info
,
guint32
flags
);
void
msn_p2p_info_set_ack_id
(
MsnP2PInfo
*
info
,
guint32
ack_id
);
void
msn_p2p_info_set_ack_sub_id
(
MsnP2PInfo
*
info
,
guint32
ack_sub_id
);
void
msn_p2p_info_set_ack_size
(
MsnP2PInfo
*
info
,
guint64
ack_size
);
void
msn_p2p_info_set_app_id
(
MsnP2PInfo
*
info
,
guint32
app_id
);
#endif
/* MSN_P2P_H */