summaryrefslogtreecommitdiffstats
path: root/fastbootd/transport.c
diff options
context:
space:
mode:
Diffstat (limited to 'fastbootd/transport.c')
-rw-r--r--fastbootd/transport.c150
1 files changed, 0 insertions, 150 deletions
diff --git a/fastbootd/transport.c b/fastbootd/transport.c
deleted file mode 100644
index 9a16fd7..0000000
--- a/fastbootd/transport.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <pthread.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/mman.h>
-
-#include "debug.h"
-#include "protocol.h"
-#include "transport.h"
-
-#define COMMAND_BUF_SIZE 64
-
-ssize_t transport_handle_write(struct transport_handle *thandle, char *buffer, size_t len)
-{
- return thandle->transport->write(thandle, buffer, len);
-}
-
-void transport_handle_close(struct transport_handle *thandle)
-{
- thandle->transport->close(thandle);
-}
-
-int transport_handle_download(struct transport_handle *thandle, size_t len)
-{
- ssize_t ret;
- size_t n = 0;
- int fd;
- // TODO: move out of /dev
- char tempname[] = "/dev/fastboot_download_XXXXXX";
- char *buffer;
-
- fd = mkstemp(tempname);
- if (fd < 0)
- return -1;
-
- unlink(tempname);
-
- ftruncate(fd, len);
-
- buffer = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if (buffer == MAP_FAILED) {
- D(ERR, "mmap(%zu) failed: %d %s", len, errno, strerror(errno));
- goto err;
- }
-
- while (n < len) {
- ret = thandle->transport->read(thandle, buffer + n, len - n);
- if (ret <= 0) {
- D(WARN, "transport read failed, ret=%zd %s", ret, strerror(-ret));
- break;
- }
- n += ret;
- }
-
- munmap(buffer, len);
-
- if (n != len)
- goto err;
-
- return fd;
-
-err:
- close(fd);
- transport_handle_close(thandle);
- return -1;
-}
-
-static void *transport_data_thread(void *arg)
-{
- struct transport_handle *thandle = arg;
- struct protocol_handle *phandle = create_protocol_handle(thandle);
-
- while (!thandle->stopped) {
- int ret;
- char buffer[COMMAND_BUF_SIZE + 1];
- D(VERBOSE, "transport_data_thread\n");
-
- ret = thandle->transport->read(thandle, buffer, COMMAND_BUF_SIZE);
- if (ret <= 0) {
- D(DEBUG, "ret = %d\n", ret);
- break;
- }
- if (ret > 0) {
- buffer[ret] = 0;
- //TODO: multiple threads
- protocol_handle_command(phandle, buffer);
- }
- }
-
- transport_handle_close(thandle);
- free(thandle);
-
- return NULL;
-}
-
-static void *transport_connect_thread(void *arg)
-{
- struct transport *transport = arg;
- while (!transport->stopped) {
- struct transport_handle *thandle;
- pthread_t thread;
- pthread_attr_t attr;
-
- D(VERBOSE, "transport_connect_thread\n");
- thandle = transport->connect(transport);
- if (thandle == NULL) {
- D(ERR, "transport connect failed\n");
- sleep(1);
- continue;
- }
- thandle->transport = transport;
-
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-
- pthread_create(&thread, &attr, transport_data_thread, thandle);
-
- sleep(1);
- }
-
- return NULL;
-}
-
-void transport_register(struct transport *transport)
-{
- pthread_t thread;
- pthread_attr_t attr;
-
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-
- pthread_create(&thread, &attr, transport_connect_thread, transport);
-}