Wed, 01 Nov 2000 09:32:34 +0000
[gaim-migrate @ 1053]
insert protocols in sorted order. this may seem odd but it helps things in the account editor
|
283
dbf3342692e9
[gaim-migrate @ 293]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
237
diff
changeset
|
1 | #include <faim/aim.h> |
| 2 | 2 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
3 | faim_internal 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
|
4 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
5 | int pos; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
6 | struct aim_tlvlist_t *list; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
7 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
8 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
9 | u_short type; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
10 | u_short length; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
11 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
12 | if (!buf) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
13 | return NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
14 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
15 | list = NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
16 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
17 | pos = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
18 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
19 | while (pos < maxlen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
20 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
21 | type = aimutil_get16(buf+pos); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
22 | pos += 2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
23 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
24 | if (pos < maxlen) |
|
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 | length = aimutil_get16(buf+pos); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
27 | pos += 2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
28 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
29 | if ((pos+length) <= maxlen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
30 | { |
|
446
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
31 | /* |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
32 | * Okay, so now AOL has decided that any TLV of |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
33 | * type 0x0013 can only be two bytes, despite |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
34 | * what the actual given length is. So here |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
35 | * we dump any invalid TLVs of that sort. Hopefully |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
36 | * theres no special cases to this special case. |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
37 | * - mid (30jun2000) |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
38 | */ |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
39 | if ((type == 0x0013) && (length != 0x0002)) { |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
40 | 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
|
41 | length = 0x0002; |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
42 | } else { |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
43 | cur = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
44 | memset(cur, 0x00, sizeof(struct aim_tlvlist_t)); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
45 | |
|
446
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
46 | cur->tlv = aim_createtlv(); |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
47 | cur->tlv->type = type; |
|
818
4f6b5df77866
[gaim-migrate @ 828]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
771
diff
changeset
|
48 | cur->tlv->length = length; |
|
4f6b5df77866
[gaim-migrate @ 828]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
771
diff
changeset
|
49 | if (length) { |
|
4f6b5df77866
[gaim-migrate @ 828]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
771
diff
changeset
|
50 | cur->tlv->value = (unsigned char *)malloc(length); |
|
4f6b5df77866
[gaim-migrate @ 828]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
771
diff
changeset
|
51 | memcpy(cur->tlv->value, buf+pos, length); |
|
4f6b5df77866
[gaim-migrate @ 828]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
771
diff
changeset
|
52 | } |
|
771
4ca7e1a4b1e4
[gaim-migrate @ 781]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
446
diff
changeset
|
53 | |
|
446
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
54 | cur->next = list; |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
55 | list = cur; |
|
950ea2a13438
[gaim-migrate @ 456]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
283
diff
changeset
|
56 | } |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
57 | pos += length; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
58 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
59 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
60 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
61 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
62 | return list; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
63 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
64 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
65 | faim_internal void aim_freetlvchain(struct aim_tlvlist_t **list) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
66 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
67 | struct aim_tlvlist_t *cur, *cur2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
68 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
69 | if (!list || !(*list)) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
70 | return; |
|
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 | cur = *list; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
73 | while (cur) |
|
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 | aim_freetlv(&cur->tlv); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
76 | cur2 = cur->next; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
77 | free(cur); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
78 | cur = cur2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
79 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
80 | list = NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
81 | return; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
82 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
83 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
84 | faim_internal int aim_counttlvchain(struct aim_tlvlist_t **list) |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
85 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
86 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
87 | int count = 0; |
|
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 0; |
|
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 | for (cur = *list; cur; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
93 | count++; |
|
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 | return count; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
96 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
97 | |
|
1002
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
98 | faim_export int aim_sizetlvchain(struct aim_tlvlist_t **list) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
99 | { |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
100 | struct aim_tlvlist_t *cur; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
101 | int size = 0; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
102 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
103 | if (!list || !(*list)) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
104 | return 0; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
105 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
106 | for (cur = *list; cur; cur = cur->next) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
107 | size += (4 + cur->tlv->length); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
108 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
109 | return size; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
110 | } |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
111 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
112 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
113 | faim_internal 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
|
114 | { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
115 | struct aim_tlvlist_t *newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
116 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
117 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
118 | if (!list) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
119 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
120 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
121 | newtlv = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
122 | memset(newtlv, 0x00, sizeof(struct aim_tlvlist_t)); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
123 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
124 | newtlv->tlv = aim_createtlv(); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
125 | newtlv->tlv->type = type; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
126 | newtlv->tlv->length = len; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
127 | 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
|
128 | memcpy(newtlv->tlv->value, str, newtlv->tlv->length); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
129 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
130 | newtlv->next = NULL; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
131 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
132 | if (*list == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
133 | *list = newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
134 | } else if ((*list)->next == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
135 | (*list)->next = newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
136 | } else { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
137 | for(cur = *list; cur->next; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
138 | ; |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
139 | cur->next = newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
140 | } |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
141 | return newtlv->tlv->length; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
142 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
143 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
144 | faim_internal 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
|
145 | { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
146 | struct aim_tlvlist_t *newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
147 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
148 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
149 | if (!list) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
150 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
151 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
152 | newtl = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
153 | memset(newtl, 0x00, sizeof(struct aim_tlvlist_t)); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
154 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
155 | newtl->tlv = aim_createtlv(); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
156 | newtl->tlv->type = type; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
157 | newtl->tlv->length = 2; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
158 | 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
|
159 | aimutil_put16(newtl->tlv->value, val); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
160 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
161 | newtl->next = NULL; |
|
237
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 == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
164 | *list = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
165 | } else if ((*list)->next == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
166 | (*list)->next = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
167 | } else { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
168 | for(cur = *list; cur->next; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
169 | ; |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
170 | cur->next = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
171 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
172 | return 2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
173 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
174 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
175 | faim_internal 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
|
176 | { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
177 | struct aim_tlvlist_t *newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
178 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
179 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
180 | if (!list) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
181 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
182 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
183 | newtl = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
184 | memset(newtl, 0x00, sizeof(struct aim_tlvlist_t)); |
|
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 | newtl->tlv = aim_createtlv(); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
187 | newtl->tlv->type = type; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
188 | newtl->tlv->length = 4; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
189 | 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
|
190 | aimutil_put32(newtl->tlv->value, val); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
191 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
192 | newtl->next = NULL; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
193 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
194 | if (*list == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
195 | *list = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
196 | } else if ((*list)->next == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
197 | (*list)->next = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
198 | } else { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
199 | for(cur = *list; cur->next; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
200 | ; |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
201 | cur->next = newtl; |
|
237
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 | return 4; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
204 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
205 | |
|
1002
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
206 | faim_internal int aim_addtlvtochain_caps(struct aim_tlvlist_t **list, unsigned short type, unsigned short caps) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
207 | { |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
208 | unsigned char buf[128]; /* icky fixed length buffer */ |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
209 | struct aim_tlvlist_t *newtl; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
210 | struct aim_tlvlist_t *cur; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
211 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
212 | if(!list) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
213 | return 0; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
214 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
215 | newtl = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
216 | memset(newtl, 0x00, sizeof(struct aim_tlvlist_t)); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
217 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
218 | newtl->tlv = aim_createtlv(); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
219 | newtl->tlv->type = type; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
220 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
221 | newtl->tlv->length = aim_putcap(buf, sizeof(buf), caps); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
222 | newtl->tlv->value = (unsigned char *)calloc(1, newtl->tlv->length); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
223 | memcpy(newtl->tlv->value, buf, newtl->tlv->length); |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
224 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
225 | newtl->next = NULL; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
226 | |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
227 | if (*list == NULL) { |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
228 | *list = newtl; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
229 | } else if ((*list)->next == NULL) { |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
230 | (*list)->next = newtl; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
231 | } else { |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
232 | for(cur = *list; cur->next; cur = cur->next) |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
233 | ; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
234 | cur->next = newtl; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
235 | } |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
236 | return newtl->tlv->length; |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
237 | } |
|
0c559888b1fb
[gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
900
diff
changeset
|
238 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
239 | faim_internal 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
|
240 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
241 | int goodbuflen = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
242 | int i = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
243 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
244 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
245 | if (!list || !buf || !buflen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
246 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
247 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
248 | /* do an initial run to test total length */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
249 | for (cur = *list; cur; cur = cur->next) { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
250 | goodbuflen += 2 + 2; /* type + len */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
251 | goodbuflen += cur->tlv->length; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
252 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
253 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
254 | if (goodbuflen > buflen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
255 | return 0; /* not enough buffer */ |
|
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 | /* do the real write-out */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
258 | for (cur = *list; cur; cur = cur->next) { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
259 | i += aimutil_put16(buf+i, cur->tlv->type); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
260 | i += aimutil_put16(buf+i, cur->tlv->length); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
261 | memcpy(buf+i, cur->tlv->value, cur->tlv->length); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
262 | i += cur->tlv->length; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
263 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
264 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
265 | return i; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
266 | } |
|
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 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
269 | /* |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
270 | * Grab the Nth TLV of type type in the TLV list list. |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
271 | */ |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
272 | faim_internal 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
|
273 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
274 | int i; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
275 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
276 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
277 | i = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
278 | for (cur = list; cur != NULL; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
279 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
280 | if (cur && cur->tlv) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
281 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
282 | if (cur->tlv->type == type) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
283 | i++; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
284 | if (i >= nth) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
285 | return cur->tlv; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
286 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
287 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
288 | return NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
289 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
290 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
291 | faim_internal 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
|
292 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
293 | struct aim_tlv_t *tlv; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
294 | char *newstr; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
295 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
296 | if (!(tlv = aim_gettlv(list, type, nth))) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
297 | return NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
298 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
299 | newstr = (char *) malloc(tlv->length + 1); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
300 | memcpy(newstr, tlv->value, tlv->length); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
301 | *(newstr + tlv->length) = '\0'; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
302 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
303 | return newstr; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
304 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
305 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
306 | faim_internal struct aim_tlv_t *aim_grabtlv(u_char *src) |
| 2 | 307 | { |
| 308 | struct aim_tlv_t *dest = NULL; | |
| 309 | ||
| 310 | dest = aim_createtlv(); | |
| 311 | ||
| 312 | dest->type = src[0] << 8; | |
| 313 | dest->type += src[1]; | |
| 314 | ||
| 315 | dest->length = src[2] << 8; | |
| 316 | dest->length += src[3]; | |
| 317 | ||
| 318 | dest->value = (u_char *) malloc(dest->length*sizeof(u_char)); | |
| 319 | memset(dest->value, 0, dest->length*sizeof(u_char)); | |
| 320 | ||
| 321 | memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char)); | |
| 322 | ||
| 323 | return dest; | |
| 324 | } | |
| 325 | ||
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
326 | faim_internal struct aim_tlv_t *aim_grabtlvstr(u_char *src) |
| 2 | 327 | { |
| 328 | struct aim_tlv_t *dest = NULL; | |
| 329 | ||
| 330 | dest = aim_createtlv(); | |
| 331 | ||
| 332 | dest->type = src[0] << 8; | |
| 333 | dest->type += src[1]; | |
| 334 | ||
| 335 | dest->length = src[2] << 8; | |
| 336 | dest->length += src[3]; | |
| 337 | ||
| 338 | dest->value = (u_char *) malloc((dest->length+1)*sizeof(u_char)); | |
| 339 | memset(dest->value, 0, (dest->length+1)*sizeof(u_char)); | |
| 340 | ||
| 341 | memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char)); | |
| 342 | dest->value[dest->length] = '\0'; | |
| 343 | ||
| 344 | return dest; | |
| 345 | } | |
| 346 | ||
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
347 | faim_internal int aim_puttlv(u_char *dest, struct aim_tlv_t *newtlv) |
| 2 | 348 | { |
| 349 | int i=0; | |
| 350 | ||
| 351 | dest[i++] = newtlv->type >> 8; | |
| 352 | dest[i++] = newtlv->type & 0x00FF; | |
| 353 | dest[i++] = newtlv->length >> 8; | |
| 354 | dest[i++] = newtlv->length & 0x00FF; | |
| 355 | memcpy(&(dest[i]), newtlv->value, newtlv->length); | |
| 356 | i+=newtlv->length; | |
| 357 | return i; | |
| 358 | } | |
| 359 | ||
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
360 | faim_internal struct aim_tlv_t *aim_createtlv(void) |
| 2 | 361 | { |
| 362 | struct aim_tlv_t *newtlv = NULL; | |
| 363 | newtlv = (struct aim_tlv_t *)malloc(sizeof(struct aim_tlv_t)); | |
| 364 | memset(newtlv, 0, sizeof(struct aim_tlv_t)); | |
| 365 | return newtlv; | |
| 366 | } | |
| 367 | ||
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
368 | faim_internal int aim_freetlv(struct aim_tlv_t **oldtlv) |
| 2 | 369 | { |
| 370 | if (!oldtlv) | |
| 371 | return -1; | |
| 372 | if (!*oldtlv) | |
| 373 | return -1; | |
| 374 | if ((*oldtlv)->value) | |
| 375 | free((*oldtlv)->value); | |
| 376 | free(*(oldtlv)); | |
| 377 | (*oldtlv) = NULL; | |
| 378 | ||
| 379 | return 0; | |
| 380 | } | |
| 381 | ||
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
382 | faim_internal int aim_puttlv_16(u_char *buf, u_short t, u_short v) |
| 2 | 383 | { |
| 384 | int curbyte=0; | |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
385 | curbyte += aimutil_put16(buf+curbyte, (u_short)(t&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
386 | curbyte += aimutil_put16(buf+curbyte, (u_short)0x0002); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
387 | curbyte += aimutil_put16(buf+curbyte, (u_short)(v&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
388 | return curbyte; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
389 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
390 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
391 | faim_internal 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
|
392 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
393 | int curbyte=0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
394 | curbyte += aimutil_put16(buf+curbyte, (u_short)(t&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
395 | curbyte += aimutil_put16(buf+curbyte, (u_short)0x0004); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
396 | curbyte += aimutil_put32(buf+curbyte, (u_long)(v&0xffffffff)); |
| 2 | 397 | return curbyte; |
| 398 | } | |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
399 | |
|
889
070eb1c6db95
[gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
840
diff
changeset
|
400 | faim_internal 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
|
401 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
402 | int curbyte; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
403 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
404 | curbyte = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
405 | curbyte += aimutil_put16(buf+curbyte, (u_short)(t&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
406 | curbyte += aimutil_put16(buf+curbyte, (u_short)(l&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
407 | if (v) |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
408 | memcpy(buf+curbyte, (unsigned char *)v, l); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
409 | curbyte += l; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
410 | return curbyte; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
411 | } |