亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久久久久久性| 欧美日韩精品一区二区三区 | 欧美一区二区日韩一区二区| 日韩亚洲欧美在线| 国产视频亚洲色图| 亚洲综合在线观看视频| 美女网站视频久久| 成人网在线免费视频| 色爱区综合激月婷婷| 日韩一区二区三区观看| 国产精品久久夜| 水野朝阳av一区二区三区| 国产传媒一区在线| 欧美天堂一区二区三区| 精品国产乱码久久久久久闺蜜| 国产精品久久久久毛片软件| 亚洲gay无套男同| 国产麻豆欧美日韩一区| 欧洲视频一区二区| 久久久精品免费免费| 亚洲乱码国产乱码精品精可以看| 美女国产一区二区三区| 91麻豆国产精品久久| 欧美不卡一二三| 亚洲精选视频免费看| 国产一区视频在线看| 欧美日韩亚洲不卡| 中文字幕免费不卡| 久久99久久99| 欧美亚洲图片小说| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲一区二区在线播放相泽| 国产精品一区二区不卡| 欧美丰满高潮xxxx喷水动漫| 亚洲欧美自拍偷拍色图| 激情综合色播激情啊| 欧美精品1区2区3区| aaa亚洲精品| 狠狠色丁香婷婷综合| 日本乱码高清不卡字幕| 久久精品人人做| 美女免费视频一区| 欧美日本免费一区二区三区| 中文字幕一区二区三区在线观看| 人人狠狠综合久久亚洲| 91蝌蚪国产九色| 中文字幕第一区| 国产综合色精品一区二区三区| 欧美精品日韩一本| 亚洲制服丝袜av| 91香蕉视频在线| 国产欧美日韩在线观看| 激情综合色丁香一区二区| 欧美丰满一区二区免费视频 | 色狠狠综合天天综合综合| 久久久久久**毛片大全| 麻豆精品在线播放| 欧美一区永久视频免费观看| 亚洲成人免费视频| 欧洲精品中文字幕| 亚洲黄网站在线观看| 99re在线视频这里只有精品| 国产精品色呦呦| 成人综合激情网| 亚洲国产高清aⅴ视频| 国产精品一区二区免费不卡 | 波多野结衣中文字幕一区| 久久精品欧美一区二区三区麻豆| 精品一区二区三区视频在线观看 | 激情深爱一区二区| 日韩精品一区二区在线观看| 久久精品国产久精国产爱| 日韩亚洲欧美高清| 久久精品国产网站| 精品欧美乱码久久久久久1区2区| 麻豆国产91在线播放| 日韩精品一区二区三区视频在线观看| 日韩av午夜在线观看| 9191成人精品久久| 免费精品99久久国产综合精品| 日韩欧美国产高清| 福利电影一区二区| 亚洲成国产人片在线观看| 97精品超碰一区二区三区| 国产精品女人毛片| 99国产精品久久久久| 亚洲日本一区二区三区| 91极品美女在线| 亚洲图片欧美综合| 91精品欧美综合在线观看最新 | 在线免费观看日本一区| 亚洲无人区一区| 日韩精品影音先锋| 国产白丝精品91爽爽久久| 国产精品第五页| 欧美最新大片在线看| 青椒成人免费视频| 欧美电视剧免费观看| 国产成人免费高清| 一区二区在线看| 在线播放中文一区| 91猫先生在线| 国产精品国产三级国产| 色噜噜夜夜夜综合网| 婷婷国产在线综合| 久久亚洲捆绑美女| 99re这里只有精品首页| 日韩av电影一区| 欧美国产精品一区| 欧美性色黄大片手机版| 另类小说一区二区三区| 国产精品久久一卡二卡| 欧美精品视频www在线观看| 成人免费视频视频在线观看免费| 国产精品久久久久久久久动漫| 在线日韩av片| 国内精品伊人久久久久av影院| 自拍偷拍国产精品| 日韩一区二区精品在线观看| 成人网男人的天堂| 青青草国产精品亚洲专区无| 中文字幕一区二区5566日韩| 制服丝袜亚洲播放| 成人18视频日本| 毛片不卡一区二区| 一区二区三区不卡在线观看| 亚洲精品一区二区三区精华液| 色先锋aa成人| 国产精品一区二区视频| 午夜欧美大尺度福利影院在线看| 国产清纯在线一区二区www| 欧美日韩国产乱码电影| 成人午夜视频网站| 蜜臀va亚洲va欧美va天堂| 亚洲欧洲av色图| 久久久青草青青国产亚洲免观| 在线欧美一区二区| 国产成人精品免费视频网站| 日韩精品亚洲一区二区三区免费| 国产精品视频免费| 精品国产乱码久久久久久闺蜜| 欧美伊人久久久久久午夜久久久久| 国产伦精品一区二区三区免费| 亚洲国产另类av| 最新欧美精品一区二区三区| 久久亚洲欧美国产精品乐播| 91精品黄色片免费大全| 一本一道波多野结衣一区二区| 国产剧情av麻豆香蕉精品| 日韩高清中文字幕一区| 亚洲久草在线视频| 亚洲欧洲无码一区二区三区| 国产午夜一区二区三区| 精品日韩在线一区| 欧美乱熟臀69xxxxxx| 91久久精品一区二区三区| 粉嫩绯色av一区二区在线观看| 美女在线一区二区| 欧美韩日一区二区三区四区| 国产精品区一区二区三区| 日韩午夜激情电影| 欧美怡红院视频| 色94色欧美sute亚洲线路二| 成人免费视频网站在线观看| 国产一区二区调教| 卡一卡二国产精品| 丝袜脚交一区二区| 视频一区二区三区中文字幕| 亚洲综合在线电影| 亚洲一区二区三区国产| 亚洲视频资源在线| 亚洲欧洲精品成人久久奇米网| 国产日韩欧美在线一区| 久久久久久9999| 国产亚洲欧美激情| 国产午夜精品福利| 久久久久国产精品麻豆ai换脸| 日韩一二在线观看| 欧美一级欧美一级在线播放| 在线综合视频播放| 欧美精品xxxxbbbb| 91精品国产aⅴ一区二区| 日韩欧美专区在线| 日韩免费高清av| 精品欧美乱码久久久久久 | 久久疯狂做爰流白浆xx| 热久久免费视频| 久久精品国产在热久久| 精品一区二区三区日韩| 精品制服美女丁香| 国产一区二区伦理片| 久久精品国产77777蜜臀| 韩国三级中文字幕hd久久精品| 狠狠v欧美v日韩v亚洲ⅴ| 国产乱码一区二区三区| 国产成人av电影在线观看| 成人黄色av电影| 91九色02白丝porn| 欧美日产在线观看| 精品国产乱码久久久久久蜜臀|