⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 notification.c

📁 Linux下的多协议即时通讯程序源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
	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 + -