Sun, 21 Jun 2009 16:40:15 +0000
propagate from branch 'im.pidgin.pidgin.2.5.7' (head 550e6ec7c9fd15db9956387a5775df07322ec766)
to branch 'im.pidgin.pidgin' (head 3029011cad5ac369187a44041818ef24c4911906)
| 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 | } |