Tue, 10 Oct 2000 10:16:26 +0000
[gaim-migrate @ 975]
segfault avoidance and notes about libfaim
|
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 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
98 | 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
|
99 | { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
100 | struct aim_tlvlist_t *newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
101 | struct aim_tlvlist_t *cur; |
|
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 | if (!list) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
104 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
105 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
106 | newtlv = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
107 | memset(newtlv, 0x00, sizeof(struct aim_tlvlist_t)); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
108 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
109 | newtlv->tlv = aim_createtlv(); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
110 | newtlv->tlv->type = type; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
111 | newtlv->tlv->length = len; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
112 | 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
|
113 | memcpy(newtlv->tlv->value, str, newtlv->tlv->length); |
|
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 | newtlv->next = NULL; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
116 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
117 | if (*list == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
118 | *list = newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
119 | } else if ((*list)->next == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
120 | (*list)->next = newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
121 | } else { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
122 | for(cur = *list; cur->next; cur = cur->next) |
|
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 | cur->next = newtlv; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
125 | } |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
126 | return newtlv->tlv->length; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
127 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
128 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
129 | 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
|
130 | { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
131 | struct aim_tlvlist_t *newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
132 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
133 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
134 | if (!list) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
135 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
136 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
137 | newtl = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
138 | memset(newtl, 0x00, sizeof(struct aim_tlvlist_t)); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
139 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
140 | newtl->tlv = aim_createtlv(); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
141 | newtl->tlv->type = type; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
142 | newtl->tlv->length = 2; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
143 | 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
|
144 | aimutil_put16(newtl->tlv->value, 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 | newtl->next = NULL; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
147 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
148 | if (*list == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
149 | *list = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
150 | } else if ((*list)->next == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
151 | (*list)->next = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
152 | } else { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
153 | for(cur = *list; cur->next; cur = cur->next) |
|
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 | cur->next = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
156 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
157 | return 2; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
158 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
159 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
160 | 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
|
161 | { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
162 | struct aim_tlvlist_t *newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
163 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
164 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
165 | if (!list) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
166 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
167 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
168 | newtl = (struct aim_tlvlist_t *)malloc(sizeof(struct aim_tlvlist_t)); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
169 | memset(newtl, 0x00, sizeof(struct aim_tlvlist_t)); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
170 | |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
171 | newtl->tlv = aim_createtlv(); |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
172 | newtl->tlv->type = type; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
173 | newtl->tlv->length = 4; |
|
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
174 | 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
|
175 | aimutil_put32(newtl->tlv->value, 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 | newtl->next = NULL; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
178 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
179 | if (*list == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
180 | *list = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
181 | } else if ((*list)->next == NULL) { |
|
900
c560f793f30c
[gaim-migrate @ 910]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
889
diff
changeset
|
182 | (*list)->next = newtl; |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
183 | } else { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
184 | for(cur = *list; cur->next; cur = cur->next) |
|
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 | cur->next = newtl; |
|
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 | return 4; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
189 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
190 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
191 | 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
|
192 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
193 | int goodbuflen = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
194 | int i = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
195 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
196 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
197 | if (!list || !buf || !buflen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
198 | return 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
199 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
200 | /* do an initial run to test total length */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
201 | for (cur = *list; cur; cur = cur->next) { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
202 | goodbuflen += 2 + 2; /* type + len */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
203 | goodbuflen += cur->tlv->length; |
|
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 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
206 | if (goodbuflen > buflen) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
207 | return 0; /* not enough buffer */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
208 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
209 | /* do the real write-out */ |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
210 | for (cur = *list; cur; cur = cur->next) { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
211 | i += aimutil_put16(buf+i, cur->tlv->type); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
212 | i += aimutil_put16(buf+i, cur->tlv->length); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
213 | memcpy(buf+i, cur->tlv->value, cur->tlv->length); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
214 | i += cur->tlv->length; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
215 | } |
|
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 | return i; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
218 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
219 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
220 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
221 | /* |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
222 | * 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
|
223 | */ |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
224 | 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
|
225 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
226 | int i; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
227 | struct aim_tlvlist_t *cur; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
228 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
229 | i = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
230 | for (cur = list; cur != NULL; cur = cur->next) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
231 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
232 | if (cur && cur->tlv) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
233 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
234 | if (cur->tlv->type == type) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
235 | i++; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
236 | if (i >= nth) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
237 | return cur->tlv; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
238 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
239 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
240 | return NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
241 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
242 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
243 | 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
|
244 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
245 | struct aim_tlv_t *tlv; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
246 | char *newstr; |
|
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 | if (!(tlv = aim_gettlv(list, type, nth))) |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
249 | return NULL; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
250 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
251 | newstr = (char *) malloc(tlv->length + 1); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
252 | memcpy(newstr, tlv->value, tlv->length); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
253 | *(newstr + tlv->length) = '\0'; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
254 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
255 | return newstr; |
|
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 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
258 | faim_internal struct aim_tlv_t *aim_grabtlv(u_char *src) |
| 2 | 259 | { |
| 260 | struct aim_tlv_t *dest = NULL; | |
| 261 | ||
| 262 | dest = aim_createtlv(); | |
| 263 | ||
| 264 | dest->type = src[0] << 8; | |
| 265 | dest->type += src[1]; | |
| 266 | ||
| 267 | dest->length = src[2] << 8; | |
| 268 | dest->length += src[3]; | |
| 269 | ||
| 270 | dest->value = (u_char *) malloc(dest->length*sizeof(u_char)); | |
| 271 | memset(dest->value, 0, dest->length*sizeof(u_char)); | |
| 272 | ||
| 273 | memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char)); | |
| 274 | ||
| 275 | return dest; | |
| 276 | } | |
| 277 | ||
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
278 | faim_internal struct aim_tlv_t *aim_grabtlvstr(u_char *src) |
| 2 | 279 | { |
| 280 | struct aim_tlv_t *dest = NULL; | |
| 281 | ||
| 282 | dest = aim_createtlv(); | |
| 283 | ||
| 284 | dest->type = src[0] << 8; | |
| 285 | dest->type += src[1]; | |
| 286 | ||
| 287 | dest->length = src[2] << 8; | |
| 288 | dest->length += src[3]; | |
| 289 | ||
| 290 | dest->value = (u_char *) malloc((dest->length+1)*sizeof(u_char)); | |
| 291 | memset(dest->value, 0, (dest->length+1)*sizeof(u_char)); | |
| 292 | ||
| 293 | memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char)); | |
| 294 | dest->value[dest->length] = '\0'; | |
| 295 | ||
| 296 | return dest; | |
| 297 | } | |
| 298 | ||
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
299 | faim_internal int aim_puttlv(u_char *dest, struct aim_tlv_t *newtlv) |
| 2 | 300 | { |
| 301 | int i=0; | |
| 302 | ||
| 303 | dest[i++] = newtlv->type >> 8; | |
| 304 | dest[i++] = newtlv->type & 0x00FF; | |
| 305 | dest[i++] = newtlv->length >> 8; | |
| 306 | dest[i++] = newtlv->length & 0x00FF; | |
| 307 | memcpy(&(dest[i]), newtlv->value, newtlv->length); | |
| 308 | i+=newtlv->length; | |
| 309 | return i; | |
| 310 | } | |
| 311 | ||
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
312 | faim_internal struct aim_tlv_t *aim_createtlv(void) |
| 2 | 313 | { |
| 314 | struct aim_tlv_t *newtlv = NULL; | |
| 315 | newtlv = (struct aim_tlv_t *)malloc(sizeof(struct aim_tlv_t)); | |
| 316 | memset(newtlv, 0, sizeof(struct aim_tlv_t)); | |
| 317 | return newtlv; | |
| 318 | } | |
| 319 | ||
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
320 | faim_internal int aim_freetlv(struct aim_tlv_t **oldtlv) |
| 2 | 321 | { |
| 322 | if (!oldtlv) | |
| 323 | return -1; | |
| 324 | if (!*oldtlv) | |
| 325 | return -1; | |
| 326 | if ((*oldtlv)->value) | |
| 327 | free((*oldtlv)->value); | |
| 328 | free(*(oldtlv)); | |
| 329 | (*oldtlv) = NULL; | |
| 330 | ||
| 331 | return 0; | |
| 332 | } | |
| 333 | ||
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
334 | faim_internal int aim_puttlv_16(u_char *buf, u_short t, u_short v) |
| 2 | 335 | { |
| 336 | int curbyte=0; | |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
337 | curbyte += aimutil_put16(buf+curbyte, (u_short)(t&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
338 | curbyte += aimutil_put16(buf+curbyte, (u_short)0x0002); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
339 | curbyte += aimutil_put16(buf+curbyte, (u_short)(v&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
340 | return curbyte; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
341 | } |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
342 | |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
343 | 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
|
344 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
345 | int curbyte=0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
346 | curbyte += aimutil_put16(buf+curbyte, (u_short)(t&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
347 | curbyte += aimutil_put16(buf+curbyte, (u_short)0x0004); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
348 | curbyte += aimutil_put32(buf+curbyte, (u_long)(v&0xffffffff)); |
| 2 | 349 | return curbyte; |
| 350 | } | |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
351 | |
|
889
070eb1c6db95
[gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
840
diff
changeset
|
352 | 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
|
353 | { |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
354 | int curbyte; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
355 | |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
356 | curbyte = 0; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
357 | curbyte += aimutil_put16(buf+curbyte, (u_short)(t&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
358 | curbyte += aimutil_put16(buf+curbyte, (u_short)(l&0xffff)); |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
359 | if (v) |
|
840
b80a628d935f
[gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
818
diff
changeset
|
360 | memcpy(buf+curbyte, (unsigned char *)v, l); |
|
237
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
361 | curbyte += l; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
362 | return curbyte; |
|
83ff5f92ee7e
[gaim-migrate @ 247]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2
diff
changeset
|
363 | } |