| /* |
| * Copyright (C) 2015 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 GAPIC_SOCKET_CONNECTION_H |
| #define GAPIC_SOCKET_CONNECTION_H |
| |
| #include "connection.h" |
| |
| #include <stdint.h> |
| #include <memory> |
| |
| namespace gapic { |
| |
| // Connection object using a native socket |
| class SocketConnection : public Connection { |
| public: |
| ~SocketConnection(); |
| |
| // Creates a new socket connection listening on the specified hostname and port. Returns a |
| // connection object on successful open or a nullptr if opening the connection is unsuccessful |
| static std::unique_ptr<Connection> createSocket(const char* hostname, const char* port); |
| |
| // Creates a new pipe connection listening on the specified UNIX pipename, without |
| // pipe creation on the local file system if abstract is true. Returns a connection object |
| // on successful open or a nullptr if opening the connection is unsuccessful |
| static std::unique_ptr<Connection> createPipe(const char* pipename, bool abstract); |
| |
| // Implementation of the Connection interface |
| size_t send(const void* data, size_t size) override; |
| size_t recv(void* data, size_t size) override; |
| const char* error() override; |
| std::unique_ptr<Connection> accept() override; |
| |
| private: |
| // Private constructor used only by the static create function |
| explicit SocketConnection(int socket); |
| |
| // Network initializer class to handle the initialization of the network driver. A socket |
| // function can be called only if there is at least one active network initializer is in |
| // the system |
| struct NetworkInitializer { |
| NetworkInitializer(); |
| ~NetworkInitializer(); |
| }; |
| |
| // The underlying socket for the connection |
| int mSocket; |
| |
| // Network initializer instance lasts for the lifetime of the connection |
| NetworkInitializer mNetworkInitializer; |
| }; |
| |
| } // namespace gapic |
| |
| #endif |