master
h 52 lines 1.13 KB
Raw
1 /*++
2
3 Copyright (c) Microsoft. All rights reserved.
4
5 Module Name:
6
7 PortRelayHandle.h
8
9 Abstract:
10
11 Contains the definition of the PortRelayAcceptHandle class for port relaying.
12
13 --*/
14
15 #pragma once
16
17 #include "relay.hpp"
18
19 namespace wsl::windows::service::wslc {
20
21 class IORelay;
22
23 class PortRelayAcceptHandle : public common::io::OverlappedIOHandle
24 {
25 public:
26 NON_COPYABLE(PortRelayAcceptHandle)
27 NON_MOVABLE(PortRelayAcceptHandle)
28
29 PortRelayAcceptHandle(wil::unique_socket&& ListenSocket, const GUID& VmId, uint32_t RelayPort, uint32_t LinuxPort, int Family, IORelay& IoRelay);
30
31 ~PortRelayAcceptHandle();
32
33 void Schedule() override;
34 void Collect() override;
35 HANDLE GetHandle() const override;
36
37 private:
38 void LaunchRelay(wil::unique_socket&& AcceptedSocket);
39
40 wil::unique_socket ListenSocket;
41 wil::unique_socket AcceptedSocket;
42 GUID VmId;
43 uint32_t RelayPort;
44 uint32_t LinuxPort;
45 int Family;
46 IORelay& IoRelay;
47 wil::unique_event Event{wil::EventOptions::ManualReset};
48 OVERLAPPED Overlapped{};
49 char AcceptBuffer[2 * sizeof(SOCKADDR_STORAGE)]{};
50 };
51
52 } // namespace wsl::windows::service::wslc