idevicebtlogger: Cleanup warnings, todos and magic numbers
diff --git a/include/libimobiledevice/bt_packet_logger.h b/include/libimobiledevice/bt_packet_logger.h
index 697e879..8916219 100644
--- a/include/libimobiledevice/bt_packet_logger.h
+++ b/include/libimobiledevice/bt_packet_logger.h
@@ -31,6 +31,7 @@
 #include <libimobiledevice/lockdown.h>
 
 #define BT_PACKETLOGGER_SERVICE_NAME "com.apple.bluetooth.BTPacketLogger"
+#define BT_MAX_PACKET_SIZE 65535
 
 /** Error Codes */
 typedef enum {
@@ -43,6 +44,12 @@
 	BT_PACKET_LOGGER_E_UNKNOWN_ERROR   = -256
 } bt_packet_logger_error_t;
 
+typedef struct {
+	uint32_t length;
+	uint32_t ts_secs;
+	uint32_t ts_usecs;
+} bt_packet_logger_header_t;
+
 typedef struct bt_packet_logger_client_private bt_packet_logger_client_private;
 typedef bt_packet_logger_client_private *bt_packet_logger_client_t; /**< The client handle. */
 
@@ -141,19 +148,6 @@
  */
 bt_packet_logger_error_t bt_packet_logger_receive_with_timeout(bt_packet_logger_client_t client, char *data, uint32_t size, uint32_t *received, unsigned int timeout);
 
-/**
- * Receives data from the service.
- *
- * @param client The bt_packet_logger client
- * @param data Buffer that will be filled with the data received
- * @param size Number of bytes to receive
- * @param received Number of bytes received (can be NULL to ignore)
- * @param timeout Maximum time in milliseconds to wait for data.
- *
- * @return BT_PACKET_LOGGER_E_SUCCESS on success,
- *  BT_PACKET_LOGGER_E_INVALID_ARG when client or plist is NULL
- */
-bt_packet_logger_error_t bt_packet_logger_receive(bt_packet_logger_client_t client, char *data, uint32_t size, uint32_t *received);
 
 #ifdef __cplusplus
 }
