summaryrefslogtreecommitdiffstats
path: root/emulator/opengl/shared/emugl/common/sockets.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'emulator/opengl/shared/emugl/common/sockets.cpp')
-rw-r--r--emulator/opengl/shared/emugl/common/sockets.cpp222
1 files changed, 0 insertions, 222 deletions
diff --git a/emulator/opengl/shared/emugl/common/sockets.cpp b/emulator/opengl/shared/emugl/common/sockets.cpp
deleted file mode 100644
index 2a13d7293..000000000
--- a/emulator/opengl/shared/emugl/common/sockets.cpp
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright (C) 2014 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 "emugl/common/sockets.h"
-
-#include <errno.h>
-
-#ifdef _WIN32
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#else
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <sys/un.h>
-#include <sys/stat.h>
-#endif
-
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-#include <unistd.h>
-
-namespace emugl {
-
-namespace {
-
-static void socketSetReuseAddress(int s) {
-#ifdef _WIN32
- // The default behaviour on Windows is equivalent to SO_REUSEADDR
- // so we don't need to set this option. Moreover, one should never
- // set this option with WinSock because it's badly implemented and
- // generates a huge security issue. See:
- // http://msdn.microsoft.com/en-us/library/windows/desktop/ms740621(v=vs.85).aspx
-#else
- int val = 1;
- setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
-#endif
-}
-
-// Helper union to store a socket address.
-struct SockAddr {
- socklen_t len;
- union {
- sockaddr generic;
- sockaddr_in inet;
-#ifndef _WIN32
- sockaddr_un local;
-#endif
- };
-
- int getFamily() const { return generic.sa_family; }
-
- void initEmpty() {
- ::memset(this, 0, sizeof(*this));
- this->len = static_cast<socklen_t>(sizeof(*this));
- }
-
- int initFromInet(uint32_t ip_address, int port) {
- if (port < 0 || port >= 65536)
- return -EINVAL;
-
- ::memset(this, 0, sizeof(*this));
- this->inet.sin_family = AF_INET;
- this->inet.sin_port = htons(port);
- this->inet.sin_addr.s_addr = htonl(ip_address);
- this->len = sizeof(this->inet);
- return 0;
- }
-
- int initFromLocalhost(int port) {
- return initFromInet(0x7f000001, port);
- }
-
-#ifndef _WIN32
- // Initialize the SockAddr from a Unix path. Returns 0 on success,
- // or -errno code on failure.
- int initFromUnixPath(const char* path) {
- if (!path || !path[0])
- return -EINVAL;
-
- size_t pathLen = ::strlen(path);
- if (pathLen >= sizeof(local.sun_path))
- return -E2BIG;
-
- ::memset(this, 0, sizeof(*this));
- this->local.sun_family = AF_LOCAL;
- ::memcpy(this->local.sun_path, path, pathLen + 1U);
- this->len = pathLen + offsetof(sockaddr_un, sun_path);
- return 0;
- }
-#endif
-};
-
-int socketBindInternal(const SockAddr* addr, int socketType) {
- int s = ::socket(addr->getFamily(), socketType, 0);
- if (s < 0)
- return -errno;
-
- // Bind to the socket.
- if (::bind(s, &addr->generic, addr->len) < 0 ||
- ::listen(s, 5) < 0) {
- int ret = -errno;
- ::close(s);
- return ret;
- }
-
- socketSetReuseAddress(s);
- return s;
-}
-
-int socketConnectInternal(const SockAddr* addr, int socketType) {
- int s = ::socket(addr->getFamily(), socketType, 0);
- if (s < 0)
- return -errno;
-
- int ret;
- do {
- ret = ::connect(s, &addr->generic, addr->len);
- } while (ret < 0 && errno == EINTR);
-
- if (ret < 0) {
- ret = -errno;
- ::close(s);
- return ret;
- }
-
- return s;
-}
-
-} // namespace
-
-void socketTcpDisableNagle(int s) {
- // disable Nagle algorithm to improve bandwidth of small
- // packets which are quite common in our implementation.
-#ifdef _WIN32
- DWORD flag;
-#else
- int flag;
-#endif
- flag = 1;
- setsockopt(s, IPPROTO_TCP, TCP_NODELAY,
- (const char*)&flag, sizeof(flag));
-}
-
-int socketGetPort(int s) {
- SockAddr addr;
- addr.initEmpty();
- if (getsockname(s, &addr.generic, &addr.len) < 0) {
- return -errno;
- }
- switch (addr.generic.sa_family) {
- case AF_INET:
- return ntohs(addr.inet.sin_port);
- default:
- ;
- }
- return -EINVAL;
-}
-
-#ifndef _WIN32
-int socketLocalServer(const char* path, int socketType) {
- SockAddr addr;
- int ret = addr.initFromUnixPath(path);
- if (ret < 0) {
- return ret;
- }
- return socketBindInternal(&addr, socketType);
-}
-
-int socketLocalClient(const char* path, int socketType) {
- SockAddr addr;
- int ret = addr.initFromUnixPath(path);
- if (ret < 0) {
- return ret;
- }
- return socketConnectInternal(&addr, socketType);
-}
-#endif // !_WIN32
-
-int socketTcpLoopbackServer(int port, int socketType) {
- SockAddr addr;
- int ret = addr.initFromLocalhost(port);
- if (ret < 0) {
- return ret;
- }
- return socketBindInternal(&addr, socketType);
-}
-
-int socketTcpLoopbackClient(int port, int socketType) {
- SockAddr addr;
- int ret = addr.initFromLocalhost(port);
- if (ret < 0) {
- return ret;
- }
- return socketConnectInternal(&addr, socketType);
-}
-
-int socketTcpClient(const char* hostname, int port, int socketType) {
- // TODO(digit): Implement this.
- return -ENOSYS;
-}
-
-int socketAccept(int serverSocket) {
- int ret;
- do {
- ret = ::accept(serverSocket, NULL, NULL);
- } while (ret < 0 && errno == EINTR);
- return ret;
-}
-
-} // namespace emugl