整理代码

This commit is contained in:
蒲爽 2026-09-28 21:33:04 +08:00
commit c7b4e178ec
364 changed files with 59691 additions and 0 deletions

125
util/FrpUtil.h Normal file
View file

@ -0,0 +1,125 @@
#ifndef FRP_UTIL_H
#define FRP_UTIL_H
#include <fcntl.h>
#include <signal.h>
#include <unistd.h>
#include <cstdlib>
#include <cstring>
#include <string>
#include "Application.h"
#include "Poco/JSON/Object.h"
#include "util/SystemInfo.h"
namespace Util
{
class FrpUtil
{
private:
public:
static constexpr const char* frpcConfigPathName = "/customer/frp/frpc.toml";
static constexpr const char* frpcPathName = "/customer/frp/frpc";
public:
static int getFrpcPid()
{
return Util::SystemInfo::getProcessPID(frpcPathName);
}
static void startFrpc(std::string serialNum, Poco::JSON::Object::Ptr service_ports, bool forceRestart)
{
int http_local_port = service_ports->get("http_port");
int http_remote_port = service_ports->get("http_port_nat_port");
int http_api_local_port = service_ports->get("http_api_port");
int http_api_remote_port = service_ports->get("http_api_port_nat_port");
int rtmp_local_port = service_ports->get("rtmp_port");
int rtmp_remote_port = service_ports->get("rtmp_port_nat_port");
int rtsp_local_port = service_ports->get("rtsp_port");
int rtsp_remote_port = service_ports->get("rtsp_port_nat_port");
int srt_local_port = service_ports->get("srt_port");
int srt_remote_port = service_ports->get("srt_port_nat_port");
int nat_frp_enable = service_ports->get("nat_frp_enable");
try
{
int pid = getFrpcPid();
if (nat_frp_enable == 0)
{
if (pid > 0)
{
stopFrpc(pid);
}
return;
}
if (pid > 0)
{
if (forceRestart)
{
stopFrpc(pid);
}
else
{
return;
}
}
pid_t child = fork();
if (child < 0)
{
logger().information("frpc fork failed");
return;
}
if (child > 0)
{
logger().information("frpc daemon starting...");
return;
}
setsid();
for (int i = 3; i < 1024; ++i)
{
close(i);
}
int fd = open("/dev/null", O_RDWR);
if (fd >= 0)
{
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
close(fd);
}
setenv("FRP_SERIAL_NUM", serialNum.c_str(), 1);
setenv("FRP_HTTP_LOCAL_PORT", std::to_string(http_local_port).c_str(), 1);
setenv("FRP_HTTP_REMOTE_PORT", std::to_string(http_remote_port).c_str(), 1);
setenv("FRP_HTTP_API_LOCAL_PORT", std::to_string(http_api_local_port).c_str(), 1);
setenv("FRP_HTTP_API_REMOTE_PORT", std::to_string(http_api_remote_port).c_str(), 1);
setenv("FRP_RTMP_LOCAL_PORT", std::to_string(rtmp_local_port).c_str(), 1);
setenv("FRP_RTMP_REMOTE_PORT", std::to_string(rtmp_remote_port).c_str(), 1);
setenv("FRP_RTSP_LOCAL_PORT", std::to_string(rtsp_local_port).c_str(), 1);
setenv("FRP_RTSP_REMOTE_PORT", std::to_string(rtsp_remote_port).c_str(), 1);
setenv("FRP_SRT_LOCAL_PORT", std::to_string(srt_local_port).c_str(), 1);
setenv("FRP_SRT_REMOTE_PORT", std::to_string(srt_remote_port).c_str(), 1);
execlp(frpcPathName, frpcPathName, "-c", frpcConfigPathName, (char*)NULL);
exit(EXIT_FAILURE);
}
catch (const std::exception& e)
{
logger().information("doStartFrpc,error: %s", std::string(e.what()));
}
}
static void stopFrpc(int pid)
{
if (pid > 0)
{
Util::SystemInfo::executeCommand("kill -9 " + std::to_string(pid));
logger().information("frpc stoped,pid=%d........", pid);
}
}
};
}
#endif