3 struct aim_tlv_t *aim_grabtlv(u_char *src)
5 struct aim_tlv_t *dest = NULL;
7 dest = aim_createtlv();
9 dest->type = src[0] << 8;
12 dest->length = src[2] << 8;
13 dest->length += src[3];
15 dest->value = (u_char *) malloc(dest->length*sizeof(u_char));
16 memset(dest->value, 0, dest->length*sizeof(u_char));
18 memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char));
23 struct aim_tlv_t *aim_grabtlvstr(u_char *src)
25 struct aim_tlv_t *dest = NULL;
27 dest = aim_createtlv();
29 dest->type = src[0] << 8;
32 dest->length = src[2] << 8;
33 dest->length += src[3];
35 dest->value = (u_char *) malloc((dest->length+1)*sizeof(u_char));
36 memset(dest->value, 0, (dest->length+1)*sizeof(u_char));
38 memcpy(dest->value, &(src[4]), dest->length*sizeof(u_char));
39 dest->value[dest->length] = '\0';
44 int aim_puttlv (u_char *dest, struct aim_tlv_t *newtlv)
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);
57 struct aim_tlv_t *aim_createtlv(void)
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));
65 int aim_freetlv(struct aim_tlv_t **oldtlv)
72 free((*oldtlv)->value);
79 int aim_puttlv_16(u_char *buf, u_short t, u_short v)
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));