diff options
author | Sreeram Ramachandran <sreeram@google.com> | 2014-05-21 08:55:19 -0700 |
---|---|---|
committer | Sreeram Ramachandran <sreeram@google.com> | 2014-05-21 09:26:57 -0700 |
commit | 91dc3369d3b75928816bc26f9e15ab140a520ee2 (patch) | |
tree | 3d23aefd123bb52d56be1cfa587fa9f2dda5efbd /libnetd_client/NetdClient.cpp | |
parent | 36ccca155c03053397b953e4cc0ed8a8338d2450 (diff) | |
download | system_core-91dc3369d3b75928816bc26f9e15ab140a520ee2.zip system_core-91dc3369d3b75928816bc26f9e15ab140a520ee2.tar.gz system_core-91dc3369d3b75928816bc26f9e15ab140a520ee2.tar.bz2 |
Move netd_client into netd.
(cherry picked from commit f1b21c5c735e9150c8f29bdb52db2f3eb3ffc469)
Change-Id: Ie4b6b303225c93f2448a503d6ea9cebb552cbad5
Diffstat (limited to 'libnetd_client/NetdClient.cpp')
-rw-r--r-- | libnetd_client/NetdClient.cpp | 84 |
1 files changed, 0 insertions, 84 deletions
diff --git a/libnetd_client/NetdClient.cpp b/libnetd_client/NetdClient.cpp deleted file mode 100644 index 8deea1e..0000000 --- a/libnetd_client/NetdClient.cpp +++ /dev/null @@ -1,84 +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 "FwmarkClient.h" -#include "netd_client/FwmarkCommands.h" - -#include <sys/socket.h> -#include <unistd.h> - -namespace { - -int closeFdAndRestoreErrno(int fd) { - int error = errno; - close(fd); - errno = error; - return -1; -} - -typedef int (*ConnectFunctionType)(int, const sockaddr*, socklen_t); -typedef int (*AcceptFunctionType)(int, sockaddr*, socklen_t*); - -ConnectFunctionType libcConnect = 0; -AcceptFunctionType libcAccept = 0; - -int netdClientConnect(int sockfd, const sockaddr* addr, socklen_t addrlen) { - if (FwmarkClient::shouldSetFwmark(sockfd, addr)) { - char data[] = {FWMARK_COMMAND_ON_CONNECT}; - if (!FwmarkClient().send(data, sizeof(data), sockfd)) { - return -1; - } - } - return libcConnect(sockfd, addr, addrlen); -} - -int netdClientAccept(int sockfd, sockaddr* addr, socklen_t* addrlen) { - int acceptedSocket = libcAccept(sockfd, addr, addrlen); - if (acceptedSocket == -1) { - return -1; - } - sockaddr socketAddress; - if (!addr) { - socklen_t socketAddressLen = sizeof(socketAddress); - if (getsockname(acceptedSocket, &socketAddress, &socketAddressLen) == -1) { - return closeFdAndRestoreErrno(acceptedSocket); - } - addr = &socketAddress; - } - if (FwmarkClient::shouldSetFwmark(acceptedSocket, addr)) { - char data[] = {FWMARK_COMMAND_ON_ACCEPT}; - if (!FwmarkClient().send(data, sizeof(data), acceptedSocket)) { - return closeFdAndRestoreErrno(acceptedSocket); - } - } - return acceptedSocket; -} - -} // namespace - -extern "C" void netdClientInitConnect(ConnectFunctionType* function) { - if (function && *function) { - libcConnect = *function; - *function = netdClientConnect; - } -} - -extern "C" void netdClientInitAccept(AcceptFunctionType* function) { - if (function && *function) { - libcAccept = *function; - *function = netdClientAccept; - } -} |