# HG changeset patch # User Adam Fritzler # Date 1005358057 0 # Node ID fee85ed7fc3f37330e39eae8549ab9e68036ef11 # Parent 441b84ab7f4e03ffbd4660f5dcffa7116b5d8e25 [gaim-migrate @ 2717] I had to recompile zephyr AGAIN!! committer: Tailor Script diff -r 441b84ab7f4e -r fee85ed7fc3f src/protocols/oscar/aim.h --- a/src/protocols/oscar/aim.h Sat Nov 10 01:48:17 2001 +0000 +++ b/src/protocols/oscar/aim.h Sat Nov 10 02:07:37 2001 +0000 @@ -499,7 +499,25 @@ typedef int (*aim_rxcallback_t)(aim_session_t *, aim_frame_t *, ...); -/* aim_login.c */ +struct aim_clientrelease { + char *name; + fu32_t build; + char *url; + char *info; +}; + +struct aim_authresp_info { + char *sn; + fu16_t errorcode; + char *errorurl; + fu16_t regstatus; + char *email; + char *bosip; + fu8_t *cookie; + struct aim_clientrelease latestrelease; + struct aim_clientrelease latestbeta; +}; + faim_export int aim_clientready(aim_session_t *sess, aim_conn_t *conn); faim_export int aim_sendflapver(aim_session_t *sess, aim_conn_t *conn); faim_export int aim_request_login(aim_session_t *sess, aim_conn_t *conn, const char *sn); diff -r 441b84ab7f4e -r fee85ed7fc3f src/protocols/oscar/auth.c --- a/src/protocols/oscar/auth.c Sat Nov 10 01:48:17 2001 +0000 +++ b/src/protocols/oscar/auth.c Sat Nov 10 02:07:37 2001 +0000 @@ -370,15 +370,11 @@ static int parse(aim_session_t *sess, aim_module_t *mod, aim_frame_t *rx, aim_modsnac_t *snac, aim_bstream_t *bs) { aim_tlvlist_t *tlvlist; + aim_rxcallback_t userfunc; + struct aim_authresp_info info; int ret = 0; - aim_rxcallback_t userfunc; - char *sn = NULL, *bosip = NULL, *errurl = NULL, *email = NULL; - unsigned char *cookie = NULL; - int errorcode = 0, regstatus = 0; - int latestbuild = 0, latestbetabuild = 0; - char *latestrelease = NULL, *latestbeta = NULL; - char *latestreleaseurl = NULL, *latestbetaurl = NULL; - char *latestreleaseinfo = NULL, *latestbetainfo = NULL; + + memset(&info, 0, sizeof(info)); /* * Read block of TLVs. All further data is derived @@ -391,8 +387,8 @@ */ memset(sess->sn, 0, sizeof(sess->sn)); if (aim_gettlv(tlvlist, 0x0001, 1)) { - sn = aim_gettlv_str(tlvlist, 0x0001, 1); - strncpy(sess->sn, sn, sizeof(sess->sn)); + info.sn = aim_gettlv_str(tlvlist, 0x0001, 1); + strncpy(sess->sn, info.sn, sizeof(sess->sn)); } /* @@ -400,15 +396,15 @@ * have an error url. */ if (aim_gettlv(tlvlist, 0x0008, 1)) - errorcode = aim_gettlv16(tlvlist, 0x0008, 1); + info.errorcode = aim_gettlv16(tlvlist, 0x0008, 1); if (aim_gettlv(tlvlist, 0x0004, 1)) - errurl = aim_gettlv_str(tlvlist, 0x0004, 1); + info.errorurl = aim_gettlv_str(tlvlist, 0x0004, 1); /* * BOS server address. */ if (aim_gettlv(tlvlist, 0x0005, 1)) - bosip = aim_gettlv_str(tlvlist, 0x0005, 1); + info.bosip = aim_gettlv_str(tlvlist, 0x0005, 1); /* * Authorization cookie. @@ -418,8 +414,7 @@ tmptlv = aim_gettlv(tlvlist, 0x0006, 1); - if ((cookie = malloc(tmptlv->length))) - memcpy(cookie, tmptlv->value, tmptlv->length); + info.cookie = tmptlv->value; } /* @@ -427,7 +422,7 @@ * Not available for ICQ logins. */ if (aim_gettlv(tlvlist, 0x0011, 1)) - email = aim_gettlv_str(tlvlist, 0x0011, 1); + info.email = aim_gettlv_str(tlvlist, 0x0011, 1); /* * The registration status. (Not real sure what it means.) @@ -442,47 +437,44 @@ * */ if (aim_gettlv(tlvlist, 0x0013, 1)) - regstatus = aim_gettlv16(tlvlist, 0x0013, 1); + info.regstatus = aim_gettlv16(tlvlist, 0x0013, 1); if (aim_gettlv(tlvlist, 0x0040, 1)) - latestbetabuild = aim_gettlv32(tlvlist, 0x0040, 1); + info.latestbeta.build = aim_gettlv32(tlvlist, 0x0040, 1); if (aim_gettlv(tlvlist, 0x0041, 1)) - latestbetaurl = aim_gettlv_str(tlvlist, 0x0041, 1); + info.latestbeta.url = aim_gettlv_str(tlvlist, 0x0041, 1); if (aim_gettlv(tlvlist, 0x0042, 1)) - latestbetainfo = aim_gettlv_str(tlvlist, 0x0042, 1); + info.latestbeta.info = aim_gettlv_str(tlvlist, 0x0042, 1); if (aim_gettlv(tlvlist, 0x0043, 1)) - latestbeta = aim_gettlv_str(tlvlist, 0x0043, 1); + info.latestbeta.name = aim_gettlv_str(tlvlist, 0x0043, 1); if (aim_gettlv(tlvlist, 0x0048, 1)) ; /* no idea what this is */ if (aim_gettlv(tlvlist, 0x0044, 1)) - latestbuild = aim_gettlv32(tlvlist, 0x0044, 1); + info.latestrelease.build = aim_gettlv32(tlvlist, 0x0044, 1); if (aim_gettlv(tlvlist, 0x0045, 1)) - latestreleaseurl = aim_gettlv_str(tlvlist, 0x0045, 1); + info.latestrelease.url = aim_gettlv_str(tlvlist, 0x0045, 1); if (aim_gettlv(tlvlist, 0x0046, 1)) - latestreleaseinfo = aim_gettlv_str(tlvlist, 0x0046, 1); + info.latestrelease.info = aim_gettlv_str(tlvlist, 0x0046, 1); if (aim_gettlv(tlvlist, 0x0047, 1)) - latestrelease = aim_gettlv_str(tlvlist, 0x0047, 1); + info.latestrelease.name = aim_gettlv_str(tlvlist, 0x0047, 1); if (aim_gettlv(tlvlist, 0x0049, 1)) ; /* no idea what this is */ - if ((userfunc = aim_callhandler(sess, rx->conn, snac ? snac->family : 0x0017, snac ? snac->subtype : 0x0003))) { - /* XXX return as a struct? */ - ret = userfunc(sess, rx, sn, errorcode, errurl, regstatus, email, bosip, cookie, latestrelease, latestbuild, latestreleaseurl, latestreleaseinfo, latestbeta, latestbetabuild, latestbetaurl, latestbetainfo); - } + if ((userfunc = aim_callhandler(sess, rx->conn, snac ? snac->family : 0x0017, snac ? snac->subtype : 0x0003))) + ret = userfunc(sess, rx, &info); - free(sn); - free(bosip); - free(errurl); - free(email); - free(cookie); - free(latestrelease); - free(latestreleaseurl); - free(latestbeta); - free(latestbetaurl); - free(latestreleaseinfo); - free(latestbetainfo); + free(info.sn); + free(info.bosip); + free(info.errorurl); + free(info.email); + free(info.latestrelease.name); + free(info.latestrelease.url); + free(info.latestrelease.info); + free(info.latestbeta.name); + free(info.latestbeta.url); + free(info.latestbeta.info); aim_freetlvchain(&tlvlist); diff -r 441b84ab7f4e -r fee85ed7fc3f src/protocols/oscar/oscar.c --- a/src/protocols/oscar/oscar.c Sat Nov 10 01:48:17 2001 +0000 +++ b/src/protocols/oscar/oscar.c Sat Nov 10 02:07:37 2001 +0000 @@ -555,16 +555,10 @@ static int gaim_parse_auth_resp(aim_session_t *sess, aim_frame_t *fr, ...) { va_list ap; - aim_conn_t *bosconn = NULL; - char *sn = NULL, *bosip = NULL, *errurl = NULL, *email = NULL; - fu8_t *cookie = NULL; - int errorcode = 0, regstatus = 0; - int latestbuild = 0, latestbetabuild = 0; - char *latestrelease = NULL, *latestbeta = NULL; - char *latestreleaseurl = NULL, *latestbetaurl = NULL; - char *latestreleaseinfo = NULL, *latestbetainfo = NULL; + struct aim_authresp_info *info; int i; char *host; int port; struct aim_user *user; + aim_conn_t *bosconn; struct gaim_connection *gc = sess->aux_data; struct oscar_data *od = gc->proto_data; @@ -573,30 +567,13 @@ atoi(user->proto_opt[USEROPT_AUTHPORT]) : FAIM_LOGIN_PORT, va_start(ap, fr); - sn = va_arg(ap, char *); - errorcode = va_arg(ap, int); - errurl = va_arg(ap, char *); - regstatus = va_arg(ap, int); - email = va_arg(ap, char *); - bosip = va_arg(ap, char *); - cookie = va_arg(ap, unsigned char *); - - latestrelease = va_arg(ap, char *); - latestbuild = va_arg(ap, int); - latestreleaseurl = va_arg(ap, char *); - latestreleaseinfo = va_arg(ap, char *); - - latestbeta = va_arg(ap, char *); - latestbetabuild = va_arg(ap, int); - latestbetaurl = va_arg(ap, char *); - latestbetainfo = va_arg(ap, char *); - + info = va_arg(ap, struct aim_authresp_info *); va_end(ap); - debug_printf("inside auth_resp (Screen name: %s)\n", sn); - - if (errorcode || !bosip || !cookie) { - switch (errorcode) { + debug_printf("inside auth_resp (Screen name: %s)\n", info->sn); + + if (info->errorcode || !info->bosip || !info->cookie) { + switch (info->errorcode) { case 0x05: /* Incorrect nick/password */ hide_login_progress(gc, _("Incorrect nickname or password.")); @@ -620,26 +597,20 @@ hide_login_progress(gc, _("Authentication Failed")); break; } - debug_printf("Login Error Code 0x%04x\n", errorcode); - debug_printf("Error URL: %s\n", errurl); + debug_printf("Login Error Code 0x%04x\n", info->errorcode); + debug_printf("Error URL: %s\n", info->errorurl); od->killme = TRUE; return 1; } - debug_printf("Reg status: %2d\n", regstatus); - if (email) { - debug_printf("Email: %s\n", email); + debug_printf("Reg status: %d\n", info->regstatus); + if (info->email) { + debug_printf("Email: %s\n", info->email); } else { debug_printf("Email is NULL\n"); } - debug_printf("BOSIP: %s\n", bosip); - if (latestbeta) - debug_printf("Latest WinAIM beta version %s, build %d, at %s (%s)\n", - latestbeta, latestbetabuild, latestbetaurl, latestbetainfo); - if (latestrelease) - debug_printf("Latest WinAIM released version %s, build %d, at %s (%s)\n", - latestrelease, latestbuild, latestreleaseurl, latestreleaseinfo); + debug_printf("BOSIP: %s\n", info->bosip); debug_printf("Closing auth connection...\n"); aim_conn_kill(sess, &fr->conn); @@ -676,13 +647,13 @@ aim_conn_addhandler(sess, bosconn, 0x0001, 0x000f, gaim_selfinfo, 0); ((struct oscar_data *)gc->proto_data)->conn = bosconn; - for (i = 0; i < (int)strlen(bosip); i++) { - if (bosip[i] == ':') { - port = atoi(&(bosip[i+1])); + for (i = 0; i < (int)strlen(info->bosip); i++) { + if (info->bosip[i] == ':') { + port = atoi(&(info->bosip[i+1])); break; } } - host = g_strndup(bosip, i); + host = g_strndup(info->bosip, i); bosconn->status |= AIM_CONN_STATUS_INPROGRESS; bosconn->fd = proxy_connect(host, port, oscar_bos_connect, gc); g_free(host); @@ -691,8 +662,9 @@ od->killme = TRUE; return 0; } - aim_sendcookie(sess, bosconn, cookie); + aim_sendcookie(sess, bosconn, info->cookie); gaim_input_remove(gc->inpa); + return 1; }