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

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

?? main.c

?? 基于LINUX內核驅動的開發
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * *  BlueZ - Bluetooth protocol stack for Linux * *  Copyright (C) 2003-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 <errno.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <sys/socket.h>#include <bluetooth/bluetooth.h>#include <bluetooth/sdp.h>#include <bluetooth/sdp_lib.h>#include <glib.h>#include "dbus.h"#include "sdp-xml.h"extern int sdp_search_spp(sdp_session_t *sdp, uint8_t *channel);extern int sdp_search_hcrp(sdp_session_t *sdp, unsigned short *ctrl_psm, unsigned short *data_psm);extern int spp_print(bdaddr_t *src, bdaddr_t *dst, uint8_t channel, int fd, int copies);extern int hcrp_print(bdaddr_t *src, bdaddr_t *dst, unsigned short ctrl_psm, unsigned short data_psm, int fd, int copies);#define PRINTER_SERVICE_CLASS_NAME "printer"struct cups_device {	char *bdaddr;	char *name;	char *id;};static GSList *device_list = NULL;static GMainLoop *loop = NULL;static DBusConnection *conn = NULL;#define ATTRID_1284ID 0x0300static char *parse_xml_sdp(const char *xml){	sdp_record_t *sdp_record;	sdp_list_t *l;	char *str = NULL;	sdp_record = sdp_xml_parse_record(xml, strlen(xml));	if (sdp_record == NULL)		return NULL;	for (l = sdp_record->attrlist; l != NULL; l = l->next) {		sdp_data_t *data;		data = (sdp_data_t *) l->data;		if (data->attrId != ATTRID_1284ID)			continue;		/* Ignore the length, it's null terminated */		str = g_strdup(data->val.str + 2);		break;	}	sdp_record_free(sdp_record);	return str;}static char *device_get_ieee1284_id(const char *adapter, const char *bdaddr){	guint service_handle;	DBusMessage *message, *reply;	DBusMessageIter iter, reply_iter, iter_array;	const char *hcr_print = "00001126-0000-1000-8000-00805f9b34fb";	char *xml, *id;	/* Look for the service handle of the HCRP service */	message = dbus_message_new_method_call("org.bluez", adapter,						"org.bluez.Adapter",						"GetRemoteServiceHandles");	dbus_message_iter_init_append(message, &iter);	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr);	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &hcr_print);	reply = dbus_connection_send_with_reply_and_block(conn,							message, -1, NULL);	dbus_message_unref(message);	if (!reply)		return NULL;	dbus_message_iter_init(reply, &reply_iter);	if (dbus_message_iter_get_arg_type(&reply_iter) != DBUS_TYPE_ARRAY) {		dbus_message_unref(reply);		return NULL;	}	/* Hopefully we only get one handle, or take a punt */	dbus_message_iter_recurse(&reply_iter, &iter_array);	while (dbus_message_iter_get_arg_type(&iter_array) == DBUS_TYPE_UINT32) {		dbus_message_iter_get_basic(&iter_array, &service_handle);		dbus_message_iter_next(&iter_array);	}	dbus_message_unref(reply);	/* Now get the XML for the HCRP service record */	message = dbus_message_new_method_call("org.bluez", adapter,						"org.bluez.Adapter",						"GetRemoteServiceRecordAsXML");	dbus_message_iter_init_append(message, &iter);	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr);	dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT32, &service_handle);	reply = dbus_connection_send_with_reply_and_block(conn,							message, -1, NULL);	dbus_message_unref(message);	if (!reply)		return NULL;	dbus_message_iter_init(reply, &reply_iter);	dbus_message_iter_get_basic(&reply_iter, &xml);	id = parse_xml_sdp(xml);	dbus_message_unref(reply);	return id;}static void add_device_to_list(const char *name, const char *bdaddr, const char *id){	struct cups_device *device;	GSList *l;	/* Look for the device in the list */	for (l = device_list; l != NULL; l = l->next) {		device = (struct cups_device *) l->data;		if (strcmp(device->bdaddr, bdaddr) == 0) {			g_free(device->name);			device->name = g_strdup(name);			return;		}	}	/* Or add it to the list if it's not there */	device = g_new0(struct cups_device, 1);	device->bdaddr = g_strdup(bdaddr);	device->name = g_strdup(name);	device->id = g_strdup(id);	device_list = g_slist_prepend(device_list, device);}static char *escape_name(const char *str, char orig, char dest){	char *ret, *s;	ret = g_strdup(str);	while ((s = strchr(ret, orig)) != NULL)		s[0] = dest;	return ret;}static void print_printer_details(const char *name, const char *bdaddr, const char *id){	char *uri, *escaped;	guint len;	escaped = escape_name(name, '\"', '\'');	len = strlen("bluetooth://") + 12 + 1;	uri = g_malloc(len);	snprintf(uri, len, "bluetooth://%c%c%c%c%c%c%c%c%c%c%c%c",		 bdaddr[0], bdaddr[1],		 bdaddr[3], bdaddr[4],		 bdaddr[6], bdaddr[7],		 bdaddr[9], bdaddr[10],		 bdaddr[12], bdaddr[13],		 bdaddr[15], bdaddr[16]);	printf("network %s \"Unknown\" \"%s (Bluetooth)\"", uri, escaped);	if (id != NULL)		printf(" \"%s\"\n", id);	else		printf ("\n");	g_free(escaped);	g_free(uri);}static gboolean device_is_printer(const char *adapter, const char *bdaddr){	char *class;	DBusMessage *message, *reply;	DBusMessageIter iter, reply_iter;	message = dbus_message_new_method_call("org.bluez", adapter,					       "org.bluez.Adapter",					       "GetRemoteMinorClass");	dbus_message_iter_init_append(message, &iter);	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr);	reply = dbus_connection_send_with_reply_and_block(conn,							message, -1, NULL);	dbus_message_unref(message);	if (!reply)		return FALSE;	dbus_message_iter_init(reply, &reply_iter);	dbus_message_iter_get_basic(&reply_iter, &class);	if (class != NULL && strcmp(class, PRINTER_SERVICE_CLASS_NAME) == 0) {		dbus_message_unref(reply);		return TRUE;	}	return FALSE;}static char *device_get_name(const char *adapter, const char *bdaddr){	DBusMessage *message, *reply;	DBusMessageIter iter, reply_iter;	char *name;	message = dbus_message_new_method_call("org.bluez", adapter,						"org.bluez.Adapter",						"GetRemoteName");	dbus_message_iter_init_append(message, &iter);	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &bdaddr);	reply = dbus_connection_send_with_reply_and_block(conn,							message, -1, NULL);	dbus_message_unref(message);	if (!reply)		return NULL;	dbus_message_iter_init(reply, &reply_iter);	dbus_message_iter_get_basic(&reply_iter, &name);	name = g_strdup(name);	dbus_message_unref(reply);	return name;}static void remote_device_found(const char *adapter, const char *bdaddr, guint class, int rssi){	uint8_t major_index = (class >> 8) & 0x1F;	uint8_t minor_index;	uint8_t shift_minor = 0;	gboolean found = FALSE;	char *name, *id;	/* Check if we have a printer	 * From hcid/dbus-adapter.c minor_class_str() */	if (major_index != 6)		return;	minor_index = (class >> 4) & 0x0F;	while (shift_minor < 4) {		if (((minor_index >> shift_minor) & 0x01) == 0x01) {			if (shift_minor == 3) {				found = TRUE;				break;			}		}		shift_minor++;	}	if (!found)		return;	name = device_get_name(adapter, bdaddr);	id = device_get_ieee1284_id(adapter, bdaddr);	add_device_to_list(name, bdaddr, id);	g_free(name);	g_free(id);}static void remote_name_updated(const char *bdaddr, const char *name){	add_device_to_list(name, bdaddr, NULL);}static void discovery_completed(void){	GSList *l;	for (l = device_list; l != NULL; l = l->next) {		struct cups_device *device = (struct cups_device *) l->data;		if (device->name == NULL)			device->name = escape_name(device->bdaddr, ':', '-');		print_printer_details(device->name, device->bdaddr, device->id);		g_free(device->name);		g_free(device->bdaddr);		g_free(device->id);		g_free(device);	}	g_slist_free(device_list);	device_list = NULL;	g_main_loop_quit(loop);}static void remote_device_disappeared(const char *bdaddr){	GSList *l;	for (l = device_list; l != NULL; l = l->next) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99天天综合性| 日韩精品亚洲专区| 精品国产免费久久| 91精品国产综合久久福利| 欧美日韩视频一区二区| 91免费在线视频观看| 92国产精品观看| 91亚洲精品乱码久久久久久蜜桃| 成人avav影音| 99久久综合99久久综合网站| 色综合一区二区三区| 在线观看网站黄不卡| 欧美三级中文字幕在线观看| 欧美人牲a欧美精品| 欧美一区二区三区婷婷月色| 欧美刺激午夜性久久久久久久| 日韩免费看网站| 国产日韩av一区二区| 国产精品久久99| 亚洲综合免费观看高清在线观看| 五月激情丁香一区二区三区| 午夜精品视频在线观看| 精品亚洲免费视频| 成人激情av网| 欧美日韩国产一级| 欧美成人免费网站| 国产精品免费久久| 夜夜嗨av一区二区三区中文字幕 | 日韩视频一区在线观看| 精品国产一区二区精华| 日韩一区欧美小说| 日韩精品高清不卡| 成人va在线观看| 欧美在线看片a免费观看| 欧美成人video| 日韩久久一区二区| 麻豆精品视频在线观看视频| 成人黄色电影在线 | 国产精品久久久久久久久搜平片 | 欧美三区免费完整视频在线观看| 日韩一区二区高清| 亚洲欧美偷拍三级| 狠狠色伊人亚洲综合成人| 色综合色综合色综合| 精品国产电影一区二区| 亚洲综合激情另类小说区| 国产精品综合在线视频| 色婷婷狠狠综合| 久久久综合九色合综国产精品| 亚洲欧美偷拍另类a∨色屁股| 久久99精品国产91久久来源| 在线视频观看一区| 国产精品美女一区二区三区| 中文字幕字幕中文在线中不卡视频| 一区二区三区.www| 亚洲午夜久久久久久久久电影网| 国产成人综合精品三级| 欧美图区在线视频| 久久久久国色av免费看影院| 亚洲成a天堂v人片| 成人激情图片网| 国产色婷婷亚洲99精品小说| 久久99热这里只有精品| 欧美精品v国产精品v日韩精品 | 成人午夜电影久久影院| 精品免费国产二区三区| 日本91福利区| 91麻豆精品国产91久久久更新时间 | 欧美年轻男男videosbes| 亚洲欧美日韩综合aⅴ视频| 国产一区二三区| 精品对白一区国产伦| 麻豆成人在线观看| 91麻豆精品国产91久久久 | 国产午夜精品福利| 国产成人综合亚洲网站| 久久综合色播五月| 国产精品18久久久久| 久久你懂得1024| 国产伦精一区二区三区| 久久九九久精品国产免费直播| 国内精品久久久久影院薰衣草| 精品福利在线导航| 国产永久精品大片wwwapp| 久久综合色播五月| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 成人精品视频.| 亚洲欧美日韩综合aⅴ视频| 欧美亚男人的天堂| 亚洲国产精品久久久男人的天堂| 色综合色狠狠综合色| 国产日韩欧美麻豆| 99久久精品免费观看| 亚洲欧美国产高清| 欧美日韩高清一区二区三区| 亚洲一区二区三区视频在线播放 | 麻豆成人91精品二区三区| 欧美人与性动xxxx| 国产综合成人久久大片91| 久久久久久9999| 欧美在线免费播放| 精品一区二区三区在线观看国产| 欧美日韩久久一区| 人人爽香蕉精品| 国产欧美日韩精品a在线观看| aaa欧美日韩| 美女尤物国产一区| 国产精品视频看| 欧美三级资源在线| 国产福利精品一区| 亚州成人在线电影| 国产亚洲综合性久久久影院| 欧美在线小视频| 日韩成人免费电影| 3751色影院一区二区三区| 丁香天五香天堂综合| 天堂成人国产精品一区| 中文字幕av一区二区三区高| 精品污污网站免费看| 成人一级黄色片| 午夜成人免费电影| 国产欧美精品在线观看| 欧美这里有精品| 久久精品国产一区二区| 欧美激情综合在线| 欧美一区二区三区影视| 91蝌蚪porny| 国产suv一区二区三区88区| 日日夜夜精品视频免费| 亚洲四区在线观看| 久久影院午夜片一区| 在线成人午夜影院| 欧美最猛性xxxxx直播| 风间由美性色一区二区三区| 亚洲精品国产高清久久伦理二区| 欧美日韩视频在线第一区| 99精品国产视频| 国产91丝袜在线播放九色| 久久精品久久综合| 日韩精品电影一区亚洲| 亚洲视频一区在线观看| 精品免费国产二区三区| 欧美一区二区三区电影| 欧美日韩免费观看一区二区三区 | 欧美亚洲另类激情小说| 99久久99久久久精品齐齐| 国产成人一区在线| 国内精品视频一区二区三区八戒| 免费精品视频最新在线| 午夜亚洲福利老司机| 精品国产成人系列| 欧美军同video69gay| 88在线观看91蜜桃国自产| 欧美乱妇一区二区三区不卡视频| 欧美性一级生活| 欧美日韩国产高清一区二区| 国产专区综合网| 国产在线播放一区三区四| 美女爽到高潮91| 久久99久久精品欧美| 美洲天堂一区二卡三卡四卡视频| 日本午夜一区二区| 久久精品国产一区二区三区免费看 | 成人免费看黄yyy456| 成人av在线播放网站| 91视视频在线观看入口直接观看www | 亚洲视频免费在线观看| 久久天天做天天爱综合色| 欧美一级欧美一级在线播放| 日韩一级片在线播放| 久久精品这里都是精品| 国产精品美女www爽爽爽| 综合久久综合久久| 亚洲成在人线在线播放| 一区二区在线免费观看| 日韩综合一区二区| 亚洲午夜精品在线| 激情五月激情综合网| 成人网在线播放| 欧美日韩情趣电影| 久久伊人蜜桃av一区二区| 国产精品初高中害羞小美女文| 亚洲精品久久7777| 久久69国产一区二区蜜臀| 懂色av噜噜一区二区三区av| 在线观看日韩毛片| 日韩精品在线网站| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 国产福利视频一区二区三区| 欧洲生活片亚洲生活在线观看| 欧美视频一区二区三区在线观看 | 最新欧美精品一区二区三区| 亚洲成人免费视频| 国产精品中文欧美| 欧美人伦禁忌dvd放荡欲情| 中文字幕一区二区三区av| 轻轻草成人在线| 91免费视频观看| 国产日韩欧美综合一区| 午夜精品福利在线|