libpurple/protocols/oscar/bstream.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 26069
0fa1f9b71cea
child 27437
4e89d2e440bb
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
2 * Purple's oscar protocol plugin
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
3 * This file is the legal property of its developers.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
4 * Please see the AUTHORS file distributed alongside this file.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
5 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
6 * This library is free software; you can redistribute it and/or
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
8 * License as published by the Free Software Foundation; either
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
9 * version 2 of the License, or (at your option) any later version.
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
10 *
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
11 * This library is distributed in the hope that it will be useful,
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
14 * Lesser General Public License for more details.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
15 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
17 * License along with this library; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 17280
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
19 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
20
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
21 /*
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
22 * This file contains all functions needed to use bstreams.
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
23 */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
24
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
25 #include "oscar.h"
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
26
15151
bb985812fefa [gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
27 int byte_stream_new(ByteStream *bs, guint32 len)
bb985812fefa [gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
28 {
bb985812fefa [gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
29 if (bs == NULL)
bb985812fefa [gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
30 return -1;
bb985812fefa [gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
31
bb985812fefa [gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
32 return byte_stream_init(bs, g_malloc(len), len);
bb985812fefa [gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
33 }
bb985812fefa [gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
34
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
35 int byte_stream_init(ByteStream *bs, guint8 *data, int len)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
36 {
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
37
15151
bb985812fefa [gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
38 if (bs == NULL)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
39 return -1;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
40
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
41 bs->data = data;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
42 bs->len = len;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
43 bs->offset = 0;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
44
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
45 return 0;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
46 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
47
22860
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 19859
diff changeset
48 void byte_stream_destroy(ByteStream *bs)
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 19859
diff changeset
49 {
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 19859
diff changeset
50 g_free(bs->data);
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 19859
diff changeset
51 }
2b0e247173b2 All SNACs on FLAP channel 2 except in the auth family are now sent through
Evan Schoenberg <evands@pidgin.im>
parents: 19859
diff changeset
52
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
53 int byte_stream_empty(ByteStream *bs)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
54 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
55 return bs->len - bs->offset;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
56 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
57
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
58 int byte_stream_curpos(ByteStream *bs)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
59 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
60 return bs->offset;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
61 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
62
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
63 int byte_stream_setpos(ByteStream *bs, unsigned int off)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
64 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
65
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
66 if (off > bs->len)
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
67 return -1;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
68
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
69 bs->offset = off;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
70
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
71 return off;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
72 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
73
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
74 void byte_stream_rewind(ByteStream *bs)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
75 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
76
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
77 byte_stream_setpos(bs, 0);
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
78
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
79 return;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
80 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
81
10595
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10464
diff changeset
82 /*
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10464
diff changeset
83 * N can be negative, which can be used for going backwards
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10464
diff changeset
84 * in a bstream. I'm not sure if libfaim actually does
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10464
diff changeset
85 * this anywhere...
1338add2b0b0 [gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents: 10464
diff changeset
86 */
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
87 int byte_stream_advance(ByteStream *bs, int n)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
88 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
89
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
90 if ((byte_stream_curpos(bs) + n < 0) || (byte_stream_empty(bs) < n))
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
91 return 0; /* XXX throw an exception */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
92
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
93 bs->offset += n;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
94
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
95 return n;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
96 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
97
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
98 guint8 byte_stream_get8(ByteStream *bs)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
99 {
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
100
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
101 if (byte_stream_empty(bs) < 1)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
102 return 0; /* XXX throw an exception */
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
103
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
104 bs->offset++;
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
105
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
106 return aimutil_get8(bs->data + bs->offset - 1);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
107 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
108
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
109 guint16 byte_stream_get16(ByteStream *bs)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
110 {
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
111
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
112 if (byte_stream_empty(bs) < 2)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
113 return 0; /* XXX throw an exception */
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
114
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
115 bs->offset += 2;
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
116
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
117 return aimutil_get16(bs->data + bs->offset - 2);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
118 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
119
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
120 guint32 byte_stream_get32(ByteStream *bs)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
121 {
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
122
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
123 if (byte_stream_empty(bs) < 4)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
124 return 0; /* XXX throw an exception */
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
125
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
126 bs->offset += 4;
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
127
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
128 return aimutil_get32(bs->data + bs->offset - 4);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
129 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
130
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
131 guint8 byte_stream_getle8(ByteStream *bs)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
132 {
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
133
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
134 if (byte_stream_empty(bs) < 1)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
135 return 0; /* XXX throw an exception */
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
136
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
137 bs->offset++;
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
138
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
139 return aimutil_getle8(bs->data + bs->offset - 1);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
140 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
141
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
142 guint16 byte_stream_getle16(ByteStream *bs)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
143 {
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
144
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
145 if (byte_stream_empty(bs) < 2)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
146 return 0; /* XXX throw an exception */
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
147
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
148 bs->offset += 2;
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
149
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
150 return aimutil_getle16(bs->data + bs->offset - 2);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
151 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
152
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
153 guint32 byte_stream_getle32(ByteStream *bs)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
154 {
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
155
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
156 if (byte_stream_empty(bs) < 4)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
157 return 0; /* XXX throw an exception */
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
158
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
159 bs->offset += 4;
10464
034b1b3ad2be [gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents: 7631
diff changeset
160
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
161 return aimutil_getle32(bs->data + bs->offset - 4);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
162 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
163
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
164 int byte_stream_getrawbuf(ByteStream *bs, guint8 *buf, int len)
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
165 {
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
166
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
167 if (byte_stream_empty(bs) < len)
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
168 return 0;
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
169
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
170 memcpy(buf, bs->data + bs->offset, len);
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
171 bs->offset += len;
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
172
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
173 return len;
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
174 }
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
175
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
176 guint8 *byte_stream_getraw(ByteStream *bs, int len)
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
177 {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 10993
diff changeset
178 guint8 *ob;
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
179
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
180 ob = g_malloc(len);
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
181
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
182 if (byte_stream_getrawbuf(bs, ob, len) < len) {
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
183 g_free(ob);
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
184 return NULL;
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
185 }
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
186
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
187 return ob;
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
188 }
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
189
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
190 char *byte_stream_getstr(ByteStream *bs, int len)
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
191 {
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
192 char *ob;
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
193
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
194 ob = g_malloc(len + 1);
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
195
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
196 if (byte_stream_getrawbuf(bs, (guint8 *)ob, len) < len) {
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
197 g_free(ob);
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
198 return NULL;
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
199 }
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
200
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
201 ob[len] = '\0';
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
202
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
203 return ob;
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
204 }
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
205
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
206 int byte_stream_put8(ByteStream *bs, guint8 v)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
207 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
208
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
209 if (byte_stream_empty(bs) < 1)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
210 return 0; /* XXX throw an exception */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
211
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
212 bs->offset += aimutil_put8(bs->data + bs->offset, v);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
213
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
214 return 1;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
215 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
216
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
217 int byte_stream_put16(ByteStream *bs, guint16 v)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
218 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
219
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
220 if (byte_stream_empty(bs) < 2)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
221 return 0; /* XXX throw an exception */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
222
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
223 bs->offset += aimutil_put16(bs->data + bs->offset, v);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
224
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
225 return 2;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
226 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
227
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
228 int byte_stream_put32(ByteStream *bs, guint32 v)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
229 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
230
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
231 if (byte_stream_empty(bs) < 4)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
232 return 0; /* XXX throw an exception */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
233
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
234 bs->offset += aimutil_put32(bs->data + bs->offset, v);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
235
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
236 return 1;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
237 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
238
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
239 int byte_stream_putle8(ByteStream *bs, guint8 v)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
240 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
241
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
242 if (byte_stream_empty(bs) < 1)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
243 return 0; /* XXX throw an exception */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
244
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
245 bs->offset += aimutil_putle8(bs->data + bs->offset, v);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
246
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
247 return 1;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
248 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
249
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
250 int byte_stream_putle16(ByteStream *bs, guint16 v)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
251 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
252
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
253 if (byte_stream_empty(bs) < 2)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
254 return 0; /* XXX throw an exception */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
255
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
256 bs->offset += aimutil_putle16(bs->data + bs->offset, v);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
257
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
258 return 2;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
259 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
260
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
261 int byte_stream_putle32(ByteStream *bs, guint32 v)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
262 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
263
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
264 if (byte_stream_empty(bs) < 4)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
265 return 0; /* XXX throw an exception */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
266
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
267 bs->offset += aimutil_putle32(bs->data + bs->offset, v);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
268
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
269 return 1;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
270 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
271
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
272
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
273 int byte_stream_putraw(ByteStream *bs, const guint8 *v, int len)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
274 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
275
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
276 if (byte_stream_empty(bs) < len)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
277 return 0; /* XXX throw an exception */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
278
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
279 memcpy(bs->data + bs->offset, v, len);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
280 bs->offset += len;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
281
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
282 return len;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
283 }
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
284
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
285 int byte_stream_putstr(ByteStream *bs, const char *str)
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
286 {
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
287 return byte_stream_putraw(bs, (guint8 *)str, strlen(str));
10990
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
288 }
6655ae14e763 [gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents: 10595
diff changeset
289
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
290 int byte_stream_putbs(ByteStream *bs, ByteStream *srcbs, int len)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
291 {
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
292
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
293 if (byte_stream_empty(srcbs) < len)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
294 return 0; /* XXX throw exception (underrun) */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
295
13593
3450a7cede99 [gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
296 if (byte_stream_empty(bs) < len)
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
297 return 0; /* XXX throw exception (overflow) */
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
298
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
299 memcpy(bs->data + bs->offset, srcbs->data + srcbs->offset, len);
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
300 bs->offset += len;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
301 srcbs->offset += len;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
302
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
303 return len;
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
304 }
25086
fb94ee60a4f2 Minor cleanup: remove od->sn, since it's the same as PurpleAccount->username
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
305
fb94ee60a4f2 Minor cleanup: remove od->sn, since it's the same as PurpleAccount->username
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
306 int byte_stream_putuid(ByteStream *bs, OscarData *od)
fb94ee60a4f2 Minor cleanup: remove od->sn, since it's the same as PurpleAccount->username
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
307 {
fb94ee60a4f2 Minor cleanup: remove od->sn, since it's the same as PurpleAccount->username
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
308 PurpleAccount *account;
fb94ee60a4f2 Minor cleanup: remove od->sn, since it's the same as PurpleAccount->username
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
309
fb94ee60a4f2 Minor cleanup: remove od->sn, since it's the same as PurpleAccount->username
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
310 account = purple_connection_get_account(od->gc);
fb94ee60a4f2 Minor cleanup: remove od->sn, since it's the same as PurpleAccount->username
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
311
fb94ee60a4f2 Minor cleanup: remove od->sn, since it's the same as PurpleAccount->username
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
312 return byte_stream_putle32(bs, atoi(purple_account_get_username(account)));
fb94ee60a4f2 Minor cleanup: remove od->sn, since it's the same as PurpleAccount->username
Mark Doliner <markdoliner@pidgin.im>
parents: 22860
diff changeset
313 }
26069
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
314
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
315 void byte_stream_put_bart_asset(ByteStream *bs, guint16 type, ByteStream *data)
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
316 {
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
317 byte_stream_put16(bs, type);
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
318
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
319 if (data != NULL && data->len > 0) {
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
320 /* Flags. 0x04 means "this asset has data attached to it" */
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
321 byte_stream_put8(bs, 0x04); /* Flags */
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
322 byte_stream_put8(bs, data->len); /* Length */
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
323 byte_stream_rewind(data);
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
324 byte_stream_putbs(bs, data, data->len); /* Data */
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
325 } else {
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
326 byte_stream_put8(bs, 0x00); /* No flags */
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
327 byte_stream_put8(bs, 0x00); /* Length */
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
328 /* No data */
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
329 }
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
330 }
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
331
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
332 void byte_stream_put_bart_asset_str(ByteStream *bs, guint16 type, const char *datastr)
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
333 {
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
334 ByteStream data;
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
335 size_t len = datastr != NULL ? strlen(datastr) : 0;
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
336
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
337 if (len > 0) {
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
338 byte_stream_new(&data, 2 + len + 2);
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
339 byte_stream_put16(&data, len); /* Length */
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
340 byte_stream_putstr(&data, datastr); /* String */
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
341 byte_stream_put16(&data, 0x0000); /* Unknown */
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
342 byte_stream_put_bart_asset(bs, type, &data);
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
343 byte_stream_destroy(&data);
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
344 } else {
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
345 byte_stream_put_bart_asset(bs, type, NULL);
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
346 }
0fa1f9b71cea Create two helper functions for setting the available message and iTunes
Mark Doliner <markdoliner@pidgin.im>
parents: 25086
diff changeset
347 }

mercurial