summaryrefslogtreecommitdiff
path: root/tools/emulator/opengl/shared/OpenglCodecCommon
diff options
context:
space:
mode:
Diffstat (limited to 'tools/emulator/opengl/shared/OpenglCodecCommon')
-rw-r--r--tools/emulator/opengl/shared/OpenglCodecCommon/Android.mk4
-rw-r--r--tools/emulator/opengl/shared/OpenglCodecCommon/IOStream.h90
-rw-r--r--tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp114
-rw-r--r--tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.h3
4 files changed, 50 insertions, 161 deletions
diff --git a/tools/emulator/opengl/shared/OpenglCodecCommon/Android.mk b/tools/emulator/opengl/shared/OpenglCodecCommon/Android.mk
index e56927035..af8c16351 100644
--- a/tools/emulator/opengl/shared/OpenglCodecCommon/Android.mk
+++ b/tools/emulator/opengl/shared/OpenglCodecCommon/Android.mk
@@ -14,7 +14,7 @@ OpenglCodecCommon := \
LOCAL_SRC_FILES := $(OpenglCodecCommon)
-LOCAL_C_INCLUDES += $(emulatorOpengl)/host/include/libOpenGLRender
+LOCAL_C_INCLUDES += $(emulatorOpengl)/host/include/libOpenglRender
LOCAL_CFLAGS += -DLOG_TAG=\"eglCodecCommon\"
LOCAL_MODULE_TAGS := debug
@@ -27,7 +27,7 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(OpenglCodecCommon)
-LOCAL_C_INCLUDES += $(emulatorOpengl)/host/include/libOpenGLRender
+LOCAL_C_INCLUDES += $(emulatorOpengl)/host/include/libOpenglRender
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE := libOpenglCodecCommon
diff --git a/tools/emulator/opengl/shared/OpenglCodecCommon/IOStream.h b/tools/emulator/opengl/shared/OpenglCodecCommon/IOStream.h
deleted file mode 100644
index 7cfccc340..000000000
--- a/tools/emulator/opengl/shared/OpenglCodecCommon/IOStream.h
+++ /dev/null
@@ -1,90 +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.
-*/
-#ifndef __IO_STREAM_H__
-#define __IO_STREAM_H__
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "ErrorLog.h"
-
-class IOStream {
-public:
-
- IOStream(size_t bufSize) {
- m_buf = NULL;
- m_bufsize = bufSize;
- m_free = 0;
- }
-
- virtual void *allocBuffer(size_t minSize) = 0;
- virtual int commitBuffer(size_t size) = 0;
- virtual const unsigned char *readFully( void *buf, size_t len) = 0;
-
- virtual ~IOStream() {
-
- // NOTE: m_buf is 'owned' by the child class thus we expect it to be released by it
- }
-
- unsigned char *alloc(size_t len) {
-
- if (m_buf && len > m_free) {
- if (flush() < 0) {
- ERR("Failed to flush in alloc\n");
- return NULL; // we failed to flush so something is wrong
- }
- }
-
- if (!m_buf || len > m_bufsize) {
- int allocLen = m_bufsize < len ? len : m_bufsize;
- m_buf = (unsigned char *)allocBuffer(allocLen);
- if (!m_buf) {
- ERR("Alloc (%u bytes) failed\n", allocLen);
- return NULL;
- }
- m_bufsize = m_free = allocLen;
- }
-
- unsigned char *ptr;
-
- ptr = m_buf + (m_bufsize - m_free);
- m_free -= len;
-
- return ptr;
- }
-
- int flush() {
-
- if (!m_buf || m_free == m_bufsize) return 0;
-
- int stat = commitBuffer(m_bufsize - m_free);
- m_buf = NULL;
- m_free = 0;
- return stat;
- }
-
- const unsigned char *readback(void *buf, size_t len) {
- flush();
- return readFully(buf, len);
- }
-
-private:
- unsigned char *m_buf;
- size_t m_bufsize;
- size_t m_free;
-};
-
-#endif
diff --git a/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp b/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp
index 86202d0fb..b33d24f39 100644
--- a/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp
+++ b/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.cpp
@@ -14,25 +14,23 @@
* limitations under the License.
*/
#include "TcpStream.h"
-
-#ifdef ANDROID
-#include <netinet/in.h>
-#endif
-
+#include <cutils/sockets.h>
#include <errno.h>
-#include <netdb.h>
-#include <sys/types.h>
-#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
-TcpStream::TcpStream(size_t bufSize) : IOStream(bufSize)
+#ifdef __linux__
+#include <netinet/in.h>
+#endif
+
+TcpStream::TcpStream(size_t bufSize) :
+ IOStream(bufSize),
+ m_sock(-1),
+ m_bufsize(bufSize),
+ m_buf(NULL)
{
- m_sock = socket(AF_INET, SOCK_STREAM, 0);
- m_bufsize = bufSize;
- m_buf = NULL;
}
TcpStream::TcpStream(int sock, size_t bufSize) :
@@ -41,7 +39,6 @@ TcpStream::TcpStream(int sock, size_t bufSize) :
m_bufsize(bufSize),
m_buf(NULL)
{
-
}
TcpStream::~TcpStream()
@@ -55,39 +52,15 @@ TcpStream::~TcpStream()
}
-int TcpStream::listen(unsigned short port, bool localhost_only, bool reuse_address)
+int TcpStream::listen(unsigned short port, bool localhost_only)
{
- if (!valid()) return int(ERR_INVALID_SOCKET);
-
- // NOTE: This is a potential security issue. However, since we accept connection
- // from local host only, this should be reasonably OK.
-
- if (reuse_address) {
- int one = 1;
- if (setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0) {
- perror("setsockopt resuseaddr");
- }
- }
-
- struct sockaddr_in addr;
- memset(&addr, 0, sizeof(addr));
-
- addr.sin_family = AF_INET;
- addr.sin_port = htons(port);
if (localhost_only) {
- addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ m_sock = socket_loopback_server(port, SOCK_STREAM);
} else {
- addr.sin_addr.s_addr = INADDR_ANY;
+ m_sock = socket_inaddr_any_server(port, SOCK_STREAM);
}
+ if (!valid()) return int(ERR_INVALID_SOCKET);
- if (::bind(m_sock, (const sockaddr *) &addr, sizeof(addr)) < 0) {
- perror("bind");
- return -1;
- }
- if (::listen(m_sock, 5) < 0) {
- perror("listen");
- return -1;
- }
return 0;
}
@@ -117,29 +90,8 @@ TcpStream * TcpStream::accept()
int TcpStream::connect(const char *hostname, unsigned short port)
{
- struct addrinfo *ai;
- char portstr[10];
- snprintf(portstr, sizeof(portstr), "%d", port);
-
- if (getaddrinfo(hostname, portstr, NULL, &ai) != 0) {
- return -1;
- }
-
- struct addrinfo *i;
- i = ai;
- while (i != NULL) {
- if (::connect(m_sock, i->ai_addr, i->ai_addrlen) >= 0) {
- break;
- } else {
- if (errno != EINTR) {
- i = i->ai_next;
- }
- }
- }
-
- freeaddrinfo(ai);
- if (i == NULL) return -1;
-
+ m_sock = socket_network_client(hostname, port, SOCK_STREAM);
+ if (!valid()) return -1;
return 0;
}
@@ -178,10 +130,11 @@ int TcpStream::writeFully(const void *buf, size_t len)
int retval = 0;
while (res > 0) {
- ssize_t stat = ::send(m_sock, (unsigned char *)(buf) + (len - res), res, 0);
+ ssize_t stat = ::send(m_sock, (const char *)(buf) + (len - res), res, 0);
if (stat < 0) {
if (errno != EINTR) {
retval = stat;
+ ERR("TcpStream::writeFully failed, errno = %d\n", errno);
break;
}
} else {
@@ -194,10 +147,13 @@ int TcpStream::writeFully(const void *buf, size_t len)
const unsigned char *TcpStream::readFully(void *buf, size_t len)
{
if (!valid()) return NULL;
- if (!buf) return NULL; // do not allow NULL buf in that implementation
+ if (!buf) {
+ ERR("TcpStream::readFully failed, buf=NULL");
+ return NULL; // do not allow NULL buf in that implementation
+ }
size_t res = len;
while (res > 0) {
- ssize_t stat = ::recv(m_sock, (unsigned char *)(buf) + len - res, len, MSG_WAITALL);
+ ssize_t stat = ::recv(m_sock, (char *)(buf) + len - res, len, 0);
if (stat == 0) {
// client shutdown;
return NULL;
@@ -205,6 +161,7 @@ const unsigned char *TcpStream::readFully(void *buf, size_t len)
if (errno == EINTR) {
continue;
} else {
+ ERR("TcpStream::readFully failed, errno = %d 0x%x \n", errno,buf);
return NULL;
}
} else {
@@ -214,12 +171,33 @@ const unsigned char *TcpStream::readFully(void *buf, size_t len)
return (const unsigned char *)buf;
}
+const unsigned char *TcpStream::read( void *buf, size_t *inout_len)
+{
+ if (!valid()) return NULL;
+ if (!buf) {
+ ERR("TcpStream::read failed, buf=NULL");
+ return NULL; // do not allow NULL buf in that implementation
+ }
+
+ int n;
+ do {
+ n = recv(buf, *inout_len);
+ } while( n < 0 && errno == EINTR );
+
+ if (n > 0) {
+ *inout_len = n;
+ return (const unsigned char *)buf;
+ }
+
+ return NULL;
+}
+
int TcpStream::recv(void *buf, size_t len)
{
if (!valid()) return int(ERR_INVALID_SOCKET);
int res = 0;
while(true) {
- res = ::recv(m_sock, buf, len, 0);
+ res = ::recv(m_sock, (char *)buf, len, 0);
if (res < 0) {
if (errno == EINTR) {
continue;
diff --git a/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.h b/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.h
index aa65b7ed7..75218434b 100644
--- a/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.h
+++ b/tools/emulator/opengl/shared/OpenglCodecCommon/TcpStream.h
@@ -26,13 +26,14 @@ public:
explicit TcpStream(size_t bufsize = 10000);
~TcpStream();
- int listen(unsigned short port, bool localhost_only = true, bool reuse_address = true);
+ int listen(unsigned short port, bool localhost_only = true);
TcpStream *accept();
int connect(const char *hostname, unsigned short port);
virtual void *allocBuffer(size_t minSize);
virtual int commitBuffer(size_t size);
virtual const unsigned char *readFully( void *buf, size_t len);
+ virtual const unsigned char *read( void *buf, size_t *inout_len);
bool valid() { return m_sock >= 0; }
int recv(void *buf, size_t len);