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

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

?? server.c

?? 基于LINUX內核驅動的開發(fā)
?? 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一区二区三区免费野_久草精品视频
亚洲曰韩产成在线| 午夜精品在线视频一区| 欧美色国产精品| 国产成人免费在线视频| 亚洲一区二区三区中文字幕在线 | 中文字幕五月欧美| 欧美一级二级在线观看| 97久久超碰国产精品| 久久99最新地址| 天天操天天色综合| 亚洲精选视频在线| 国产午夜精品福利| 日韩精品一区在线| 欧美系列日韩一区| 岛国精品在线观看| 久久 天天综合| 日韩制服丝袜av| 亚洲综合在线视频| 国产精品久久毛片a| 2021中文字幕一区亚洲| 7777精品伊人久久久大香线蕉的| 99精品欧美一区二区蜜桃免费| 久久国产三级精品| 秋霞国产午夜精品免费视频| 亚洲一区二区黄色| 亚洲激情自拍视频| 尤物av一区二区| 亚洲乱码中文字幕| 日韩理论片中文av| 中文字幕制服丝袜一区二区三区 | 99久久免费视频.com| 国产一区91精品张津瑜| 精品一区二区免费| 久久精品国产精品亚洲综合| 美女脱光内衣内裤视频久久影院| 天天做天天摸天天爽国产一区 | 91丨九色丨蝌蚪富婆spa| 国产精品白丝av| 国产麻豆视频精品| 国产激情一区二区三区四区 | 成人国产精品免费网站| 激情综合色播五月| 国产在线视频精品一区| 精品一区二区三区在线视频| 天天色图综合网| 蜜臀av性久久久久av蜜臀妖精 | 免费成人美女在线观看| 日韩 欧美一区二区三区| 日本不卡免费在线视频| 美女一区二区三区在线观看| 蜜桃91丨九色丨蝌蚪91桃色| 精品一二线国产| 国产一区二区三区黄视频| 久草中文综合在线| 成人精品视频一区二区三区尤物| 成人av影视在线观看| 91日韩一区二区三区| 欧美日韩日日骚| 欧美一级欧美一级在线播放| 精品国产sm最大网站免费看| 国产三级久久久| **网站欧美大片在线观看| 一级女性全黄久久生活片免费| 亚洲大片免费看| 极品瑜伽女神91| 成人听书哪个软件好| 色综合久久88色综合天天6 | 日韩美女主播在线视频一区二区三区| 555夜色666亚洲国产免| 日韩欧美一级二级三级久久久| 久久久久久久一区| 国产精品久久久久久福利一牛影视| 中文字幕一区二区三区不卡 | 粉嫩嫩av羞羞动漫久久久| 在线观看亚洲精品视频| 欧美一级高清大全免费观看| 中文字幕精品在线不卡| 亚洲精品久久嫩草网站秘色| 免费av成人在线| eeuss鲁片一区二区三区| 欧美日韩一卡二卡三卡| 久久色视频免费观看| 最近中文字幕一区二区三区| 日韩电影免费在线看| 国产成人鲁色资源国产91色综| 欧美色网站导航| 国产日韩av一区| 亚洲电影第三页| 国产成人精品亚洲午夜麻豆| 欧美日韩色综合| 国产精品毛片无遮挡高清| 日韩电影在线观看一区| 91小视频免费观看| 精品国产亚洲一区二区三区在线观看| 中文字幕日韩一区二区| 伦理电影国产精品| 欧美系列在线观看| 国产精品网站在线观看| 裸体健美xxxx欧美裸体表演| 一本高清dvd不卡在线观看| 精品久久国产老人久久综合| 亚洲免费观看视频| 国产乱码精品一区二区三区忘忧草 | 欧美一区二区播放| 亚洲欧美偷拍卡通变态| 国产成人超碰人人澡人人澡| 91精品国产品国语在线不卡| 亚洲人妖av一区二区| 国产一区二区三区视频在线播放| 欧美日韩另类一区| 亚洲欧洲精品天堂一级| 国产真实精品久久二三区| 欧美精品少妇一区二区三区| 亚洲欧洲av在线| 国产精品一区二区久激情瑜伽| 欧美高清精品3d| 一二三四区精品视频| av影院午夜一区| 欧美国产精品专区| 国产传媒欧美日韩成人| 欧美岛国在线观看| 日韩av一级电影| 欧美日韩三级视频| 亚洲成人一区在线| 欧美性受xxxx| 亚洲精品久久嫩草网站秘色| 97aⅴ精品视频一二三区| 中文字幕国产精品一区二区| 国产一区二区三区久久久 | 91免费在线视频观看| 国产欧美日韩激情| 丁香天五香天堂综合| 久久精品在线观看| 国产aⅴ精品一区二区三区色成熟| 久久人人爽人人爽| 国产精品18久久久久| 久久久国产精品不卡| 国产成人免费网站| 国产精品美女久久久久aⅴ| 不卡一区在线观看| 亚洲欧美综合色| 97精品超碰一区二区三区| 亚洲婷婷在线视频| 色吧成人激情小说| 亚洲成a人片在线观看中文| 欧美日韩一区二区电影| 免费成人在线播放| 26uuu久久综合| 岛国精品在线观看| 亚洲精品综合在线| 欧美伦理电影网| 毛片不卡一区二区| 欧美激情一区三区| 91免费看视频| 亚洲在线中文字幕| 日韩一区二区三区观看| 国产一区二区在线电影| 国产精品每日更新| 欧美日韩一区二区电影| 免费xxxx性欧美18vr| 欧美激情一区二区三区| 色欲综合视频天天天| 婷婷久久综合九色国产成人| 精品伦理精品一区| 99久久精品一区二区| 亚洲国产一区二区视频| 日韩欧美电影一区| 成人午夜碰碰视频| 亚洲综合精品久久| 欧美videossexotv100| 国产 日韩 欧美大片| 亚洲综合色视频| 日韩午夜激情视频| 成人18视频在线播放| 亚洲国产色一区| 久久久一区二区| 欧美性高清videossexo| 人妖欧美一区二区| 亚洲色图制服诱惑| 欧美一区二区在线看| www.亚洲人| 日本强好片久久久久久aaa| 国产欧美一区二区三区在线看蜜臀| 色综合久久久久综合体| 精品一区二区免费看| 亚洲一区二区黄色| 中文子幕无线码一区tr| 欧美日韩国产综合视频在线观看 | 久久影音资源网| 在线视频国产一区| 国产电影一区二区三区| 天天综合色天天综合| 综合自拍亚洲综合图不卡区| 日韩免费一区二区| 91免费版pro下载短视频| 久久精品国产99国产| 一个色在线综合| 中文字幕一区在线| 久久人人97超碰com| 欧美一级一区二区|