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

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

?? btutils.c

?? linux下bluetooth后臺服務程序
?? C
字號:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <ctype.h>#include <dirent.h>#include <fcntl.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/ioctl.h>#include <netdb.h>#include <bluetooth/bluetooth.h>#include <bluetooth/hci.h>#include <bluetooth/hci_lib.h>#include <bluetooth/rfcomm.h>#include <errno.h>#include "btdefines.h"#include "nonbluez.h"#include "btutils.h"#ifdef ENABLE_DEBUG_LOGchar* state2str(int state){	switch (state) {		case BT_STATE_UNINITIALIZED: return "BT_STATE_UNINITIALIZED";		case BT_STATE_INITIALIZED: return "BT_STATE_INITIALIZED";		case BT_STATE_START_LISTENING: return "BT_STATE_START_LISTENING";		case BT_STATE_LISTENING: return "BT_STATE_LISTENING";		case BT_STATE_START_CONNECTING: return "BT_STATE_START_CONNECTING";		case BT_STATE_REMOVE_CONNECTION: return "BT_STATE_REMOVE_CONNCETION";		case BT_STATE_CONNECTING: return "BT_STATE_CONNECTING";		case BT_STATE_CONNECTED: return "BT_STATE_CONNECTED";		case BT_STATE_APP_START: return "BT_STATE_APP_START";		case BT_STATE_APP_REMOVE_CONNECTION: return "BT_STATE_APP_REMOVE_CONNECTION";		case BT_STATE_APP_READY: return "BT_STATE_APP_READY";		case BT_STATE_APP_CLOSING: return "BT_STATE_APP_CLOSING";		case BT_STATE_CLOSING: return "BT_STATE_CLOSING";		case BT_PPP_STATE_UNINITIALIZED: return "BT_PPP_STATE_UNINITIALIZED";		case BT_PPP_STATE_INIT: return "BT_PPP_STATE_INIT";		case BT_PPP_STATE_REMOVE: return "BT_PPP_STATE_REMOVE";		case BT_PPP_STATE_CREATETTY: return "BT_PPP_STATE_CREATETTY";		case BT_PPP_STATE_CHECKTTY: return "BT_PPP_STATE_CHECKTTY";		case BT_PPP_STATE_START: return "BT_PPP_STATE_START";		case BT_PPP_STATE_CHECKREADY: return "BT_PPP_STATE_CHECKREADY";		case BT_PPP_STATE_CLOSING: return "BT_PPP_STATE_CLOSING";		default: return "!UNKNOWN!";	}}char* error2str(int error){	switch (error) {		case BT_ERR_NONE: return "BT_ERR_NONE";		case BT_ERR_FAILED: return "BT_ERR_FAILED";		case BT_ERR_TIMEOUT: return "BT_ERR_TIMEOUT";		case BT_ERR_ARGUMENT: return "BT_ERR_ARGUMENT";		case BT_ERR_NOMEMORY: return "BT_ERR_NOMEMORY";		case BT_ERR_STATE: return "BT_ERR_STATE";		case BT_ERR_INUSE: return "BT_ERR_INUSE";		case BT_ERR_CONNECTION: return "BT_ERR_CONNECTION";		default: return "!UNKNOWN!";	}}#endif //ENABLE_DEBUG_LOGint BTSendSig(char* procname, int sig){	struct dirent *de;	char  path[PATH_MAX + 1];	char  name[PATH_MAX + 1];	DIR   *dir;	int   pid = -1;	dir = opendir(BTU_PROCBASE);	if (!dir) {		DEBUG_LOG1("sendsig(): cannot locate %s\n", BTU_PROCBASE);		return -1;	}	while ((de = readdir(dir)) != NULL) {		if (isdigit(de->d_name[0])) {			sprintf(path, "%s/%s/exe", BTU_PROCBASE, de->d_name);			memset(name, 0, PATH_MAX + 1);			readlink(path, name, PATH_MAX);			if ((strlen(name) == strlen(procname) && !strcmp(name, procname)) ||			    (strlen(name) > strlen(procname) && name[strlen(name) - strlen(procname) - 1] == '/' && !strcmp(&name[strlen(name) - strlen(procname)], procname)) )				pid = atoi(de->d_name);		}	}	closedir(dir);	if (sig > 0) {		if (pid > 0) {			DEBUG_LOG3("sending %d to %s(%d)", sig, procname, pid);			kill(pid, sig);		} else {			DEBUG_LOG("cannot locate pid");		}	} else {	    DEBUG_LOG2("located %s at pid %d", procname, pid);	}	return pid;}void BTSetTimer(BTTimer timer, unsigned int timeout){	struct timeval tvadd;	gettimeofday(&timer->start, NULL);	if (timeout < 1000000) {		tvadd.tv_sec = 0;		tvadd.tv_usec = timeout;	} else {		tvadd.tv_sec = timeout / 1000000;		tvadd.tv_usec = timeout % 1000000;	}	timeradd(&timer->start, &tvadd, &timer->stop);	timer->timeout = timeout;}int BTTimerExpired(BTTimer timer){	struct timeval now;	gettimeofday(&now, NULL);	if (timercmp(&now, &timer->start, <= )) {		DEBUG_LOG("adjusting a timer");		BTSetTimer(timer, now.tv_sec*1000000 + now.tv_usec + timer->timeout / 2);	}	return timercmp(&timer->stop, &now, <= );}void BTEnablePageScan(){	int s;	struct THCIDeviceRequirements dr;	if ((s = socket(AF_BLUETOOTH, SOCK_RAW, BluetoothProtocolHCI)) != -1) {		dr.iDeviceID  = 0;		dr.iDeviceOptions = HciDeviceScanPage | HciDeviceScanInquiry;		if (fcntl(s, F_SETFL, O_NONBLOCK) != -1) {			if (ioctl(s, HCISETSCAN, (unsigned long)&dr) != -1) {				DEBUG_LOG("page scan enabled");			} else {				DEBUG_LOG("enabling page scan failed");			}		} else {			DEBUG_LOG("enabling page scan fcntl failed");		}		close(s);	} else {		DEBUG_LOG("enabling page scan socket failed");	}}void BTDisablePageScan(){	int s;	struct THCIDeviceRequirements dr;	if ((s = socket(AF_BLUETOOTH, SOCK_RAW, BluetoothProtocolHCI)) != -1) {		if (fcntl(s, F_SETFL, O_NONBLOCK) != -1) {			dr.iDeviceID  = 0;			dr.iDeviceOptions = HciDeviceDisableScan;			if ((ioctl(s, HCISETSCAN, (unsigned long)&dr)) != -1) {				DEBUG_LOG("page scan disabled");			} else {				DEBUG_LOG("disabling page scan ioctl failed");			}		} else {			DEBUG_LOG("disabling page scan fcntl failed");		}		close(s);	} else {		DEBUG_LOG("disabling page scan socket failed");	}}int BTGetActiveAclDev(char *bdaddrstr){	struct hci_dev_list_req *dl = NULL;	struct hci_dev_req *dr;	struct hci_conn_list_req *cl = NULL;	struct hci_conn_info *ci;	bdaddr_t bdaddr;	int ii, i, sk;	int result = -1;	if ((sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)) < 0)		return -1;	if (!(dl = (struct hci_dev_list_req*)malloc(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl))))		goto done;	if (!(cl = (struct hci_conn_list_req*)malloc(10 * sizeof(*ci) + sizeof(*cl))))		goto done;	dl->dev_num = HCI_MAX_DEV;	dr = dl->dev_req;	if (ioctl(sk, HCIGETDEVLIST, (void *) dl)) {		DEBUG_LOG("can't get device list");		goto done;	}	for (i = 0; i < dl->dev_num; i++, dr++)	{		if (hci_test_bit(HCI_UP, &dr->dev_opt)) {			cl->dev_id = dr->dev_id;			cl->conn_num = 10;			ci = cl->conn_info;			if (ioctl(sk, HCIGETCONNLIST, (void *) cl)) {				DEBUG_LOG("can't get connection list");				goto done;			}			for (ii = 0; ii < cl->conn_num; ii++, ci++) {				str2ba(bdaddrstr, &bdaddr);				if ( !bacmp(&ci->bdaddr, &bdaddr) && ci->type == ACL_LINK) {					result = dr->dev_id;					goto done;				}			}		}	}done:	close(sk);	if (cl)		free(cl);	if (dl) 		free(dl);	return result;}int BTIsAclLinkActive(char *bdaddrstr){	if (BTGetActiveAclDev(bdaddrstr) < 0)		return BT_FALSE;	else		return BT_TRUE;}void BTDestroyAclLink(char *bdaddrstr){	struct hci_conn_info_req *cr;	bdaddr_t bdaddr;	int dd, dev_id = BTGetActiveAclDev(bdaddrstr);	if (dev_id < 0)		return;	dd = hci_open_dev(dev_id);	if (dd < 0) {		DEBUG_LOG("HCI device open failed");		return;	}	if (!(cr = (struct hci_conn_info_req*)malloc(sizeof(*cr) + sizeof(struct hci_conn_info)))) {		DEBUG_LOG("cannot allocate memory");		return;	}	str2ba(bdaddrstr, &bdaddr);	bacpy(&cr->bdaddr, &bdaddr);	cr->type = ACL_LINK;	if (ioctl(dd, HCIGETCONNINFO, (unsigned long) cr) < 0) {		DEBUG_LOG("get connection info failed");		return;	}	if (hci_disconnect(dd, htobs(cr->conn_info->handle), HCI_OE_USER_ENDED_CONNECTION, 10000) < 0)		DEBUG_LOG("disconnect failed");	close(dd);	free(cr);	return;}int BTGetFileInt(const char* name){  int ret;  char fname[128];  snprintf(fname, sizeof fname, "%s", name);  FILE *fp = fopen(fname, "r");  if (fp != NULL)  {    if (fscanf(fp, "%d", &ret) != 1)    {      DEBUG_LOG2("%s: Unable to read value from %s", __func__, fname);      ret = -1;    }    fclose(fp);  }  else  {    DEBUG_LOG3("%s: Unable to open %s: %s", __func__, fname, strerror(errno));    ret = -1;  }  return ret;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久蜜臀| 99精品视频一区二区三区| 777色狠狠一区二区三区| 亚洲一区二区三区四区的| 精品视频色一区| 日本不卡在线视频| 亚洲精品一区二区在线观看| 国产乱色国产精品免费视频| 欧美国产精品一区二区| 91美女在线看| 日韩高清一级片| 2022国产精品视频| 成人黄色小视频| 亚洲国产精品麻豆| 精品国精品自拍自在线| 高清beeg欧美| 亚洲图片欧美色图| 精品福利视频一区二区三区| 国产九九视频一区二区三区| 亚洲精品写真福利| 日韩欧美在线影院| 成人免费的视频| 亚洲成av人片在线| 久久精品视频一区| 欧美性xxxxxxxx| 国产综合一区二区| 亚洲精品福利视频网站| 欧美成人艳星乳罩| 一本大道久久a久久综合| 日本欧美大码aⅴ在线播放| 国产日韩欧美a| 欧美日韩aaaaaa| 国产98色在线|日韩| 婷婷中文字幕一区三区| 国产精品视频免费| 91精品国产91综合久久蜜臀| 99视频精品免费视频| 人人精品人人爱| 一区二区三区四区在线| 久久婷婷成人综合色| 欧美日韩成人激情| kk眼镜猥琐国模调教系列一区二区 | 99精品热视频| 久久国产精品99久久人人澡| 亚洲美女免费在线| 欧美激情一区二区三区全黄| 91精品国产综合久久福利| 91香蕉视频黄| 国产99精品在线观看| 蜜臀av亚洲一区中文字幕| 亚洲另类在线制服丝袜| 久久久国产午夜精品 | 亚洲国产一二三| 亚洲国产精品t66y| 精品国产一区二区三区不卡| 欧美午夜影院一区| 99国产精品久久久久久久久久久| 国产一区二区h| 麻豆中文一区二区| 日韩精品成人一区二区三区| 国产精品久久久久久久久图文区| 日韩免费一区二区三区在线播放| 欧美午夜在线一二页| 日本韩国视频一区二区| 丁香婷婷综合色啪| 国产成人超碰人人澡人人澡| 韩国在线一区二区| 九九精品一区二区| 开心九九激情九九欧美日韩精美视频电影| 亚洲午夜精品久久久久久久久| 亚洲视频小说图片| 亚洲欧美偷拍卡通变态| 中文字幕视频一区二区三区久| 欧美高清在线一区| 欧美国产综合一区二区| 欧美高清在线视频| 亚洲制服丝袜一区| 亚洲图片有声小说| 爽好多水快深点欧美视频| 亚洲成人av一区| 男女男精品视频| 久久国产婷婷国产香蕉| 久久99精品国产.久久久久| 久久国产尿小便嘘嘘尿| 日本不卡中文字幕| 国精产品一区一区三区mba桃花| 国产一区二区三区在线观看免费视频 | 欧美一区二区女人| 精品卡一卡二卡三卡四在线| 久久亚洲一级片| 国产精品免费视频网站| 亚洲人一二三区| 亚洲综合免费观看高清在线观看| 亚洲电影一区二区三区| 麻豆成人久久精品二区三区小说| 久久99热这里只有精品| 国产精品一区免费在线观看| 99麻豆久久久国产精品免费| 欧美吻胸吃奶大尺度电影| 91精品欧美久久久久久动漫| 久久蜜桃香蕉精品一区二区三区| 欧美国产一区视频在线观看| 亚洲欧美日韩综合aⅴ视频| 亚洲超碰97人人做人人爱| 日韩激情视频在线观看| 国产剧情一区二区三区| 91农村精品一区二区在线| 欧美日韩精品欧美日韩精品| 欧美精品一区在线观看| **欧美大码日韩| 男人的天堂久久精品| 成人性生交大合| 欧美日韩aaaaa| 中文成人综合网| 午夜久久久影院| 成人精品一区二区三区四区| 色素色在线综合| 久久这里只有精品首页| 亚洲精品成人a在线观看| 久久99国产精品麻豆| 99久久精品免费看| 日韩欧美高清dvd碟片| 综合亚洲深深色噜噜狠狠网站| 日韩电影免费在线看| 成人国产电影网| 日韩免费成人网| 一区二区三区在线不卡| 国产一区二三区| 欧美日韩国产综合一区二区| 欧美国产禁国产网站cc| 日本亚洲免费观看| 91麻豆福利精品推荐| 久久久亚洲精品一区二区三区| 亚洲午夜视频在线观看| 成人国产精品免费观看视频| 日韩免费高清av| 亚洲www啪成人一区二区麻豆| av一区二区三区黑人| 精品国产一区二区三区久久久蜜月| 一区二区三区在线观看视频| 成人午夜电影久久影院| 欧美成人r级一区二区三区| 亚洲国产日韩综合久久精品| av影院午夜一区| 国产欧美一区二区三区网站| 麻豆国产精品官网| 欧美高清激情brazzers| 亚洲美女视频在线| 成人午夜电影久久影院| wwww国产精品欧美| 久久99深爱久久99精品| 91精品国产美女浴室洗澡无遮挡| 亚洲一区在线视频| 91久久精品日日躁夜夜躁欧美| 国产精品久久久久婷婷| 国产成人免费av在线| 精品人伦一区二区色婷婷| 日韩av中文在线观看| 欧美日韩国产片| 亚洲国产wwwccc36天堂| 在线视频欧美区| 亚洲综合色在线| 在线观看视频一区| 亚洲一区二区三区四区五区中文 | 精品在线亚洲视频| 日韩欧美自拍偷拍| 九色综合狠狠综合久久| 欧美电影免费观看高清完整版在| 免费在线看成人av| 精品乱人伦小说| 国产乱色国产精品免费视频| 久久噜噜亚洲综合| 国产91精品精华液一区二区三区 | 中文字幕一区二区视频| av电影在线不卡| 亚洲精品免费一二三区| 欧美亚洲另类激情小说| 午夜精品久久久久久| 91精品国产色综合久久久蜜香臀| 麻豆一区二区三区| 久久久久久久久久美女| 波多野结衣在线aⅴ中文字幕不卡| 中文字幕亚洲视频| 欧美优质美女网站| 婷婷成人激情在线网| 欧美一区二区三区四区视频| 国产真实乱子伦精品视频| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精一区二区三区| 国产精品久久久久久久第一福利| 91久久一区二区| 天堂成人免费av电影一区| 日韩免费一区二区三区在线播放| 国产老妇另类xxxxx| 亚洲欧美精品午睡沙发| 在线综合亚洲欧美在线视频| 韩国精品一区二区| 日韩美女精品在线| 欧美一区二区三区系列电影| 国产美女娇喘av呻吟久久|