Diff between b1e20ea79a5c7cd52931cffd315a25f527a07400 and 6d30d42da25c945d7b0c164869a1da719d9ddf52

Changed Files

File Additions Deletions Status
Makefile.tools +18 -18 modified
monitor/analyze.c +9 -4 modified
monitor/control.c +14 -9 modified

Full Patch

diff --git a/Makefile.tools b/Makefile.tools
index 9199222..b8df136 100644
--- a/Makefile.tools
+++ b/Makefile.tools
@@ -14,24 +14,24 @@ if MONITOR
 bin_PROGRAMS += monitor/btmon
 
 monitor_btmon_SOURCES = monitor/main.c monitor/bt.h \
-					monitor/mainloop.h monitor/mainloop.c \
-					monitor/display.h monitor/display.c \
-					monitor/hcidump.h monitor/hcidump.c \
-					monitor/btsnoop.h monitor/btsnoop.c \
-					monitor/ellisys.h monitor/ellisys.c \
-					monitor/control.h monitor/control.c \
-					monitor/packet.h monitor/packet.c \
-					monitor/vendor.h monitor/vendor.c \
-					monitor/lmp.h monitor/lmp.c \
-					monitor/crc.h monitor/crc.c \
-					monitor/ll.h monitor/ll.c \
-					monitor/l2cap.h monitor/l2cap.c \
-					monitor/sdp.h monitor/sdp.c \
-					monitor/uuid.h monitor/uuid.c \
-					monitor/hwdb.h monitor/hwdb.c \
-					monitor/analyze.h monitor/analyze.c \
-					src/shared/util.h src/shared/util.c \
-					src/shared/queue.h src/shared/queue.c
+				monitor/mainloop.h monitor/mainloop.c \
+				monitor/display.h monitor/display.c \
+				monitor/hcidump.h monitor/hcidump.c \
+				monitor/ellisys.h monitor/ellisys.c \
+				monitor/control.h monitor/control.c \
+				monitor/packet.h monitor/packet.c \
+				monitor/vendor.h monitor/vendor.c \
+				monitor/lmp.h monitor/lmp.c \
+				monitor/crc.h monitor/crc.c \
+				monitor/ll.h monitor/ll.c \
+				monitor/l2cap.h monitor/l2cap.c \
+				monitor/sdp.h monitor/sdp.c \
+				monitor/uuid.h monitor/uuid.c \
+				monitor/hwdb.h monitor/hwdb.c \
+				monitor/analyze.h monitor/analyze.c \
+				src/shared/util.h src/shared/util.c \
+				src/shared/queue.h src/shared/queue.c \
+				src/shared/btsnoop.h src/shared/btsnoop.c
 monitor_btmon_LDADD = lib/libbluetooth-internal.la @UDEV_LIBS@
 endif
 
diff --git a/monitor/analyze.c b/monitor/analyze.c
index afb6dee..2d994e3 100644
--- a/monitor/analyze.c
+++ b/monitor/analyze.c
@@ -31,7 +31,7 @@
 
 #include "src/shared/util.h"
 #include "src/shared/queue.h"
-#include "monitor/btsnoop.h"
+#include "src/shared/btsnoop.h"
 #include "monitor/bt.h"
 #include "analyze.h"
 
@@ -255,12 +255,16 @@ static void sco_pkt(struct timeval *tv, uint16_t index,
 
 void analyze_trace(const char *path)
 {
+	struct btsnoop *btsnoop_file;
 	unsigned long num_packets = 0;
 	uint32_t type;
 
-	if (btsnoop_open(path, &type) < 0)
+	btsnoop_file = btsnoop_open(path);
+	if (!btsnoop_file)
 		return;
 
+	type = btsnoop_get_type(btsnoop_file);
+
 	switch (type) {
 	case BTSNOOP_TYPE_HCI:
 	case BTSNOOP_TYPE_UART:
@@ -282,7 +286,8 @@ void analyze_trace(const char *path)
 		struct timeval tv;
 		uint16_t index, opcode, pktlen;
 
-		if (btsnoop_read_hci(&tv, &index, &opcode, buf, &pktlen) < 0)
+		if (btsnoop_read_hci(btsnoop_file, &tv, &index, &opcode,
+							buf, &pktlen) < 0)
 			break;
 
 		switch (opcode) {
@@ -316,5 +321,5 @@ void analyze_trace(const char *path)
 	queue_destroy(dev_list, dev_destroy);
 
 done:
-	btsnoop_close();
+	btsnoop_unref(btsnoop_file);
 }
diff --git a/monitor/control.c b/monitor/control.c
index c132b41..bf0ee02 100644
--- a/monitor/control.c
+++ b/monitor/control.c
@@ -41,7 +41,7 @@
 #include "lib/mgmt.h"
 
 #include "src/shared/util.h"
-#include "monitor/btsnoop.h"
+#include "src/shared/btsnoop.h"
 #include "mainloop.h"
 #include "display.h"
 #include "packet.h"
@@ -49,6 +49,7 @@
 #include "ellisys.h"
 #include "control.h"
 
+static struct btsnoop *btsnoop_file = NULL;
 static bool hcidump_fallback = false;
 
 #define MAX_PACKET_SIZE		(1486 + 4)
@@ -628,7 +629,8 @@ static void data_callback(int fd, uint32_t events, void *user_data)
 			break;
 		case HCI_CHANNEL_MONITOR:
 			packet_monitor(tv, index, opcode, data->buf, pktlen);
-			btsnoop_write_hci(tv, index, opcode, data->buf, pktlen);
+			btsnoop_write_hci(btsnoop_file, tv, index, opcode,
+							data->buf, pktlen);
 			ellisys_inject_hci(tv, index, opcode,
 							data->buf, pktlen);
 			break;
@@ -813,7 +815,7 @@ void control_server(const char *path)
 
 void control_writer(const char *path)
 {
-	btsnoop_create(path, BTSNOOP_TYPE_MONITOR);
+	btsnoop_file = btsnoop_create(path, BTSNOOP_TYPE_MONITOR);
 }
 
 void control_reader(const char *path)
@@ -823,9 +825,12 @@ void control_reader(const char *path)
 	uint32_t type;
 	struct timeval tv;
 
-	if (btsnoop_open(path, &type) < 0)
+	btsnoop_file = btsnoop_open(path);
+	if (!btsnoop_file)
 		return;
 
+	type = btsnoop_get_type(btsnoop_file);
+
 	switch (type) {
 	case BTSNOOP_TYPE_HCI:
 	case BTSNOOP_TYPE_UART:
@@ -847,8 +852,8 @@ void control_reader(const char *path)
 		while (1) {
 			uint16_t index, opcode;
 
-			if (btsnoop_read_hci(&tv, &index, &opcode,
-							buf, &pktlen) < 0)
+			if (!btsnoop_read_hci(btsnoop_file, &tv, &index,
+							&opcode, buf, &pktlen))
 				break;
 
 			packet_monitor(&tv, index, opcode, buf, pktlen);
@@ -860,8 +865,8 @@ void control_reader(const char *path)
 		while (1) {
 			uint16_t frequency;
 
-			if (btsnoop_read_phy(&tv, &frequency,
-							buf, &pktlen) < 0)
+			if (!btsnoop_read_phy(btsnoop_file, &tv, &frequency,
+								buf, &pktlen))
 				break;
 
 			packet_simulator(&tv, frequency, buf, pktlen);
@@ -871,7 +876,7 @@ void control_reader(const char *path)
 
 	close_pager();
 
-	btsnoop_close();
+	btsnoop_unref(btsnoop_file);
 }
 
 int control_tracing(void)