- {
- int isave;
- i += aimutil_put16(newpacket->data+i, 0x0005);
- isave = i;
- i += aimutil_put16(newpacket->data+i, 0);
- if (caps & AIM_CAPS_BUDDYICON)
- i += aimutil_putstr(newpacket->data+i, aim_caps[0], 0x10);
- if (caps & AIM_CAPS_VOICE)
- i += aimutil_putstr(newpacket->data+i, aim_caps[1], 0x10);
- if (caps & AIM_CAPS_IMIMAGE)
- i += aimutil_putstr(newpacket->data+i, aim_caps[2], 0x10);
- if (caps & AIM_CAPS_CHAT)
- i += aimutil_putstr(newpacket->data+i, aim_caps[3], 0x10);
- if (caps & AIM_CAPS_GETFILE)
- i += aimutil_putstr(newpacket->data+i, aim_caps[4], 0x10);
- if (caps & AIM_CAPS_SENDFILE)
- i += aimutil_putstr(newpacket->data+i, aim_caps[5], 0x10);
- aimutil_put16(newpacket->data+isave, i-isave-2);
- }
+
+ tmp = (i += aimutil_put16(newpacket->data+i, 0x0005));
+ i += aimutil_put16(newpacket->data+i, 0x0000); /* rewritten later */
+ i += (caplen = aim_putcap(newpacket->data+i, 512, caps));
+ aimutil_put16(newpacket->data+tmp, caplen); /* rewrite TLV size */
+