xref: /aosp_15_r20/external/armnn/profiling/server/include/basePipeServer/ConnectionHandler.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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