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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? jabber.c

?? Linux下的多協(xié)議即時通訊程序源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	js->fd = source;	if(js->state == JABBER_STREAM_CONNECTING)		jabber_send_raw(js, "<?xml version='1.0' ?>", -1);	jabber_stream_set_state(js, JABBER_STREAM_INITIALIZING);	gc->inpa = purple_input_add(js->fd, PURPLE_INPUT_READ, jabber_recv_cb, gc);}static voidjabber_ssl_connect_failure(PurpleSslConnection *gsc, PurpleSslErrorType error,		gpointer data){	PurpleConnection *gc = data;	JabberStream *js;	/* If the connection is already disconnected, we don't need to do anything else */	if(!PURPLE_CONNECTION_IS_VALID(gc))		return;	js = gc->proto_data;	js->gsc = NULL;	switch(error) {		case PURPLE_SSL_CONNECT_FAILED:			purple_connection_error(gc, _("Connection Failed"));			break;		case PURPLE_SSL_HANDSHAKE_FAILED:			purple_connection_error(gc, _("SSL Handshake Failed"));			break;	}}static void tls_init(JabberStream *js){	purple_input_remove(js->gc->inpa);	js->gc->inpa = 0;	js->gsc = purple_ssl_connect_fd(js->gc->account, js->fd,			jabber_login_callback_ssl, jabber_ssl_connect_failure, js->gc);}static void jabber_login_connect(JabberStream *js, const char *fqdn, const char *host, int port){#ifdef HAVE_CYRUS_SASL	js->serverFQDN = g_strdup(fqdn);#endif	if (purple_proxy_connect(js->gc, js->gc->account, host,			port, jabber_login_callback, js->gc) == NULL)		purple_connection_error(js->gc, _("Unable to create socket"));}static void srv_resolved_cb(PurpleSrvResponse *resp, int results, gpointer data){	JabberStream *js;	js = data;	js->srv_query_data = NULL;	if(results) {		jabber_login_connect(js, resp->hostname, resp->hostname, resp->port);		g_free(resp);	} else {		jabber_login_connect(js, js->user->domain, js->user->domain,			purple_account_get_int(js->gc->account, "port", 5222));	}}voidjabber_login(PurpleAccount *account){	PurpleConnection *gc = purple_account_get_connection(account);	const char *connect_server = purple_account_get_string(account,			"connect_server", "");	JabberStream *js;	JabberBuddy *my_jb = NULL;	gc->flags |= PURPLE_CONNECTION_HTML;	js = gc->proto_data = g_new0(JabberStream, 1);	js->gc = gc;	js->fd = -1;	js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,			g_free, g_free);	js->disco_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,			g_free, g_free);	js->buddies = g_hash_table_new_full(g_str_hash, g_str_equal,			g_free, (GDestroyNotify)jabber_buddy_free);	js->chats = g_hash_table_new_full(g_str_hash, g_str_equal,			g_free, (GDestroyNotify)jabber_chat_free);	js->user = jabber_id_new(purple_account_get_username(account));	js->next_id = g_random_int();	js->write_buffer = purple_circ_buffer_new(512);	if(!js->user) {		purple_connection_error(gc, _("Invalid XMPP ID"));		return;	}		if (!js->user->domain || *(js->user->domain) == '\0') {		purple_connection_error(gc, _("Invalid XMPP ID. Domain must be set."));		return;	}		if(!js->user->resource) {		char *me;		js->user->resource = g_strdup("Home");		if(!js->user->node) {			js->user->node = js->user->domain;			js->user->domain = g_strdup("jabber.org");		}		me = g_strdup_printf("%s@%s/%s", js->user->node, js->user->domain,				js->user->resource);		purple_account_set_username(account, me);		g_free(me);	}	if((my_jb = jabber_buddy_find(js, purple_account_get_username(account), TRUE)))		my_jb->subscription |= JABBER_SUB_BOTH;	jabber_stream_set_state(js, JABBER_STREAM_CONNECTING);	/* if they've got old-ssl mode going, we probably want to ignore SRV lookups */	if(purple_account_get_bool(js->gc->account, "old_ssl", FALSE)) {		if(purple_ssl_is_supported()) {			js->gsc = purple_ssl_connect(js->gc->account,					connect_server[0] ? connect_server : js->user->domain,					purple_account_get_int(account, "port", 5223), jabber_login_callback_ssl,					jabber_ssl_connect_failure, js->gc);		} else {			purple_connection_error(js->gc, _("SSL support unavailable"));		}	}	/* no old-ssl, so if they've specified a connect server, we'll use that, otherwise we'll	 * invoke the magic of SRV lookups, to figure out host and port */	if(!js->gsc) {		if(connect_server[0]) {			jabber_login_connect(js, js->user->domain, connect_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);		}	}}static gbooleanconn_close_cb(gpointer data){	JabberStream *js = data;	PurpleAccount *account = purple_connection_get_account(js->gc);	purple_account_disconnect(account);	return FALSE;}static voidjabber_connection_schedule_close(JabberStream *js){	purple_timeout_add(0, conn_close_cb, js);}static voidjabber_registration_result_cb(JabberStream *js, xmlnode *packet, gpointer data){	const char *type = xmlnode_get_attrib(packet, "type");	char *buf;	if(!strcmp(type, "result")) {		buf = g_strdup_printf(_("Registration of %s@%s successful"),				js->user->node, js->user->domain);		purple_notify_info(NULL, _("Registration Successful"),				_("Registration Successful"), buf);		g_free(buf);	} else {		char *msg = jabber_parse_error(js, packet);		if(!msg)			msg = g_strdup(_("Unknown Error"));		purple_notify_error(NULL, _("Registration Failed"),				_("Registration Failed"), msg);		g_free(msg);	}	jabber_connection_schedule_close(js);}static voidjabber_register_cb(JabberStream *js, PurpleRequestFields *fields){	GList *groups, *flds;	xmlnode *query, *y;	JabberIq *iq;	char *username;	iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:register");	query = xmlnode_get_child(iq->node, "query");	for(groups = purple_request_fields_get_groups(fields); groups;			groups = groups->next) {		for(flds = purple_request_field_group_get_fields(groups->data);				flds; flds = flds->next) {			PurpleRequestField *field = flds->data;			const char *id = purple_request_field_get_id(field);			const char *value = purple_request_field_string_get_value(field);			if(!strcmp(id, "username")) {				y = xmlnode_new_child(query, "username");			} else if(!strcmp(id, "password")) {				y = xmlnode_new_child(query, "password");			} else if(!strcmp(id, "name")) {				y = xmlnode_new_child(query, "name");			} else if(!strcmp(id, "email")) {				y = xmlnode_new_child(query, "email");			} else if(!strcmp(id, "nick")) {				y = xmlnode_new_child(query, "nick");			} else if(!strcmp(id, "first")) {				y = xmlnode_new_child(query, "first");			} else if(!strcmp(id, "last")) {				y = xmlnode_new_child(query, "last");			} else if(!strcmp(id, "address")) {				y = xmlnode_new_child(query, "address");			} else if(!strcmp(id, "city")) {				y = xmlnode_new_child(query, "city");			} else if(!strcmp(id, "state")) {				y = xmlnode_new_child(query, "state");			} else if(!strcmp(id, "zip")) {				y = xmlnode_new_child(query, "zip");			} else if(!strcmp(id, "phone")) {				y = xmlnode_new_child(query, "phone");			} else if(!strcmp(id, "url")) {				y = xmlnode_new_child(query, "url");			} else if(!strcmp(id, "date")) {				y = xmlnode_new_child(query, "date");			} else {				continue;			}			xmlnode_insert_data(y, value, -1);			if(!strcmp(id, "username")) {				if(js->user->node)					g_free(js->user->node);				js->user->node = g_strdup(value);			}		}	}	username = g_strdup_printf("%s@%s/%s", js->user->node, js->user->domain,			js->user->resource);	purple_account_set_username(js->gc->account, username);	g_free(username);	jabber_iq_set_callback(iq, jabber_registration_result_cb, NULL);	jabber_iq_send(iq);}static voidjabber_register_cancel_cb(JabberStream *js, PurpleRequestFields *fields){	jabber_connection_schedule_close(js);}static void jabber_register_x_data_cb(JabberStream *js, xmlnode *result, gpointer data){	xmlnode *query;	JabberIq *iq;	iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:register");	query = xmlnode_get_child(iq->node, "query");	xmlnode_insert_child(query, result);	jabber_iq_set_callback(iq, jabber_registration_result_cb, NULL);	jabber_iq_send(iq);}void jabber_register_parse(JabberStream *js, xmlnode *packet){	const char *type;	if(!(type = xmlnode_get_attrib(packet, "type")) || strcmp(type, "result"))		return;	if(js->registration) {		PurpleRequestFields *fields;		PurpleRequestFieldGroup *group;		PurpleRequestField *field;		xmlnode *query, *x, *y;		char *instructions;		/* get rid of the login thingy */		purple_connection_set_state(js->gc, PURPLE_CONNECTED);		query = xmlnode_get_child(packet, "query");		if(xmlnode_get_child(query, "registered")) {			purple_notify_error(NULL, _("Already Registered"),					_("Already Registered"), NULL);			jabber_connection_schedule_close(js);			return;		}		if((x = xmlnode_get_child_with_namespace(packet, "x",						"jabber:x:data"))) {			jabber_x_data_request(js, x, jabber_register_x_data_cb, NULL);			return;		} else if((x = xmlnode_get_child_with_namespace(packet, "x",						"jabber:x:oob"))) {			xmlnode *url;			if((url = xmlnode_get_child(x, "url"))) {				char *href;				if((href = xmlnode_get_data(url))) {					purple_notify_uri(NULL, href);					g_free(href);					js->gc->wants_to_die = TRUE;					jabber_connection_schedule_close(js);					return;				}			}		}		/* as a last resort, use the old jabber:iq:register syntax */		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("username", _("Username"),				js->user->node, FALSE);		purple_request_field_group_add_field(group, field);		field = purple_request_field_string_new("password", _("Password"),				purple_connection_get_password(js->gc), FALSE);		purple_request_field_string_set_masked(field, TRUE);		purple_request_field_group_add_field(group, field);		if(xmlnode_get_child(query, "name")) {			field = purple_request_field_string_new("name", _("Name"),					purple_account_get_alias(js->gc->account), FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "email")) {			field = purple_request_field_string_new("email", _("E-mail"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "nick")) {			field = purple_request_field_string_new("nick", _("Nickname"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "first")) {			field = purple_request_field_string_new("first", _("First name"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "last")) {			field = purple_request_field_string_new("last", _("Last name"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "address")) {			field = purple_request_field_string_new("address", _("Address"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "city")) {			field = purple_request_field_string_new("city", _("City"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "state")) {			field = purple_request_field_string_new("state", _("State"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "zip")) {			field = purple_request_field_string_new("zip", _("Postal code"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "phone")) {			field = purple_request_field_string_new("phone", _("Phone"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "url")) {			field = purple_request_field_string_new("url", _("URL"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if(xmlnode_get_child(query, "date")) {			field = purple_request_field_string_new("date", _("Date"),					NULL, FALSE);			purple_request_field_group_add_field(group, field);		}		if((y = xmlnode_get_child(query, "instructions")))			instructions = xmlnode_get_data(y);		else			instructions = g_strdup(_("Please fill out the information below "						"to register your new account."));		purple_request_fields(js->gc, _("Register New XMPP Account"),				_("Register New XMPP Account"), instructions, fields,				_("Register"), G_CALLBACK(jabber_register_cb),				_("Cancel"), G_CALLBACK(jabber_register_cancel_cb),				purple_connection_get_account(js->gc), NULL, NULL,				js);		g_free(instructions);	}}void jabber_register_start(JabberStream *js){	JabberIq *iq;	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:register");	jabber_iq_send(iq);}void jabber_register_account(PurpleAccount *account){	PurpleConnection *gc = purple_account_get_connection(account);	JabberStream *js;	JabberBuddy *my_jb = NULL;	const char *connect_server = purple_account_get_string(account,			"connect_server", "");	const char *server;	js = gc->proto_data = g_new0(JabberStream, 1);	js->gc = gc;	js->registration = TRUE;	js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,			g_free, g_free);	js->disco_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,			g_free, g_free);	js->user = jabber_id_new(purple_account_get_username(account));	js->next_id = g_random_int();	if(!js->user) {		purple_connection_error(gc, _("Invalid XMPP ID"));		return;	}	js->write_buffer = purple_circ_buffer_new(512);	if(!js->user->resource) {		char *me;		js->user->resource = g_strdup("Home");		if(!js->user->node) {			js->user->node = js->user->domain;			js->user->domain = g_strdup("jabber.org");		}		me = g_strdup_printf("%s@%s/%s", js->user->node, js->user->domain,				js->user->resource);		purple_account_set_username(account, me);		g_free(me);	}	if((my_jb = jabber_buddy_find(js, purple_account_get_username(account), TRUE)))		my_jb->subscription |= JABBER_SUB_BOTH;	server = connect_server[0] ? connect_server : js->user->domain;	jabber_stream_set_state(js, JABBER_STREAM_CONNECTING);	if(purple_account_get_bool(account, "old_ssl", FALSE)) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品99久久久久久| 成人精品电影在线观看| 成人伦理片在线| 天堂成人国产精品一区| 国产精品毛片高清在线完整版 | 欧美日本国产视频| 欧美一级理论片| av中文字幕一区| 丝瓜av网站精品一区二区| 国产又黄又大久久| 国产精品每日更新在线播放网址| 亚洲日本va午夜在线影院| 亚洲一区二区高清| 国产成人丝袜美腿| 国产成人午夜视频| 欧美精品色综合| 欧美日韩国产综合草草| 国产欧美日韩久久| 日本美女一区二区三区视频| 国产精品乱码一区二区三区软件 | 国产乱子伦一区二区三区国色天香| 国内偷窥港台综合视频在线播放| 成人免费视频视频在线观看免费| 在线91免费看| 亚洲青青青在线视频| 丝袜亚洲另类丝袜在线| 国产91富婆露脸刺激对白| 欧美日韩高清不卡| 中文字幕一区二区三区乱码在线 | 婷婷开心久久网| av在线不卡网| 久久久久国产成人精品亚洲午夜| 欧美日韩和欧美的一区二区| 中文字幕av不卡| 欧美成va人片在线观看| 国产欧美综合在线| 黄一区二区三区| 日韩一级欧美一级| 婷婷亚洲久悠悠色悠在线播放| 91一区二区三区在线观看| 久久久久久久久久久久久久久99| 免费观看久久久4p| 性做久久久久久免费观看欧美| 国产精品网曝门| 日产国产高清一区二区三区| 91免费版pro下载短视频| 国产精品久久久久毛片软件| 国产精品资源在线看| 日韩精品专区在线| 老司机午夜精品99久久| 日韩va亚洲va欧美va久久| 欧美色倩网站大全免费| 一卡二卡欧美日韩| 欧美视频中文字幕| 亚洲va韩国va欧美va精品| 欧美综合一区二区| 午夜不卡在线视频| 欧美顶级少妇做爰| 免费高清成人在线| 日韩亚洲国产中文字幕欧美| 老司机一区二区| 亚洲精品在线免费观看视频| 国产精品影视在线| 中文子幕无线码一区tr| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲男人的天堂一区二区| 不卡视频一二三| 亚洲美女电影在线| 欧美日韩一区高清| 免费的成人av| 国产人成亚洲第一网站在线播放| 国产成人综合视频| 亚洲男人的天堂在线观看| 欧美日韩免费一区二区三区 | 亚洲成人tv网| 精品国产伦一区二区三区免费| av一区二区不卡| 亚洲一区免费在线观看| 91精品欧美一区二区三区综合在| 免费成人深夜小野草| 国产人妖乱国产精品人妖| 色婷婷亚洲精品| 三级在线观看一区二区 | av在线播放不卡| 日韩成人精品在线| 国产日韩欧美电影| 在线观看日韩毛片| 首页综合国产亚洲丝袜| 精品免费日韩av| 99精品视频在线播放观看| 偷拍一区二区三区四区| 91麻豆精品国产91久久久更新时间| 久久精品99国产国产精| 亚洲人成在线播放网站岛国| 日韩写真欧美这视频| 91视频www| 美日韩一区二区三区| 懂色av中文字幕一区二区三区| 亚洲一区二区三区三| 2021国产精品久久精品| 欧美性感一类影片在线播放| 国产综合成人久久大片91| 亚洲欧美日韩一区二区三区在线观看 | 成人综合在线网站| 日韩av一区二区在线影视| 国产精品不卡在线| 日韩欧美不卡在线观看视频| 91麻豆文化传媒在线观看| 在线看日韩精品电影| 国产精品1区二区.| 热久久一区二区| 亚洲人成小说网站色在线 | 91精品在线麻豆| 一本大道久久精品懂色aⅴ| 国产精品资源站在线| 免费在线看一区| 亚洲丰满少妇videoshd| 国产精品网站一区| 国产午夜久久久久| 精品日韩一区二区| 欧美一区二区三区在线观看| 91久久久免费一区二区| 国产成人精品亚洲午夜麻豆| 日本vs亚洲vs韩国一区三区二区| 国产精品二三区| 精品久久国产老人久久综合| 欧美日韩国产免费一区二区| 色婷婷av一区二区| 99精品视频免费在线观看| 国产999精品久久久久久| 国产一区二区h| 美女网站视频久久| 蜜臀精品一区二区三区在线观看| 天堂va蜜桃一区二区三区漫画版 | 精品国产一区二区三区忘忧草 | 在线视频中文字幕一区二区| 99vv1com这只有精品| 91麻豆精品国产91久久久久久| 欧美日韩久久久| 欧美日韩激情在线| 欧美一区二区精品在线| 欧美一二三四在线| 日韩女优制服丝袜电影| 日韩精品在线一区| 久久久综合网站| 国产精品午夜在线观看| 中文字幕中文字幕一区| 国产精品不卡在线观看| 日韩毛片精品高清免费| 亚洲黄色片在线观看| 亚洲久草在线视频| 亚洲成av人片在www色猫咪| 五月天视频一区| 免费人成精品欧美精品| 国产麻豆欧美日韩一区| 美国十次综合导航| 美女一区二区三区| 国产成人免费网站| 91免费看视频| 欧美日韩国产片| 日韩精品一区二区三区蜜臀| 久久先锋资源网| 亚洲国产精品精华液2区45| 久久久综合九色合综国产精品| 国产精品久久久久久久浪潮网站| 亚洲精品视频在线观看网站| 日韩av不卡一区二区| 国产不卡视频在线播放| 欧美在线视频日韩| 日韩欧美123| 日韩一区中文字幕| 日本不卡在线视频| 成人一道本在线| 精品视频一区 二区 三区| 精品免费99久久| 亚洲精品中文在线影院| 美女视频黄a大片欧美| 99久久久免费精品国产一区二区| 欧美日本一道本在线视频| 国产欧美日韩在线| 亚洲gay无套男同| 成人午夜碰碰视频| 久久这里只有精品视频网| 日本成人在线网站| 欧美区一区二区三区| 亚洲毛片av在线| 99久久国产综合精品麻豆| 国产三级精品在线| 激情图区综合网| 日韩一区二区三免费高清| 午夜精品一区在线观看| 在线观看91视频| 亚洲日本欧美天堂| 91影视在线播放| 久久av资源网| 日韩欧美不卡一区| 久久激情五月婷婷| 亚洲精品一区二区三区四区高清| 免费看精品久久片| 欧美一激情一区二区三区|