📄 notification.c
字号:
account = session->account; gc = purple_account_get_connection(account); params = g_strsplit(trans->params, " ", 0); list = params[0]; passport = params[1]; if (!strcmp(list, "FL")) msg = g_strdup_printf(_("Unable to add user on %s (%s)"), purple_account_get_username(account), purple_account_get_protocol_name(account)); else if (!strcmp(list, "BL")) msg = g_strdup_printf(_("Unable to block user on %s (%s)"), purple_account_get_username(account), purple_account_get_protocol_name(account)); else if (!strcmp(list, "AL")) msg = g_strdup_printf(_("Unable to permit user on %s (%s)"), purple_account_get_username(account), purple_account_get_protocol_name(account)); if (!strcmp(list, "FL")) { if (error == 210) { reason = g_strdup_printf(_("%s could not be added because " "your buddy list is full."), passport); } } if (reason == NULL) { if (error == 208) { reason = g_strdup_printf(_("%s is not a valid passport account."), passport); } else if (error == 500) { reason = g_strdup(_("Service Temporarily Unavailable.")); } else { reason = g_strdup(_("Unknown error.")); } } if (msg != NULL) { purple_notify_error(gc, NULL, msg, reason); g_free(msg); } if (!strcmp(list, "FL")) { PurpleBuddy *buddy; buddy = purple_find_buddy(account, passport); if (buddy != NULL) purple_blist_remove_buddy(buddy); } g_free(reason); g_strfreev(params);}static voidadg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSession *session; gint group_id; const char *group_name; session = cmdproc->session; group_id = atoi(cmd->params[3]); group_name = purple_url_decode(cmd->params[2]); msn_group_new(session->userlist, group_id, group_name); /* There is a user that must me moved to this group */ if (cmd->trans->data) { /* msn_userlist_move_buddy(); */ MsnUserList *userlist = cmdproc->session->userlist; MsnMoveBuddy *data = cmd->trans->data; if (data->old_group_name != NULL) { msn_userlist_rem_buddy(userlist, data->who, MSN_LIST_FL, data->old_group_name); g_free(data->old_group_name); } msn_userlist_add_buddy(userlist, data->who, MSN_LIST_FL, group_name); g_free(data->who); }}static voidqng_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSession *session; static int count = 0; const char *passport; PurpleAccount *account; session = cmdproc->session; account = session->account; if (session->passport_info.file == NULL) return; passport = purple_normalize(account, purple_account_get_username(account)); if ((strstr(passport, "@hotmail.") != NULL) || (strstr(passport, "@msn.com") != NULL)) return; if (count++ < 26) return; count = 0; msn_cmdproc_send(cmdproc, "URL", "%s", "INBOX");}static voidfln_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSlpLink *slplink; MsnUser *user; user = msn_userlist_find_user(cmdproc->session->userlist, cmd->params[0]); user->status = "offline"; msn_user_update(user); slplink = msn_session_find_slplink(cmdproc->session, cmd->params[0]); if (slplink != NULL) msn_slplink_destroy(slplink);}static voidiln_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSession *session; PurpleAccount *account; PurpleConnection *gc; MsnUser *user; MsnObject *msnobj; const char *state, *passport, *friendly; session = cmdproc->session; account = session->account; gc = purple_account_get_connection(account); state = cmd->params[1]; passport = cmd->params[2]; friendly = purple_url_decode(cmd->params[3]); user = msn_userlist_find_user(session->userlist, passport); serv_got_alias(gc, passport, friendly); msn_user_set_friendly_name(user, friendly); if (session->protocol_ver >= 9 && cmd->param_count == 6) { msnobj = msn_object_new_from_string(purple_url_decode(cmd->params[5])); msn_user_set_object(user, msnobj); } msn_user_set_state(user, state); msn_user_update(user);}static voidipg_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, size_t len){#if 0 purple_debug_misc("msn", "Incoming Page: {%s}\n", payload);#endif}static voidipg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ cmdproc->servconn->payload_len = atoi(cmd->params[0]); cmdproc->last_cmd->payload_cb = ipg_cmd_post;}static voidnln_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSession *session; PurpleAccount *account; PurpleConnection *gc; MsnUser *user; MsnObject *msnobj; int clientid; const char *state, *passport, *friendly, *old_friendly; session = cmdproc->session; account = session->account; gc = purple_account_get_connection(account); state = cmd->params[0]; passport = cmd->params[1]; friendly = purple_url_decode(cmd->params[2]); user = msn_userlist_find_user(session->userlist, passport); old_friendly = msn_user_get_friendly_name(user); if (!old_friendly || (old_friendly && strcmp(old_friendly, friendly))) { serv_got_alias(gc, passport, friendly); msn_user_set_friendly_name(user, friendly); } if (session->protocol_ver >= 9) { if (cmd->param_count == 5) { msnobj = msn_object_new_from_string(purple_url_decode(cmd->params[4])); msn_user_set_object(user, msnobj); } else { msn_user_set_object(user, NULL); } } clientid = atoi(cmd->params[3]); user->mobile = (clientid & MSN_CLIENT_CAP_MSNMOBILE); msn_user_set_state(user, state); msn_user_update(user);}#if 0static voidchg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ char *state = cmd->params[1]; int state_id = 0; if (!strcmp(state, "NLN")) state_id = MSN_ONLINE; else if (!strcmp(state, "BSY")) state_id = MSN_BUSY; else if (!strcmp(state, "IDL")) state_id = MSN_IDLE; else if (!strcmp(state, "BRB")) state_id = MSN_BRB; else if (!strcmp(state, "AWY")) state_id = MSN_AWAY; else if (!strcmp(state, "PHN")) state_id = MSN_PHONE; else if (!strcmp(state, "LUN")) state_id = MSN_LUNCH; else if (!strcmp(state, "HDN")) state_id = MSN_HIDDEN; cmdproc->session->state = state_id;}#endifstatic voidnot_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, size_t len){#if 0 MSN_SET_PARAMS("NOT %d\r\n%s", cmdproc->servconn->payload, payload); purple_debug_misc("msn", "Notification: {%s}\n", payload);#endif}static voidnot_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ cmdproc->servconn->payload_len = atoi(cmd->params[0]); cmdproc->last_cmd->payload_cb = not_cmd_post;}static voidrea_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ /* TODO: This might be for us too */ MsnSession *session; PurpleConnection *gc; const char *friendly; session = cmdproc->session; gc = session->account->gc; friendly = purple_url_decode(cmd->params[3]); purple_connection_set_display_name(gc, friendly);}static voidprp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSession *session = cmdproc->session; const char *type, *value; g_return_if_fail(cmd->param_count >= 3); type = cmd->params[2]; if (cmd->param_count == 4) { value = cmd->params[3]; if (!strcmp(type, "PHH")) msn_user_set_home_phone(session->user, purple_url_decode(value)); else if (!strcmp(type, "PHW")) msn_user_set_work_phone(session->user, purple_url_decode(value)); else if (!strcmp(type, "PHM")) msn_user_set_mobile_phone(session->user, purple_url_decode(value)); } else { if (!strcmp(type, "PHH")) msn_user_set_home_phone(session->user, NULL); else if (!strcmp(type, "PHW")) msn_user_set_work_phone(session->user, NULL); else if (!strcmp(type, "PHM")) msn_user_set_mobile_phone(session->user, NULL); }}static voidreg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSession *session; int group_id; const char *group_name; session = cmdproc->session; group_id = atoi(cmd->params[2]); group_name = purple_url_decode(cmd->params[3]); msn_userlist_rename_group_id(session->userlist, group_id, group_name);}static voidreg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error){ int group_id; char **params; params = g_strsplit(trans->params, " ", 0); group_id = atoi(params[0]); group_error_helper(cmdproc->session, _("Unable to rename group"), group_id, error); g_strfreev(params);}static voidrem_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSession *session; MsnUser *user; const char *list; const char *passport; MsnListId list_id; int group_id; session = cmdproc->session; list = cmd->params[1]; passport = cmd->params[3]; user = msn_userlist_find_user(session->userlist, passport); g_return_if_fail(user != NULL); list_id = msn_get_list_id(list); if (cmd->param_count == 5) group_id = atoi(cmd->params[4]); else group_id = -1; msn_got_rem_user(session, user, list_id, group_id); msn_user_update(user);}static voidrmg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSession *session; int group_id; session = cmdproc->session; group_id = atoi(cmd->params[2]); msn_userlist_remove_group_id(session->userlist, group_id);}static voidrmg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error){ int group_id; char **params; params = g_strsplit(trans->params, " ", 0); group_id = atoi(params[0]); group_error_helper(cmdproc->session, _("Unable to delete group"), group_id, error); g_strfreev(params);}static voidsyn_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSession *session; MsnSync *sync; int total_users; session = cmdproc->session; if (cmd->param_count == 2) { /* * This can happen if we sent a SYN with an up-to-date * buddy list revision, but we send 0 to get a full list. * So, error out. */ msn_session_set_error(cmdproc->session, MSN_ERROR_BAD_BLIST, NULL); return; } total_users = atoi(cmd->params[2]); sync = msn_sync_new(session); sync->total_users = total_users; sync->old_cbs_table = cmdproc->cbs_table; session->sync = sync; cmdproc->cbs_table = sync->cbs_table;}/************************************************************************** * Misc commands **************************************************************************/static voidurl_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){ MsnSession *session; PurpleAccount *account; const char *rru; const char *url; PurpleCipher *cipher; PurpleCipherContext *context; guchar digest[16]; FILE *fd; char *buf; char buf2[3]; char sendbuf[64]; int i; session = cmdproc->session; account = session->account; rru = cmd->params[1]; url = cmd->params[2]; buf = g_strdup_printf("%s%lu%s", session->passport_info.mspauth ? session->passport_info.mspauth : "BOGUS", time(NULL) - session->passport_info.sl, purple_connection_get_password(account->gc)); cipher = purple_ciphers_find_cipher("md5"); context = purple_cipher_context_new(cipher, NULL); purple_cipher_context_append(context, (const guchar *)buf, strlen(buf)); purple_cipher_context_digest(context, sizeof(digest), digest, NULL); purple_cipher_context_destroy(context);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -