Remote Call Framework 3.3
UnixLocalServerTransport.hpp
1 
2 //******************************************************************************
3 // RCF - Remote Call Framework
4 //
5 // Copyright (c) 2005 - 2022, Delta V Software. All rights reserved.
6 // https://www.deltavsoft.com
7 //
8 // RCF is distributed under dual licenses - closed source or GPL.
9 // Consult your particular license for conditions of use.
10 //
11 // If you have not purchased a commercial license, you are using RCF under GPL terms.
12 //
13 // Version: 3.3
14 // Contact: support <at> deltavsoft.com
15 //
16 //******************************************************************************
17 
18 #ifndef INCLUDE_RCF_UNIXLOCALSERVERTRANSPORT_HPP
19 #define INCLUDE_RCF_UNIXLOCALSERVERTRANSPORT_HPP
20 
21 #include <RCF/Asio.hpp>
22 
23 #ifdef RCF_WINDOWS
24 #error Unix domain sockets not supported on Windows.
25 #endif
26 
27 #ifndef RCF_HAS_LOCAL_SOCKETS
28 #error Unix domain sockets not supported by this version of Boost.Asio.
29 #endif
30 
31 #include <RCF/AsioServerTransport.hpp>
32 #include <RCF/Export.hpp>
33 
34 namespace RCF {
35 
36  using ASIO_NS::local::stream_protocol;
37  typedef stream_protocol::socket UnixLocalSocket;
38  typedef std::shared_ptr<UnixLocalSocket> UnixLocalSocketPtr;
39 
40  class UnixLocalServerTransport;
41 
42  class RCF_EXPORT UnixLocalNetworkSession : public AsioNetworkSession
43  {
44  public:
45  UnixLocalNetworkSession(
46  UnixLocalServerTransport & transport,
47  AsioIoService & ioService);
48 
49  ~UnixLocalNetworkSession();
50 
51  const RemoteAddress & implGetRemoteAddress();
52 
53  void implRead(char * buffer, std::size_t bufferLen);
54 
55  void implWrite(const std::vector<ByteBuffer> & buffers);
56 
57  void implAccept();
58 
59  bool implOnAccept();
60 
61  bool implIsConnected();
62 
63  void implClose();
64 
65  void implCloseAfterWrite();
66 
67  ClientTransportUniquePtr implCreateClientTransport();
68 
69  void implTransferNativeFrom(ClientTransport & clientTransport);
70 
71  int getNativeHandle();
72 
73  private:
74  UnixLocalSocketPtr mSocketPtr;
75  std::string mRemoteFileName;
76  NoRemoteAddress mRemoteAddress;
77  };
78 
79  class RCF_EXPORT UnixLocalServerTransport :
80  public AsioServerTransport
81  {
82  public:
83 
84  UnixLocalServerTransport(const std::string & fileName);
85 
86  TransportType getTransportType();
87 
88  ServerTransportPtr clone();
89 
90  AsioNetworkSessionPtr implCreateNetworkSession();
91 
92  void implOpen();
93 
94  ClientTransportUniquePtr implCreateClientTransport(
95  const Endpoint &endpoint);
96 
97  std::string getPipeName() const;
98 
99  void onServerStart(RcfServer & server);
100  void onServerStop(RcfServer & server);
101 
102  private:
103 
104  const std::string mFileName;
105  };
106 
107 } // namespace RCF
108 
109 #endif // ! INCLUDE_RCF_UNIXLOCALSERVERTRANSPORT_HPP
std::unique_ptr< ClientTransport > ClientTransportUniquePtr
Unique pointer wrapper for RCF::ClientTransport.
Definition: RcfFwd.hpp:43
Definition: AmiIoHandler.hpp:23
TransportType
Describes the transport types used by a RCF connection.
Definition: Enums.hpp:33
std::shared_ptr< ServerTransport > ServerTransportPtr
Unique pointer wrapper for RCF::ServerTransport.
Definition: RcfFwd.hpp:46