19 #ifndef INCLUDE_RCF_WIN32NAMEDPIPESERVERTRANSPORT_HPP
20 #define INCLUDE_RCF_WIN32NAMEDPIPESERVERTRANSPORT_HPP
22 #include <RCF/AsioFwd.hpp>
23 #include <RCF/AsioServerTransport.hpp>
24 #include <RCF/Export.hpp>
28 class Win32NamedPipeServerTransport;
32 class Win32NamedPipeNetworkSession :
public AsioNetworkSession
35 Win32NamedPipeNetworkSession(
36 Win32NamedPipeServerTransport & transport,
37 AsioIoService & ioService);
39 ~Win32NamedPipeNetworkSession();
41 const RemoteAddress & implGetRemoteAddress();
43 void implRead(
char * buffer, std::size_t bufferLen);
45 void implWrite(
const std::vector<ByteBuffer> & buffers);
47 void implWrite(AsioNetworkSession &toBeNotified,
const char * buffer, std::size_t bufferLen);
53 bool implIsConnected();
57 ClientTransportAutoPtr implCreateClientTransport();
59 void implTransferNativeFrom(ClientTransport & clientTransport);
61 static void closeSocket(AsioPipeHandlePtr socketPtr);
63 HANDLE getNativeHandle();
66 AsioPipeHandlePtr mSocketPtr;
67 tstring mRemotePipeName;
68 NoRemoteAddress mRemoteAddress;
70 friend class Win32NamedPipeServerTransport;
71 friend class Win32NamedPipeImpersonator;
74 class RCF_EXPORT Win32NamedPipeServerTransport :
75 public AsioServerTransport
79 Win32NamedPipeServerTransport(
const tstring & pipeName);
80 ~Win32NamedPipeServerTransport();
82 TransportType getTransportType();
84 ServerTransportPtr clone();
86 AsioNetworkSessionPtr implCreateNetworkSession();
88 ClientTransportAutoPtr implCreateClientTransport(
89 const Endpoint &endpoint);
91 tstring getPipeName()
const;
93 void onServerStart(RcfServer & server);
94 void onServerStop(RcfServer & server);
96 void setSecurityAttributes(LPSECURITY_ATTRIBUTES pSec);
100 friend class Win32NamedPipeNetworkSession;
103 HANDLE mPipeNameLock;
105 LPSECURITY_ATTRIBUTES mpSec;
108 class RCF_EXPORT Win32NamedPipeImpersonator
111 Win32NamedPipeImpersonator();
112 Win32NamedPipeImpersonator(Win32NamedPipeNetworkSession & pipeSession);
113 ~Win32NamedPipeImpersonator();
115 void revertToSelf()
const;
119 Win32NamedPipeNetworkSession & mPipeSession;
122 class RCF_EXPORT NullDacl
126 SECURITY_ATTRIBUTES mSa;
127 SECURITY_DESCRIPTOR mSd;
132 #endif // ! INCLUDE_RCF_WIN32NAMEDPIPESERVERTRANSPORT_HPP