libfaim/aim_tlv.c

Fri, 19 Jan 2001 09:11:16 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Fri, 19 Jan 2001 09:11:16 +0000
changeset 1415
e851476edab1
parent 1245
5f8458b2e8e8
permissions
-rw-r--r--

[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
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
528 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
529 struct aim_tlv_t *dest = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
530
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
531 dest = aim_createtlv();
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
532
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
533 dest->type = src[0] << 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
534 dest->type += src[1];
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
535
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
536 dest->length = src[2] << 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
537 dest->length += src[3];
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
538
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
539 dest->value = (u_char *) malloc(dest->length*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
540 memset(dest->value, 0, dest->length*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
541
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
542 memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
543
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
544 return dest;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
545 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
561 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
562 struct aim_tlv_t *dest = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
563
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
564 dest = aim_createtlv();
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
565
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
566 dest->type = src[0] << 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
567 dest->type += src[1];
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
568
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
569 dest->length = src[2] << 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
570 dest->length += src[3];
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
571
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
572 dest->value = (u_char *) malloc((dest->length+1)*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
573 memset(dest->value, 0, (dest->length+1)*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
574
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
575 memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
576 dest->value[dest->length] = '\0';
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
577
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
578 return dest;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
579 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
594 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
595 int i=0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
596
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
597 dest[i++] = newtlv->type >> 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
598 dest[i++] = newtlv->type & 0x00FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
599 dest[i++] = newtlv->length >> 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
600 dest[i++] = newtlv->length & 0x00FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
601 memcpy(&(dest[i]), newtlv->value, newtlv->length);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
602 i+=newtlv->length;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
603 return i;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
604 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
619 memset(newtlv, 0, sizeof(struct aim_tlv_t));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
620 return newtlv;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
621 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
631 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
632 if (!oldtlv)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
633 return -1;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
634 if (!*oldtlv)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
635 return -1;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
636 if ((*oldtlv)->value)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
637 free((*oldtlv)->value);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
638 free(*(oldtlv));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
639 (*oldtlv) = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
640
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
641 return 0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
642 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
674 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
697 return curbyte;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
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 }

mercurial