libpurple/protocols/oscar/bstream.c

Sun, 21 Jun 2009 16:40:15 +0000

author
Richard Laager <rlaager@pidgin.im>
date
Sun, 21 Jun 2009 16:40:15 +0000
changeset 27361
62f1aa8045bb
parent 26069
0fa1f9b71cea
child 27437
4e89d2e440bb
permissions
-rw-r--r--

propagate from branch 'im.pidgin.pidgin.2.5.7' (head 550e6ec7c9fd15db9956387a5775df07322ec766)
to branch 'im.pidgin.pidgin' (head 3029011cad5ac369187a44041818ef24c4911906)

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