diff options
Diffstat (limited to 'emulator/opengl/shared/OpenglCodecCommon/UnixStream.cpp')
-rw-r--r-- | emulator/opengl/shared/OpenglCodecCommon/UnixStream.cpp | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/emulator/opengl/shared/OpenglCodecCommon/UnixStream.cpp b/emulator/opengl/shared/OpenglCodecCommon/UnixStream.cpp deleted file mode 100644 index 7b2f67d..0000000 --- a/emulator/opengl/shared/OpenglCodecCommon/UnixStream.cpp +++ /dev/null @@ -1,132 +0,0 @@ -/* -* Copyright (C) 2011 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 "UnixStream.h" - -#include "emugl/common/sockets.h" - -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> - -#include <netinet/in.h> -#include <netinet/tcp.h> -#include <sys/un.h> -#include <sys/stat.h> - -/* Not all systems define PATH_MAX, those who don't generally don't - * have a limit on the maximum path size, so use a value that is - * large enough for our very limited needs. - */ -#ifndef PATH_MAX -#define PATH_MAX 128 -#endif - -UnixStream::UnixStream(size_t bufSize) : - SocketStream(bufSize) -{ -} - -UnixStream::UnixStream(int sock, size_t bufSize) : - SocketStream(sock, bufSize) -{ -} - -/* Initialize a sockaddr_un with the appropriate values corresponding - * to a given 'virtual port'. Returns 0 on success, -1 on error. - */ -static int -make_unix_path(char *path, size_t pathlen, int port_number) -{ - char tmp[PATH_MAX]; // temp directory - int ret = 0; - - // First, create user-specific temp directory if needed - const char* user = getenv("USER"); - if (user != NULL) { - struct stat st; - snprintf(tmp, sizeof(tmp), "/tmp/android-%s", user); - do { - ret = ::lstat(tmp, &st); - } while (ret < 0 && errno == EINTR); - - if (ret < 0 && errno == ENOENT) { - do { - ret = ::mkdir(tmp, 0766); - } while (ret < 0 && errno == EINTR); - if (ret < 0) { - ERR("Could not create temp directory: %s", tmp); - user = NULL; // will fall-back to /tmp - } - } - else if (ret < 0) { - user = NULL; // will fallback to /tmp - } - } - - if (user == NULL) { // fallback to /tmp in case of error - snprintf(tmp, sizeof(tmp), "/tmp"); - } - - // Now, initialize it properly - snprintf(path, pathlen, "%s/qemu-gles-%d", tmp, port_number); - return 0; -} - - -int UnixStream::listen(char addrstr[MAX_ADDRSTR_LEN]) -{ - if (make_unix_path(addrstr, MAX_ADDRSTR_LEN, getpid()) < 0) { - return -1; - } - - m_sock = emugl::socketLocalServer(addrstr, SOCK_STREAM); - if (!valid()) return int(ERR_INVALID_SOCKET); - - return 0; -} - -SocketStream * UnixStream::accept() -{ - int clientSock = -1; - - while (true) { - struct sockaddr_un addr; - socklen_t len = sizeof(addr); - clientSock = ::accept(m_sock, (sockaddr *)&addr, &len); - - if (clientSock < 0 && errno == EINTR) { - continue; - } - break; - } - - UnixStream *clientStream = NULL; - - if (clientSock >= 0) { - clientStream = new UnixStream(clientSock, m_bufsize); - } - return clientStream; -} - -int UnixStream::connect(const char* addr) -{ - m_sock = emugl::socketLocalClient(addr, SOCK_STREAM); - if (!valid()) return -1; - - return 0; -} |