Wed, 12 Nov 2008 05:14:03 +0000
merge of '77693555855fe9cd3215414f79964dba346cc5fa'
and '19a87e98e5857ad0289f2c760d460f7f1dbbb42d'
| 3952 | 1 | /* |
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
2 | * Gaim's oscar protocol plugin |
|
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 |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
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 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
48 | int byte_stream_empty(ByteStream *bs) |
| 3952 | 49 | { |
| 50 | return bs->len - bs->offset; | |
| 51 | } | |
| 52 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
53 | int byte_stream_curpos(ByteStream *bs) |
| 3952 | 54 | { |
| 55 | return bs->offset; | |
| 56 | } | |
| 57 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
58 | int byte_stream_setpos(ByteStream *bs, unsigned int off) |
| 3952 | 59 | { |
| 60 | ||
| 61 | if (off > bs->len) | |
| 62 | return -1; | |
| 63 | ||
| 64 | bs->offset = off; | |
| 65 | ||
| 66 | return off; | |
| 67 | } | |
| 68 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
69 | void byte_stream_rewind(ByteStream *bs) |
| 3952 | 70 | { |
| 71 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
72 | byte_stream_setpos(bs, 0); |
| 3952 | 73 | |
| 74 | return; | |
| 75 | } | |
| 76 | ||
|
10595
1338add2b0b0
[gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents:
10464
diff
changeset
|
77 | /* |
|
1338add2b0b0
[gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents:
10464
diff
changeset
|
78 | * N can be negative, which can be used for going backwards |
|
1338add2b0b0
[gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents:
10464
diff
changeset
|
79 | * in a bstream. I'm not sure if libfaim actually does |
|
1338add2b0b0
[gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents:
10464
diff
changeset
|
80 | * this anywhere... |
|
1338add2b0b0
[gaim-migrate @ 12010]
Mark Doliner <markdoliner@pidgin.im>
parents:
10464
diff
changeset
|
81 | */ |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
82 | int byte_stream_advance(ByteStream *bs, int n) |
| 3952 | 83 | { |
| 84 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
85 | if ((byte_stream_curpos(bs) + n < 0) || (byte_stream_empty(bs) < n)) |
| 3952 | 86 | return 0; /* XXX throw an exception */ |
| 87 | ||
| 88 | bs->offset += n; | |
| 89 | ||
| 90 | return n; | |
| 91 | } | |
| 92 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
93 | guint8 byte_stream_get8(ByteStream *bs) |
| 3952 | 94 | { |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
95 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
96 | if (byte_stream_empty(bs) < 1) |
| 3952 | 97 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
98 | |
| 3952 | 99 | bs->offset++; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
100 | |
| 3952 | 101 | return aimutil_get8(bs->data + bs->offset - 1); |
| 102 | } | |
| 103 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
104 | guint16 byte_stream_get16(ByteStream *bs) |
| 3952 | 105 | { |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
106 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
107 | if (byte_stream_empty(bs) < 2) |
| 3952 | 108 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
109 | |
| 3952 | 110 | bs->offset += 2; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
111 | |
| 3952 | 112 | return aimutil_get16(bs->data + bs->offset - 2); |
| 113 | } | |
| 114 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
115 | guint32 byte_stream_get32(ByteStream *bs) |
| 3952 | 116 | { |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
117 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
118 | if (byte_stream_empty(bs) < 4) |
| 3952 | 119 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
120 | |
| 3952 | 121 | bs->offset += 4; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
122 | |
| 3952 | 123 | return aimutil_get32(bs->data + bs->offset - 4); |
| 124 | } | |
| 125 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
126 | guint8 byte_stream_getle8(ByteStream *bs) |
| 3952 | 127 | { |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
128 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
129 | if (byte_stream_empty(bs) < 1) |
| 3952 | 130 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
131 | |
| 3952 | 132 | bs->offset++; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
133 | |
| 3952 | 134 | return aimutil_getle8(bs->data + bs->offset - 1); |
| 135 | } | |
| 136 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
137 | guint16 byte_stream_getle16(ByteStream *bs) |
| 3952 | 138 | { |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
139 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
140 | if (byte_stream_empty(bs) < 2) |
| 3952 | 141 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
142 | |
| 3952 | 143 | bs->offset += 2; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
144 | |
| 3952 | 145 | return aimutil_getle16(bs->data + bs->offset - 2); |
| 146 | } | |
| 147 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
148 | guint32 byte_stream_getle32(ByteStream *bs) |
| 3952 | 149 | { |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
150 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
151 | if (byte_stream_empty(bs) < 4) |
| 3952 | 152 | return 0; /* XXX throw an exception */ |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
153 | |
| 3952 | 154 | bs->offset += 4; |
|
10464
034b1b3ad2be
[gaim-migrate @ 11739]
Mark Doliner <markdoliner@pidgin.im>
parents:
7631
diff
changeset
|
155 | |
| 3952 | 156 | return aimutil_getle32(bs->data + bs->offset - 4); |
| 157 | } | |
| 158 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
159 | int byte_stream_getrawbuf(ByteStream *bs, guint8 *buf, int len) |
|
10990
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
160 | { |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
161 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
162 | if (byte_stream_empty(bs) < len) |
|
10990
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
163 | return 0; |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
164 | |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
165 | memcpy(buf, bs->data + bs->offset, len); |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
166 | bs->offset += len; |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
167 | |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
168 | return len; |
|
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 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
171 | guint8 *byte_stream_getraw(ByteStream *bs, int len) |
|
10990
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
172 | { |
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
173 | guint8 *ob; |
|
10990
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
174 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
175 | ob = malloc(len); |
|
10990
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
176 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
177 | if (byte_stream_getrawbuf(bs, ob, len) < len) { |
|
10990
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
178 | free(ob); |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
179 | return NULL; |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
180 | } |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
181 | |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
182 | return ob; |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
183 | } |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
184 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
185 | char *byte_stream_getstr(ByteStream *bs, int len) |
|
10990
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 | char *ob; |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
188 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
189 | ob = malloc(len + 1); |
|
10990
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
190 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
191 | if (byte_stream_getrawbuf(bs, (guint8 *)ob, len) < len) { |
|
10990
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
192 | free(ob); |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
193 | return NULL; |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
194 | } |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
195 | |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
196 | ob[len] = '\0'; |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
197 | |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
198 | return ob; |
|
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 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
201 | int byte_stream_put8(ByteStream *bs, guint8 v) |
| 3952 | 202 | { |
| 203 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
204 | if (byte_stream_empty(bs) < 1) |
| 3952 | 205 | return 0; /* XXX throw an exception */ |
| 206 | ||
| 207 | bs->offset += aimutil_put8(bs->data + bs->offset, v); | |
| 208 | ||
| 209 | return 1; | |
| 210 | } | |
| 211 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
212 | int byte_stream_put16(ByteStream *bs, guint16 v) |
| 3952 | 213 | { |
| 214 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
215 | if (byte_stream_empty(bs) < 2) |
| 3952 | 216 | return 0; /* XXX throw an exception */ |
| 217 | ||
| 218 | bs->offset += aimutil_put16(bs->data + bs->offset, v); | |
| 219 | ||
| 220 | return 2; | |
| 221 | } | |
| 222 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
223 | int byte_stream_put32(ByteStream *bs, guint32 v) |
| 3952 | 224 | { |
| 225 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
226 | if (byte_stream_empty(bs) < 4) |
| 3952 | 227 | return 0; /* XXX throw an exception */ |
| 228 | ||
| 229 | bs->offset += aimutil_put32(bs->data + bs->offset, v); | |
| 230 | ||
| 231 | return 1; | |
| 232 | } | |
| 233 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
234 | int byte_stream_putle8(ByteStream *bs, guint8 v) |
| 3952 | 235 | { |
| 236 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
237 | if (byte_stream_empty(bs) < 1) |
| 3952 | 238 | return 0; /* XXX throw an exception */ |
| 239 | ||
| 240 | bs->offset += aimutil_putle8(bs->data + bs->offset, v); | |
| 241 | ||
| 242 | return 1; | |
| 243 | } | |
| 244 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
245 | int byte_stream_putle16(ByteStream *bs, guint16 v) |
| 3952 | 246 | { |
| 247 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
248 | if (byte_stream_empty(bs) < 2) |
| 3952 | 249 | return 0; /* XXX throw an exception */ |
| 250 | ||
| 251 | bs->offset += aimutil_putle16(bs->data + bs->offset, v); | |
| 252 | ||
| 253 | return 2; | |
| 254 | } | |
| 255 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
256 | int byte_stream_putle32(ByteStream *bs, guint32 v) |
| 3952 | 257 | { |
| 258 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
259 | if (byte_stream_empty(bs) < 4) |
| 3952 | 260 | return 0; /* XXX throw an exception */ |
| 261 | ||
| 262 | bs->offset += aimutil_putle32(bs->data + bs->offset, v); | |
| 263 | ||
| 264 | return 1; | |
| 265 | } | |
| 266 | ||
| 267 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
268 | int byte_stream_putraw(ByteStream *bs, const guint8 *v, int len) |
| 3952 | 269 | { |
| 270 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
271 | if (byte_stream_empty(bs) < len) |
| 3952 | 272 | return 0; /* XXX throw an exception */ |
| 273 | ||
| 274 | memcpy(bs->data + bs->offset, v, len); | |
| 275 | bs->offset += len; | |
| 276 | ||
| 277 | return len; | |
| 278 | } | |
| 279 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
280 | int byte_stream_putstr(ByteStream *bs, const char *str) |
|
10990
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
281 | { |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
282 | return byte_stream_putraw(bs, (guint8 *)str, strlen(str)); |
|
10990
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
283 | } |
|
6655ae14e763
[gaim-migrate @ 12828]
Mark Doliner <markdoliner@pidgin.im>
parents:
10595
diff
changeset
|
284 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
285 | int byte_stream_putbs(ByteStream *bs, ByteStream *srcbs, int len) |
| 3952 | 286 | { |
| 287 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
288 | if (byte_stream_empty(srcbs) < len) |
| 3952 | 289 | return 0; /* XXX throw exception (underrun) */ |
| 290 | ||
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
291 | if (byte_stream_empty(bs) < len) |
| 3952 | 292 | return 0; /* XXX throw exception (overflow) */ |
| 293 | ||
| 294 | memcpy(bs->data + bs->offset, srcbs->data + srcbs->offset, len); | |
| 295 | bs->offset += len; | |
| 296 | srcbs->offset += len; | |
| 297 | ||
| 298 | return len; | |
| 299 | } |