frp.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. //
  2. // Created by xcbosa on 2023/1/31.
  3. //
  4. #pragma once
  5. #include <string>
  6. #include <set>
  7. using namespace std;
  8. using namespace xc;
  9. using namespace xc::utils;
  10. namespace xc::frp {
  11. void frpDaemon();
  12. /*仅当用户没有更改,但用户要求强制重启时调用,FrpDaemon会自动检查文件变化并自动更新。*/
  13. void reloadProfileFilePath(string filePath);
  14. set<int> profileUsingPorts(string profile);
  15. set<int> serverUsingPorts(string serverIp);
  16. void addProfile(string name, string ip, string port, string token);
  17. vector<string> listingAvailableServerAndPortForUser(string username);
  18. class ProfilePortInfo {
  19. public:
  20. ProfilePortInfo();
  21. ProfilePortInfo(string localIp, int localPort, int remotePort);
  22. ProfilePortInfo(string localIp, int localPort, int remotePort, string uuid);
  23. string localIp;
  24. int localPort;
  25. int remotePort;
  26. string uuid;
  27. CONFIGOR_BIND(json::value, ProfilePortInfo, REQUIRED(localIp), REQUIRED(localPort), REQUIRED(remotePort), REQUIRED(uuid))
  28. };
  29. class ProfileInfo {
  30. public:
  31. ProfileInfo();
  32. ProfileInfo(string profileName);
  33. string getServerAddr();
  34. int getAllowPortLow();
  35. int getAllowPortCount();
  36. void addPortInfo(ProfilePortInfo portInfo);
  37. void removePort(int remotePort);
  38. bool availableForUser(string name);
  39. void addUser(string name);
  40. void removeUser(string name);
  41. void save() const;
  42. int getFirstFreeRemotePort();
  43. int getFirstFreeRemotePort(int ifNoneThenReturn);
  44. vector<int> getFreeRemotePorts();
  45. vector<int> getFreeRemotePorts(int maxCnt);
  46. vector<int> getFreeRemotePortsAndAppend(int me);
  47. CONFIGOR_BIND(json::value, ProfileInfo,
  48. REQUIRED(users),
  49. REQUIRED(profileName),
  50. REQUIRED(serverAddr),
  51. REQUIRED(serverPort),
  52. REQUIRED(token),
  53. REQUIRED(allowPortLow),
  54. REQUIRED(allowPortCount),
  55. REQUIRED(ports))
  56. vector<ProfilePortInfo> ports;
  57. private:
  58. set<string> users;
  59. string profileName;
  60. string serverAddr;
  61. int serverPort;
  62. string token;
  63. int allowPortLow;
  64. int allowPortCount;
  65. };
  66. vector<ProfileInfo> listUserAvailableProfiles(string user);
  67. }