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