summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usbmuxd/client.c20
-rw-r--r--usbmuxd/device.c56
-rw-r--r--usbmuxd/main.c8
-rw-r--r--usbmuxd/usb-linux.c20
4 files changed, 52 insertions, 52 deletions
diff --git a/usbmuxd/client.c b/usbmuxd/client.c
index b33d892..7a3160f 100644
--- a/usbmuxd/client.c
+++ b/usbmuxd/client.c
@@ -105,11 +105,11 @@ int client_accept(int listenfd)
usbmuxd_log(LL_ERROR, "accept() failed (%s)", strerror(errno));
return cfd;
}
-
+
struct mux_client *client;
client = malloc(sizeof(struct mux_client));
memset(client, 0, sizeof(struct mux_client));
-
+
client->fd = cfd;
client->ob_buf = malloc(REPLY_BUF_SIZE);
client->ob_size = 0;
@@ -119,9 +119,9 @@ int client_accept(int listenfd)
client->ib_capacity = CMD_BUF_SIZE;
client->state = CLIENT_COMMAND;
client->events = POLLIN;
-
+
collection_add(&client_list, client);
-
+
usbmuxd_log(LL_INFO, "New client on fd %d", client->fd);
return client->fd;
}
@@ -216,14 +216,14 @@ static int start_listen(struct mux_client *client)
struct device_info *devs;
struct device_info *dev;
int count, i;
-
+
client->state = CLIENT_LISTEN;
count = device_get_count();
if(!count)
return 0;
devs = malloc(sizeof(struct device_info) * count);
count = device_get_list(devs);
-
+
// going to need a larger buffer for many devices
int needed_buffer = count * (sizeof(struct client_msg_dev) + sizeof(struct client_header)) + REPLY_BUF_SIZE;
if(client->ob_capacity < needed_buffer) {
@@ -246,7 +246,7 @@ static int client_command(struct mux_client *client, struct client_header *hdr,
{
int res;
usbmuxd_log(LL_DEBUG, "Client command in fd %d len %d ver %d msg %d tag %d", client->fd, hdr->length, hdr->version, hdr->message, hdr->tag);
-
+
if(client->state != CLIENT_COMMAND) {
usbmuxd_log(LL_ERROR, "Client %d command received in the wrong state", client->fd);
if(send_result(client, hdr->tag, RESULT_BADCOMMAND) < 0)
@@ -254,7 +254,7 @@ static int client_command(struct mux_client *client, struct client_header *hdr,
client_close(client);
return -1;
}
-
+
struct client_msg_connect *ch;
switch(hdr->message) {
case MESSAGE_LISTEN:
@@ -392,7 +392,7 @@ void client_process(int fd, short events)
process_send(client);
}
}
-
+
}
void client_device_add(struct device_info *dev)
@@ -401,7 +401,7 @@ void client_device_add(struct device_info *dev)
FOREACH(struct mux_client *client, &client_list) {
if(client->state == CLIENT_LISTEN)
notify_device(client, dev);
- } ENDFOREACH
+ } ENDFOREACH
}
void client_device_remove(int device_id)
{
diff --git a/usbmuxd/device.c b/usbmuxd/device.c
index cddf718..3a5883c 100644
--- a/usbmuxd/device.c
+++ b/usbmuxd/device.c
@@ -142,7 +142,7 @@ static int send_packet(struct mux_device *dev, enum mux_protocol proto, void *he
unsigned char *buffer;
int hdrlen;
int res;
-
+
switch(proto) {
case MUX_PROTO_VERSION:
hdrlen = sizeof(struct version_header);
@@ -155,14 +155,14 @@ static int send_packet(struct mux_device *dev, enum mux_protocol proto, void *he
return -1;
}
usbmuxd_log(LL_SPEW, "send_packet(%d, 0x%x, %p, %p, %d)", dev->id, proto, header, data, length);
-
+
int total = sizeof(struct mux_header) + hdrlen + length;
-
+
if(total > USB_MTU) {
usbmuxd_log(LL_ERROR, "Tried to send packet larger than USB MTU (hdr %d data %d total %d) to device %d", hdrlen, length, total, dev->id);
return -1;
}
-
+
buffer = malloc(total);
struct mux_header *mhdr = (struct mux_header *)buffer;
mhdr->protocol = htonl(proto);
@@ -170,7 +170,7 @@ static int send_packet(struct mux_device *dev, enum mux_protocol proto, void *he
memcpy(buffer + sizeof(struct mux_header), header, hdrlen);
if(data && length)
memcpy(buffer + sizeof(struct mux_header) + hdrlen, data, length);
-
+
if((res = usb_send(dev->usbdev, buffer, total)) < 0) {
usbmuxd_log(LL_ERROR, "usb_send failed while sending packet (len %d) to device %d: %d", total, dev->id, res);
free(buffer);
@@ -183,7 +183,7 @@ static uint16_t find_sport(struct mux_device *dev)
{
if(collection_count(&dev->connections) >= 65535)
return 0; //insanity
-
+
while(1) {
int ok = 1;
FOREACH(struct mux_connection *conn, &dev->connections) {
@@ -207,7 +207,7 @@ static int send_anon_rst(struct mux_device *dev, uint16_t sport, uint16_t dport,
th.th_ack = htonl(ack);
th.th_flags = TH_RST;
th.th_off = sizeof(th) / 4;
-
+
usbmuxd_log(LL_DEBUG, "[OUT] dev=%d sport=%d dport=%d flags=0x%x", dev->id, sport, dport, th.th_flags);
int res = send_packet(dev, MUX_PROTO_TCP, &th, NULL, 0);
@@ -225,7 +225,7 @@ static int send_tcp(struct mux_connection *conn, uint8_t flags, const unsigned c
th.th_flags = flags;
th.th_off = sizeof(th) / 4;
th.th_win = htons(conn->tx_win >> 8);
-
+
usbmuxd_log(LL_DEBUG, "[OUT] dev=%d sport=%d dport=%d seq=%d ack=%d flags=0x%x window=%d[%d] len=%d",
conn->dev->id, conn->sport, conn->dport, conn->tx_seq, conn->tx_ack, flags, conn->tx_win, conn->tx_win >> 8, length);
@@ -278,7 +278,7 @@ int device_start_connect(int device_id, uint16_t dport, struct mux_client *clien
usbmuxd_log(LL_WARNING, "Attempted to connect to nonexistent device %d", device_id);
return -RESULT_BADDEV;
}
-
+
uint16_t sport = find_sport(dev);
if(!sport) {
usbmuxd_log(LL_WARNING, "Unable to allocate port for device %d", device_id);
@@ -288,7 +288,7 @@ int device_start_connect(int device_id, uint16_t dport, struct mux_client *clien
struct mux_connection *conn;
conn = malloc(sizeof(struct mux_connection));
memset(conn, 0, sizeof(struct mux_connection));
-
+
conn->dev = dev;
conn->client = client;
conn->state = CONN_CONNECTING;
@@ -301,15 +301,15 @@ int device_start_connect(int device_id, uint16_t dport, struct mux_client *clien
conn->rx_recvd = 0;
conn->flags = 0;
conn->max_payload = USB_MTU - sizeof(struct mux_header) - sizeof(struct tcphdr);
-
+
conn->ob_buf = malloc(CONN_OUTBUF_SIZE);
conn->ob_capacity = CONN_OUTBUF_SIZE;
conn->ib_buf = malloc(CONN_INBUF_SIZE);
conn->ib_capacity = CONN_INBUF_SIZE;
conn->ib_size = 0;
-
+
int res;
-
+
res = send_tcp(conn, TH_SYN, NULL, 0);
if(res < 0) {
usbmuxd_log(LL_ERROR, "Error sending TCP SYN to device %d (%d->%d)", dev->id, sport, dport);
@@ -323,12 +323,12 @@ int device_start_connect(int device_id, uint16_t dport, struct mux_client *clien
static void update_connection(struct mux_connection *conn)
{
conn->sendable = conn->rx_win - (conn->tx_seq - conn->rx_ack);
-
+
if(conn->sendable > conn->ob_capacity)
conn->sendable = conn->ob_capacity;
if(conn->sendable > conn->max_payload)
conn->sendable = conn->max_payload;
-
+
if(conn->sendable > 0)
conn->events |= POLLIN;
else
@@ -368,7 +368,7 @@ void device_client_process(int device_id, struct mux_client *client, short event
return;
}
usbmuxd_log(LL_SPEW, "device_client_process (%d)", events);
-
+
int res;
int size;
if(events & POLLOUT) {
@@ -463,7 +463,7 @@ static void device_tcp_input(struct mux_device *dev, struct tcphdr *th, unsigned
{
usbmuxd_log(LL_DEBUG, "[IN] dev=%d sport=%d dport=%d seq=%d ack=%d flags=0x%x window=%d[%d] len=%d",
dev->id, ntohs(th->th_sport), ntohs(th->th_dport), ntohl(th->th_seq), ntohl(th->th_ack), th->th_flags, ntohs(th->th_win) << 8, ntohs(th->th_win), payload_length);
-
+
uint16_t sport = ntohs(th->th_dport);
uint16_t dport = ntohs(th->th_sport);
struct mux_connection *conn = NULL;
@@ -473,7 +473,7 @@ static void device_tcp_input(struct mux_device *dev, struct tcphdr *th, unsigned
break;
}
} ENDFOREACH
-
+
if(!conn) {
usbmuxd_log(LL_WARNING, "No connection for device %d incoming packet %d->%d", dev->id, dport, sport);
if(!(th->th_flags & TH_RST)) {
@@ -482,11 +482,11 @@ static void device_tcp_input(struct mux_device *dev, struct tcphdr *th, unsigned
}
return;
}
-
+
conn->rx_seq = ntohl(th->th_seq);
conn->rx_ack = ntohl(th->th_ack);
conn->rx_win = ntohs(th->th_win) << 8;
-
+
if(th->th_flags & TH_RST) {
char *buf = malloc(payload_length+1);
memcpy(buf, payload, payload_length);
@@ -496,7 +496,7 @@ static void device_tcp_input(struct mux_device *dev, struct tcphdr *th, unsigned
usbmuxd_log(LL_DEBUG, "RST reason: %s", buf);
free(buf);
}
-
+
if(conn->state == CONN_CONNECTING) {
if(th->th_flags != (TH_SYN|TH_ACK)) {
if(th->th_flags & TH_RST)
@@ -544,10 +544,10 @@ void device_data_input(struct usb_device *usbdev, unsigned char *buffer, int len
usbmuxd_log(LL_WARNING, "Cannot find device entry for RX input from USB device %p on location 0x%x", usbdev, usb_get_location(usbdev));
return;
}
-
+
if(!length)
return;
-
+
usbmuxd_log(LL_SPEW, "Mux data input for device %p: %p len %d", dev, buffer, length);
// handle broken up transfers
@@ -573,18 +573,18 @@ void device_data_input(struct usb_device *usbdev, unsigned char *buffer, int len
return;
}
}
-
+
struct mux_header *mhdr = (struct mux_header *)buffer;
-
+
if(ntohl(mhdr->length) != length) {
usbmuxd_log(LL_ERROR, "Incoming packet size mismatch (dev %d, expected %d, got %d)", dev->id, ntohl(mhdr->length), length);
return;
}
-
+
struct tcphdr *th;
unsigned char *payload;
int payload_length;
-
+
switch(ntohl(mhdr->protocol)) {
case MUX_PROTO_VERSION:
device_version_input(dev, (struct version_header *)(mhdr+1));
@@ -599,7 +599,7 @@ void device_data_input(struct usb_device *usbdev, unsigned char *buffer, int len
usbmuxd_log(LL_ERROR, "Incoming packet for device %d has unknown protocol 0x%x)", dev->id, ntohl(mhdr->protocol));
break;
}
-
+
}
int device_add(struct usb_device *usbdev)
diff --git a/usbmuxd/main.c b/usbmuxd/main.c
index 182178f..be7451f 100644
--- a/usbmuxd/main.c
+++ b/usbmuxd/main.c
@@ -126,7 +126,7 @@ int main_loop(int listenfd)
{
int to, cnt, i, dto;
struct fdlist pollfds;
-
+
while(!should_exit) {
usbmuxd_log(LL_FLOOD, "main_loop iteration");
to = usb_get_timeout();
@@ -135,16 +135,16 @@ int main_loop(int listenfd)
usbmuxd_log(LL_FLOOD, "Device timeout is %d ms", to);
if(dto < to)
to = dto;
-
+
fdlist_create(&pollfds);
fdlist_add(&pollfds, FD_LISTEN, listenfd, POLLIN);
usb_get_fds(&pollfds);
client_get_fds(&pollfds);
usbmuxd_log(LL_FLOOD, "fd count is %d", pollfds.count);
-
+
cnt = poll(pollfds.fds, pollfds.count, to);
usbmuxd_log(LL_FLOOD, "poll() returned %d", cnt);
-
+
if(cnt == -1) {
if(errno == EINTR && should_exit) {
usbmuxd_log(LL_INFO, "event processing interrupted");
diff --git a/usbmuxd/usb-linux.c b/usbmuxd/usb-linux.c
index a5fc6a0..6e99a95 100644
--- a/usbmuxd/usb-linux.c
+++ b/usbmuxd/usb-linux.c
@@ -58,7 +58,7 @@ static void usb_disconnect(struct usb_device *dev)
if(!dev->dev) {
return;
}
-
+
// kill the rx xfer and tx xfers and try to make sure the callbacks get called before we free the device
if(dev->rx_xfer) {
usbmuxd_log(LL_DEBUG, "usb_disconnect: cancelling RX xfer");
@@ -72,7 +72,7 @@ static void usb_disconnect(struct usb_device *dev)
while(dev->rx_xfer || collection_count(&dev->tx_xfers)) {
struct timeval tv;
int res;
-
+
tv.tv_sec = 0;
tv.tv_usec = 1000;
if((res = libusb_handle_events_timeout(NULL, &tv)) < 0) {
@@ -218,7 +218,7 @@ static int usb_discover(void)
int cnt, i, res;
int valid_count = 0;
libusb_device **devs;
-
+
cnt = libusb_get_device_list(NULL, &devs);
if(cnt < 0) {
usbmuxd_log(LL_WARNING, "Could not get device list: %d", cnt);
@@ -309,7 +309,7 @@ static int usb_discover(void)
collection_init(&usbdev->tx_xfers);
collection_add(&device_list, usbdev);
-
+
if(device_add(usbdev) < 0) {
usb_disconnect(usbdev);
continue;
@@ -327,14 +327,14 @@ static int usb_discover(void)
usb_disconnect(usbdev);
}
} ENDFOREACH
-
+
libusb_free_device_list(devs, 1);
-
+
gettimeofday(&next_dev_poll_time, NULL);
next_dev_poll_time.tv_usec += DEVICE_POLL_TIME * 1000;
next_dev_poll_time.tv_sec += next_dev_poll_time.tv_usec / 1000000;
next_dev_poll_time.tv_usec = next_dev_poll_time.tv_usec % 1000000;
-
+
return valid_count;
}
@@ -477,7 +477,7 @@ int usb_init(void)
{
int res;
usbmuxd_log(LL_DEBUG, "usb_init for linux / libusb 1.0");
-
+
devlist_failures = 0;
res = libusb_init(NULL);
//libusb_set_debug(NULL, 3);
@@ -485,9 +485,9 @@ int usb_init(void)
usbmuxd_log(LL_FATAL, "libusb_init failed: %d", res);
return -1;
}
-
+
collection_init(&device_list);
-
+
return usb_discover();
}