summaryrefslogtreecommitdiff
path: root/sysutils/netbt-hcidump/patches/patch-ao
blob: 7f95b03b3e476edc37db3261f7625e5216a61a39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
$NetBSD: patch-ao,v 1.4 2011/06/19 13:02:35 plunky Exp $

--- src/hcidump.c.orig	2011-06-13 01:54:33.000000000 +0000
+++ src/hcidump.c
@@ -50,6 +50,10 @@
 #include "parser/parser.h"
 #include "parser/sdp.h"
 
+#ifndef AI_ADDRCONFIG
+#define AI_ADDRCONFIG	0
+#endif
+
 #define SNAP_LEN 	HCI_MAX_FRAME_SIZE
 #define DEFAULT_PORT	"10839";
 
@@ -146,7 +150,7 @@ static inline int write_n(int fd, char *
 	return t;
 }
 
-static int process_frames(int dev, int sock, int fd, unsigned long flags)
+static int process_frames(char *dev, int sock, int fd, unsigned long flags)
 {
 	struct cmsghdr *cmsg;
 	struct msghdr msg;
@@ -188,7 +192,7 @@ static int process_frames(int dev, int s
 	if (dev == HCI_DEV_NONE)
 		printf("system: ");
 	else
-		printf("device: hci%d ", dev);
+		printf("device: %s ", dev);
 
 	printf("snap_len: %d filter: 0x%lx\n", snap_len, parser.filter);
 
@@ -530,10 +534,13 @@ static int open_file(char *file, int mod
 	return fd;
 }
 
-static int open_socket(int dev, unsigned long flags)
+static int open_socket(char *dev, unsigned long flags)
 {
-	struct sockaddr_hci addr;
+	struct sockaddr_bt addr;
 	struct hci_filter flt;
+#if 1
+	int sk, opt;
+#else
 	struct hci_dev_info di;
 	int sk, dd, opt;
 
@@ -559,6 +566,7 @@ static int open_socket(int dev, unsigned
 
 		hci_close_dev(dd);
 	}
+#endif
 
 	/* Create HCI socket */
 	sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
@@ -574,12 +582,13 @@ static int open_socket(int dev, unsigned
 	}
 
 	opt = 1;
-	if (setsockopt(sk, SOL_HCI, HCI_TIME_STAMP, &opt, sizeof(opt)) < 0) {
+	if (setsockopt(sk, SOL_SOCKET, SO_TIMESTAMP, &opt, sizeof(opt)) < 0) {
 		perror("Can't enable time stamp");
 		return -1;
 	}
 
 	/* Setup filter */
+#if 0
 	hci_filter_clear(&flt);
 	hci_filter_all_ptypes(&flt);
 	hci_filter_all_events(&flt);
@@ -587,13 +596,34 @@ static int open_socket(int dev, unsigned
 		perror("Can't set filter");
 		return -1;
 	}
+#else
+	memset(&flt, 0xff, sizeof(flt));
+	if (setsockopt(sk, BTPROTO_HCI, SO_HCI_EVT_FILTER, &flt, sizeof(flt)) < 0) {
+		perror("Can't set event filter");
+		exit(1);
+	}
+
+	if (setsockopt(sk, BTPROTO_HCI, SO_HCI_PKT_FILTER, &flt, sizeof(flt)) < 0) {
+		perror("Can't set packet filter");
+		exit(1);
+	}
+#endif
 
 	/* Bind socket to the HCI device */
 	memset(&addr, 0, sizeof(addr));
+#if 0
 	addr.hci_family = AF_BLUETOOTH;
 	addr.hci_dev = dev;
+#else
+	addr.bt_len = sizeof(addr);
+	addr.bt_family = AF_BLUETOOTH;
+	if (dev != HCI_DEV_NONE && !bt_devaddr(dev, &addr.bt_bdaddr)) {
+		perror("device");
+		exit(1);
+	}
+#endif
 	if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
-		printf("Can't attach to device hci%d. %s(%d)\n", 
+		printf("Can't attach to device %s. %s(%d)\n", 
 					dev, strerror(errno), errno);
 		return -1;
 	}
@@ -770,7 +800,7 @@ static int wait_connection(char *addr, c
 	return -1;
 }
 
-static int run_server(int dev, char *addr, char *port, unsigned long flags)
+static int run_server(char *dev, char *addr, char *port, unsigned long flags)
 {
 	while (1) {
 		int dd, sk;
@@ -902,7 +932,7 @@ int main(int argc, char *argv[])
 {
 	unsigned long flags = 0;
 	unsigned long filter = 0;
-	int device = 0;
+	char *device = HCI_DEV_NONE;
 	int defpsm = 0;
 	int defcompid = DEFAULT_COMPID;
 	int opt, pppdump_fd = -1, audio_fd = -1;
@@ -911,7 +941,7 @@ int main(int argc, char *argv[])
 		switch(opt) {
 		case 'i':
 			if (strcasecmp(optarg, "none") && strcasecmp(optarg, "system"))
-				device = atoi(optarg + 3);
+				device = optarg;
 			else
 				device = HCI_DEV_NONE;
 			break;