summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bt_packet_logger.c33
-rw-r--r--src/bt_packet_logger.h4
2 files changed, 16 insertions, 21 deletions
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 @@
1/* 1/*
2 * bt_packet_logger.c 2 * bt_packet_logger.c
3 * com.apple.bt_packet_logger service implementation. 3 * com.apple.bluetooth.BTPacketLogger service implementation.
4 * 4 *
5 * Copyright (c) 2021 Geoffrey Kruse, All Rights Reserved. 5 * Copyright (c) 2021 Geoffrey Kruse, All Rights Reserved.
6 * 6 *
@@ -28,13 +28,16 @@
28#include "bt_packet_logger.h" 28#include "bt_packet_logger.h"
29#include "lockdown.h" 29#include "lockdown.h"
30#include "common/debug.h" 30#include "common/debug.h"
31
32struct bt_packet_logger_worker_thread { 31struct bt_packet_logger_worker_thread {
33 bt_packet_logger_client_t client; 32 bt_packet_logger_client_t client;
34 bt_packet_logger_receive_cb_t cbfunc; 33 bt_packet_logger_receive_cb_t cbfunc;
35 void *user_data; 34 void *user_data;
35 uint8_t rxbuff[BT_MAX_PACKET_SIZE];
36}; 36};
37 37
38#define SZ_READ_TIMEOUT 100
39#define PAYLOAD_READ_TIMEOUT 500
40
38/** 41/**
39 * Convert a service_error_t value to a bt_packet_logger_error_t value. 42 * Convert a service_error_t value to a bt_packet_logger_error_t value.
40 * Used internally to get correct error codes. 43 * Used internally to get correct error codes.
@@ -67,8 +70,6 @@ static bt_packet_logger_error_t bt_packet_logger_error(service_error_t err)
67 70
68LIBIMOBILEDEVICE_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) 71LIBIMOBILEDEVICE_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)
69{ 72{
70 *client = NULL;
71
72 if (!device || !service || service->port == 0 || !client || *client) { 73 if (!device || !service || service->port == 0 || !client || *client) {
73 debug_info("Incorrect parameter passed to bt_packet_logger_client_new."); 74 debug_info("Incorrect parameter passed to bt_packet_logger_client_new.");
74 return BT_PACKET_LOGGER_E_INVALID_ARG; 75 return BT_PACKET_LOGGER_E_INVALID_ARG;
@@ -111,11 +112,6 @@ LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_client_free(bt_pa
111 return err; 112 return err;
112} 113}
113 114
114LIBIMOBILEDEVICE_API bt_packet_logger_error_t bt_packet_logger_receive(bt_packet_logger_client_t client, char* data, uint32_t size, uint32_t *received)
115{
116 return bt_packet_logger_receive_with_timeout(client, data, size, received, 1000);
117}
118
119LIBIMOBILEDEVICE_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) 115LIBIMOBILEDEVICE_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)
120{ 116{
121 bt_packet_logger_error_t res = BT_PACKET_LOGGER_E_UNKNOWN_ERROR; 117 bt_packet_logger_error_t res = BT_PACKET_LOGGER_E_UNKNOWN_ERROR;
@@ -141,8 +137,9 @@ void *bt_packet_logger_worker(void *arg)
141 bt_packet_logger_error_t ret = BT_PACKET_LOGGER_E_UNKNOWN_ERROR; 137 bt_packet_logger_error_t ret = BT_PACKET_LOGGER_E_UNKNOWN_ERROR;
142 struct bt_packet_logger_worker_thread *btwt = (struct bt_packet_logger_worker_thread*)arg; 138 struct bt_packet_logger_worker_thread *btwt = (struct bt_packet_logger_worker_thread*)arg;
143 139
144 if (!btwt) 140 if (!btwt) {
145 return NULL; 141 return NULL;
142 }
146 143
147 debug_info("Running"); 144 debug_info("Running");
148 145
@@ -150,7 +147,7 @@ void *bt_packet_logger_worker(void *arg)
150 uint32_t bytes = 0; 147 uint32_t bytes = 0;
151 uint16_t len; 148 uint16_t len;
152 149
153 ret = bt_packet_logger_receive_with_timeout(btwt->client, &len, 2, &bytes, 100); 150 ret = bt_packet_logger_receive_with_timeout(btwt->client, (char*)&len, 2, &bytes, SZ_READ_TIMEOUT);
154 151
155 if (ret == BT_PACKET_LOGGER_E_TIMEOUT || ret == BT_PACKET_LOGGER_E_NOT_ENOUGH_DATA || ((bytes == 0) && (ret == BT_PACKET_LOGGER_E_SUCCESS))) { 152 if (ret == BT_PACKET_LOGGER_E_TIMEOUT || ret == BT_PACKET_LOGGER_E_NOT_ENOUGH_DATA || ((bytes == 0) && (ret == BT_PACKET_LOGGER_E_SUCCESS))) {
156 continue; 153 continue;
@@ -159,11 +156,10 @@ void *bt_packet_logger_worker(void *arg)
159 break; 156 break;
160 } 157 }
161 158
162 // todo remove magic and move "c" off stack 159 // sanity check received length
163 if(bytes > 0 && len > 12) { 160 if(bytes > 0 && len > sizeof(bt_packet_logger_header_t)) {
164 char c[65535];
165 debug_info("Reading %u bytes\n", len); 161 debug_info("Reading %u bytes\n", len);
166 ret = bt_packet_logger_receive_with_timeout(btwt->client, c, len, &bytes, 500); 162 ret = bt_packet_logger_receive_with_timeout(btwt->client, (char *)btwt->rxbuff, len, &bytes, PAYLOAD_READ_TIMEOUT);
167 163
168 if(len != bytes) { 164 if(len != bytes) {
169 debug_info("Failed Read Expected %u, Received %u\n", len, bytes); 165 debug_info("Failed Read Expected %u, Received %u\n", len, bytes);
@@ -177,13 +173,12 @@ void *bt_packet_logger_worker(void *arg)
177 break; 173 break;
178 } 174 }
179 175
180 btwt->cbfunc(c, len, btwt->user_data); 176 btwt->cbfunc(btwt->rxbuff, len, btwt->user_data);
181 } 177 }
182 } 178 }
183 179
184 if (btwt) { 180 // null check performed above
185 free(btwt); 181 free(btwt);
186 }
187 182
188 debug_info("Exiting"); 183 debug_info("Exiting");
189 184
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 @@
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */ 20 */
21 21
22#ifndef _SYSLOG_RELAY_H 22#ifndef _BR_PACKET_LOGGER_H
23#define _SYSLOG_RELAY_H 23#define _BR_PACKET_LOGGER_H
24 24
25#include "libimobiledevice/bt_packet_logger.h" 25#include "libimobiledevice/bt_packet_logger.h"
26#include "service.h" 26#include "service.h"