libfaim/aim_tlv.c

Sun, 30 Apr 2000 21:47:04 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Sun, 30 Apr 2000 21:47:04 +0000
changeset 200
aa9fbd9e68a3
parent 2
62fbb00c531a
child 237
83ff5f92ee7e
permissions
-rw-r--r--

[gaim-migrate @ 210]
Made the receive non-blocking, added a cancel button, and a few other updates.
No, sending a file to someone does not work yet. Be patient.

2
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
1 #include <aim.h>
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
2
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
3 struct aim_tlv_t *aim_grabtlv(u_char *src)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
4 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
5 struct aim_tlv_t *dest = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
6
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
7 dest = aim_createtlv();
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
8
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
9 dest->type = src[0] << 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
10 dest->type += src[1];
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
11
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
12 dest->length = src[2] << 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
13 dest->length += src[3];
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
14
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
15 dest->value = (u_char *) malloc(dest->length*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
16 memset(dest->value, 0, dest->length*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
17
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
18 memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
19
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
20 return dest;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
21 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
22
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
23 struct aim_tlv_t *aim_grabtlvstr(u_char *src)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
24 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
25 struct aim_tlv_t *dest = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
26
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
27 dest = aim_createtlv();
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
28
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
29 dest->type = src[0] << 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
30 dest->type += src[1];
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
31
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
32 dest->length = src[2] << 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
33 dest->length += src[3];
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
34
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
35 dest->value = (u_char *) malloc((dest->length+1)*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
36 memset(dest->value, 0, (dest->length+1)*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
37
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
38 memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
39 dest->value[dest->length] = '\0';
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
40
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
41 return dest;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
42 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
43
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
44 int aim_puttlv (u_char *dest, struct aim_tlv_t *newtlv)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
45 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
46 int i=0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
47
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
48 dest[i++] = newtlv->type >> 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
49 dest[i++] = newtlv->type & 0x00FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
50 dest[i++] = newtlv->length >> 8;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
51 dest[i++] = newtlv->length & 0x00FF;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
52 memcpy(&(dest[i]), newtlv->value, newtlv->length);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
53 i+=newtlv->length;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
54 return i;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
55 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
56
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
57 struct aim_tlv_t *aim_createtlv(void)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
58 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
59 struct aim_tlv_t *newtlv = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
60 newtlv = (struct aim_tlv_t *)malloc(sizeof(struct aim_tlv_t));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
61 memset(newtlv, 0, sizeof(struct aim_tlv_t));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
62 return newtlv;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
63 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
64
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
65 int aim_freetlv(struct aim_tlv_t **oldtlv)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
66 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
67 if (!oldtlv)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
68 return -1;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
69 if (!*oldtlv)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
70 return -1;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
71 if ((*oldtlv)->value)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
72 free((*oldtlv)->value);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
73 free(*(oldtlv));
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
74 (*oldtlv) = NULL;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
75
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
76 return 0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
77 }
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
78
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
79 int aim_puttlv_16(u_char *buf, u_short t, u_short v)
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
80 {
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
81 int curbyte=0;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
82 curbyte += aimutil_put16(buf+curbyte, t&0xffff);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
83 curbyte += aimutil_put16(buf+curbyte, 0x0002);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
84 curbyte += aimutil_put16(buf+curbyte, v&0xffff);
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
85 return curbyte;
62fbb00c531a [gaim-migrate @ 11]
Rob Flynn <gaim@robflynn.com>
parents:
diff changeset
86 }

mercurial