亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jabber.c

?? Linux下的多協議即時通訊程序源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
		if(purple_ssl_is_supported()) {			js->gsc = purple_ssl_connect(account, server,					purple_account_get_int(account, "port", 5222),					jabber_login_callback_ssl, jabber_ssl_connect_failure, gc);		} else {			purple_connection_error(gc, _("SSL support unavailable"));		}	}	if(!js->gsc) {		if (connect_server[0]) {			jabber_login_connect(js, js->user->domain, server,			                     purple_account_get_int(account,			                                          "port", 5222));		} else {			js->srv_query_data = purple_srv_resolve("xmpp-client",			                                      "tcp",			                                      js->user->domain,			                                      srv_resolved_cb,			                                      js);		}	}}void jabber_close(PurpleConnection *gc){	JabberStream *js = gc->proto_data;	/* Don't perform any actions on the ssl connection	 * if we were forcibly disconnected because it will crash	 * on some SSL backends.	 */	if (!gc->disconnect_timeout)		jabber_send_raw(js, "</stream:stream>", -1);	if (js->srv_query_data)		purple_srv_cancel(js->srv_query_data);	if(js->gsc) {#ifdef HAVE_OPENSSL		if (!gc->disconnect_timeout)#endif			purple_ssl_close(js->gsc);	} else if (js->fd > 0) {		if(js->gc->inpa)			purple_input_remove(js->gc->inpa);		close(js->fd);	}	jabber_buddy_remove_all_pending_buddy_info_requests(js);	if(js->iq_callbacks)		g_hash_table_destroy(js->iq_callbacks);	if(js->disco_callbacks)		g_hash_table_destroy(js->disco_callbacks);	if(js->buddies)		g_hash_table_destroy(js->buddies);	if(js->chats)		g_hash_table_destroy(js->chats);	while(js->chat_servers) {		g_free(js->chat_servers->data);		js->chat_servers = g_list_delete_link(js->chat_servers, js->chat_servers);	}	while(js->user_directories) {		g_free(js->user_directories->data);		js->user_directories = g_list_delete_link(js->user_directories, js->user_directories);	}	if(js->stream_id)		g_free(js->stream_id);	if(js->user)		jabber_id_free(js->user);	if(js->avatar_hash)		g_free(js->avatar_hash);	purple_circ_buffer_destroy(js->write_buffer);	if(js->writeh)		purple_input_remove(js->writeh);#ifdef HAVE_CYRUS_SASL	if(js->sasl)		sasl_dispose(&js->sasl);	if(js->sasl_mechs)		g_string_free(js->sasl_mechs, TRUE);	if(js->sasl_cb)		g_free(js->sasl_cb);	if(js->serverFQDN)		g_free(js->serverFQDN);#endif	g_free(js->server_name);	g_free(js->gmail_last_time);	g_free(js->gmail_last_tid);	g_free(js);	gc->proto_data = NULL;}void jabber_stream_set_state(JabberStream *js, JabberStreamState state){	PurpleStoredImage *img;	js->state = state;	switch(state) {		case JABBER_STREAM_OFFLINE:			break;		case JABBER_STREAM_CONNECTING:			purple_connection_update_progress(js->gc, _("Connecting"), 1,					JABBER_CONNECT_STEPS);			break;		case JABBER_STREAM_INITIALIZING:			purple_connection_update_progress(js->gc, _("Initializing Stream"),					js->gsc ? 5 : 2, JABBER_CONNECT_STEPS);			jabber_stream_init(js);			break;		case JABBER_STREAM_AUTHENTICATING:			purple_connection_update_progress(js->gc, _("Authenticating"),					js->gsc ? 6 : 3, JABBER_CONNECT_STEPS);			if(js->protocol_version == JABBER_PROTO_0_9 && js->registration) {				jabber_register_start(js);			} else if(js->auth_type == JABBER_AUTH_IQ_AUTH) {				jabber_auth_start_old(js);			}			break;		case JABBER_STREAM_REINITIALIZING:			purple_connection_update_progress(js->gc, _("Re-initializing Stream"),					(js->gsc ? 7 : 4), JABBER_CONNECT_STEPS);			/* The stream will be reinitialized later, in jabber_recv_cb_ssl() */			js->reinit = TRUE;			break;		case JABBER_STREAM_CONNECTED:			/* lets make sure our buddy icon is up to date			 * before we go letting people know we're here */			img = purple_buddy_icons_find_account_icon(js->gc->account);			if(NULL != img) {				jabber_set_buddy_icon(js->gc, img);				purple_imgstore_unref(img);			}			/* now we can alert the core that we're ready to send status */			purple_connection_set_state(js->gc, PURPLE_CONNECTED);			jabber_disco_items_server(js);			break;	}}char *jabber_get_next_id(JabberStream *js){	return g_strdup_printf("purple%x", js->next_id++);}void jabber_idle_set(PurpleConnection *gc, int idle){	JabberStream *js = gc->proto_data;	js->idle = idle ? time(NULL) - idle : idle;}const char *jabber_list_icon(PurpleAccount *a, PurpleBuddy *b){	return "jabber";}const char* jabber_list_emblem(PurpleBuddy *b){	JabberStream *js;	JabberBuddy *jb = NULL;	if(!b->account->gc)		return NULL;	js = b->account->gc->proto_data;	if(js)		jb = jabber_buddy_find(js, b->name, FALSE);	if(!PURPLE_BUDDY_IS_ONLINE(b)) {		if(jb && (jb->subscription & JABBER_SUB_PENDING ||					!(jb->subscription & JABBER_SUB_TO)))			return "not-authorized";	}	return NULL;}char *jabber_status_text(PurpleBuddy *b){	JabberBuddy *jb = jabber_buddy_find(b->account->gc->proto_data, b->name,			FALSE);	char *ret = NULL;	if(jb && !PURPLE_BUDDY_IS_ONLINE(b) && (jb->subscription & JABBER_SUB_PENDING || !(jb->subscription & JABBER_SUB_TO))) {		ret = g_strdup(_("Not Authorized"));	} else if(jb && !PURPLE_BUDDY_IS_ONLINE(b) && jb->error_msg) {		ret = g_strdup(jb->error_msg);	} else {		char *stripped;		if(!(stripped = purple_markup_strip_html(jabber_buddy_get_status_msg(jb)))) {			PurpleStatus *status = purple_presence_get_active_status(purple_buddy_get_presence(b));			if(!purple_status_is_available(status))				stripped = g_strdup(purple_status_get_name(status));		}		if(stripped) {			ret = g_markup_escape_text(stripped, -1);			g_free(stripped);		}	}	return ret;}void jabber_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full){	JabberBuddy *jb;	g_return_if_fail(b != NULL);	g_return_if_fail(b->account != NULL);	g_return_if_fail(b->account->gc != NULL);	g_return_if_fail(b->account->gc->proto_data != NULL);	jb = jabber_buddy_find(b->account->gc->proto_data, b->name,			FALSE);	if(jb) {		JabberBuddyResource *jbr = NULL;		const char *sub;		GList *l;		if (full) {			if(jb->subscription & JABBER_SUB_FROM) {				if(jb->subscription & JABBER_SUB_TO)					sub = _("Both");				else if(jb->subscription & JABBER_SUB_PENDING)					sub = _("From (To pending)");				else					sub = _("From");			} else {				if(jb->subscription & JABBER_SUB_TO)					sub = _("To");				else if(jb->subscription & JABBER_SUB_PENDING)					sub = _("None (To pending)");				else					sub = _("None");			}						purple_notify_user_info_add_pair(user_info, _("Subscription"), sub);		}		for(l=jb->resources; l; l = l->next) {			char *text = NULL;			char *res = NULL;			char *label, *value;			const char *state;			jbr = l->data;			if(jbr->status) {				char *tmp;				text = purple_strreplace(jbr->status, "\n", "<br />\n");				tmp = purple_markup_strip_html(text);				g_free(text);				text = g_markup_escape_text(tmp, -1);				g_free(tmp);			}			if(jbr->name)				res = g_strdup_printf(" (%s)", jbr->name);			state = jabber_buddy_state_get_name(jbr->state);			if (text != NULL && !purple_utf8_strcasecmp(state, text)) {				g_free(text);				text = NULL;			}			label = g_strdup_printf("%s%s",							_("Status"), (res ? res : ""));			value = g_strdup_printf("%s%s%s",							state,							(text ? ": " : ""),							(text ? text : ""));			purple_notify_user_info_add_pair(user_info, label, value);			g_free(label);			g_free(value);			g_free(text);			g_free(res);		}		if(!PURPLE_BUDDY_IS_ONLINE(b) && jb->error_msg) {			purple_notify_user_info_add_pair(user_info, _("Error"), jb->error_msg);		}	}}GList *jabber_status_types(PurpleAccount *account){	PurpleStatusType *type;	GList *types = NULL;	PurpleValue *priority_value;	priority_value = purple_value_new(PURPLE_TYPE_INT);	purple_value_set_int(priority_value, 1);	type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE,			jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_ONLINE),			NULL, TRUE, TRUE, FALSE,			"priority", _("Priority"), priority_value,			"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),			NULL);	types = g_list_append(types, type);	priority_value = purple_value_new(PURPLE_TYPE_INT);	purple_value_set_int(priority_value, 1);	type = purple_status_type_new_with_attrs(PURPLE_STATUS_AVAILABLE,			jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_CHAT),			_("Chatty"), TRUE, TRUE, FALSE,			"priority", _("Priority"), priority_value,			"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),			NULL);	types = g_list_append(types, type);	priority_value = purple_value_new(PURPLE_TYPE_INT);	purple_value_set_int(priority_value, 0);	type = purple_status_type_new_with_attrs(PURPLE_STATUS_AWAY,			jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_AWAY),			NULL, TRUE, TRUE, FALSE,			"priority", _("Priority"), priority_value,			"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),			NULL);	types = g_list_append(types, type);	priority_value = purple_value_new(PURPLE_TYPE_INT);	purple_value_set_int(priority_value, 0);	type = purple_status_type_new_with_attrs(PURPLE_STATUS_EXTENDED_AWAY,			jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_XA),			NULL, TRUE, TRUE, FALSE,			"priority", _("Priority"), priority_value,			"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),			NULL);	types = g_list_append(types, type);	priority_value = purple_value_new(PURPLE_TYPE_INT);	purple_value_set_int(priority_value, 0);	type = purple_status_type_new_with_attrs(PURPLE_STATUS_UNAVAILABLE,			jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_DND),			_("Do Not Disturb"), TRUE, TRUE, FALSE,			"priority", _("Priority"), priority_value,			"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),			NULL);	types = g_list_append(types, type);	/*	if(js->protocol_version == JABBER_PROTO_0_9)		m = g_list_append(m, _("Invisible"));	*/	type = purple_status_type_new_with_attrs(PURPLE_STATUS_OFFLINE,			jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_UNAVAILABLE),			NULL, FALSE, TRUE, FALSE,			"message", _("Message"), purple_value_new(PURPLE_TYPE_STRING),			NULL);	types = g_list_append(types, type);	return types;}static voidjabber_password_change_result_cb(JabberStream *js, xmlnode *packet,		gpointer data){	const char *type;	type = xmlnode_get_attrib(packet, "type");	if(type && !strcmp(type, "result")) {		purple_notify_info(js->gc, _("Password Changed"), _("Password Changed"),				_("Your password has been changed."));	} else {		char *msg = jabber_parse_error(js, packet);		purple_notify_error(js->gc, _("Error changing password"),				_("Error changing password"), msg);		g_free(msg);	}}static void jabber_password_change_cb(JabberStream *js,		PurpleRequestFields *fields){	const char *p1, *p2;	JabberIq *iq;	xmlnode *query, *y;	p1 = purple_request_fields_get_string(fields, "password1");	p2 = purple_request_fields_get_string(fields, "password2");	if(strcmp(p1, p2)) {		purple_notify_error(js->gc, NULL, _("New passwords do not match."), NULL);		return;	}	iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:register");	xmlnode_set_attrib(iq->node, "to", js->user->domain);	query = xmlnode_get_child(iq->node, "query");	y = xmlnode_new_child(query, "username");	xmlnode_insert_data(y, js->user->node, -1);	y = xmlnode_new_child(query, "password");	xmlnode_insert_data(y, p1, -1);	jabber_iq_set_callback(iq, jabber_password_change_result_cb, NULL);	jabber_iq_send(iq);	purple_account_set_password(js->gc->account, p1);}static void jabber_password_change(PurplePluginAction *action){	PurpleConnection *gc = (PurpleConnection *) action->context;	JabberStream *js = gc->proto_data;	PurpleRequestFields *fields;	PurpleRequestFieldGroup *group;	PurpleRequestField *field;	fields = purple_request_fields_new();	group = purple_request_field_group_new(NULL);	purple_request_fields_add_group(fields, group);	field = purple_request_field_string_new("password1", _("Password"),			"", FALSE);	purple_request_field_string_set_masked(field, TRUE);	purple_request_field_group_add_field(group, field);	field = purple_request_field_string_new("password2", _("Password (again)"),			"", FALSE);	purple_request_field_string_set_masked(field, TRUE);	purple_request_field_group_add_field(group, field);	purple_request_fields(js->gc, _("Change XMPP Password"),			_("Change XMPP Password"), _("Please enter your new password"),			fields, _("OK"), G_CALLBACK(jabber_password_change_cb),			_("Cancel"), NULL,			purple_connection_get_account(gc), NULL, NULL,			  			js);}GList *jabber_actions(PurplePlugin *plugin, gpointer context){	GList *m = NULL;	PurplePluginAction *act;	act = purple_plugin_action_new(_("Set User Info..."),	                             jabber_setup_set_info);	m = g_list_append(m, act);	/* if (js->protocol_options & CHANGE_PASSWORD) { */		act = purple_plugin_action_new(_("Change Password..."),		                             jabber_password_change);		m = g_list_append(m, act);	/* } */	act = purple_plugin_action_new(_("Search for Users..."),	                             jabber_user_search_begin);	m = g_list_append(m, act);	return m;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精彩视频在线观看| www.在线成人| 色综合久久综合网| 日韩一二三区视频| 亚洲视频一二三区| 久久不见久久见免费视频7| 91在线观看美女| 国产三级欧美三级日产三级99| 一卡二卡三卡日韩欧美| 国产成人精品三级麻豆| 91精品国产乱码| 一区二区三区四区不卡视频| 国产精品一级二级三级| 日韩一区二区在线看| 一级精品视频在线观看宜春院| 国产成人99久久亚洲综合精品| 欧美一区二区三区系列电影| 亚洲午夜久久久久| 97久久久精品综合88久久| 国产午夜一区二区三区| 激情五月婷婷综合网| 3d成人h动漫网站入口| 一区二区三区在线观看国产| 粉嫩av一区二区三区| 久久综合九色欧美综合狠狠| 国产精品一品视频| 欧美不卡在线视频| 男女男精品视频网| 日韩视频在线一区二区| 亚洲成国产人片在线观看| 91精品91久久久中77777| 中文字幕日韩欧美一区二区三区| 国产精品一区专区| 久久久久久久久久久久久夜| 国产在线精品国自产拍免费| 欧美成人免费网站| 激情综合网激情| 欧美精品一区二区三区在线| 极品美女销魂一区二区三区| 久久综合色鬼综合色| 国产一区二区三区精品视频| 精品国产一区二区亚洲人成毛片| 久久精品国产亚洲高清剧情介绍 | 国产精品久久久久久久久晋中 | 精品日产卡一卡二卡麻豆| 奇米影视一区二区三区| 国产精品久久久久久亚洲毛片| 国产美女一区二区三区| 国产色产综合色产在线视频| av资源网一区| 亚洲成人资源在线| 欧美mv日韩mv| 成人在线视频首页| 一区二区三区鲁丝不卡| 欧美日韩成人综合在线一区二区| 日本欧洲一区二区| 国产网站一区二区三区| 91尤物视频在线观看| 午夜精品久久久久久久久| 日韩一级免费观看| 成人av资源在线| 一区二区三区产品免费精品久久75| 欧美日韩一区不卡| 国产乱人伦精品一区二区在线观看| 国产欧美视频一区二区三区| 色婷婷亚洲一区二区三区| 强制捆绑调教一区二区| 国产精品五月天| 欧美色涩在线第一页| 国产曰批免费观看久久久| **网站欧美大片在线观看| 在线91免费看| 成人av资源下载| 裸体健美xxxx欧美裸体表演| 国产精品三级av| 日韩一区二区三区视频在线| 成人一区二区三区在线观看| 偷拍自拍另类欧美| 国产精品美女久久久久久| 欧美高清视频不卡网| 成人av免费观看| 美腿丝袜在线亚洲一区| 亚洲精品国产a久久久久久| 日韩一区和二区| 一本到三区不卡视频| 韩国精品主播一区二区在线观看| 日韩理论片在线| 久久香蕉国产线看观看99| 欧美无砖专区一中文字| 国产成人精品一区二区三区四区| 天堂一区二区在线| 亚洲一区中文在线| 中文字幕乱码日本亚洲一区二区| 欧美日韩国产另类一区| 91在线国产观看| 成人性生交大片免费看中文| 日本不卡一二三| 亚洲国产精品一区二区www| 青青草精品视频| 午夜精品免费在线| 一区二区三区国产精华| 国产精品第一页第二页第三页| 日韩欧美123| 51精品秘密在线观看| 欧美熟乱第一页| 91高清视频免费看| 91黄色免费看| 91原创在线视频| www.亚洲激情.com| 成人av网站大全| 国v精品久久久网| 国产99久久久国产精品免费看 | 亚洲精品欧美激情| 亚洲欧美日韩国产综合在线| 国产日韩欧美麻豆| 日本一区二区三区四区在线视频| 精品国产乱码久久久久久闺蜜| 欧美区在线观看| 91精品国产麻豆| 欧美一区二区三区系列电影| 51精品秘密在线观看| 欧美一区二区三区免费视频| 欧美日韩国产首页| 制服丝袜中文字幕亚洲| 欧美另类高清zo欧美| 制服丝袜亚洲播放| 亚洲精品一区二区在线观看| 精品99999| 国产精品无遮挡| 一区二区三区色| 天天影视色香欲综合网老头| 日本人妖一区二区| 国产精品66部| 91亚洲精品一区二区乱码| 日本电影欧美片| 中文字幕欧美区| 一区二区在线观看不卡| 亚洲国产成人av网| 久久精品av麻豆的观看方式| 久久97超碰国产精品超碰| 国产宾馆实践打屁股91| 91在线云播放| 日韩午夜av电影| 国产精品免费久久久久| 亚洲一区在线观看免费观看电影高清 | 欧美美女激情18p| 久久先锋影音av| 亚洲人成人一区二区在线观看| 亚洲一二三区不卡| 国产一区啦啦啦在线观看| 99精品国产视频| 日韩精品一区二| 亚洲欧美国产毛片在线| 美腿丝袜亚洲色图| 色婷婷久久综合| 久久蜜桃香蕉精品一区二区三区| 亚洲欧洲三级电影| 捆绑紧缚一区二区三区视频| 成人在线一区二区三区| 6080国产精品一区二区| 国产精品天干天干在观线| 日韩精品乱码免费| av资源网一区| 久久久精品国产免大香伊| 亚洲综合一区在线| 成人免费视频caoporn| 欧美日韩精品欧美日韩精品一综合| 久久网站热最新地址| 无码av中文一区二区三区桃花岛| 国产91精品入口| 日韩欧美国产三级电影视频| 亚洲精品中文字幕乱码三区| 国产高清无密码一区二区三区| 欧美精品在线视频| 国产一区二区伦理| 欧美日韩精品一区二区| 亚洲图片你懂的| 成人中文字幕电影| 欧美videos大乳护士334| 亚洲图片欧美色图| 91小视频在线| 中文字幕第一区二区| 国内精品第一页| 日韩亚洲国产中文字幕欧美| 一区二区三区国产精品| 91色婷婷久久久久合中文| 国产欧美一区二区精品忘忧草| 九九精品视频在线看| 日韩一区二区在线播放| 午夜不卡av在线| 欧美日韩精品一区二区三区| 亚洲女爱视频在线| 91毛片在线观看| 亚洲少妇30p| 色悠悠久久综合| 亚洲猫色日本管| 欧美影院一区二区三区| 一区二区久久久| 欧美挠脚心视频网站| 亚洲成av人在线观看|