comparison libpurple/protocols/msn/notification.c @ 26867:bbb89d322034

Decrement the ADL/FQY count when we receive an error about a FQY for a user so that we can continue to login even with bogus email addresses. References #8588.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sat, 02 May 2009 23:01:32 +0000
parents 0c077a605b8a
children 25d802c76536
comparison
equal deleted inserted replaced
26866:0c077a605b8a 26867:bbb89d322034
610 } 610 }
611 611
612 static void 612 static void
613 update_contact_network(MsnSession *session, const char *passport, MsnNetwork network) 613 update_contact_network(MsnSession *session, const char *passport, MsnNetwork network)
614 { 614 {
615 MsnUser *user = msn_userlist_find_user(session->userlist, passport); 615 MsnUser *user;
616
617 if (network == MSN_NETWORK_UNKNOWN)
618 {
619 purple_debug_warning("msn",
620 "Ignoring user %s about which server knows nothing.\n",
621 passport);
622 session->adl_fqy--;
623 return;
624 }
625
616 /* TODO: Also figure out how to update membership lists */ 626 /* TODO: Also figure out how to update membership lists */
627 user = msn_userlist_find_user(session->userlist, passport);
617 if (user) { 628 if (user) {
618 xmlnode *adl_node; 629 xmlnode *adl_node;
619 char *payload; 630 char *payload;
620 int payload_len; 631 int payload_len;
621 632
912 cmdproc->last_cmd->payload_cb = adl_241_error_cmd_post; 923 cmdproc->last_cmd->payload_cb = adl_241_error_cmd_post;
913 cmd->payload_len = atoi(cmd->params[1]); 924 cmd->payload_len = atoi(cmd->params[1]);
914 } 925 }
915 926
916 static void 927 static void
917 fqy_error_parse(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, size_t len)
918 {
919 purple_debug_warning("msn", "FQY error %d: %s\n",
920 GPOINTER_TO_INT(cmd->payload_cbdata), payload);
921 }
922
923 static void
924 fqy_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error)
925 {
926 MsnCommand *cmd = cmdproc->last_cmd;
927
928 purple_debug_error("msn", "FQY error %d\n", error);
929 if (cmd->param_count > 1) {
930 cmd->payload_cb = fqy_error_parse;
931 cmd->payload_len = atoi(cmd->params[1]);
932 cmd->payload_cbdata = GINT_TO_POINTER(error);
933 }
934 }
935
936 static void
937 fqy_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, 928 fqy_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload,
938 size_t len) 929 size_t len)
939 { 930 {
940 MsnSession *session; 931 MsnSession *session;
941 xmlnode *ml, *d, *c; 932 xmlnode *ml, *d, *c;
960 local = xmlnode_get_attrib(c, "n"); 951 local = xmlnode_get_attrib(c, "n");
961 type = xmlnode_get_attrib(c, "t"); 952 type = xmlnode_get_attrib(c, "t");
962 953
963 passport = g_strdup_printf("%s@%s", local, domain); 954 passport = g_strdup_printf("%s@%s", local, domain);
964 955
965 if (type != NULL) 956 if (!g_ascii_isdigit(cmd->command[0]) && type != NULL)
966 network = (MsnNetwork)strtoul(type, NULL, 10); 957 network = (MsnNetwork)strtoul(type, NULL, 10);
967 else 958 else
968 network = MSN_NETWORK_PASSPORT; 959 network = MSN_NETWORK_UNKNOWN;
969 960
970 purple_debug_info("msn", "FQY response says %s is from network %d\n", 961 purple_debug_info("msn", "FQY response says %s is from network %d\n",
971 passport, network); 962 passport, network);
972 if (cmd->trans->data) 963 if (cmd->trans->data)
973 ((MsnFqyCb)cmd->trans->data)(session, passport, network); 964 ((MsnFqyCb)cmd->trans->data)(session, passport, network);
975 g_free(passport); 966 g_free(passport);
976 } 967 }
977 } 968 }
978 969
979 xmlnode_free(ml); 970 xmlnode_free(ml);
971 }
972
973 static void
974 fqy_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error)
975 {
976 MsnCommand *cmd = cmdproc->last_cmd;
977
978 purple_debug_warning("msn", "FQY error %d\n", error);
979 if (cmd->param_count > 1) {
980 cmd->payload_cb = fqy_cmd_post;
981 cmd->payload_len = atoi(cmd->params[1]);
982 cmd->payload_cbdata = GINT_TO_POINTER(error);
983 }
984 #if 0
985 /* If the server didn't send us a corresponding email address for this
986 FQY error, it's probably going to disconnect us. So it isn't necessary
987 to tell the handler about it. */
988 else if (trans->data)
989 ((MsnFqyCb)trans->data)(session, NULL, MSN_NETWORK_UNKNOWN); */
990 #endif
980 } 991 }
981 992
982 static void 993 static void
983 fqy_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) 994 fqy_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)
984 { 995 {