VpnPlugin.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435
  1. #pragma once
  2. #include <queue>
  3. #include <mutex>
  4. #include "leaf.h"
  5. #include "CustomBuffer.h"
  6. #include "winrt/Windows.Networking.Sockets.h"
  7. #include "winrt/Windows.Networking.Vpn.h"
  8. namespace winrt::Maple_Task::implementation
  9. {
  10. static const hstring CONFIG_PATH_SETTING_KEY = L"CONFIG_PATH";
  11. static const hstring NETIF_SETTING_KEY = L"NETIF";
  12. struct VpnPlugin : implements<VpnPlugin, Windows::Networking::Vpn::IVpnPlugIn>
  13. {
  14. VpnPlugin() = default;
  15. void Connect(Windows::Networking::Vpn::VpnChannel const& channel);
  16. void Disconnect(Windows::Networking::Vpn::VpnChannel const& channel);
  17. void GetKeepAlivePayload(Windows::Networking::Vpn::VpnChannel const& channel, Windows::Networking::Vpn::VpnPacketBuffer& keepAlivePacket);
  18. void Encapsulate(Windows::Networking::Vpn::VpnChannel const& channel, Windows::Networking::Vpn::VpnPacketBufferList const& packets, Windows::Networking::Vpn::VpnPacketBufferList const& encapulatedPackets);
  19. void Decapsulate(Windows::Networking::Vpn::VpnChannel const& channel, Windows::Networking::Vpn::VpnPacketBuffer const& encapBuffer, Windows::Networking::Vpn::VpnPacketBufferList const& decapsulatedPackets, Windows::Networking::Vpn::VpnPacketBufferList const& controlPacketsToSend);
  20. void ConnectCore(Windows::Networking::Vpn::VpnChannel const& channel);
  21. void StopLeaf();
  22. Leaf* m_leaf{};
  23. NetStackHandle* m_netStackHandle{};
  24. Windows::Networking::Sockets::DatagramSocket m_backTransport{ nullptr };
  25. std::mutex m_decapQueueLock{};
  26. std::queue<std::vector<uint8_t>> m_decapQueue{};
  27. };
  28. static const uint8_t dummyArr[] = { 0 };
  29. static const auto dummyBuffer = winrt::make<CustomBuffer>(const_cast<uint8_t *>(static_cast<const uint8_t *>(dummyArr)), static_cast<uint32_t>(sizeof(dummyArr)));
  30. static auto VpnPluginInstance = winrt::make_self<VpnPlugin>();
  31. }