diff --git a/src/bt_packet_logger.c b/src/bt_packet_logger.c
index 5391825..196039e 100644
--- a/src/bt_packet_logger.c
+++ b/src/bt_packet_logger.c
@@ -1,6 +1,6 @@
 /*
  * bt_packet_logger.c
- * com.apple.bt_packet_logger service implementation.
+ * com.apple.bluetooth.BTPacketLogger service implementation.
  *
  * Copyright (c) 2021 Geoffrey Kruse, All Rights Reserved.
  *
@@ -28,13 +28,16 @@
 #include "bt_packet_logger.h"
 #include "lockdown.h"
 #include "common/debug.h"
-
 struct bt_packet_logger_worker_thread {
 	bt_packet_logger_client_t client;
 	bt_packet_logger_receive_cb_t cbfunc;
 	void *user_data;
+	uint8_t rxbuff[BT_MAX_PACKET_SIZE];
 };
 
+#define SZ_READ_TIMEOUT 100
+#define PAYLOAD_READ_TIMEOUT 500
+
 /**
  * Convert a service_error_t value to a bt_packet_logger_error_t value.
  * Used internally to get correct error codes.
@@ -67,8 +70,6 @@
 
 LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_client_new(idevice_t device, lockdownd_service_descriptor_t service, bt_packet_logger_client_t * client)
 {
-	*client = NULL;
-
 	if (!device || !service || service->port == 0 || !client || *client) {
 		debug_info("Incorrect parameter passed to bt_packet_logger_client_new.");
 		return BT_PACKET_LOGGER_E_INVALID_ARG;
@@ -111,11 +112,6 @@
 	return err;
 }
 
-LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_receive(bt_packet_logger_client_t client, char* data, uint32_t size, uint32_t *received)
-{
-	return bt_packet_logger_receive_with_timeout(client, data, size, received, 1000);
-}
-
 LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_receive_with_timeout(bt_packet_logger_client_t client, char* data, uint32_t size, uint32_t *received, unsigned int timeout)
 {
 	bt_packet_logger_error_t res = BT_PACKET_LOGGER_E_UNKNOWN_ERROR;
@@ -141,8 +137,9 @@
 	bt_packet_logger_error_t ret = BT_PACKET_LOGGER_E_UNKNOWN_ERROR;
 	struct bt_packet_logger_worker_thread *btwt = (struct bt_packet_logger_worker_thread*)arg;
 
-	if (!btwt)
+	if (!btwt) {
 		return NULL;
+	}
 
 	debug_info("Running");
 
@@ -150,7 +147,7 @@
 		uint32_t bytes = 0;
 		uint16_t len;
 
-		ret = bt_packet_logger_receive_with_timeout(btwt->client, &len, 2, &bytes, 100);
+		ret = bt_packet_logger_receive_with_timeout(btwt->client, (char*)&len, 2, &bytes, SZ_READ_TIMEOUT);
 
 		if (ret == BT_PACKET_LOGGER_E_TIMEOUT || ret == BT_PACKET_LOGGER_E_NOT_ENOUGH_DATA || ((bytes == 0) && (ret == BT_PACKET_LOGGER_E_SUCCESS))) {
 			continue;
@@ -159,11 +156,10 @@
 			break;
 		}
 
-		// todo remove magic and move "c" off stack
-		if(bytes > 0 && len > 12) {
-			char c[65535];
+		// sanity check received length
+		if(bytes > 0 && len > sizeof(bt_packet_logger_header_t)) {
 			debug_info("Reading %u bytes\n", len);
-			ret = bt_packet_logger_receive_with_timeout(btwt->client, c, len, &bytes, 500);
+			ret = bt_packet_logger_receive_with_timeout(btwt->client, (char *)btwt->rxbuff, len, &bytes, PAYLOAD_READ_TIMEOUT);
 
 			if(len != bytes) {
 				debug_info("Failed Read Expected %u, Received %u\n", len, bytes);
@@ -177,13 +173,12 @@
 				break;
 			}
 
-			btwt->cbfunc(c, len, btwt->user_data);
+			btwt->cbfunc(btwt->rxbuff, len, btwt->user_data);
 		}
 	}
 
-	if (btwt) {
-		free(btwt);
-	}
+	// null check performed above
+	free(btwt);
 
 	debug_info("Exiting");
 
diff --git a/src/bt_packet_logger.h b/src/bt_packet_logger.h
index 1ad906d..f9e0c3e 100644
--- a/src/bt_packet_logger.h
+++ b/src/bt_packet_logger.h
@@ -19,8 +19,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#ifndef _SYSLOG_RELAY_H
-#define _SYSLOG_RELAY_H
+#ifndef _BR_PACKET_LOGGER_H
+#define _BR_PACKET_LOGGER_H
 
 #include "libimobiledevice/bt_packet_logger.h"
 #include "service.h"
diff --git a/tools/idevicebtlogger.c b/tools/idevicebtlogger.c
index fc42290..5446ecf 100644
--- a/tools/idevicebtlogger.c
+++ b/tools/idevicebtlogger.c
@@ -43,9 +43,7 @@
 
 #include <libimobiledevice/libimobiledevice.h>
 #include <libimobiledevice/bt_packet_logger.h>
-#include <pcap.h>// todo windows???
-
-#define BT_MAX_PACKET_SIZE 65535
+#include <pcap.h>
 
 static int quit_flag = 0;
 static int exit_on_disconnect = 0;
@@ -57,12 +55,6 @@
 static char* out_filename = NULL;
 static pcap_dumper_t * dump;
 
-typedef struct {
-	uint32_t length;
-	uint32_t ts_secs;
-	uint32_t ts_usecs;
-} PacketHeaderType;
-
 typedef enum {
 	HCI_COMMAND = 0x00,
 	HCI_EVENT = 0x01,
@@ -72,12 +64,12 @@
 
 static void bt_packet_logger_callback(uint8_t * data, uint16_t len, void *user_data)
 {
-	PacketHeaderType * header = (PacketHeaderType *)data;
-	uint16_t offset = sizeof(PacketHeaderType);
+	bt_packet_logger_header_t * header = (bt_packet_logger_header_t *)data;
+	uint16_t offset = sizeof(bt_packet_logger_header_t);
 
 	struct pcap_pkthdr pcap_header;
 	pcap_header.caplen = ntohl(header->length);
-	pcap_header.len = len - sizeof(PacketHeaderType);
+	pcap_header.len = len - sizeof(bt_packet_logger_header_t);
 	pcap_header.ts.tv_sec = ntohl(header->ts_secs);
 	pcap_header.ts.tv_usec = ntohl(header->ts_usecs);