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

📄 notification.c

📁 msn message protocol stack
💻 C
📖 第 1 页 / 共 3 页
字号:
		g_free(data->who);	}}static voidfln_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){	GaimConnection *gc;	gc = cmdproc->session->account->gc;	serv_got_update(gc, cmd->params[0], FALSE, 0, 0, 0, 0);}static voidiln_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){	MsnSession *session;	GaimConnection *gc;	MsnUser *user;	MsnObject *msnobj;	int status = 0;	int idle = 0;	const char *state, *passport, *friendly;	GaimBuddy *b;	session = cmdproc->session;	gc = session->account->gc;	state    = cmd->params[1];	passport = cmd->params[2];	friendly = gaim_url_decode(cmd->params[3]);	user = msn_userlist_find_user(session->userlist, passport);	/* serv_got_nick(gc, passport, friendly); */	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(gaim_url_decode(cmd->params[5]));		msn_user_set_object(user, msnobj);	}	if ((b = gaim_find_buddy(gc->account, passport)) != NULL)		status |= ((((b->uc) >> 1) & 0xF0) << 1);	if (!g_ascii_strcasecmp(state, "BSY"))		status |= UC_UNAVAILABLE | (MSN_BUSY << 1);	else if (!g_ascii_strcasecmp(state, "IDL"))	{		status |= UC_UNAVAILABLE | (MSN_IDLE << 1);		idle = -1;	}	else if (!g_ascii_strcasecmp(state, "BRB"))		status |= UC_UNAVAILABLE | (MSN_BRB << 1);	else if (!g_ascii_strcasecmp(state, "AWY"))		status |= UC_UNAVAILABLE | (MSN_AWAY << 1);	else if (!g_ascii_strcasecmp(state, "PHN"))		status |= UC_UNAVAILABLE | (MSN_PHONE << 1);	else if (!g_ascii_strcasecmp(state, "LUN"))		status |= UC_UNAVAILABLE | (MSN_LUNCH << 1);	serv_got_update(gc, passport, TRUE, 0, 0, idle, status);}static voidipg_cmd_post(MsnCmdProc *cmdproc, MsnCommand *cmd, char *payload, size_t len){#if 0	gaim_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;	GaimConnection *gc;	MsnUser *user;	MsnObject *msnobj;	const char *state;	const char *passport;	const char *friendly;	int status = 0;	int idle = 0;	session = cmdproc->session;	gc = session->account->gc;	state    = cmd->params[0];	passport = cmd->params[1];	friendly = gaim_url_decode(cmd->params[2]);	user = msn_userlist_find_user(session->userlist, passport);	/* serv_got_nick(gc, passport, 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(gaim_url_decode(cmd->params[4]));			msn_user_set_object(user, msnobj);		}		else		{			msn_user_set_object(user, NULL);		}	}	if (!g_ascii_strcasecmp(state, "BSY"))		status |= UC_UNAVAILABLE | (MSN_BUSY << 1);	else if (!g_ascii_strcasecmp(state, "IDL"))	{		status |= UC_UNAVAILABLE | (MSN_IDLE << 1);		idle = -1;	}	else if (!g_ascii_strcasecmp(state, "BRB"))		status |= UC_UNAVAILABLE | (MSN_BRB << 1);	else if (!g_ascii_strcasecmp(state, "AWY"))		status |= UC_UNAVAILABLE | (MSN_AWAY << 1);	else if (!g_ascii_strcasecmp(state, "PHN"))		status |= UC_UNAVAILABLE | (MSN_PHONE << 1);	else if (!g_ascii_strcasecmp(state, "LUN"))		status |= UC_UNAVAILABLE | (MSN_LUNCH << 1);	serv_got_update(gc, passport, TRUE, 0, 0, idle, status);}static 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;}static 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);	gaim_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 with us too */	MsnSession *session;	GaimConnection *gc;	const char *friendly;	session = cmdproc->session;	gc = session->account->gc;	friendly = gaim_url_decode(cmd->params[3]);	gaim_connection_set_display_name(gc, friendly);}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 = gaim_url_decode(cmd->params[3]);	msn_userlist_rename_group_id(session->userlist, group_id, group_name);}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);}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 voidsyn_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){	MsnSession *session;	int total_users;	session = cmdproc->session;	total_users  = atoi(cmd->params[2]);	if (total_users == 0)	{		msn_session_finish_login(session);	}	else	{		/* syn_table */		MsnSync *sync;		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;	GaimAccount *account;	const char *rru;	const char *url;	md5_state_t st;	md5_byte_t di[16];	FILE *fd;	char buf[2048];	char buf2[3];	char sendbuf[64];	int i;	session = cmdproc->session;	account = session->account;	rru = cmd->params[1];	url = cmd->params[2];	g_snprintf(buf, sizeof(buf), "%s%lu%s",			   session->passport_info.mspauth,			   time(NULL) - session->passport_info.sl,			   gaim_account_get_password(account));	md5_init(&st);	md5_append(&st, (const md5_byte_t *)buf, strlen(buf));	md5_finish(&st, di);	memset(sendbuf, 0, sizeof(sendbuf));	for (i = 0; i < 16; i++)	{		g_snprintf(buf2, sizeof(buf2), "%02x", di[i]);		strcat(sendbuf, buf2);	}	if (session->passport_info.file != NULL)	{		unlink(session->passport_info.file);		g_free(session->passport_info.file);	}	if ((fd = gaim_mkstemp(&session->passport_info.file)) == NULL)	{		gaim_debug(GAIM_DEBUG_ERROR, "msn",				   "Error opening temp passport file: %s\n",				   strerror(errno));	}	else	{		fputs("<html>\n"			  "<head>\n"			  "<noscript>\n"			  "<meta http-equiv=\"Refresh\" content=\"0; "			  "url=http://www.hotmail.com\">\n"			  "</noscript>\n"			  "</head>\n\n",			  fd);		fprintf(fd, "<body onload=\"document.pform.submit(); \">\n");		fprintf(fd, "<form name=\"pform\" action=\"%s\" method=\"POST\">\n\n",				url);		fprintf(fd, "<input type=\"hidden\" name=\"mode\" value=\"ttl\">\n");		fprintf(fd, "<input type=\"hidden\" name=\"login\" value=\"%s\">\n",				gaim_account_get_username(account));		fprintf(fd, "<input type=\"hidden\" name=\"username\" value=\"%s\">\n",				gaim_account_get_username(account));		fprintf(fd, "<input type=\"hidden\" name=\"sid\" value=\"%s\">\n",				session->passport_info.sid);		fprintf(fd, "<input type=\"hidden\" name=\"kv\" value=\"%s\">\n",				session->passport_info.kv);		fprintf(fd, "<input type=\"hidden\" name=\"id\" value=\"2\">\n");		fprintf(fd, "<input type=\"hidden\" name=\"sl\" value=\"%ld\">\n",				time(NULL) - session->passport_info.sl);		fprintf(fd, "<input type=\"hidden\" name=\"rru\" value=\"%s\">\n",				rru);		fprintf(fd, "<input type=\"hidden\" name=\"auth\" value=\"%s\">\n",				session->passport_info.mspauth);		fprintf(fd, "<input type=\"hidden\" name=\"creds\" value=\"%s\">\n",				sendbuf); /* TODO Digest me (huh? -- ChipX86) */		fprintf(fd, "<input type=\"hidden\" name=\"svc\" value=\"mail\">\n");		fprintf(fd, "<input type=\"hidden\" name=\"js\" value=\"yes\">\n");		fprintf(fd, "</form></body>\n");		fprintf(fd, "</html>\n");		if (fclose(fd))		{			gaim_debug_error("msn",							 "Error closing temp passport file: %s\n",							 strerror(errno));			unlink(session->passport_info.file);			g_free(session->passport_info.file);		}		else		{			/*			 * Renaming file with .html extension, so that the			 * win32 open_url will work.			 */			char *tmp;			if ((tmp =				 g_strdup_printf("%s.html", session->passport_info.file))				!= NULL)			{				if (rename(session->passport_info.file, tmp) == 0)				{					g_free(session->passport_info.file);					session->passport_info.file = tmp;				}				else					g_free(tmp);			}		}	}}/************************************************************************** * Switchboards **************************************************************************/static voidrng_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd){	MsnSession *session;	MsnSwitchBoard *swboard;	const char *session_id;	char *host;	int port;	session = cmdproc->session;	session_id = cmd->params[0];	msn_parse_socket(cmd->params[1], &host, &port);	if (session->http_method)		port = 80;	swboard = msn_switchboard_new(session);	msn_switchboard_set_invited(swboard, TRUE);	msn_switchboard_set_session_id(swboard, cmd->params[0]);	msn_switchboard_set_auth_key(swboard, cmd->params[3]);	swboard->im_user = g_strdup(cmd->params[4]);	/* msn_switchboard_add_user(swboard, cmd->params[4]); */	msn_switchboard_connect(swboard, host, port);	g_free(host);}static voidxfr_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -