cmd_gotkey();
} else {
if (waitingconn->type == AIM_CONN_TYPE_RENDEZVOUS_OUT) {
-#if 0
if (aim_handlerendconnect(&aimsess, waitingconn) < 0) {
dprintf("connection error (rend out)\n");
aim_conn_kill(&aimsess, &waitingconn);
}
-#endif
} else {
if (aim_get_command(&aimsess, waitingconn) >= 0) {
aim_rxdispatch(&aimsess);
dvprintf("connection error (type 0x%04x:0x%04x)\n", waitingconn->type, waitingconn->subtype);
/* we should have callbacks for all these, else the library will do the conn_kill for us. */
if (waitingconn->type == AIM_CONN_TYPE_RENDEZVOUS) {
- dprintf("connection error: rendezvous connection. you forgot register a disconnect callback, right?\n");
+ if (waitingconn->subtype == AIM_CONN_SUBTYPE_OFT_DIRECTIM)
+ dvprintf("disconnected from %s\n", aim_directim_getsn(waitingconn));
aim_conn_kill(&aimsess, &waitingconn);
} else
aim_conn_kill(&aimsess, &waitingconn);
aim_send_im_ext(sess, conn, &args);
+ } else if (strstr(tmpstr, "havefeat")) {
+ struct aim_sendimext_args args;
+ static const char featmsg[] = {"I have nifty features."};
+ fu8_t features[] = {0x01, 0x01, 0x01, 0x02, 0x42, 0x43, 0x44, 0x45};
+
+ args.destsn = userinfo->sn;
+ args.flags = AIM_IMFLAGS_CUSTOMFEATURES;
+ args.msg = featmsg;
+ args.msglen = strlen(featmsg);
+ args.features = features;
+ args.featureslen = sizeof(features);
+
+ aim_send_im_ext(sess, conn, &args);
+
} else if (strstr(tmpstr, "sendicon") && priv->buddyicon) {
aim_send_icon(sess, conn, userinfo->sn, priv->buddyicon, priv->buddyiconlen, priv->buddyiconstamp, priv->buddyiconsum);
aim_getinfo(sess, conn, "midendian", AIM_GETINFO_GENERALINFO);
aim_getinfo(sess, conn, "midendian", AIM_GETINFO_AWAYMESSAGE);
- } else if (!strncmp(tmpstr, "open directim", 13)) {
+ } else if (strstr(tmpstr, "open directim")) {
- directim_start(sess, conn, (strlen(tmpstr) < 14)?userinfo->sn:tmpstr+14);
+ directim_start(sess, conn, userinfo->sn);
} else if(!(strncmp(tmpstr, "lookup", 6))) {
*/
static int faimtest_parse_incoming_im_chan1(aim_session_t *sess, aim_conn_t *conn, struct aim_userinfo_s *userinfo, va_list ap)
{
+ struct faimtest_priv *priv = (struct faimtest_priv *)sess->aux_data;
char *tmpstr;
struct aim_incomingim_ch1_args *args;
int clienttype = AIM_CLIENTTYPE_UNKNOWN;
args = va_arg(ap, struct aim_incomingim_ch1_args *);
va_end(ap);
- clienttype = aim_fingerprintclient(args->fingerprint, args->finlen);
+ clienttype = aim_fingerprintclient(args->features, args->featureslen);
dvprintf("faimtest: icbm: sn = \"%s\"\n", userinfo->sn);
dvprintf("faimtest: icbm: probable client type: %d\n", clienttype);
}
+ if (priv->buddyicon && (args->icbmflags & AIM_IMFLAGS_BUDDYREQ))
+ aim_send_icon(sess, conn, userinfo->sn, priv->buddyicon, priv->buddyiconlen, priv->buddyiconstamp, priv->buddyiconsum);
+
return 1;
}
} else if (args->reqclass == AIM_CAPS_BUDDYICON) {
- dvprintf("faimtest: Buddy Icon from %s, length = %u\n", userinfo->sn, args->info.icon.length);
+ dvprintf("faimtest: Buddy Icon from %s, length = %lu\n", userinfo->sn, args->info.icon.length);
} else {