Fri, 19 Jan 2001 09:11:16 +0000
[gaim-migrate @ 1425]
woo hoo
|
283
dbf3342692e9
[gaim-migrate @ 293]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
237
diff
changeset
|
1 | #include <faim/aim.h> |
| 2 | 2 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
3 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
4 | * aim_readtlvchain - Read a TLV chain from a buffer. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
5 | * @buf: Input buffer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
6 | * @maxlen: Length of input buffer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
7 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
8 | * Reads and parses a series of TLV patterns from a data buffer; the |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
9 | * returned structure is manipulatable with the rest of the TLV |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
10 | * routines. When done with a TLV chain, aim_freetlvchain() should |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
11 | * be called to free the dynamic substructures. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
12 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
13 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
14 | faim_export struct aim_tlvlist_t *aim_readtlvchain(u_char *buf, int maxlen) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
15 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
16 | int pos; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
17 | struct aim_tlvlist_t *list; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
18 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
19 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
20 | u_short type; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
21 | u_short length; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
22 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
23 | if (!buf) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
24 | return NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
25 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
26 | list = NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
27 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
28 | pos = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
29 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
30 | while (pos < maxlen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
31 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
32 | type = aimutil_get16(buf+pos); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
33 | pos += 2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
34 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
35 | if (pos < maxlen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
36 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
37 | length = aimutil_get16(buf+pos); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
38 | pos += 2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
39 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
40 | if ((pos+length) <= maxlen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
41 | { |
|
446
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
42 | /* |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
43 | * Okay, so now AOL has decided that any TLV of |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
44 | * type 0x0013 can only be two bytes, despite |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
45 | * what the actual given length is. So here |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
46 | * we dump any invalid TLVs of that sort. Hopefully |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
47 | * theres no special cases to this special case. |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
48 | * - mid (30jun2000) |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
49 | */ |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
50 | if ((type == 0x0013) && (length != 0x0002)) { |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
51 | printf("faim: skipping TLV t(0013) with invalid length (0x%04x)\n", length); |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
52 | length = 0x0002; |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
53 | } else { |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
54 | cur = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
55 | memset(cur, 0x00, sizeof(struct aim_tlvlist_t)); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
56 | |
|
446
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
57 | cur->tlv = aim_createtlv(); |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
58 | cur->tlv->type = type; |
|
818
4f6b5df77866
[gaim-migrate @ 828]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
771
diff
changeset
|
59 | cur->tlv->length = length; |
|
4f6b5df77866
[gaim-migrate @ 828]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
771
diff
changeset
|
60 | if (length) { |
|
4f6b5df77866
[gaim-migrate @ 828]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
771
diff
changeset
|
61 | cur->tlv->value = (unsigned char *)malloc(length); |
|
4f6b5df77866
[gaim-migrate @ 828]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
771
diff
changeset
|
62 | memcpy(cur->tlv->value, buf+pos, length); |
|
4f6b5df77866
[gaim-migrate @ 828]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
771
diff
changeset
|
63 | } |
|
771
4ca7e1a4b1e4
[gaim-migrate @ 781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
446
diff
changeset
|
64 | |
|
446
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
65 | cur->next = list; |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
66 | list = cur; |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
67 | } |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
68 | pos += length; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
69 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
70 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
71 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
72 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
73 | return list; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
74 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
75 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
76 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
77 | * aim_freetlvchain - Free a TLV chain structure |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
78 | * @list: Chain to be freed |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
79 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
80 | * Walks the list of TLVs in the passed TLV chain and |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
81 | * frees each one. Note that any references to this data |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
82 | * should be removed before calling this. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
83 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
84 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
85 | faim_export void aim_freetlvchain(struct aim_tlvlist_t **list) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
86 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
87 | struct aim_tlvlist_t *cur, *cur2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
88 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
89 | if (!list || !(*list)) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
90 | return; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
91 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
92 | cur = *list; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
93 | while (cur) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
94 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
95 | aim_freetlv(&cur->tlv); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
96 | cur2 = cur->next; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
97 | free(cur); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
98 | cur = cur2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
99 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
100 | list = NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
101 | return; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
102 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
103 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
104 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
105 | * aim_counttlvchain - Count the number of TLVs in a chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
106 | * @list: Chain to be counted |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
107 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
108 | * Returns the number of TLVs stored in the passed chain. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
109 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
110 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
111 | faim_export int aim_counttlvchain(struct aim_tlvlist_t **list) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
112 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
113 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
114 | int count = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
115 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
116 | if (!list || !(*list)) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
117 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
118 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
119 | for (cur = *list; cur; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
120 | count++; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
121 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
122 | return count; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
123 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
124 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
125 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
126 | * aim_sizetlvchain - Count the number of bytes in a TLV chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
127 | * @list: Chain to be sized |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
128 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
129 | * Returns the number of bytes that would be needed to |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
130 | * write the passed TLV chain to a data buffer. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
131 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
132 | */ |
|
1002
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
133 | faim_export int aim_sizetlvchain(struct aim_tlvlist_t **list) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
134 | { |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
135 | struct aim_tlvlist_t *cur; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
136 | int size = 0; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
137 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
138 | if (!list || !(*list)) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
139 | return 0; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
140 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
141 | for (cur = *list; cur; cur = cur->next) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
142 | size += (4 + cur->tlv->length); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
143 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
144 | return size; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
145 | } |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
146 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
147 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
148 | * aim_addtlvtochain_str - Add a string to a TLV chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
149 | * @list: Desination chain (%NULL pointer if empty) |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
150 | * @type: TLV type |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
151 | * @str: String to add |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
152 | * @len: Length of string to add (not including %NULL) |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
153 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
154 | * Adds the passed string as a TLV element of the passed type |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
155 | * to the TLV chain. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
156 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
157 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
158 | faim_export int aim_addtlvtochain_str(struct aim_tlvlist_t **list, unsigned short type, char *str, int len) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
159 | { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
160 | struct aim_tlvlist_t *newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
161 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
162 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
163 | if (!list) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
164 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
165 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
166 | newtlv = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
167 | memset(newtlv, 0x00, sizeof(struct aim_tlvlist_t)); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
168 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
169 | newtlv->tlv = aim_createtlv(); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
170 | newtlv->tlv->type = type; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
171 | newtlv->tlv->length = len; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
172 | newtlv->tlv->value = (unsigned char *)malloc(newtlv->tlv->length*sizeof(unsigned char)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
173 | memcpy(newtlv->tlv->value, str, newtlv->tlv->length); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
174 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
175 | newtlv->next = NULL; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
176 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
177 | if (*list == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
178 | *list = newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
179 | } else if ((*list)->next == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
180 | (*list)->next = newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
181 | } else { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
182 | for(cur = *list; cur->next; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
183 | ; |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
184 | cur->next = newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
185 | } |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
186 | return newtlv->tlv->length; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
187 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
188 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
189 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
190 | * aim_addtlvtochain16 - Add a 16bit integer to a TLV chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
191 | * @list: Destination chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
192 | * @type: TLV type to add |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
193 | * @val: Value to add |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
194 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
195 | * Adds a two-byte unsigned integer to a TLV chain. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
196 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
197 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
198 | faim_export int aim_addtlvtochain16(struct aim_tlvlist_t **list, unsigned short type, unsigned short val) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
199 | { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
200 | struct aim_tlvlist_t *newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
201 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
202 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
203 | if (!list) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
204 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
205 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
206 | newtl = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
207 | memset(newtl, 0x00, sizeof(struct aim_tlvlist_t)); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
208 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
209 | newtl->tlv = aim_createtlv(); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
210 | newtl->tlv->type = type; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
211 | newtl->tlv->length = 2; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
212 | newtl->tlv->value = (unsigned char *)malloc(newtl->tlv->length*sizeof(unsigned char)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
213 | aimutil_put16(newtl->tlv->value, val); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
214 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
215 | newtl->next = NULL; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
216 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
217 | if (*list == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
218 | *list = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
219 | } else if ((*list)->next == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
220 | (*list)->next = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
221 | } else { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
222 | for(cur = *list; cur->next; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
223 | ; |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
224 | cur->next = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
225 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
226 | return 2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
227 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
228 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
229 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
230 | * aim_addtlvtochain32 - Add a 32bit integer to a TLV chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
231 | * @list: Destination chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
232 | * @type: TLV type to add |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
233 | * @val: Value to add |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
234 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
235 | * Adds a four-byte unsigned integer to a TLV chain. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
236 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
237 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
238 | faim_export int aim_addtlvtochain32(struct aim_tlvlist_t **list, unsigned short type, unsigned long val) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
239 | { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
240 | struct aim_tlvlist_t *newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
241 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
242 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
243 | if (!list) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
244 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
245 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
246 | newtl = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
247 | memset(newtl, 0x00, sizeof(struct aim_tlvlist_t)); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
248 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
249 | newtl->tlv = aim_createtlv(); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
250 | newtl->tlv->type = type; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
251 | newtl->tlv->length = 4; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
252 | newtl->tlv->value = (unsigned char *)malloc(newtl->tlv->length*sizeof(unsigned char)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
253 | aimutil_put32(newtl->tlv->value, val); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
254 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
255 | newtl->next = NULL; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
256 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
257 | if (*list == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
258 | *list = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
259 | } else if ((*list)->next == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
260 | (*list)->next = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
261 | } else { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
262 | for(cur = *list; cur->next; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
263 | ; |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
264 | cur->next = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
265 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
266 | return 4; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
267 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
268 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
269 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
270 | * aim_addtlvtochain_caps - Add a capability block to a TLV chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
271 | * @list: Destination chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
272 | * @type: TLV type to add |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
273 | * @caps: Bitfield of capability flags to send |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
274 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
275 | * Adds a block of capability blocks to a TLV chain. The bitfield |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
276 | * passed in should be a bitwise %OR of any of the %AIM_CAPS constants: |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
277 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
278 | * %AIM_CAPS_BUDDYICON Supports Buddy Icons |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
279 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
280 | * %AIM_CAPS_VOICE Supports Voice Chat |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
281 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
282 | * %AIM_CAPS_IMIMAGE Supports DirectIM/IMImage |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
283 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
284 | * %AIM_CAPS_CHAT Supports Chat |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
285 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
286 | * %AIM_CAPS_GETFILE Supports Get File functions |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
287 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
288 | * %AIM_CAPS_SENDFILE Supports Send File functions |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
289 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
290 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
291 | faim_export int aim_addtlvtochain_caps(struct aim_tlvlist_t **list, unsigned short type, unsigned short caps) |
|
1002
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
292 | { |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
293 | unsigned char buf[128]; /* icky fixed length buffer */ |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
294 | struct aim_tlvlist_t *newtl; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
295 | struct aim_tlvlist_t *cur; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
296 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
297 | if(!list) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
298 | return 0; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
299 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
300 | newtl = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
301 | memset(newtl, 0x00, sizeof(struct aim_tlvlist_t)); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
302 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
303 | newtl->tlv = aim_createtlv(); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
304 | newtl->tlv->type = type; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
305 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
306 | newtl->tlv->length = aim_putcap(buf, sizeof(buf), caps); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
307 | newtl->tlv->value = (unsigned char *)calloc(1, newtl->tlv->length); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
308 | memcpy(newtl->tlv->value, buf, newtl->tlv->length); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
309 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
310 | newtl->next = NULL; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
311 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
312 | if (*list == NULL) { |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
313 | *list = newtl; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
314 | } else if ((*list)->next == NULL) { |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
315 | (*list)->next = newtl; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
316 | } else { |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
317 | for(cur = *list; cur->next; cur = cur->next) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
318 | ; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
319 | cur->next = newtl; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
320 | } |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
321 | return newtl->tlv->length; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
322 | } |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
323 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
324 | /** |
|
1245
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
325 | * aim_addtlvtochain_noval - Add a blank TLV to a TLV chain |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
326 | * @list: Destination chain |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
327 | * @type: TLV type to add |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
328 | * |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
329 | * Adds a TLV with a zero length to a TLV chain. |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
330 | * |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
331 | */ |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
332 | faim_internal int aim_addtlvtochain_noval(struct aim_tlvlist_t **list, unsigned short type) |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
333 | { |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
334 | struct aim_tlvlist_t *newtlv; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
335 | struct aim_tlvlist_t *cur; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
336 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
337 | newtlv = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
338 | memset(newtlv, 0x00, sizeof(struct aim_tlvlist_t)); |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
339 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
340 | newtlv->tlv = aim_createtlv(); |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
341 | newtlv->tlv->type = type; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
342 | newtlv->tlv->length = 0; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
343 | newtlv->tlv->value = NULL; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
344 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
345 | newtlv->next = NULL; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
346 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
347 | if (*list == NULL) { |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
348 | *list = newtlv; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
349 | } else if ((*list)->next == NULL) { |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
350 | (*list)->next = newtlv; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
351 | } else { |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
352 | for(cur = *list; cur->next; cur = cur->next) |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
353 | ; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
354 | cur->next = newtlv; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
355 | } |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
356 | return newtlv->tlv->length; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
357 | } |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
358 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
359 | /** |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
360 | * aim_writetlvchain - Write a TLV chain into a data buffer. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
361 | * @buf: Destination buffer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
362 | * @buflen: Maximum number of bytes that will be written to buffer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
363 | * @list: Source TLV chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
364 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
365 | * Copies a TLV chain into a raw data buffer, writing only the number |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
366 | * of bytes specified. This operation does not free the chain; |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
367 | * aim_freetlvchain() must still be called to free up the memory used |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
368 | * by the chain structures. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
369 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
370 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
371 | faim_export int aim_writetlvchain(u_char *buf, int buflen, struct aim_tlvlist_t **list) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
372 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
373 | int goodbuflen = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
374 | int i = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
375 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
376 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
377 | if (!list || !buf || !buflen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
378 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
379 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
380 | /* do an initial run to test total length */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
381 | for (cur = *list; cur; cur = cur->next) { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
382 | goodbuflen += 2 + 2; /* type + len */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
383 | goodbuflen += cur->tlv->length; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
384 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
385 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
386 | if (goodbuflen > buflen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
387 | return 0; /* not enough buffer */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
388 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
389 | /* do the real write-out */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
390 | for (cur = *list; cur; cur = cur->next) { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
391 | i += aimutil_put16(buf+i, cur->tlv->type); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
392 | i += aimutil_put16(buf+i, cur->tlv->length); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
393 | memcpy(buf+i, cur->tlv->value, cur->tlv->length); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
394 | i += cur->tlv->length; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
395 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
396 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
397 | return i; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
398 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
399 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
400 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
401 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
402 | * aim_gettlv - Grab the Nth TLV of type type in the TLV list list. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
403 | * @list: Source chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
404 | * @type: Requested TLV type |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
405 | * @nth: Index of TLV of type to get |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
406 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
407 | * Returns a pointer to an aim_tlv_t of the specified type; |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
408 | * %NULL on error. The @nth parameter is specified starting at %1. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
409 | * In most cases, there will be no more than one TLV of any type |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
410 | * in a chain. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
411 | * |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
412 | */ |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
413 | faim_export struct aim_tlv_t *aim_gettlv(struct aim_tlvlist_t *list, u_short type, int nth) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
414 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
415 | int i; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
416 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
417 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
418 | i = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
419 | for (cur = list; cur != NULL; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
420 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
421 | if (cur && cur->tlv) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
422 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
423 | if (cur->tlv->type == type) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
424 | i++; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
425 | if (i >= nth) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
426 | return cur->tlv; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
427 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
428 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
429 | return NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
430 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
431 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
432 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
433 | * aim_gettlv_str - Retrieve the Nth TLV in chain as a string. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
434 | * @list: Source TLV chain |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
435 | * @type: TLV type to search for |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
436 | * @nth: Index of TLV to return |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
437 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
438 | * Same as aim_gettlv(), except that the return value is a %NULL- |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
439 | * terminated string instead of an aim_tlv_t. This is a |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
440 | * dynamic buffer and must be freed by the caller. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
441 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
442 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
443 | faim_export char *aim_gettlv_str(struct aim_tlvlist_t *list, u_short type, int nth) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
444 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
445 | struct aim_tlv_t *tlv; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
446 | char *newstr; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
447 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
448 | if (!(tlv = aim_gettlv(list, type, nth))) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
449 | return NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
450 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
451 | newstr = (char *) malloc(tlv->length + 1); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
452 | memcpy(newstr, tlv->value, tlv->length); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
453 | *(newstr + tlv->length) = '\0'; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
454 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
455 | return newstr; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
456 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
457 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
458 | /** |
|
1245
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
459 | * aim_gettlv8 - Retrieve the Nth TLV in chain as a 8bit integer. |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
460 | * @list: Source TLV chain |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
461 | * @type: TLV type to search for |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
462 | * @nth: Index of TLV to return |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
463 | * |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
464 | * Same as aim_gettlv(), except that the return value is a |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
465 | * 8bit integer instead of an aim_tlv_t. |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
466 | * |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
467 | */ |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
468 | faim_internal unsigned char aim_gettlv8(struct aim_tlvlist_t *list, unsigned short type, int num) |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
469 | { |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
470 | struct aim_tlv_t *tlv; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
471 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
472 | if (!(tlv = aim_gettlv(list, type, num)) || !tlv->value) |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
473 | return 0; /* erm */ |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
474 | return aimutil_get8(tlv->value); |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
475 | } |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
476 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
477 | /** |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
478 | * aim_gettlv16 - Retrieve the Nth TLV in chain as a 16bit integer. |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
479 | * @list: Source TLV chain |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
480 | * @type: TLV type to search for |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
481 | * @nth: Index of TLV to return |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
482 | * |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
483 | * Same as aim_gettlv(), except that the return value is a |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
484 | * 16bit integer instead of an aim_tlv_t. |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
485 | * |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
486 | */ |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
487 | faim_internal unsigned short aim_gettlv16(struct aim_tlvlist_t *list, unsigned short type, int num) |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
488 | { |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
489 | struct aim_tlv_t *tlv; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
490 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
491 | if (!(tlv = aim_gettlv(list, type, num)) || !tlv->value) |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
492 | return 0; /* erm */ |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
493 | return aimutil_get16(tlv->value); |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
494 | } |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
495 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
496 | /** |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
497 | * aim_gettlv32 - Retrieve the Nth TLV in chain as a 32bit integer. |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
498 | * @list: Source TLV chain |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
499 | * @type: TLV type to search for |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
500 | * @nth: Index of TLV to return |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
501 | * |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
502 | * Same as aim_gettlv(), except that the return value is a |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
503 | * 32bit integer instead of an aim_tlv_t. |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
504 | * |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
505 | */ |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
506 | faim_internal unsigned long aim_gettlv32(struct aim_tlvlist_t *list, unsigned short type, int num) |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
507 | { |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
508 | struct aim_tlv_t *tlv; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
509 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
510 | if (!(tlv = aim_gettlv(list, type, num)) || !tlv->value) |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
511 | return 0; /* erm */ |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
512 | return aimutil_get32(tlv->value); |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
513 | } |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
514 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
515 | /** |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
516 | * aim_grabtlv - Grab a single TLV from a data buffer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
517 | * @src: Source data buffer (must be at least 4 bytes long) |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
518 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
519 | * Creates a TLV structure aim_tlv_t and returns it |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
520 | * filled with values from a buffer, possibly including a |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
521 | * dynamically allocated buffer for the value portion. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
522 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
523 | * Both the aim_tlv_t and the tlv->value pointer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
524 | * must be freed by the caller if non-%NULL. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
525 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
526 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
527 | faim_export struct aim_tlv_t *aim_grabtlv(u_char *src) |
| 2 | 528 | { |
| 529 | struct aim_tlv_t *dest = NULL; | |
| 530 | ||
| 531 | dest = aim_createtlv(); | |
| 532 | ||
| 533 | dest->type = src[0] << 8; | |
| 534 | dest->type += src[1]; | |
| 535 | ||
| 536 | dest->length = src[2] << 8; | |
| 537 | dest->length += src[3]; | |
| 538 | ||
| 539 | dest->value = (u_char *) malloc(dest->length*sizeof(u_char)); | |
| 540 | memset(dest->value, 0, dest->length*sizeof(u_char)); | |
| 541 | ||
| 542 | memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char)); | |
| 543 | ||
| 544 | return dest; | |
| 545 | } | |
| 546 | ||
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
547 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
548 | * aim_grabtlvstr - Grab a single TLV from a data buffer as string |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
549 | * @src: Source data buffer (must be at least 4 bytes long) |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
550 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
551 | * Creates a TLV structure aim_tlv_t and returns it |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
552 | * filled with values from a buffer, possibly including a |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
553 | * dynamically allocated buffer for the value portion, which |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
554 | * is %NULL-terminated as a string. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
555 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
556 | * Both the aim_tlv_t and the tlv->value pointer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
557 | * must be freed by the caller if non-%NULL. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
558 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
559 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
560 | faim_export struct aim_tlv_t *aim_grabtlvstr(u_char *src) |
| 2 | 561 | { |
| 562 | struct aim_tlv_t *dest = NULL; | |
| 563 | ||
| 564 | dest = aim_createtlv(); | |
| 565 | ||
| 566 | dest->type = src[0] << 8; | |
| 567 | dest->type += src[1]; | |
| 568 | ||
| 569 | dest->length = src[2] << 8; | |
| 570 | dest->length += src[3]; | |
| 571 | ||
| 572 | dest->value = (u_char *) malloc((dest->length+1)*sizeof(u_char)); | |
| 573 | memset(dest->value, 0, (dest->length+1)*sizeof(u_char)); | |
| 574 | ||
| 575 | memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char)); | |
| 576 | dest->value[dest->length] = '\0'; | |
| 577 | ||
| 578 | return dest; | |
| 579 | } | |
| 580 | ||
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
581 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
582 | * aim_puttlv - Write a aim_tlv_t into a data buffer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
583 | * @dest: Destination data buffer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
584 | * @newtlv: Source TLV structure |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
585 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
586 | * Writes out the passed TLV structure into the buffer. No bounds |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
587 | * checking is done on the output buffer. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
588 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
589 | * The passed aim_tlv_t is not freed. aim_freetlv() should |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
590 | * still be called by the caller to free the structure. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
591 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
592 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
593 | faim_export int aim_puttlv(u_char *dest, struct aim_tlv_t *newtlv) |
| 2 | 594 | { |
| 595 | int i=0; | |
| 596 | ||
| 597 | dest[i++] = newtlv->type >> 8; | |
| 598 | dest[i++] = newtlv->type & 0x00FF; | |
| 599 | dest[i++] = newtlv->length >> 8; | |
| 600 | dest[i++] = newtlv->length & 0x00FF; | |
| 601 | memcpy(&(dest[i]), newtlv->value, newtlv->length); | |
| 602 | i+=newtlv->length; | |
| 603 | return i; | |
| 604 | } | |
| 605 | ||
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
606 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
607 | * aim_createtlv - Generate an aim_tlv_t structure. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
608 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
609 | * Allocates an empty TLV structure and returns a pointer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
610 | * to it; %NULL on error. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
611 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
612 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
613 | faim_export struct aim_tlv_t *aim_createtlv(void) |
| 2 | 614 | { |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
615 | struct aim_tlv_t *newtlv; |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
616 | |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
617 | if (!(newtlv = (struct aim_tlv_t *)malloc(sizeof(struct aim_tlv_t)))) |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
618 | return NULL; |
| 2 | 619 | memset(newtlv, 0, sizeof(struct aim_tlv_t)); |
| 620 | return newtlv; | |
| 621 | } | |
| 622 | ||
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
623 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
624 | * aim_freetlv - Free a aim_tlv_t structure |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
625 | * @oldtlv: TLV to be destroyed |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
626 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
627 | * Frees both the TLV structure and the value portion. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
628 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
629 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
630 | faim_export int aim_freetlv(struct aim_tlv_t **oldtlv) |
| 2 | 631 | { |
| 632 | if (!oldtlv) | |
| 633 | return -1; | |
| 634 | if (!*oldtlv) | |
| 635 | return -1; | |
| 636 | if ((*oldtlv)->value) | |
| 637 | free((*oldtlv)->value); | |
| 638 | free(*(oldtlv)); | |
| 639 | (*oldtlv) = NULL; | |
| 640 | ||
| 641 | return 0; | |
| 642 | } | |
| 643 | ||
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
644 | /** |
|
1245
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
645 | * aim_puttlv_8 - Write a one-byte TLV. |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
646 | * @buf: Destination buffer |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
647 | * @t: TLV type |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
648 | * @v: Value |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
649 | * |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
650 | * Writes a TLV with a one-byte integer value portion. |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
651 | * |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
652 | */ |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
653 | faim_export int aim_puttlv_8(unsigned char *buf, unsigned short t, unsigned char v) |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
654 | { |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
655 | int curbyte=0; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
656 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
657 | curbyte += aimutil_put16(buf+curbyte, (unsigned short)(t&0xffff)); |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
658 | curbyte += aimutil_put16(buf+curbyte, (unsigned short)0x0001); |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
659 | curbyte += aimutil_put8(buf+curbyte, (unsigned char)(v&0xff)); |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
660 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
661 | return curbyte; |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
662 | } |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
663 | |
|
5f8458b2e8e8
[gaim-migrate @ 1255]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1081
diff
changeset
|
664 | /** |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
665 | * aim_puttlv_16 - Write a two-byte TLV. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
666 | * @buf: Destination buffer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
667 | * @t: TLV type |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
668 | * @v: Value |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
669 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
670 | * Writes a TLV with a two-byte integer value portion. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
671 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
672 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
673 | faim_export int aim_puttlv_16(u_char *buf, u_short t, u_short v) |
| 2 | 674 | { |
| 675 | int curbyte=0; | |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
676 | curbyte += aimutil_put16(buf+curbyte, (u_short)(t&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
677 | curbyte += aimutil_put16(buf+curbyte, (u_short)0x0002); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
678 | curbyte += aimutil_put16(buf+curbyte, (u_short)(v&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
679 | return curbyte; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
680 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
681 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
682 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
683 | * aim_puttlv_32 - Write a four-byte TLV. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
684 | * @buf: Destination buffer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
685 | * @t: TLV type |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
686 | * @v: Value |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
687 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
688 | * Writes a TLV with a four-byte integer value portion. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
689 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
690 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
691 | faim_export int aim_puttlv_32(u_char *buf, u_short t, u_long v) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
692 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
693 | int curbyte=0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
694 | curbyte += aimutil_put16(buf+curbyte, (u_short)(t&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
695 | curbyte += aimutil_put16(buf+curbyte, (u_short)0x0004); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
696 | curbyte += aimutil_put32(buf+curbyte, (u_long)(v&0xffffffff)); |
| 2 | 697 | return curbyte; |
| 698 | } | |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
699 | |
|
1081
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
700 | /** |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
701 | * aim_puttlv_str - Write a string TLV. |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
702 | * @buf: Destination buffer |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
703 | * @t: TLV type |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
704 | * @l: Length of string |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
705 | * @v: String to write |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
706 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
707 | * Writes a TLV with a string value portion. (Only the first @l |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
708 | * bytes of the passed string will be written, which should not |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
709 | * include the terminating NULL.) |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
710 | * |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
711 | */ |
|
0fb24c9d4c7d
[gaim-migrate @ 1091]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1002
diff
changeset
|
712 | faim_export int aim_puttlv_str(u_char *buf, u_short t, int l, char *v) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
713 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
714 | int curbyte; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
715 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
716 | curbyte = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
717 | curbyte += aimutil_put16(buf+curbyte, (u_short)(t&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
718 | curbyte += aimutil_put16(buf+curbyte, (u_short)(l&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
719 | if (v) |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
720 | memcpy(buf+curbyte, (unsigned char *)v, l); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
721 | curbyte += l; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
722 | return curbyte; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
723 | } |