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

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

?? server.c

?? 基于LINUX內核驅動的開發
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * *  BlueZ - Bluetooth protocol stack for Linux * *  Copyright (C) 2004-2008  Marcel Holtmann <marcel@holtmann.org> * * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA * */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <errno.h>#include <sys/socket.h>#include <sys/ioctl.h>#include <sys/stat.h>#include <net/if.h>#include <bluetooth/bluetooth.h>#include <bluetooth/hci.h>#include <bluetooth/hci_lib.h>#include <bluetooth/bnep.h>#include <bluetooth/l2cap.h>#include <bluetooth/sdp.h>#include <bluetooth/sdp_lib.h>#include <netinet/in.h>#include <glib.h>#include "logging.h"#include "dbus.h"#include "error.h"#include "textfile.h"#include "dbus-helper.h"#define NETWORK_SERVER_INTERFACE "org.bluez.network.Server"#define SETUP_TIMEOUT		1000#define MAX_SETUP_ATTEMPTS	3#include "bridge.h"#include "common.h"#include "manager.h"/* Pending Authorization */struct setup_session {	char		*address;	/* Remote Bluetooth Address */	uint16_t	dst_role;	/* Destination role */	uint16_t	src_role;	/* Source role */	int		nsk;		/* L2CAP socket */	int		attempts;	/* Setup msg received */	guint		watch;		/* BNEP setup watch */	guint		timeout;	/* Max setup time */};/* Main server structure */struct network_server {	bdaddr_t	src;		/* Bluetooth Local Address */	char		*iface;		/* Routing interface */	char		*name;		/* Server service name */	char		*range;		/* IP Address range */	char		*path;		/* D-Bus path */	gboolean	enable;		/* Enable flag */	uint32_t	record_id;	/* Service record id */	uint16_t	id;		/* Service class identifier */	GSList		*clients;	/* Active connections */};static GIOChannel *bnep_io = NULL;static DBusConnection *connection = NULL;static GSList *setup_sessions = NULL;static const char *prefix = NULL;static gboolean security = TRUE;static int store_property(bdaddr_t *src, uint16_t id,			const char *key, const char *value){	char filename[PATH_MAX + 1];	char addr[18];	ba2str(src, addr);	if (id == BNEP_SVC_NAP)		create_name(filename, PATH_MAX, STORAGEDIR, addr, "nap");	else if (id == BNEP_SVC_GN)		create_name(filename, PATH_MAX, STORAGEDIR, addr, "gn");	else if (id == BNEP_SVC_PANU)		create_name(filename, PATH_MAX, STORAGEDIR, addr, "panu");	return textfile_put(filename, key, value);}static void setup_free(struct setup_session *s){	g_free(s->address);	g_free(s);}static int setup_cmp(const struct setup_session *s, const char *addr){	return strcmp(s->address, addr);}static void add_lang_attr(sdp_record_t *r){	sdp_lang_attr_t base_lang;	sdp_list_t *langs = 0;	/* UTF-8 MIBenum (http://www.iana.org/assignments/character-sets) */	base_lang.code_ISO639 = (0x65 << 8) | 0x6e;	base_lang.encoding = 106;	base_lang.base_offset = SDP_PRIMARY_LANG_BASE;	langs = sdp_list_append(0, &base_lang);	sdp_set_lang_attr(r, langs);	sdp_list_free(langs, 0);}static int create_server_record(sdp_buf_t *buf, const char *name,					uint16_t id){	sdp_list_t *svclass, *pfseq, *apseq, *root, *aproto;	uuid_t root_uuid, pan, l2cap, bnep;	sdp_profile_desc_t profile[1];	sdp_list_t *proto[2];	sdp_data_t *v, *p;	uint16_t psm = BNEP_PSM, version = 0x0100;	uint16_t security_desc = (security ? 0x0001 : 0x0000);	uint16_t net_access_type = 0xfffe;	uint32_t max_net_access_rate = 0;	const char *desc = "BlueZ PAN service";	sdp_record_t record;	int ret;	memset(&record, 0, sizeof(sdp_record_t));	switch (id) {	case BNEP_SVC_NAP:		sdp_uuid16_create(&pan, NAP_SVCLASS_ID);		svclass = sdp_list_append(NULL, &pan);		sdp_set_service_classes(&record, svclass);		sdp_uuid16_create(&profile[0].uuid, NAP_PROFILE_ID);		profile[0].version = 0x0100;		pfseq = sdp_list_append(NULL, &profile[0]);		sdp_set_profile_descs(&record, pfseq);		sdp_set_info_attr(&record, name, NULL, desc);		sdp_attr_add_new(&record, SDP_ATTR_NET_ACCESS_TYPE,					SDP_UINT16, &net_access_type);		sdp_attr_add_new(&record, SDP_ATTR_MAX_NET_ACCESSRATE,					SDP_UINT32, &max_net_access_rate);		break;	case BNEP_SVC_GN:		sdp_uuid16_create(&pan, GN_SVCLASS_ID);		svclass = sdp_list_append(NULL, &pan);		sdp_set_service_classes(&record, svclass);		sdp_uuid16_create(&profile[0].uuid, GN_PROFILE_ID);		profile[0].version = 0x0100;		pfseq = sdp_list_append(NULL, &profile[0]);		sdp_set_profile_descs(&record, pfseq);		sdp_set_info_attr(&record, name, NULL, desc);		break;	case BNEP_SVC_PANU:		sdp_uuid16_create(&pan, PANU_SVCLASS_ID);		svclass = sdp_list_append(NULL, &pan);		sdp_set_service_classes(&record, svclass);		sdp_uuid16_create(&profile[0].uuid, PANU_PROFILE_ID);		profile[0].version = 0x0100;		pfseq = sdp_list_append(NULL, &profile[0]);		sdp_set_profile_descs(&record, pfseq);		sdp_set_info_attr(&record, name, NULL, desc);		break;	default:		return -1;	}	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);	root = sdp_list_append(NULL, &root_uuid);	sdp_set_browse_groups(&record, root);	sdp_uuid16_create(&l2cap, L2CAP_UUID);	proto[0] = sdp_list_append(NULL, &l2cap);	p = sdp_data_alloc(SDP_UINT16, &psm);	proto[0] = sdp_list_append(proto[0], p);	apseq    = sdp_list_append(NULL, proto[0]);	sdp_uuid16_create(&bnep, BNEP_UUID);	proto[1] = sdp_list_append(NULL, &bnep);	v = sdp_data_alloc(SDP_UINT16, &version);	proto[1] = sdp_list_append(proto[1], v);	/* Supported protocols */	{		uint16_t ptype[] = {			0x0800,  /* IPv4 */			0x0806,  /* ARP */		};		sdp_data_t *head, *pseq;		int p;		for (p = 0, head = NULL; p < 2; p++) {			sdp_data_t *data = sdp_data_alloc(SDP_UINT16, &ptype[p]);			if (head)				sdp_seq_append(head, data);			else				head = data;		}		pseq = sdp_data_alloc(SDP_SEQ16, head);		proto[1] = sdp_list_append(proto[1], pseq);	}	apseq = sdp_list_append(apseq, proto[1]);	aproto = sdp_list_append(NULL, apseq);	sdp_set_access_protos(&record, aproto);	add_lang_attr(&record);	sdp_attr_add_new(&record, SDP_ATTR_SECURITY_DESC,				SDP_UINT16, &security_desc);	if (sdp_gen_record_pdu(&record, buf) < 0)		ret = -1;	else		ret = 0;	sdp_data_free(p);	sdp_data_free(v);	sdp_list_free(apseq, NULL);	sdp_list_free(root, NULL);	sdp_list_free(aproto, NULL);	sdp_list_free(proto[0], NULL);	sdp_list_free(proto[1], NULL);	sdp_list_free(svclass, NULL);	sdp_list_free(pfseq, NULL);	sdp_list_free(record.attrlist, (sdp_free_func_t) sdp_data_free);	sdp_list_free(record.pattern, free);	return ret;}static ssize_t send_bnep_ctrl_rsp(int sk, uint16_t response){	struct bnep_control_rsp rsp;	rsp.type = BNEP_CONTROL;	rsp.ctrl = BNEP_SETUP_CONN_RSP;	rsp.resp = htons(response);	return send(sk, &rsp, sizeof(rsp), 0);}static void cancel_authorization(struct setup_session *s){	DBusMessage *msg;	const char *uuid;	msg = dbus_message_new_method_call("org.bluez", "/org/bluez",						"org.bluez.Database",						"CancelAuthorizationRequest");	if (!msg) {		error("Unable to allocate new method call");		return;	}	uuid = bnep_uuid(s->dst_role);	dbus_message_append_args(msg,			DBUS_TYPE_STRING, &s->address,			DBUS_TYPE_STRING, &uuid,			DBUS_TYPE_INVALID);	send_message_and_unref(connection, msg);}static void authorization_callback(DBusPendingCall *pcall, void *data){	struct setup_session *s = data;	struct network_server *ns = NULL;	DBusMessage *reply = dbus_pending_call_steal_reply(pcall);	char path[MAX_PATH_LENGTH], devname[16];	uint16_t response = BNEP_CONN_NOT_ALLOWED;	DBusError derr;	const char *bridge;	if (!g_slist_find(setup_sessions, s)) {		dbus_message_unref(reply);		return;	}	snprintf(path, MAX_PATH_LENGTH, NETWORK_PATH"/%s", bnep_name(s->dst_role));	dbus_connection_get_object_user_data(connection, path, (void *) &ns);	/* Server can be disabled in the meantime */	if (ns == NULL || ns->enable == FALSE)		goto failed;	dbus_error_init(&derr);	if (dbus_set_error_from_message(&derr, reply)) {		error("Access denied: %s", derr.message);		if (dbus_error_has_name(&derr, DBUS_ERROR_NO_REPLY)) {			debug("Canceling authorization request");			cancel_authorization(s);		}		dbus_error_free(&derr);		goto failed;	}	memset(devname, 0, 16);	strncpy(devname, prefix, strlen(prefix));	if (bnep_connadd(s->nsk, s->dst_role, devname) < 0)		goto failed;	info("Authorization succedded. New connection: %s", devname);	bridge = bridge_get_name(ns->id);	if (bridge) {		if (bridge_add_interface(ns->id, devname) < 0) {			error("Can't add %s to the bridge %s: %s(%d)",					devname, bridge, strerror(errno),					errno);			goto failed;		}		bnep_if_up(devname, 0);	} else		bnep_if_up(devname, ns->id);	response = BNEP_SUCCESS;	ns->clients = g_slist_append(ns->clients, g_strdup(s->address));failed:	send_bnep_ctrl_rsp(s->nsk, response);	dbus_message_unref(reply);}static void setup_watch_destroy(void *data){	struct setup_session *s;	GSList *l;	/*	 * Remote initiated: socket HUP	 * Authorization: denied/accepted	 */	l = g_slist_find(setup_sessions, data);	if (!l)		return;	s = l->data;	setup_sessions = g_slist_remove(setup_sessions, s);	/* Remove active watches */	if (s->watch)		g_source_remove(s->watch);	if (s->timeout)		g_source_remove(s->timeout);	setup_free(s);}static int authorize_connection(struct setup_session *s){	DBusMessage *msg;	DBusPendingCall *pending;	const char *uuid;	msg = dbus_message_new_method_call("org.bluez", "/org/bluez",				"org.bluez.Database", "RequestAuthorization");	if (!msg) {		error("Unable to allocat new RequestAuthorization method call");		return -ENOMEM;	}	uuid = bnep_uuid(s->dst_role);	debug("Requesting authorization for %s UUID:%s", s->address, uuid);	dbus_message_append_args(msg,			DBUS_TYPE_STRING, &s->address,			DBUS_TYPE_STRING, &uuid,			DBUS_TYPE_INVALID);	if (dbus_connection_send_with_reply(connection,				msg, &pending, -1) == FALSE) {		error("Sending of authorization request failed");		dbus_message_unref(msg);		return -EACCES;	}	dbus_pending_call_set_notify(pending,			authorization_callback, s, setup_watch_destroy);	dbus_pending_call_unref(pending);	dbus_message_unref(msg);	return 0;}static uint16_t inline chk_role(uint16_t dst_role, uint16_t src_role){	/* Allowed PAN Profile scenarios */	switch (dst_role) {	case BNEP_SVC_NAP:	case BNEP_SVC_GN:		if (src_role == BNEP_SVC_PANU)			return 0;		return BNEP_CONN_INVALID_SRC;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费观看久久久4p| 国产99久久久国产精品| 尤物视频一区二区| 国产精品久久综合| 久久久久久久久久电影| 久久综合国产精品| 久久久久国产精品麻豆| 精品免费国产一区二区三区四区| 欧美精品一卡两卡| 欧美一区午夜精品| 日韩天堂在线观看| 56国语精品自产拍在线观看| 欧美剧情片在线观看| 国产精品乱码一区二区三区软件| 久久久久国产一区二区三区四区| 久久色.com| 国产亚洲短视频| 国产精品乱码妇女bbbb| 亚洲色图欧美在线| 一区二区三区高清不卡| 亚洲国产一区二区视频| 五月天亚洲精品| 奇米精品一区二区三区在线观看 | 欧美亚洲国产一区二区三区 | 日韩一级成人av| 精品久久一区二区三区| 欧美va在线播放| 日本一区二区成人| 亚洲欧美另类久久久精品2019| 亚洲激情在线激情| 日韩有码一区二区三区| 精品一区二区三区不卡| 国产精品自在欧美一区| 99在线热播精品免费| 色综合激情五月| 91精品国产全国免费观看| 精品伦理精品一区| 国产精品入口麻豆原神| 一区二区三区日韩欧美| 日韩av在线发布| 国产一区二区伦理| 91网站最新地址| 欧美一区二区三区白人| 国产亚洲一区二区在线观看| 国产精品伦理一区二区| 日日欢夜夜爽一区| 成人涩涩免费视频| 欧美高清你懂得| 国产日韩v精品一区二区| 亚洲精品少妇30p| 黄色日韩网站视频| 91丨porny丨最新| 日韩一区二区影院| 亚洲图片激情小说| 青青草精品视频| 成人av在线播放网址| 欧美欧美欧美欧美| 日本一区二区在线不卡| 亚洲成人久久影院| 国产福利一区在线| 欧美日韩在线不卡| 国产女人水真多18毛片18精品视频| 亚洲最大成人综合| 国产另类ts人妖一区二区| 欧美日韩一级二级| 国产精品区一区二区三| 日本免费在线视频不卡一不卡二| 成人激情免费视频| 欧美成人精品1314www| 亚洲免费观看高清完整版在线观看| 丁香婷婷综合色啪| 日韩欧美国产综合| 亚洲精品成人在线| 国产999精品久久久久久绿帽| 欧美另类z0zxhd电影| 国产精品毛片久久久久久| 精品一区二区三区免费播放| 欧美视频一区二区在线观看| 欧美—级在线免费片| 美女性感视频久久| 欧美日韩精品免费观看视频| 国产精品美女久久久久久2018| 久久精品国产亚洲aⅴ | 亚洲视频在线观看一区| 国产一区二三区好的| 9191国产精品| 亚洲第一搞黄网站| 91麻豆国产自产在线观看| 久久精品亚洲乱码伦伦中文| 美女在线视频一区| 777xxx欧美| 亚洲成年人影院| 91久久久免费一区二区| 国产精品久久久久久亚洲伦| 国产成人免费在线观看不卡| 久久久久久久综合色一本| 精品写真视频在线观看| 日韩一区二区精品葵司在线| 日韩专区欧美专区| 欧美日韩精品一区二区三区蜜桃| 亚洲视频一二三区| 91网站在线播放| 伊人性伊人情综合网| 色综合咪咪久久| 亚洲激情图片qvod| 91视频一区二区| 亚洲六月丁香色婷婷综合久久| 国产酒店精品激情| 久久久精品2019中文字幕之3| 国产一区二区三区在线观看免费视频 | 亚洲一区二区三区中文字幕| 色婷婷亚洲综合| 亚洲欧洲综合另类| 91国偷自产一区二区使用方法| 一区二区三区在线免费| 色爱区综合激月婷婷| 亚洲国产另类精品专区| 欧美老女人第四色| 久久99国产精品免费| 精品国产凹凸成av人网站| 韩国欧美一区二区| 国产日韩精品一区二区三区 | 精品久久久久久久久久久久包黑料| 免费在线看成人av| 欧美xxxxxxxx| 国产激情一区二区三区| 国产精品美女视频| 欧美三级日韩在线| 蜜臀精品一区二区三区在线观看 | 中文字幕精品一区二区三区精品| 国产69精品一区二区亚洲孕妇| 中文字幕+乱码+中文字幕一区| 91亚洲精品乱码久久久久久蜜桃| 亚洲综合色噜噜狠狠| 欧美区一区二区三区| 韩国精品一区二区| 国产精品麻豆视频| 欧美色窝79yyyycom| 蜜臀va亚洲va欧美va天堂| 久久综合色鬼综合色| 成人动漫一区二区在线| 亚洲国产另类av| 久久精品日韩一区二区三区| 不卡av免费在线观看| 亚洲成人av免费| 国产丝袜欧美中文另类| 在线观看亚洲精品视频| 麻豆91精品91久久久的内涵| 国产精品久久久久影院| 欧美日韩国产天堂| 国产成人av电影免费在线观看| 一区二区三区自拍| 精品国产一区二区三区久久久蜜月 | 亚洲aⅴ怡春院| 国产午夜精品一区二区三区视频| 91黄色免费观看| 国产精品一区二区在线观看不卡| 亚洲女同女同女同女同女同69| 日韩视频在线你懂得| av福利精品导航| 另类小说综合欧美亚洲| 亚洲色图欧美激情| 久久众筹精品私拍模特| 在线观看日韩精品| 国产精品一级二级三级| 午夜精品国产更新| 国产精品久久福利| 精品国产免费人成电影在线观看四季 | 国产美女主播视频一区| 日本一区免费视频| 日韩欧美123| 国产大陆精品国产| 奇米色777欧美一区二区| 亚洲精品免费在线| 久久综合狠狠综合久久激情 | 91精品久久久久久久99蜜桃| 成人美女视频在线看| 五月婷婷久久丁香| 亚洲欧美经典视频| 4438x亚洲最大成人网| av不卡免费在线观看| 国产成人自拍在线| 午夜免费久久看| 亚洲一区二区精品视频| 精品国产伦一区二区三区观看方式| 色域天天综合网| 99久久精品免费看国产| 精品一区二区三区视频在线观看| 亚洲第一精品在线| 国产偷v国产偷v亚洲高清| 精品国产1区二区| 日韩一级黄色大片| 久久婷婷综合激情| 欧美一区二区视频网站| 成人97人人超碰人人99| 成人中文字幕合集| 国产成人免费av在线| 男人的天堂亚洲一区| 午夜精品影院在线观看| 中文字幕av资源一区|