Wed, 13 May 2009 20:29:03 +0000
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 | 1 | /* |
| 15884 | 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 | 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 | 22 | * This file contains all functions needed to use bstreams. |
| 23 | */ | |
| 24 | ||
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
25 | #include "oscar.h" |
| 3952 | 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 | 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 | 39 | return -1; |
| 40 | ||
| 41 | bs->data = data; | |
| 42 | bs->len = len; | |
| 43 | bs->offset = 0; | |
| 44 | ||
| 45 | return 0; | |
| 46 | } | |
| 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 | 54 | { |
| 55 | return bs->len - bs->offset; | |
| 56 | } | |
| 57 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
58 | int byte_stream_curpos(ByteStream *bs) |
| 3952 | 59 | { |
| 60 | return bs->offset; | |
| 61 | } | |
| 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 | 64 | { |
| 65 | ||
| 66 | if (off > bs->len) | |
| 67 | return -1; | |
| 68 | ||
| 69 | bs->offset = off; | |
| 70 | ||
| 71 | return off; | |
| 72 | } | |
| 73 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
74 | void byte_stream_rewind(ByteStream *bs) |
| 3952 | 75 | { |
| 76 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
77 | byte_stream_setpos(bs, 0); |
| 3952 | 78 | |
| 79 | return; | |
| 80 | } | |
| 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 | 88 | { |
| 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 | 91 | return 0; /* XXX throw an exception */ |
| 92 | ||
| 93 | bs->offset += n; | |
| 94 | ||
| 95 | return n; | |
| 96 | } | |
| 97 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
98 | guint8 byte_stream_get8(ByteStream *bs) |
| 3952 | 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 | 102 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
103 | |
| 3952 | 104 | bs->offset++; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
105 | |
| 3952 | 106 | return aimutil_get8(bs->data + bs->offset - 1); |
| 107 | } | |
| 108 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
109 | guint16 byte_stream_get16(ByteStream *bs) |
| 3952 | 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 | 113 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
114 | |
| 3952 | 115 | bs->offset += 2; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
116 | |
| 3952 | 117 | return aimutil_get16(bs->data + bs->offset - 2); |
| 118 | } | |
| 119 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
120 | guint32 byte_stream_get32(ByteStream *bs) |
| 3952 | 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 | 124 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
125 | |
| 3952 | 126 | bs->offset += 4; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
127 | |
| 3952 | 128 | return aimutil_get32(bs->data + bs->offset - 4); |
| 129 | } | |
| 130 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
131 | guint8 byte_stream_getle8(ByteStream *bs) |
| 3952 | 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 | 135 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
136 | |
| 3952 | 137 | bs->offset++; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
138 | |
| 3952 | 139 | return aimutil_getle8(bs->data + bs->offset - 1); |
| 140 | } | |
| 141 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
142 | guint16 byte_stream_getle16(ByteStream *bs) |
| 3952 | 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 | 146 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
147 | |
| 3952 | 148 | bs->offset += 2; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
149 | |
| 3952 | 150 | return aimutil_getle16(bs->data + bs->offset - 2); |
| 151 | } | |
| 152 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
153 | guint32 byte_stream_getle32(ByteStream *bs) |
| 3952 | 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 | 157 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
158 | |
| 3952 | 159 | bs->offset += 4; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
160 | |
| 3952 | 161 | return aimutil_getle32(bs->data + bs->offset - 4); |
| 162 | } | |
| 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 | 207 | { |
| 208 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
209 | if (byte_stream_empty(bs) < 1) |
| 3952 | 210 | return 0; /* XXX throw an exception */ |
| 211 | ||
| 212 | bs->offset += aimutil_put8(bs->data + bs->offset, v); | |
| 213 | ||
| 214 | return 1; | |
| 215 | } | |
| 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 | 218 | { |
| 219 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
220 | if (byte_stream_empty(bs) < 2) |
| 3952 | 221 | return 0; /* XXX throw an exception */ |
| 222 | ||
| 223 | bs->offset += aimutil_put16(bs->data + bs->offset, v); | |
| 224 | ||
| 225 | return 2; | |
| 226 | } | |
| 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 | 229 | { |
| 230 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
231 | if (byte_stream_empty(bs) < 4) |
| 3952 | 232 | return 0; /* XXX throw an exception */ |
| 233 | ||
| 234 | bs->offset += aimutil_put32(bs->data + bs->offset, v); | |
| 235 | ||
| 236 | return 1; | |
| 237 | } | |
| 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 | 240 | { |
| 241 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
242 | if (byte_stream_empty(bs) < 1) |
| 3952 | 243 | return 0; /* XXX throw an exception */ |
| 244 | ||
| 245 | bs->offset += aimutil_putle8(bs->data + bs->offset, v); | |
| 246 | ||
| 247 | return 1; | |
| 248 | } | |
| 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 | 251 | { |
| 252 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
253 | if (byte_stream_empty(bs) < 2) |
| 3952 | 254 | return 0; /* XXX throw an exception */ |
| 255 | ||
| 256 | bs->offset += aimutil_putle16(bs->data + bs->offset, v); | |
| 257 | ||
| 258 | return 2; | |
| 259 | } | |
| 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 | 262 | { |
| 263 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
264 | if (byte_stream_empty(bs) < 4) |
| 3952 | 265 | return 0; /* XXX throw an exception */ |
| 266 | ||
| 267 | bs->offset += aimutil_putle32(bs->data + bs->offset, v); | |
| 268 | ||
| 269 | return 1; | |
| 270 | } | |
| 271 | ||
| 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 | 274 | { |
| 275 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
276 | if (byte_stream_empty(bs) < len) |
| 3952 | 277 | return 0; /* XXX throw an exception */ |
| 278 | ||
| 279 | memcpy(bs->data + bs->offset, v, len); | |
| 280 | bs->offset += len; | |
| 281 | ||
| 282 | return len; | |
| 283 | } | |
| 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 | 291 | { |
| 292 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
293 | if (byte_stream_empty(srcbs) < len) |
| 3952 | 294 | return 0; /* XXX throw exception (underrun) */ |
| 295 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
296 | if (byte_stream_empty(bs) < len) |
| 3952 | 297 | return 0; /* XXX throw exception (overflow) */ |
| 298 | ||
| 299 | memcpy(bs->data + bs->offset, srcbs->data + srcbs->offset, len); | |
| 300 | bs->offset += len; | |
| 301 | srcbs->offset += len; | |
| 302 | ||
| 303 | return len; | |
| 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 | } |