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

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

?? hcidump.c

?? bluetooth 開發程序bluez-hcidump-1.28
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * *  BlueZ - Bluetooth protocol stack for Linux * *  Copyright (C) 2000-2002  Maxim Krasnyansky <maxk@qualcomm.com> *  Copyright (C) 2003-2005  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 <getopt.h>#include <sys/stat.h>#include <sys/types.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <bluetooth/bluetooth.h>#include <bluetooth/hci.h>#include <bluetooth/hci_lib.h>#include <arpa/inet.h>#include <netinet/in.h>#include <netdb.h>#include "parser/parser.h"#include "parser/sdp.h"#if __BYTE_ORDER == __LITTLE_ENDIANstatic inline uint64_t ntoh64(uint64_t n){	uint64_t h;	uint64_t tmp = ntohl(n & 0x00000000ffffffff);	h = ntohl(n >> 32);	h |= tmp << 32;	return h;}#elif __BYTE_ORDER == __BIG_ENDIAN#define ntoh64(x) (x)#else#error "Unknown byte order"#endif#define hton64(x) ntoh64(x)#define SNAP_LEN 	HCI_MAX_FRAME_SIZE#define DEFAULT_PORT	10839;/* Modes */enum {	PARSE,	READ,	WRITE,	RECEIVE,	SEND,	AUDIO};/* Default options */static int  device;static int  snap_len = SNAP_LEN;static int  defpsm = 0;static int  defcompid = DEFAULT_COMPID;static int  mode = PARSE;static int  permcheck = 1;static long flags;static long filter;static char *dump_file = NULL;static char *audio_file = NULL;static in_addr_t dump_addr = INADDR_LOOPBACK;static in_port_t dump_port = DEFAULT_PORT;struct hcidump_hdr {	uint16_t	len;	uint8_t		in;	uint8_t		pad;	uint32_t	ts_sec;	uint32_t	ts_usec;} __attribute__ ((packed));#define HCIDUMP_HDR_SIZE (sizeof(struct hcidump_hdr))struct btsnoop_hdr {	uint8_t		id[8];		/* Identification Pattern */	uint32_t	version;	/* Version Number = 1 */	uint32_t	type;		/* Datalink Type */} __attribute__ ((packed));#define BTSNOOP_HDR_SIZE (sizeof(struct btsnoop_hdr))struct btsnoop_pkt {	uint32_t	size;		/* Original Length */	uint32_t	len;		/* Included Length */	uint32_t	flags;		/* Packet Flags */	uint32_t	drops;		/* Cumulative Drops */	uint64_t	ts;		/* Timestamp microseconds */	uint8_t		data[0];	/* Packet Data */} __attribute__ ((packed));#define BTSNOOP_PKT_SIZE (sizeof(struct btsnoop_pkt))static uint8_t btsnoop_id[] = { 0x62, 0x74, 0x73, 0x6e, 0x6f, 0x6f, 0x70, 0x00 };static uint32_t btsnoop_version = 0;static uint32_t btsnoop_type = 0;static inline int read_n(int fd, char *buf, int len){	register int t = 0, w;	while (len > 0) {		if ((w = read(fd, buf, len)) < 0) {			if (errno == EINTR || errno == EAGAIN)				continue;			return -1;		}		if (!w)			return 0;		len -= w; buf += w; t += w;	}	return t;}static inline int write_n(int fd, char *buf, int len){	register int t = 0, w;	while (len > 0) {		if ((w = write(fd, buf, len)) < 0) {			if (errno == EINTR || errno == EAGAIN)				continue;			return -1;		}		if (!w)			return 0;		len -= w; buf += w; t += w;	}	return t;}static void process_frames(int dev, int sock, int fd, unsigned long flags){	struct cmsghdr *cmsg;	struct msghdr msg;	struct iovec  iv;	struct hcidump_hdr *dh;	struct btsnoop_pkt *dp;	struct frame frm;	char *buf, *ctrl;	int len, hdr_size = HCIDUMP_HDR_SIZE;	if (snap_len < SNAP_LEN)		snap_len = SNAP_LEN;	if (flags & DUMP_BTSNOOP)		hdr_size = BTSNOOP_PKT_SIZE;	buf = malloc(snap_len + hdr_size);	if (!buf) {		perror("Can't allocate data buffer");		exit(1);	}	dh = (void *) buf;	dp = (void *) buf;	frm.data = buf + hdr_size;	ctrl = malloc(100);	if (!ctrl) {		perror("Can't allocate control buffer");		exit(1);	}	if (dev == HCI_DEV_NONE)		printf("system: ");	else		printf("device: hci%d ", dev);	printf("snap_len: %d filter: 0x%lx\n", snap_len, filter);	memset(&msg, 0, sizeof(msg));	while (1) {		iv.iov_base = frm.data;		iv.iov_len  = snap_len;		msg.msg_iov = &iv;		msg.msg_iovlen = 1;		msg.msg_control = ctrl;		msg.msg_controllen = 100;		len = recvmsg(sock, &msg, 0);		if (len < 0) {			perror("Receive failed");			exit(1);		}		/* Process control message */		frm.data_len = len;		frm.dev_id = dev;		frm.in = 0;		frm.audio_fd = parser.audio_fd;		cmsg = CMSG_FIRSTHDR(&msg);		while (cmsg) {			switch (cmsg->cmsg_type) {			case HCI_CMSG_DIR:				frm.in = *((int *) CMSG_DATA(cmsg));				break;			case HCI_CMSG_TSTAMP:				frm.ts = *((struct timeval *) CMSG_DATA(cmsg));				break;			}			cmsg = CMSG_NXTHDR(&msg, cmsg);		}		frm.ptr = frm.data;		frm.len = frm.data_len;		switch (mode) {		case WRITE:		case SEND:			/* Save or send dump */			if (flags & DUMP_BTSNOOP) {				uint64_t ts;				uint8_t pkt_type = ((uint8_t *) frm.data)[0];				dp->size = htonl(frm.data_len);				dp->len  = dp->size;				dp->flags = ntohl(frm.in & 0x01);				dp->drops = 0;				ts = (frm.ts.tv_sec - 946684800ll) * 1000000ll + frm.ts.tv_usec;				dp->ts = hton64(ts + 0x00E03AB44A676000ll);				if (pkt_type == HCI_COMMAND_PKT ||						pkt_type == HCI_EVENT_PKT)					dp->flags |= ntohl(0x02);			} else {				dh->len = htobs(frm.data_len);				dh->in  = frm.in;				dh->ts_sec  = htobl(frm.ts.tv_sec);				dh->ts_usec = htobl(frm.ts.tv_usec);			}			if (write_n(fd, buf, frm.data_len + hdr_size) < 0) {				perror("Write error");				exit(1);			}			break;		default:			/* Parse and print */			parse(&frm);			break;		}	}}static void read_dump(int fd){	struct hcidump_hdr dh;	struct btsnoop_pkt dp;	struct frame frm;	uint8_t pkt_type;	int err;	frm.data = malloc(HCI_MAX_FRAME_SIZE);	if (!frm.data) {		perror("Can't allocate data buffer");		exit(1);	}	while (1) {		if (parser.flags & DUMP_BTSNOOP)			err = read_n(fd, (void *) &dp, BTSNOOP_PKT_SIZE);		else			err = read_n(fd, (void *) &dh, HCIDUMP_HDR_SIZE);		if (err < 0)			goto failed;		if (!err)			return;		if (parser.flags & DUMP_BTSNOOP) {			switch (btsnoop_type) {			case 1001:				if (ntohl(dp.flags) & 0x02) {					if (ntohl(dp.flags) & 0x01)						pkt_type = HCI_EVENT_PKT;					else						pkt_type = HCI_COMMAND_PKT;				} else					pkt_type = HCI_ACLDATA_PKT;				((uint8_t *) frm.data)[0] = pkt_type;				frm.data_len = ntohl(dp.len) + 1;				err = read_n(fd, frm.data + 1, frm.data_len - 1);				break;			case 1002:				frm.data_len = ntohl(dp.len);				err = read_n(fd, frm.data, frm.data_len);				break;			}		} else {			frm.data_len = btohs(dh.len);			err = read_n(fd, frm.data, frm.data_len);		}		if (err < 0)			goto failed;		if (!err)			return;		frm.ptr = frm.data;		frm.len = frm.data_len;		if (parser.flags & DUMP_BTSNOOP) {			uint64_t ts;			frm.in = ntohl(dp.flags) & 0x01;			ts = ntoh64(dp.ts) - 0x00E03AB44A676000ll;			frm.ts.tv_sec = (ts / 1000000ll) + 946684800ll;			frm.ts.tv_usec = ts % 1000000ll; 		} else {			frm.in = dh.in;			frm.ts.tv_sec  = btohl(dh.ts_sec);			frm.ts.tv_usec = btohl(dh.ts_usec);		}		parse(&frm);	}failed:	perror("Read failed");	exit(1);}static int open_file(char *file, int mode, unsigned long flags){	struct btsnoop_hdr hdr;	int fd, len, open_flags;	if (mode == WRITE || mode == AUDIO) {		if (flags & DUMP_BTSNOOP)			open_flags = O_WRONLY | O_CREAT;		else			open_flags = O_WRONLY | O_CREAT | O_APPEND;	} else		open_flags = O_RDONLY;	fd = open(file, open_flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);	if (fd < 0) {		perror("Can't open dump file");		exit(1);	}	if (mode == READ) {		len = read(fd, &hdr, BTSNOOP_HDR_SIZE);		if (len != BTSNOOP_HDR_SIZE) {			lseek(fd, 0, SEEK_SET);			return fd;		}		if (!memcmp(hdr.id, btsnoop_id, sizeof(btsnoop_id))) {			parser.flags |= DUMP_BTSNOOP;			btsnoop_version = ntohl(hdr.version);			btsnoop_type = ntohl(hdr.type);			printf("btsnoop version: %d datalink type: %d\n",						btsnoop_version, btsnoop_type);			if (btsnoop_version != 1) {				fprintf(stderr, "Unsupported BTSnoop version\n");				exit(1);			}			if (btsnoop_type != 1001 && btsnoop_type != 1002) {				fprintf(stderr, "Unsupported BTSnoop datalink type\n");				exit(1);			}		} else {			parser.flags &= ~DUMP_BTSNOOP;			lseek(fd, 0, SEEK_SET);			return fd;		}	} else {		if (flags & DUMP_BTSNOOP) {			btsnoop_version = 1;			btsnoop_type = 1002;			memcpy(hdr.id, btsnoop_id, sizeof(btsnoop_id));			hdr.version = htonl(btsnoop_version);			hdr.type = htonl(btsnoop_type);			printf("btsnoop version: %d datalink type: %d\n",						btsnoop_version, btsnoop_type);			len = write(fd, &hdr, BTSNOOP_HDR_SIZE);			if (len < 0) {				perror("Can't create dump header");				exit(1);			}			if (len != BTSNOOP_HDR_SIZE) {				fprintf(stderr, "Header size mismatch\n");				exit(1);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情六月婷婷久久| 在线视频你懂得一区二区三区| 国产成人免费在线| 3d动漫精品啪啪一区二区竹菊| 欧美极品另类videosde| 天堂蜜桃91精品| 99国产精品一区| 久久久久久久久一| 石原莉奈在线亚洲二区| 成人精品免费网站| 精品少妇一区二区三区日产乱码 | 欧美一级午夜免费电影| 成人欧美一区二区三区白人| 免费成人在线影院| 在线观看亚洲成人| 亚洲人成网站精品片在线观看| 国产一区二区三区蝌蚪| 日韩天堂在线观看| 日韩国产在线一| 欧美曰成人黄网| 亚洲视频中文字幕| 波多野结衣亚洲| 久久久久久久久岛国免费| 裸体歌舞表演一区二区| 欧美精品视频www在线观看| 亚洲免费观看高清完整版在线观看| 精品亚洲成a人| 久久综合久久综合久久| 国精产品一区一区三区mba桃花 | 亚洲国产精品国自产拍av| 久久精品久久99精品久久| 欧美一区二区三级| 麻豆成人在线观看| 日韩欧美美女一区二区三区| 美女视频黄久久| 欧美大尺度电影在线| 免费看欧美美女黄的网站| 欧美一级在线视频| 狠狠色丁香婷综合久久| 国产亚洲欧美色| 成人综合婷婷国产精品久久蜜臀| 中文久久乱码一区二区| 成人av资源在线观看| 中文在线免费一区三区高中清不卡| 国产精品中文字幕一区二区三区| 久久久久免费观看| 成人免费高清在线| 亚洲色图19p| 在线欧美小视频| 日韩精品一级中文字幕精品视频免费观看 | 亚洲欧美日韩国产另类专区| 99久久伊人精品| 一区二区三区在线免费播放| 色菇凉天天综合网| 日本伊人精品一区二区三区观看方式| 欧美男生操女生| 久久99最新地址| 精品国产青草久久久久福利| 国产乱码精品1区2区3区| 国产精品国产精品国产专区不片| 色又黄又爽网站www久久| 亚洲6080在线| 国产午夜精品一区二区三区四区| 99久久久精品| 日韩中文欧美在线| 欧美激情在线看| 在线观看一区二区视频| 免费成人深夜小野草| 欧美精彩视频一区二区三区| 欧美三级韩国三级日本三斤| 久久成人久久爱| 亚洲欧美日韩国产成人精品影院| 91精品国产一区二区三区香蕉| 国产盗摄一区二区| 天天色综合成人网| 中文字幕免费观看一区| 欧美日韩一区二区三区不卡| 国产高清不卡二三区| 亚洲一卡二卡三卡四卡| 久久美女艺术照精彩视频福利播放| 91亚洲精品久久久蜜桃| 蜜臀av一区二区在线免费观看| 亚洲视频网在线直播| 精品国产网站在线观看| 欧美亚洲综合一区| 成人黄色小视频| 久久成人免费电影| 亚洲国产裸拍裸体视频在线观看乱了 | 成人免费高清在线观看| 蜜桃一区二区三区在线| 一区二区三区国产精华| 国产三级三级三级精品8ⅰ区| 制服视频三区第一页精品| www.成人在线| 国产一区二区精品久久91| 香蕉影视欧美成人| 一区二区高清在线| 国产精品久久久久国产精品日日| 精品播放一区二区| 欧美一级午夜免费电影| 欧美日本一道本在线视频| av电影天堂一区二区在线观看| 韩国午夜理伦三级不卡影院| 日韩黄色小视频| 日韩国产在线观看| 午夜精品久久久久久久| 一区二区三区不卡在线观看| 国产精品狼人久久影院观看方式| 国产亚洲午夜高清国产拍精品 | 欧美色综合影院| 色域天天综合网| 一本色道久久综合精品竹菊| 97国产精品videossex| 丁香激情综合国产| 成人avav影音| av电影天堂一区二区在线观看| av男人天堂一区| av亚洲精华国产精华精华| 成人av午夜影院| 91丨国产丨九色丨pron| 91老师国产黑色丝袜在线| 99精品视频在线免费观看| 99精品视频在线观看免费| 91丝袜美腿高跟国产极品老师 | 成人sese在线| 94-欧美-setu| 精品视频一区二区不卡| 欧美麻豆精品久久久久久| 欧美一卡二卡三卡| 久久久91精品国产一区二区精品 | 久久久美女毛片| 国产精品萝li| 亚洲免费av高清| 午夜精品福利久久久| 久久精品久久综合| 成人成人成人在线视频| 欧美亚洲愉拍一区二区| 欧美一区二区高清| 精品va天堂亚洲国产| 自拍偷拍欧美激情| 调教+趴+乳夹+国产+精品| 黄色资源网久久资源365| 成人97人人超碰人人99| 欧美三级视频在线播放| 欧美成人一区二区三区片免费| 国产精品国产精品国产专区不片| 亚洲一区二区三区四区五区黄| 蜜臀av性久久久久av蜜臀妖精| 成人综合婷婷国产精品久久免费| 在线观看视频一区二区欧美日韩| 日韩免费电影网站| 国产精品成人一区二区三区夜夜夜| 洋洋成人永久网站入口| 精品影视av免费| 色婷婷久久久综合中文字幕 | 欧美精品1区2区3区| 久久久不卡网国产精品二区| 亚洲精品一二三| 极品少妇xxxx精品少妇| 在线视频中文字幕一区二区| 欧美精品一区二区三区在线| 一区二区在线观看视频| 狠狠色丁香婷综合久久| 欧美三级日韩三级国产三级| 国产精品素人视频| 日韩影视精彩在线| 色噜噜夜夜夜综合网| 欧美激情一区二区在线| 日韩中文字幕91| 欧美中文一区二区三区| 国产精品久久精品日日| 麻豆精品一二三| 欧美片网站yy| 一区二区三区.www| 粉嫩嫩av羞羞动漫久久久| 在线综合+亚洲+欧美中文字幕| 综合色中文字幕| 成人不卡免费av| 欧美激情中文字幕一区二区| 久久精品久久99精品久久| 欧美精选一区二区| 一级女性全黄久久生活片免费| 国产91高潮流白浆在线麻豆 | 欧美喷水一区二区| 亚洲欧美电影院| av不卡一区二区三区| 国产无人区一区二区三区| 国产在线一区二区综合免费视频| 911精品国产一区二区在线| 亚洲一区二区不卡免费| 欧洲视频一区二区| 日韩一区在线播放| 99精品热视频| 亚洲日本青草视频在线怡红院| 成人深夜在线观看| 久久久久国产免费免费| 国产精品白丝jk白祙喷水网站| 精品日韩一区二区三区 | 亚洲电影中文字幕在线观看| 色婷婷综合久色|