+ char ip[30];
+ char *desc = NULL;
+ struct aim_msgcookie_t *cachedcook;
+ struct aim_filetransfer_priv *ft;
+ struct aim_tlv_t *miscinfo;
+ struct aim_conn_t *newconn;
+
+ if (!(cachedcook = calloc(1, sizeof(struct aim_msgcookie_t))))
+ return 0;
+
+ memset(ip, 0, sizeof(ip));
+
+ if (!(miscinfo = aim_gettlv(list2, 0x2711, 1))) {
+ free(cachedcook);
+ return 0;
+ }
+
+ if (aim_gettlv(list2, 0x0003, 1) && aim_gettlv(list2, 0x0005, 1)) {
+ struct aim_tlv_t *iptlv, *porttlv;
+
+ if (!(iptlv = aim_gettlv(list2, 0x0003, 1)) || !(porttlv = aim_gettlv(list2, 0x0005, 1))) {
+ free(cachedcook);
+ return 0;
+ }
+
+ snprintf(ip, sizeof(ip)-1, "%d.%d.%d.%d:%d",
+ aimutil_get8(iptlv->value+0),
+ aimutil_get8(iptlv->value+1),
+ aimutil_get8(iptlv->value+2),
+ aimutil_get8(iptlv->value+3),
+ aimutil_get16(porttlv->value));
+ }
+
+ printf("faim: rend: file get request from %s (%s)\n", userinfo.sn, ip);
+
+#if 0 /* XXX finish this */
+ newconn = aim_newconn(sess, AIM_CONN_TYPE_RENDEZVOUS, ip);
+ if (!newconn || (newconn->fd == -1)) {
+ printf("could not connect to %s\n", ip);
+ perror("aim_newconn");
+ aim_conn_kill(sess, &newconn);
+ } else {
+ struct aim_filetransfer_priv *priv;
+ priv = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv));
+ memcpy(priv->cookie, cookie, 8);
+ strncpy(priv->sn, userinfo.sn, MAXSNLEN);
+ newconn->priv = priv;
+ printf("faim: connected to peer (fd = %d)\n", newconn->fd);
+ }
+
+ memcpy(cachedcook->cookie, cookie, 8);