Sun, 16 May 2010 05:57:08 +0000
oscar: g_malloc can't fail (in a way that doesn't abort)
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
1 | /* |
| 15884 | 2 | * Purple's oscar protocol plugin |
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
3 | * This file is the legal property of its developers. |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
4 | * Please see the AUTHORS file distributed alongside this file. |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
5 | * |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
6 | * This library is free software; you can redistribute it and/or |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
7 | * modify it under the terms of the GNU Lesser General Public |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
8 | * License as published by the Free Software Foundation; either |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
9 | * version 2 of the License, or (at your option) any later version. |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
10 | * |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
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:
11285
diff
changeset
|
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
14 | * Lesser General Public License for more details. |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
15 | * |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
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:
11285
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:
18952
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:
11285
diff
changeset
|
19 | */ |
| 2086 | 20 | |
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
21 | #include "oscar.h" |
|
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
22 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
23 | static aim_tlv_t * |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
24 | createtlv(guint16 type, guint16 length, guint8 *value) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
25 | { |
|
7158
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
26 | aim_tlv_t *ret; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
27 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
28 | ret = g_new(aim_tlv_t, 1); |
|
7158
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
29 | ret->type = type; |
|
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
30 | ret->length = length; |
|
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
31 | ret->value = value; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
32 | |
|
7158
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
33 | return ret; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
34 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
35 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
36 | static void |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
37 | freetlv(aim_tlv_t *oldtlv) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
38 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
39 | g_free(oldtlv->value); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
40 | g_free(oldtlv); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
41 | } |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
42 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
43 | static GSList * |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
44 | aim_tlv_read(GSList *list, ByteStream *bs) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
45 | { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
46 | guint16 type, length; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
47 | aim_tlv_t *tlv; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
48 | |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
49 | type = byte_stream_get16(bs); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
50 | length = byte_stream_get16(bs); |
|
10986
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
51 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
52 | #if 0 |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
53 | /* |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
54 | * This code hasn't been needed in years. It's been commented |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
55 | * out since 2003, at the latest. It seems likely that it was |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
56 | * just a bug in their server code that has since been fixed. |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
57 | * In any case, here's the orignal comment, kept for historical |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
58 | * purposes: |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
59 | * |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
60 | * Okay, so now AOL has decided that any TLV of |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
61 | * type 0x0013 can only be two bytes, despite |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
62 | * what the actual given length is. So here |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
63 | * we dump any invalid TLVs of that sort. Hopefully |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
64 | * there's no special cases to this special case. |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
65 | * - mid (30jun2000) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
66 | */ |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
67 | if ((type == 0x0013) && (length != 0x0002)) { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
68 | length = 0x0002; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
69 | return list; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
70 | } |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
71 | #endif |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
72 | if (length > byte_stream_empty(bs)) { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
73 | aim_tlvlist_free(list); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
74 | return NULL; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
75 | } |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
76 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
77 | tlv = createtlv(type, length, NULL); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
78 | if (tlv->length > 0) { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
79 | tlv->value = byte_stream_getraw(bs, length); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
80 | if (!tlv->value) { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
81 | freetlv(tlv); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
82 | aim_tlvlist_free(list); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
83 | return NULL; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
84 | } |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
85 | } |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
86 | |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
87 | return g_slist_prepend(list, tlv); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
88 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
89 | |
| 2086 | 90 | /** |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
91 | * Read a TLV chain from a buffer. |
| 2086 | 92 | * |
| 93 | * Reads and parses a series of TLV patterns from a data buffer; the | |
| 94 | * returned structure is manipulatable with the rest of the TLV | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
95 | * routines. When done with a TLV chain, aim_tlvlist_free() should |
| 2086 | 96 | * be called to free the dynamic substructures. |
| 97 | * | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
98 | * TODO: There should be a flag setable here to have the tlvlist contain |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
99 | * bstream references, so that at least the ->value portion of each |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
100 | * element doesn't need to be malloc/memcpy'd. This could prove to be |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
101 | * just as efficient as the in-place TLV parsing used in a couple places |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
102 | * in libfaim. |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
103 | * |
|
7158
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
104 | * @param bs Input bstream |
|
8790
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
105 | * @return Return the TLV chain read |
| 2086 | 106 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
107 | GSList *aim_tlvlist_read(ByteStream *bs) |
| 2086 | 108 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
109 | GSList *list = NULL; |
|
10986
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
110 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
111 | while (byte_stream_empty(bs) > 0) { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
112 | list = aim_tlv_read(list, bs); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
113 | if (list == NULL) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
114 | return NULL; |
| 2086 | 115 | } |
| 116 | ||
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
117 | return g_slist_reverse(list); |
| 2086 | 118 | } |
| 119 | ||
| 120 | /** | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
121 | * Read a TLV chain from a buffer. |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
122 | * |
|
3952
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
123 | * Reads and parses a series of TLV patterns from a data buffer; the |
|
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
124 | * returned structure is manipulatable with the rest of the TLV |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
125 | * routines. When done with a TLV chain, aim_tlvlist_free() should |
|
3952
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
126 | * be called to free the dynamic substructures. |
|
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
127 | * |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
128 | * TODO: There should be a flag setable here to have the tlvlist contain |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
129 | * bstream references, so that at least the ->value portion of each |
|
3952
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
130 | * element doesn't need to be malloc/memcpy'd. This could prove to be |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
131 | * just as efficient as the in-place TLV parsing used in a couple places |
|
3952
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
132 | * in libfaim. |
|
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
133 | * |
|
7158
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
134 | * @param bs Input bstream |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
135 | * @param num The max number of TLVs that will be read, or -1 if unlimited. |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
136 | * There are a number of places where you want to read in a tlvchain, |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
137 | * but the chain is not at the end of the SNAC, and the chain is |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
138 | * preceded by the number of TLVs. So you can limit that with this. |
|
8790
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
139 | * @return Return the TLV chain read |
|
3952
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
140 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
141 | GSList *aim_tlvlist_readnum(ByteStream *bs, guint16 num) |
|
3952
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
142 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
143 | GSList *list = NULL; |
|
4317
f3f135811a70
[gaim-migrate @ 4571]
Mark Doliner <markdoliner@pidgin.im>
parents:
4230
diff
changeset
|
144 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
145 | while ((byte_stream_empty(bs) > 0) && (num != 0)) { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
146 | list = aim_tlv_read(list, bs); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
147 | if (list == NULL) |
|
3952
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
148 | return NULL; |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
149 | num--; |
|
3952
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
150 | } |
|
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
151 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
152 | return g_slist_reverse(list); |
|
3952
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
153 | } |
|
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
154 | |
|
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3912
diff
changeset
|
155 | /** |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
156 | * Read a TLV chain from a buffer. |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
157 | * |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
158 | * Reads and parses a series of TLV patterns from a data buffer; the |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
159 | * returned structure is manipulatable with the rest of the TLV |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
160 | * routines. When done with a TLV chain, aim_tlvlist_free() should |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
161 | * be called to free the dynamic substructures. |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
162 | * |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
163 | * TODO: There should be a flag setable here to have the tlvlist contain |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
164 | * bstream references, so that at least the ->value portion of each |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
165 | * element doesn't need to be malloc/memcpy'd. This could prove to be |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
166 | * just as efficient as the in-place TLV parsing used in a couple places |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
167 | * in libfaim. |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
168 | * |
|
7158
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
169 | * @param bs Input bstream |
|
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
170 | * @param len The max length in bytes that will be read. |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
171 | * There are a number of places where you want to read in a tlvchain, |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
172 | * but the chain is not at the end of the SNAC, and the chain is |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
173 | * preceded by the length of the TLVs. So you can limit that with this. |
|
8790
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
174 | * @return Return the TLV chain read |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
175 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
176 | GSList *aim_tlvlist_readlen(ByteStream *bs, guint16 len) |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
177 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
178 | GSList *list = NULL; |
|
4317
f3f135811a70
[gaim-migrate @ 4571]
Mark Doliner <markdoliner@pidgin.im>
parents:
4230
diff
changeset
|
179 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
180 | while ((byte_stream_empty(bs) > 0) && (len > 0)) { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
181 | list = aim_tlv_read(list, bs); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
182 | if (list == NULL) |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
183 | return NULL; |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
184 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
185 | len -= 2 + 2 + ((aim_tlv_t *)list->data)->length; |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
186 | } |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
187 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
188 | return g_slist_reverse(list); |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
189 | } |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
190 | |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
191 | /** |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
192 | * Duplicate a TLV chain. |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
193 | * This is pretty self explanatory. |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
194 | * |
|
7158
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
195 | * @param orig The TLV chain you want to make a copy of. |
|
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
196 | * @return A newly allocated TLV chain. |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
197 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
198 | GSList *aim_tlvlist_copy(GSList *orig) |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
199 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
200 | GSList *new = NULL; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
201 | aim_tlv_t *tlv; |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
202 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
203 | while (orig != NULL) { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
204 | tlv = orig->data; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
205 | aim_tlvlist_add_raw(&new, tlv->type, tlv->length, tlv->value); |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
206 | orig = orig->next; |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
207 | } |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
208 | |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
209 | return new; |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
210 | } |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
211 | |
|
6101
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
212 | /* |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
213 | * Compare two TLV lists for equality. This probably is not the most |
|
6101
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
214 | * efficient way to do this. |
|
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
215 | * |
|
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
216 | * @param one One of the TLV chains to compare. |
|
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
217 | * @param two The other TLV chain to compare. |
|
8790
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
218 | * @return Return 0 if the lists are the same, return 1 if they are different. |
|
6101
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
219 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
220 | int aim_tlvlist_cmp(GSList *one, GSList *two) |
|
6101
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
221 | { |
|
13240
db5187cc40d1
[gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents:
13235
diff
changeset
|
222 | ByteStream bs1, bs2; |
|
6101
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
223 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
224 | if (aim_tlvlist_size(one) != aim_tlvlist_size(two)) |
|
6101
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
225 | return 1; |
|
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
226 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
227 | byte_stream_new(&bs1, aim_tlvlist_size(one)); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
228 | byte_stream_new(&bs2, aim_tlvlist_size(two)); |
|
6101
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
229 | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
230 | aim_tlvlist_write(&bs1, &one); |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
231 | aim_tlvlist_write(&bs2, &two); |
|
6101
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
232 | |
|
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
233 | if (memcmp(bs1.data, bs2.data, bs1.len)) { |
|
22861
76cb58c0c40a
Used byte_stream_destroy(), added in 2b0e247173b206213210577c194020c78c864474,
Evan Schoenberg <evands@pidgin.im>
parents:
19859
diff
changeset
|
234 | byte_stream_destroy(&bs1); |
|
76cb58c0c40a
Used byte_stream_destroy(), added in 2b0e247173b206213210577c194020c78c864474,
Evan Schoenberg <evands@pidgin.im>
parents:
19859
diff
changeset
|
235 | byte_stream_destroy(&bs2); |
|
6101
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
236 | return 1; |
|
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
237 | } |
|
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
238 | |
|
22861
76cb58c0c40a
Used byte_stream_destroy(), added in 2b0e247173b206213210577c194020c78c864474,
Evan Schoenberg <evands@pidgin.im>
parents:
19859
diff
changeset
|
239 | byte_stream_destroy(&bs1); |
|
76cb58c0c40a
Used byte_stream_destroy(), added in 2b0e247173b206213210577c194020c78c864474,
Evan Schoenberg <evands@pidgin.im>
parents:
19859
diff
changeset
|
240 | byte_stream_destroy(&bs2); |
|
6101
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
241 | |
|
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
242 | return 0; |
|
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
243 | } |
|
c3762fa398c4
[gaim-migrate @ 6560]
Mark Doliner <markdoliner@pidgin.im>
parents:
4617
diff
changeset
|
244 | |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
245 | /** |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
246 | * Free a TLV chain structure |
| 2086 | 247 | * |
| 248 | * Walks the list of TLVs in the passed TLV chain and | |
| 249 | * frees each one. Note that any references to this data | |
| 250 | * should be removed before calling this. | |
| 251 | * | |
|
8790
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
252 | * @param list Chain to be freed |
| 2086 | 253 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
254 | void aim_tlvlist_free(GSList *list) |
| 2086 | 255 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
256 | while (list != NULL) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
257 | { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
258 | freetlv(list->data); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
259 | list = g_slist_delete_link(list, list); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
260 | } |
| 2086 | 261 | } |
| 262 | ||
| 263 | /** | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
264 | * Count the number of TLVs in a chain. |
| 2086 | 265 | * |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
266 | * @param list Chain to be counted. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
267 | * @return The number of TLVs stored in the passed chain. |
| 2086 | 268 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
269 | int aim_tlvlist_count(GSList *list) |
| 2086 | 270 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
271 | GSList *cur; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
272 | int count; |
| 2086 | 273 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
274 | if (list == NULL) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
275 | return 0; |
| 2086 | 276 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
277 | for (cur = list, count = 0; cur; cur = cur->next) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
278 | count++; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
279 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
280 | return count; |
| 2086 | 281 | } |
| 282 | ||
| 283 | /** | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
284 | * Count the number of bytes in a TLV chain. |
| 2086 | 285 | * |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
286 | * @param list Chain to be sized |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
287 | * @return The number of bytes that would be needed to |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
288 | * write the passed TLV chain to a data buffer. |
| 2086 | 289 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
290 | int aim_tlvlist_size(GSList *list) |
| 2086 | 291 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
292 | GSList *cur; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
293 | int size; |
| 2086 | 294 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
295 | if (list == NULL) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
296 | return 0; |
| 2086 | 297 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
298 | for (cur = list, size = 0; cur; cur = cur->next) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
299 | size += (4 + ((aim_tlv_t *)cur->data)->length); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
300 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
301 | return size; |
| 2086 | 302 | } |
| 303 | ||
| 304 | /** | |
| 305 | * Adds the passed string as a TLV element of the passed type | |
| 306 | * to the TLV chain. | |
| 307 | * | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
308 | * @param list Desination chain (%NULL pointer if empty). |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
309 | * @param type TLV type. |
|
8790
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
310 | * @param length Length of string to add (not including %NULL). |
|
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
311 | * @param value String to add. |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
312 | * @return The size of the value added. |
| 2086 | 313 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
314 | int aim_tlvlist_add_raw(GSList **list, const guint16 type, const guint16 length, const guint8 *value) |
| 2086 | 315 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
316 | aim_tlv_t *tlv; |
| 2086 | 317 | |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
318 | if (list == NULL) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
319 | return 0; |
| 2086 | 320 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
321 | tlv = createtlv(type, length, NULL); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
322 | if (tlv->length > 0) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
323 | tlv->value = g_memdup(value, length); |
| 2086 | 324 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
325 | *list = g_slist_append(*list, tlv); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
326 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
327 | return tlv->length; |
| 2086 | 328 | } |
| 329 | ||
| 330 | /** | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
331 | * Add a one byte integer to a TLV chain. |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2421
diff
changeset
|
332 | * |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
333 | * @param list Destination chain. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
334 | * @param type TLV type to add. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
335 | * @param value Value to add. |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
336 | * @return The size of the value added. |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2421
diff
changeset
|
337 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
338 | int aim_tlvlist_add_8(GSList **list, const guint16 type, const guint8 value) |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2421
diff
changeset
|
339 | { |
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
340 | guint8 v8[1]; |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2421
diff
changeset
|
341 | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
342 | aimutil_put8(v8, value); |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2421
diff
changeset
|
343 | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
344 | return aim_tlvlist_add_raw(list, type, 1, v8); |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2421
diff
changeset
|
345 | } |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2421
diff
changeset
|
346 | |
|
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2421
diff
changeset
|
347 | /** |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
348 | * Add a two byte integer to a TLV chain. |
| 2086 | 349 | * |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
350 | * @param list Destination chain. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
351 | * @param type TLV type to add. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
352 | * @param value Value to add. |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
353 | * @return The size of the value added. |
| 2086 | 354 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
355 | int aim_tlvlist_add_16(GSList **list, const guint16 type, const guint16 value) |
| 2086 | 356 | { |
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
357 | guint8 v16[2]; |
| 2086 | 358 | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
359 | aimutil_put16(v16, value); |
| 2086 | 360 | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
361 | return aim_tlvlist_add_raw(list, type, 2, v16); |
| 2086 | 362 | } |
| 363 | ||
| 364 | /** | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
365 | * Add a four byte integer to a TLV chain. |
| 2086 | 366 | * |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
367 | * @param list Destination chain. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
368 | * @param type TLV type to add. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
369 | * @param value Value to add. |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
370 | * @return The size of the value added. |
| 2086 | 371 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
372 | int aim_tlvlist_add_32(GSList **list, const guint16 type, const guint32 value) |
| 2086 | 373 | { |
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
374 | guint8 v32[4]; |
| 2086 | 375 | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
376 | aimutil_put32(v32, value); |
| 2086 | 377 | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
378 | return aim_tlvlist_add_raw(list, type, 4, v32); |
| 2086 | 379 | } |
| 380 | ||
| 381 | /** | |
|
10986
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
382 | * Add a string to a TLV chain. |
|
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
383 | * |
|
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
384 | * @param list Destination chain. |
|
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
385 | * @param type TLV type to add. |
|
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
386 | * @param value Value to add. |
|
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
387 | * @return The size of the value added. |
|
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
388 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
389 | int aim_tlvlist_add_str(GSList **list, const guint16 type, const char *value) |
|
10986
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
390 | { |
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
391 | return aim_tlvlist_add_raw(list, type, strlen(value), (guint8 *)value); |
|
10986
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
392 | } |
|
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
393 | |
|
92a91fb514f4
[gaim-migrate @ 12822]
Mark Doliner <markdoliner@pidgin.im>
parents:
9933
diff
changeset
|
394 | /** |
| 2086 | 395 | * Adds a block of capability blocks to a TLV chain. The bitfield |
| 396 | * passed in should be a bitwise %OR of any of the %AIM_CAPS constants: | |
| 397 | * | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
398 | * %OSCAR_CAPABILITY_BUDDYICON Supports Buddy Icons |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
399 | * %OSCAR_CAPABILITY_TALK Supports Voice Chat |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
400 | * %OSCAR_CAPABILITY_IMIMAGE Supports DirectIM/IMImage |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
401 | * %OSCAR_CAPABILITY_CHAT Supports Chat |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
402 | * %OSCAR_CAPABILITY_GETFILE Supports Get File functions |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
403 | * %OSCAR_CAPABILITY_SENDFILE Supports Send File functions |
| 2086 | 404 | * |
|
7158
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
405 | * @param list Destination chain |
|
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
406 | * @param type TLV type to add |
|
2bdbaa3a8468
[gaim-migrate @ 7725]
Mark Doliner <markdoliner@pidgin.im>
parents:
7011
diff
changeset
|
407 | * @param caps Bitfield of capability flags to send |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
408 | * @return The size of the value added. |
| 2086 | 409 | */ |
|
29889
7264be912028
Change the oscar capabilities variable to be a guint64 everywhere instead
Mark Doliner <markdoliner@pidgin.im>
parents:
24912
diff
changeset
|
410 | int aim_tlvlist_add_caps(GSList **list, const guint16 type, const guint64 caps, const char *mood) |
| 2086 | 411 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
412 | guint8 buf[256]; /* TODO: Don't use a fixed length buffer */ |
|
13240
db5187cc40d1
[gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents:
13235
diff
changeset
|
413 | ByteStream bs; |
|
24625
4082cd694acb
This patch comes from the combined work of contributors minstrel, NightFox,
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22861
diff
changeset
|
414 | guint8 *data; |
| 2086 | 415 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
416 | if (caps == 0) |
|
2421
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2270
diff
changeset
|
417 | return 0; /* nothing there anyway */ |
|
009ae3cf0e83
[gaim-migrate @ 2434]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2270
diff
changeset
|
418 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
419 | byte_stream_init(&bs, buf, sizeof(buf)); |
| 2086 | 420 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
421 | byte_stream_putcaps(&bs, caps); |
|
24625
4082cd694acb
This patch comes from the combined work of contributors minstrel, NightFox,
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22861
diff
changeset
|
422 | |
|
4082cd694acb
This patch comes from the combined work of contributors minstrel, NightFox,
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22861
diff
changeset
|
423 | /* adding of custom icon GUID */ |
|
24912
9ae8349f0353
Move the mood UI for ICQ into Pidgin. It still uses the new request API
Richard Laager <rlaager@pidgin.im>
parents:
24907
diff
changeset
|
424 | data = icq_get_custom_icon_data(mood); |
|
24907
13118548c74c
Add a PURPLE_STATUS_MOOD primitive and change ICQ to use it.
Richard Laager <rlaager@pidgin.im>
parents:
24625
diff
changeset
|
425 | if (data != NULL) |
|
24625
4082cd694acb
This patch comes from the combined work of contributors minstrel, NightFox,
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22861
diff
changeset
|
426 | byte_stream_putraw(&bs, data, 16); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
427 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
428 | return aim_tlvlist_add_raw(list, type, byte_stream_curpos(&bs), buf); |
| 2086 | 429 | } |
| 430 | ||
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
431 | /** |
|
8225
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
432 | * Adds the given chatroom info to a TLV chain. |
|
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
433 | * |
|
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
434 | * @param list Destination chain. |
|
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
435 | * @param type TLV type to add. |
|
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
436 | * @param roomname The name of the chat. |
|
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
437 | * @param instance The instance. |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
438 | * @return The size of the value added. |
|
8225
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
439 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
440 | int aim_tlvlist_add_chatroom(GSList **list, guint16 type, guint16 exchange, const char *roomname, guint16 instance) |
|
8225
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
441 | { |
|
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
442 | int len; |
|
13240
db5187cc40d1
[gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents:
13235
diff
changeset
|
443 | ByteStream bs; |
|
8225
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
444 | |
|
15151
bb985812fefa
[gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
445 | byte_stream_new(&bs, 2 + 1 + strlen(roomname) + 2); |
|
8225
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
446 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
447 | byte_stream_put16(&bs, exchange); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
448 | byte_stream_put8(&bs, strlen(roomname)); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
449 | byte_stream_putstr(&bs, roomname); |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
450 | byte_stream_put16(&bs, instance); |
|
8225
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
451 | |
|
15151
bb985812fefa
[gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
452 | len = aim_tlvlist_add_raw(list, type, byte_stream_curpos(&bs), bs.data); |
|
8225
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
453 | |
|
22861
76cb58c0c40a
Used byte_stream_destroy(), added in 2b0e247173b206213210577c194020c78c864474,
Evan Schoenberg <evands@pidgin.im>
parents:
19859
diff
changeset
|
454 | byte_stream_destroy(&bs); |
|
8225
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
455 | |
|
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
456 | return len; |
|
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
457 | } |
|
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
458 | |
|
4ef47db8c9bc
[gaim-migrate @ 8948]
Mark Doliner <markdoliner@pidgin.im>
parents:
8092
diff
changeset
|
459 | /** |
| 2086 | 460 | * Adds a TLV with a zero length to a TLV chain. |
| 461 | * | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
462 | * @param list Destination chain. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
463 | * @param type TLV type to add. |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8225
diff
changeset
|
464 | * @return The size of the value added. |
| 2086 | 465 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
466 | int aim_tlvlist_add_noval(GSList **list, const guint16 type) |
| 2086 | 467 | { |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
468 | return aim_tlvlist_add_raw(list, type, 0, NULL); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
469 | } |
| 2086 | 470 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
471 | /* |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
472 | * Note that the inner TLV chain will not be modifiable as a tlvchain once |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
473 | * it is written using this. Or rather, it can be, but updates won't be |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
474 | * made to this. |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
475 | * |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
476 | * TODO: Should probably support sublists for real. |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
477 | * |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
478 | * This is so neat. |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
479 | * |
|
8790
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
480 | * @param list Destination chain. |
|
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
481 | * @param type TLV type to add. |
|
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
482 | * @param t1 The TLV chain you want to write. |
|
8794
4c2c247ef665
[gaim-migrate @ 9556]
Mark Doliner <markdoliner@pidgin.im>
parents:
8790
diff
changeset
|
483 | * @return The number of bytes written to the destination TLV chain. |
|
4c2c247ef665
[gaim-migrate @ 9556]
Mark Doliner <markdoliner@pidgin.im>
parents:
8790
diff
changeset
|
484 | * 0 is returned if there was an error or if the destination |
|
4c2c247ef665
[gaim-migrate @ 9556]
Mark Doliner <markdoliner@pidgin.im>
parents:
8790
diff
changeset
|
485 | * TLV chain has length 0. |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
486 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
487 | int aim_tlvlist_add_frozentlvlist(GSList **list, guint16 type, GSList **tlvlist) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
488 | { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
489 | int buflen; |
|
13240
db5187cc40d1
[gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents:
13235
diff
changeset
|
490 | ByteStream bs; |
| 2086 | 491 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
492 | buflen = aim_tlvlist_size(*tlvlist); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
493 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
494 | if (buflen <= 0) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
495 | return 0; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
496 | |
|
15151
bb985812fefa
[gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
497 | byte_stream_new(&bs, buflen); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
498 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
499 | aim_tlvlist_write(&bs, tlvlist); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
500 | |
|
15151
bb985812fefa
[gaim-migrate @ 17875]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
501 | aim_tlvlist_add_raw(list, type, byte_stream_curpos(&bs), bs.data); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
502 | |
|
22861
76cb58c0c40a
Used byte_stream_destroy(), added in 2b0e247173b206213210577c194020c78c864474,
Evan Schoenberg <evands@pidgin.im>
parents:
19859
diff
changeset
|
503 | byte_stream_destroy(&bs); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
504 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
505 | return buflen; |
| 2086 | 506 | } |
| 507 | ||
| 508 | /** | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
509 | * Substitute a TLV of a given type with a new TLV of the same type. If |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
510 | * you attempt to replace a TLV that does not exist, this function will |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
511 | * just add a new TLV as if you called aim_tlvlist_add_raw(). |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
512 | * |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
513 | * @param list Desination chain (%NULL pointer if empty). |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
514 | * @param type TLV type. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
515 | * @param length Length of string to add (not including %NULL). |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
516 | * @param value String to add. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
517 | * @return The length of the TLV. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
518 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
519 | int aim_tlvlist_replace_raw(GSList **list, const guint16 type, const guint16 length, const guint8 *value) |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
520 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
521 | GSList *cur; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
522 | aim_tlv_t *tlv; |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
523 | |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
524 | if (list == NULL) |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
525 | return 0; |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
526 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
527 | for (cur = *list; cur != NULL; cur = cur->next) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
528 | { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
529 | tlv = cur->data; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
530 | if (tlv->type == type) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
531 | break; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
532 | } |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
533 | |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
534 | if (cur == NULL) |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
535 | /* TLV does not exist, so add a new one */ |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
536 | return aim_tlvlist_add_raw(list, type, length, value); |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
537 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
538 | g_free(tlv->value); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
539 | tlv->length = length; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
540 | if (tlv->length > 0) { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
541 | tlv->value = g_memdup(value, length); |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
542 | } else |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
543 | tlv->value = NULL; |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
544 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
545 | return tlv->length; |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
546 | } |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
547 | |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
548 | /** |
|
11159
76ef02141bcb
[gaim-migrate @ 13246]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
549 | * Substitute a TLV of a given type with a new TLV of the same type. If |
|
76ef02141bcb
[gaim-migrate @ 13246]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
550 | * you attempt to replace a TLV that does not exist, this function will |
|
10993
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
551 | * just add a new TLV as if you called aim_tlvlist_add_str(). |
|
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
552 | * |
|
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
553 | * @param list Desination chain (%NULL pointer if empty). |
|
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
554 | * @param type TLV type. |
|
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
555 | * @param str String to add. |
|
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
556 | * @return The length of the TLV. |
|
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
557 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
558 | int aim_tlvlist_replace_str(GSList **list, const guint16 type, const char *str) |
|
10993
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
559 | { |
|
11159
76ef02141bcb
[gaim-migrate @ 13246]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
560 | return aim_tlvlist_replace_raw(list, type, strlen(str), (const guchar *)str); |
|
10993
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
561 | } |
|
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
562 | |
|
8c992e277e86
[gaim-migrate @ 12831]
Mark Doliner <markdoliner@pidgin.im>
parents:
10991
diff
changeset
|
563 | /** |
|
11159
76ef02141bcb
[gaim-migrate @ 13246]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
564 | * Substitute a TLV of a given type with a new TLV of the same type. If |
|
76ef02141bcb
[gaim-migrate @ 13246]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
565 | * you attempt to replace a TLV that does not exist, this function will |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
566 | * just add a new TLV as if you called aim_tlvlist_add_raw(). |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
567 | * |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
568 | * @param list Desination chain (%NULL pointer if empty). |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
569 | * @param type TLV type. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
570 | * @return The length of the TLV. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
571 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
572 | int aim_tlvlist_replace_noval(GSList **list, const guint16 type) |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
573 | { |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
574 | return aim_tlvlist_replace_raw(list, type, 0, NULL); |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
575 | } |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
576 | |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
577 | /** |
|
11159
76ef02141bcb
[gaim-migrate @ 13246]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
578 | * Substitute a TLV of a given type with a new TLV of the same type. If |
|
76ef02141bcb
[gaim-migrate @ 13246]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
579 | * you attempt to replace a TLV that does not exist, this function will |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
580 | * just add a new TLV as if you called aim_tlvlist_add_raw(). |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
581 | * |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
582 | * @param list Desination chain (%NULL pointer if empty). |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
583 | * @param type TLV type. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
584 | * @param value 8 bit value to add. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
585 | * @return The length of the TLV. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
586 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
587 | int aim_tlvlist_replace_8(GSList **list, const guint16 type, const guint8 value) |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
588 | { |
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
589 | guint8 v8[1]; |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
590 | |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
591 | aimutil_put8(v8, value); |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
592 | |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
593 | return aim_tlvlist_replace_raw(list, type, 1, v8); |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
594 | } |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
595 | |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
596 | /** |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
597 | * Substitute a TLV of a given type with a new TLV of the same type. If |
|
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
598 | * you attempt to replace a TLV that does not exist, this function will |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
599 | * just add a new TLV as if you called aim_tlvlist_add_raw(). |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
600 | * |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
601 | * @param list Desination chain (%NULL pointer if empty). |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
602 | * @param type TLV type. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
603 | * @param value 32 bit value to add. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
604 | * @return The length of the TLV. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
605 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
606 | int aim_tlvlist_replace_32(GSList **list, const guint16 type, const guint32 value) |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
607 | { |
|
13235
72bddc689630
[gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents:
11285
diff
changeset
|
608 | guint8 v32[4]; |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
609 | |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
610 | aimutil_put32(v32, value); |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
611 | |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
612 | return aim_tlvlist_replace_raw(list, type, 4, v32); |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
613 | } |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
614 | |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
615 | /** |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
616 | * Remove all TLVs of a given type. If you attempt to remove a TLV |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
617 | * that does not exist, nothing happens. |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
618 | * |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
619 | * @param list Desination chain (%NULL pointer if empty). |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
620 | * @param type TLV type. |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
621 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
622 | void aim_tlvlist_remove(GSList **list, const guint16 type) |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
623 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
624 | GSList *cur, *next; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
625 | aim_tlv_t *tlv; |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
626 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
627 | if (list == NULL || *list == NULL) |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
628 | return; |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
629 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
630 | cur = *list; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
631 | while (cur != NULL) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
632 | { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
633 | tlv = cur->data; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
634 | next = cur->next; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
635 | |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
636 | if (tlv->type == type) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
637 | { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
638 | /* Delete this TLV */ |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
639 | *list = g_slist_delete_link(*list, cur); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
640 | g_free(tlv->value); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
641 | g_free(tlv); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
642 | } |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
643 | |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
644 | cur = next; |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
645 | } |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
646 | } |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
647 | |
|
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
648 | /** |
|
8794
4c2c247ef665
[gaim-migrate @ 9556]
Mark Doliner <markdoliner@pidgin.im>
parents:
8790
diff
changeset
|
649 | * Write a TLV chain into a data buffer. |
| 2086 | 650 | * |
| 651 | * Copies a TLV chain into a raw data buffer, writing only the number | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
652 | * of bytes specified. This operation does not free the chain; |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
653 | * aim_tlvlist_free() must still be called to free up the memory used |
| 2086 | 654 | * by the chain structures. |
| 655 | * | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
656 | * TODO: Clean this up, make better use of bstreams |
|
8790
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
657 | * |
|
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
658 | * @param bs Input bstream |
|
3d6d2e2f6296
[gaim-migrate @ 9552]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8735
diff
changeset
|
659 | * @param list Source TLV chain |
|
8794
4c2c247ef665
[gaim-migrate @ 9556]
Mark Doliner <markdoliner@pidgin.im>
parents:
8790
diff
changeset
|
660 | * @return Return 0 if the destination bstream is too small. |
| 2086 | 661 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
662 | int aim_tlvlist_write(ByteStream *bs, GSList **list) |
| 2086 | 663 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
664 | int goodbuflen; |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
665 | GSList *cur; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
666 | aim_tlv_t *tlv; |
| 2086 | 667 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
668 | /* do an initial run to test total length */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
669 | goodbuflen = aim_tlvlist_size(*list); |
| 2086 | 670 | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
671 | if (goodbuflen > byte_stream_empty(bs)) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
672 | return 0; /* not enough buffer */ |
| 2086 | 673 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
674 | /* do the real write-out */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
675 | for (cur = *list; cur; cur = cur->next) { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
676 | tlv = cur->data; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
677 | byte_stream_put16(bs, tlv->type); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
678 | byte_stream_put16(bs, tlv->length); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
679 | if (tlv->length > 0) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
680 | byte_stream_putraw(bs, tlv->value, tlv->length); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
681 | } |
| 2086 | 682 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
683 | return 1; /* TODO: This is a nonsensical return */ |
| 2086 | 684 | } |
| 685 | ||
| 686 | ||
| 687 | /** | |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
688 | * Grab the Nth TLV of type type in the TLV list list. |
| 2086 | 689 | * |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
690 | * Returns a pointer to an aim_tlv_t of the specified type; |
| 2086 | 691 | * %NULL on error. The @nth parameter is specified starting at %1. |
| 692 | * In most cases, there will be no more than one TLV of any type | |
| 693 | * in a chain. | |
| 694 | * | |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
695 | * @param list Source chain. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
696 | * @param type Requested TLV type. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
697 | * @param nth Index of TLV of type to get. |
|
7166
70825074f830
[gaim-migrate @ 7733]
Mark Doliner <markdoliner@pidgin.im>
parents:
7158
diff
changeset
|
698 | * @return The TLV you were looking for, or NULL if one could not be found. |
| 2086 | 699 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
700 | aim_tlv_t *aim_tlv_gettlv(GSList *list, const guint16 type, const int nth) |
| 2086 | 701 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
702 | GSList *cur; |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
703 | aim_tlv_t *tlv; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
704 | int i; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
705 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
706 | for (cur = list, i = 0; cur != NULL; cur = cur->next) { |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
707 | tlv = cur->data; |
|
18876
8d8198f72306
I don't think this check is needed. If it is then it's because we're
Mark Doliner <markdoliner@pidgin.im>
parents:
17443
diff
changeset
|
708 | if (tlv->type == type) |
|
8d8198f72306
I don't think this check is needed. If it is then it's because we're
Mark Doliner <markdoliner@pidgin.im>
parents:
17443
diff
changeset
|
709 | i++; |
|
8d8198f72306
I don't think this check is needed. If it is then it's because we're
Mark Doliner <markdoliner@pidgin.im>
parents:
17443
diff
changeset
|
710 | if (i >= nth) |
|
8d8198f72306
I don't think this check is needed. If it is then it's because we're
Mark Doliner <markdoliner@pidgin.im>
parents:
17443
diff
changeset
|
711 | return tlv; |
| 2086 | 712 | } |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
713 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
714 | return NULL; |
| 2086 | 715 | } |
| 716 | ||
| 717 | /** | |
|
9933
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
718 | * Get the length of the data of the nth TLV in the given TLV chain. |
|
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
719 | * |
|
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
720 | * @param list Source chain. |
|
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
721 | * @param type Requested TLV type. |
|
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
722 | * @param nth Index of TLV of type to get. |
|
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
723 | * @return The length of the data in this TLV, or -1 if the TLV could not be |
|
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
724 | * found. Unless -1 is returned, this value will be 2 bytes. |
|
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
725 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
726 | int aim_tlv_getlength(GSList *list, const guint16 type, const int nth) |
|
9933
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
727 | { |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
728 | aim_tlv_t *tlv; |
|
9933
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
729 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
730 | tlv = aim_tlv_gettlv(list, type, nth); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
731 | if (tlv == NULL) |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
732 | return -1; |
|
9933
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
733 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
734 | return tlv->length; |
|
9933
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
735 | } |
|
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
736 | |
|
13653
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
737 | char * |
|
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
738 | aim_tlv_getvalue_as_string(aim_tlv_t *tlv) |
|
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
739 | { |
|
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
740 | char *ret; |
|
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
741 | |
|
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
|
742 | ret = g_malloc(tlv->length + 1); |
|
13653
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
743 | memcpy(ret, tlv->value, tlv->length); |
|
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
744 | ret[tlv->length] = '\0'; |
|
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
745 | |
|
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
746 | return ret; |
|
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
747 | } |
|
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
748 | |
|
9933
61bd3fadbfe6
[gaim-migrate @ 10825]
Dave West <kat@users.sourceforge.net>
parents:
8794
diff
changeset
|
749 | /** |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
750 | * Retrieve the data from the nth TLV in the given TLV chain as a string. |
| 2086 | 751 | * |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
752 | * @param list Source TLV chain. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
753 | * @param type TLV type to search for. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
754 | * @param nth Index of TLV to return. |
|
11159
76ef02141bcb
[gaim-migrate @ 13246]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
755 | * @return The value of the TLV you were looking for, or NULL if one could |
|
76ef02141bcb
[gaim-migrate @ 13246]
Mark Doliner <markdoliner@pidgin.im>
parents:
10993
diff
changeset
|
756 | * not be found. This is a dynamic buffer and must be freed by the |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
757 | * caller. |
| 2086 | 758 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
759 | char *aim_tlv_getstr(GSList *list, const guint16 type, const int nth) |
| 2086 | 760 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
761 | aim_tlv_t *tlv; |
| 2086 | 762 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
763 | tlv = aim_tlv_gettlv(list, type, nth); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
764 | if (tlv == NULL) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
765 | return NULL; |
| 2086 | 766 | |
|
13653
fab80366d565
[gaim-migrate @ 16053]
Mark Doliner <markdoliner@pidgin.im>
parents:
13593
diff
changeset
|
767 | return aim_tlv_getvalue_as_string(tlv); |
| 2086 | 768 | } |
| 769 | ||
| 770 | /** | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
771 | * Retrieve the data from the nth TLV in the given TLV chain as an 8bit |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
772 | * integer. |
| 2086 | 773 | * |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
774 | * @param list Source TLV chain. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
775 | * @param type TLV type to search for. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
776 | * @param nth Index of TLV to return. |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
777 | * @return The value the TLV you were looking for, or 0 if one could |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
778 | * not be found. |
| 2086 | 779 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
780 | guint8 aim_tlv_get8(GSList *list, const guint16 type, const int nth) |
| 2086 | 781 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
782 | aim_tlv_t *tlv; |
| 2086 | 783 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
784 | tlv = aim_tlv_gettlv(list, type, nth); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
785 | if (tlv == NULL) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
786 | return 0; /* erm */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
787 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
788 | return aimutil_get8(tlv->value); |
| 2086 | 789 | } |
| 790 | ||
| 791 | /** | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
792 | * Retrieve the data from the nth TLV in the given TLV chain as a 16bit |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
793 | * integer. |
| 2086 | 794 | * |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
795 | * @param list Source TLV chain. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
796 | * @param type TLV type to search for. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
797 | * @param nth Index of TLV to return. |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
798 | * @return The value the TLV you were looking for, or 0 if one could |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
799 | * not be found. |
| 2086 | 800 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
801 | guint16 aim_tlv_get16(GSList *list, const guint16 type, const int nth) |
| 2086 | 802 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
803 | aim_tlv_t *tlv; |
| 2086 | 804 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
805 | tlv = aim_tlv_gettlv(list, type, nth); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
806 | if (tlv == NULL) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
807 | return 0; /* erm */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
808 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
809 | return aimutil_get16(tlv->value); |
| 2086 | 810 | } |
| 811 | ||
| 812 | /** | |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
813 | * Retrieve the data from the nth TLV in the given TLV chain as a 32bit |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
814 | * integer. |
| 2086 | 815 | * |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
816 | * @param list Source TLV chain. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
817 | * @param type TLV type to search for. |
|
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
818 | * @param nth Index of TLV to return. |
|
13593
3450a7cede99
[gaim-migrate @ 15978]
Mark Doliner <markdoliner@pidgin.im>
parents:
13240
diff
changeset
|
819 | * @return The value the TLV you were looking for, or 0 if one could |
|
7167
9cfb68a44e17
[gaim-migrate @ 7734]
Mark Doliner <markdoliner@pidgin.im>
parents:
7166
diff
changeset
|
820 | * not be found. |
| 2086 | 821 | */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
822 | guint32 aim_tlv_get32(GSList *list, const guint16 type, const int nth) |
| 2086 | 823 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
824 | aim_tlv_t *tlv; |
| 2086 | 825 | |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
826 | tlv = aim_tlv_gettlv(list, type, nth); |
|
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
827 | if (tlv == NULL) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
828 | return 0; /* erm */ |
|
17443
bae8548d98b3
Cleanup and simplification of some tlvlist stuff in the oscar protocol.
Mark Doliner <markdoliner@pidgin.im>
parents:
17280
diff
changeset
|
829 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
830 | return aimutil_get32(tlv->value); |
| 2086 | 831 | } |