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