Mercurial > pidgin
comparison libpurple/protocols/qq/packet_parse.c @ 15373:5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sat, 20 Jan 2007 02:32:10 +0000 |
parents | |
children | 32c366eeeb99 |
comparison
equal
deleted
inserted
replaced
15372:f79e0f4df793 | 15373:5fe8042783c1 |
---|---|
1 /** | |
2 * @file packet_parse.c | |
3 * | |
4 * gaim | |
5 * | |
6 * Gaim is the legal property of its developers, whose names are too numerous | |
7 * to list here. Please refer to the COPYRIGHT file distributed with this | |
8 * source distribution. | |
9 * | |
10 * This program is free software; you can redistribute it and/or modify | |
11 * it under the terms of the GNU General Public License as published by | |
12 * the Free Software Foundation; either version 2 of the License, or | |
13 * (at your option) any later version. | |
14 * | |
15 * This program is distributed in the hope that it will be useful, | |
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 * GNU General Public License for more details. | |
19 * | |
20 * You should have received a copy of the GNU General Public License | |
21 * along with this program; if not, write to the Free Software | |
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
23 */ | |
24 | |
25 #include <string.h> | |
26 | |
27 #include "packet_parse.h" | |
28 | |
29 /* read one byte from buf, | |
30 * return the number of bytes read if succeeds, otherwise return -1 */ | |
31 gint read_packet_b(guint8 *buf, guint8 **cursor, gint buflen, guint8 *b) | |
32 { | |
33 if (*cursor <= buf + buflen - sizeof(*b)) { | |
34 *b = **(guint8 **) cursor; | |
35 *cursor += sizeof(*b); | |
36 return sizeof(*b); | |
37 } else { | |
38 return -1; | |
39 } | |
40 } | |
41 | |
42 /* read two bytes as "guint16" from buf, | |
43 * return the number of bytes read if succeeds, otherwise return -1 */ | |
44 gint read_packet_w(guint8 *buf, guint8 **cursor, gint buflen, guint16 *w) | |
45 { | |
46 if (*cursor <= buf + buflen - sizeof(*w)) { | |
47 *w = g_ntohs(**(guint16 **) cursor); | |
48 *cursor += sizeof(*w); | |
49 return sizeof(*w); | |
50 } else { | |
51 return -1; | |
52 } | |
53 } | |
54 | |
55 /* read four bytes as "guint32" from buf, | |
56 * return the number of bytes read if succeeds, otherwise return -1 */ | |
57 gint read_packet_dw(guint8 *buf, guint8 **cursor, gint buflen, guint32 *dw) | |
58 { | |
59 if (*cursor <= buf + buflen - sizeof(*dw)) { | |
60 *dw = g_ntohl(**(guint32 **) cursor); | |
61 *cursor += sizeof(*dw); | |
62 return sizeof(*dw); | |
63 } else { | |
64 return -1; | |
65 } | |
66 } | |
67 | |
68 /* read datalen bytes from buf, | |
69 * return the number of bytes read if succeeds, otherwise return -1 */ | |
70 gint read_packet_data(guint8 *buf, guint8 **cursor, gint buflen, guint8 *data, gint datalen) { | |
71 if (*cursor <= buf + buflen - datalen) { | |
72 g_memmove(data, *cursor, datalen); | |
73 *cursor += datalen; | |
74 return datalen; | |
75 } else { | |
76 return -1; | |
77 } | |
78 } | |
79 | |
80 /* pack one byte into buf | |
81 * return the number of bytes packed, otherwise return -1 */ | |
82 gint create_packet_b(guint8 *buf, guint8 **cursor, guint8 b) | |
83 { | |
84 if (*cursor <= buf + MAX_PACKET_SIZE - sizeof(guint8)) { | |
85 **(guint8 **) cursor = b; | |
86 *cursor += sizeof(guint8); | |
87 return sizeof(guint8); | |
88 } else { | |
89 return -1; | |
90 } | |
91 } | |
92 | |
93 /* pack two bytes as "guint16" into buf | |
94 * return the number of bytes packed, otherwise return -1 */ | |
95 gint create_packet_w(guint8 *buf, guint8 **cursor, guint16 w) | |
96 { | |
97 if (*cursor <= buf + MAX_PACKET_SIZE - sizeof(guint16)) { | |
98 **(guint16 **) cursor = g_htons(w); | |
99 *cursor += sizeof(guint16); | |
100 return sizeof(guint16); | |
101 } else { | |
102 return -1; | |
103 } | |
104 } | |
105 | |
106 /* pack four bytes as "guint32" into buf | |
107 * return the number of bytes packed, otherwise return -1 */ | |
108 gint create_packet_dw(guint8 *buf, guint8 **cursor, guint32 dw) | |
109 { | |
110 if (*cursor <= buf + MAX_PACKET_SIZE - sizeof(guint32)) { | |
111 **(guint32 **) cursor = g_htonl(dw); | |
112 *cursor += sizeof(guint32); | |
113 return sizeof(guint32); | |
114 } else { | |
115 return -1; | |
116 } | |
117 } | |
118 | |
119 /* pack datalen bytes into buf | |
120 * return the number of bytes packed, otherwise return -1 */ | |
121 gint create_packet_data(guint8 *buf, guint8 **cursor, guint8 *data, gint datalen) | |
122 { | |
123 if (*cursor <= buf + MAX_PACKET_SIZE - datalen) { | |
124 g_memmove(*cursor, data, datalen); | |
125 *cursor += datalen; | |
126 return datalen; | |
127 } else { | |
128 return -1; | |
129 } | |
130 } |