1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #pragma once 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker #include "BasePipeServer.hpp" 9*89c4ff92SAndroid Build Coastguard Worker #include <string> 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker namespace arm 12*89c4ff92SAndroid Build Coastguard Worker { 13*89c4ff92SAndroid Build Coastguard Worker 14*89c4ff92SAndroid Build Coastguard Worker namespace pipe 15*89c4ff92SAndroid Build Coastguard Worker { 16*89c4ff92SAndroid Build Coastguard Worker 17*89c4ff92SAndroid Build Coastguard Worker class ConnectionHandler 18*89c4ff92SAndroid Build Coastguard Worker { 19*89c4ff92SAndroid Build Coastguard Worker public: 20*89c4ff92SAndroid Build Coastguard Worker /// Constructor establishes the Unix domain socket and sets it to listen for connections. 21*89c4ff92SAndroid Build Coastguard Worker /// @param udsNamespace the namespace (socket address) associated with the listener. 22*89c4ff92SAndroid Build Coastguard Worker /// @throws SocketConnectionException if the socket has been incorrectly setup. 23*89c4ff92SAndroid Build Coastguard Worker ConnectionHandler(const std::string& udsNamespace, const bool setNonBlocking); 24*89c4ff92SAndroid Build Coastguard Worker ~ConnectionHandler()25*89c4ff92SAndroid Build Coastguard Worker ~ConnectionHandler() 26*89c4ff92SAndroid Build Coastguard Worker { 27*89c4ff92SAndroid Build Coastguard Worker // We have set SOCK_CLOEXEC on this socket but we'll close it to be good citizens. 28*89c4ff92SAndroid Build Coastguard Worker arm::pipe::Close(m_ListeningSocket); 29*89c4ff92SAndroid Build Coastguard Worker } 30*89c4ff92SAndroid Build Coastguard Worker 31*89c4ff92SAndroid Build Coastguard Worker ConnectionHandler(const ConnectionHandler&) = delete; 32*89c4ff92SAndroid Build Coastguard Worker ConnectionHandler& operator=(const ConnectionHandler&) = delete; 33*89c4ff92SAndroid Build Coastguard Worker 34*89c4ff92SAndroid Build Coastguard Worker ConnectionHandler(ConnectionHandler&&) = delete; 35*89c4ff92SAndroid Build Coastguard Worker ConnectionHandler& operator=(ConnectionHandler&&) = delete; 36*89c4ff92SAndroid Build Coastguard Worker 37*89c4ff92SAndroid Build Coastguard Worker /// Attempt to open a new socket to the client and use it to construct a new basePipeServer 38*89c4ff92SAndroid Build Coastguard Worker /// @param echoPackets if true the raw packets will be printed to stdout. 39*89c4ff92SAndroid Build Coastguard Worker /// @return if successful a unique_ptr to a basePipeServer otherwise a nullptr 40*89c4ff92SAndroid Build Coastguard Worker std::unique_ptr<BasePipeServer> GetNewBasePipeServer(const bool echoPackets); 41*89c4ff92SAndroid Build Coastguard Worker 42*89c4ff92SAndroid Build Coastguard Worker private: 43*89c4ff92SAndroid Build Coastguard Worker 44*89c4ff92SAndroid Build Coastguard Worker arm::pipe::Socket m_ListeningSocket; 45*89c4ff92SAndroid Build Coastguard Worker }; 46*89c4ff92SAndroid Build Coastguard Worker 47*89c4ff92SAndroid Build Coastguard Worker } // namespace pipe 48*89c4ff92SAndroid Build Coastguard Worker } // namespace arm 49