mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2025-07-12 02:34:59 +03:00
Cedar/Admin: implement new RPC methods to get/set the UDP ports
This commit is contained in:
@ -1494,6 +1494,8 @@ PACK *AdminDispatch(RPC *rpc, char *name, PACK *p)
|
||||
DECLARE_RPC_EX("EnumListener", RPC_LISTENER_LIST, StEnumListener, InRpcListenerList, OutRpcListenerList, FreeRpcListenerList)
|
||||
DECLARE_RPC("DeleteListener", RPC_LISTENER, StDeleteListener, InRpcListener, OutRpcListener)
|
||||
DECLARE_RPC("EnableListener", RPC_LISTENER, StEnableListener, InRpcListener, OutRpcListener)
|
||||
DECLARE_RPC_EX("SetPortsUDP", RPC_PORTS, StSetPortsUDP, InRpcPorts, OutRpcPorts, FreeRpcPorts)
|
||||
DECLARE_RPC_EX("GetPortsUDP", RPC_PORTS, StGetPortsUDP, InRpcPorts, OutRpcPorts, FreeRpcPorts)
|
||||
DECLARE_RPC("SetServerPassword", RPC_SET_PASSWORD, StSetServerPassword, InRpcSetPassword, OutRpcSetPassword)
|
||||
DECLARE_RPC_EX("SetFarmSetting", RPC_FARM, StSetFarmSetting, InRpcFarm, OutRpcFarm, FreeRpcFarm)
|
||||
DECLARE_RPC_EX("GetFarmSetting", RPC_FARM, StGetFarmSetting, InRpcFarm, OutRpcFarm, FreeRpcFarm)
|
||||
@ -1674,6 +1676,8 @@ DECLARE_SC("CreateListener", RPC_LISTENER, ScCreateListener, InRpcListener, OutR
|
||||
DECLARE_SC_EX("EnumListener", RPC_LISTENER_LIST, ScEnumListener, InRpcListenerList, OutRpcListenerList, FreeRpcListenerList)
|
||||
DECLARE_SC("DeleteListener", RPC_LISTENER, ScDeleteListener, InRpcListener, OutRpcListener)
|
||||
DECLARE_SC("EnableListener", RPC_LISTENER, ScEnableListener, InRpcListener, OutRpcListener)
|
||||
DECLARE_SC_EX("SetPortsUDP", RPC_PORTS, ScSetPortsUDP, InRpcPorts, OutRpcPorts, FreeRpcPorts)
|
||||
DECLARE_SC_EX("GetPortsUDP", RPC_PORTS, ScGetPortsUDP, InRpcPorts, OutRpcPorts, FreeRpcPorts)
|
||||
DECLARE_SC("SetServerPassword", RPC_SET_PASSWORD, ScSetServerPassword, InRpcSetPassword, OutRpcSetPassword)
|
||||
DECLARE_SC_EX("SetFarmSetting", RPC_FARM, ScSetFarmSetting, InRpcFarm, OutRpcFarm, FreeRpcFarm)
|
||||
DECLARE_SC_EX("GetFarmSetting", RPC_FARM, ScGetFarmSetting, InRpcFarm, OutRpcFarm, FreeRpcFarm)
|
||||
@ -9873,6 +9877,88 @@ UINT StCreateListener(ADMIN *a, RPC_LISTENER *t)
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Set UDP ports the server should listen on
|
||||
UINT StSetPortsUDP(ADMIN *a, RPC_PORTS *t)
|
||||
{
|
||||
UINT i;
|
||||
LIST *ports, *server_ports;
|
||||
|
||||
SERVER_ADMIN_ONLY;
|
||||
|
||||
ports = NewIntList(true);
|
||||
|
||||
for (i = 0; i < t->Num; ++i)
|
||||
{
|
||||
const UINT port = t->Ports[i];
|
||||
if (port < 1 || port > 65535)
|
||||
{
|
||||
ReleaseIntList(ports);
|
||||
return ERR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
AddIntDistinct(ports, port);
|
||||
}
|
||||
|
||||
server_ports = a->Server->PortsUDP;
|
||||
|
||||
LockList(server_ports);
|
||||
{
|
||||
char tmp[MAX_SIZE];
|
||||
wchar_t str[MAX_SIZE];
|
||||
|
||||
for (i = 0; i < LIST_NUM(server_ports); ++i)
|
||||
{
|
||||
Free(LIST_DATA(server_ports, i));
|
||||
}
|
||||
DeleteAll(server_ports);
|
||||
|
||||
for (i = 0; i < LIST_NUM(ports); ++i)
|
||||
{
|
||||
const UINT port = *(UINT *)LIST_DATA(ports, i);
|
||||
AddInt(server_ports, port);
|
||||
}
|
||||
|
||||
ProtoSetUdpPorts(a->Server->Proto, server_ports);
|
||||
|
||||
IntListToStr(tmp, sizeof(tmp), server_ports, ", ");
|
||||
StrToUni(str, sizeof(str), tmp);
|
||||
ALog(a, NULL, "LA_SET_PORTS_UDP", str);
|
||||
}
|
||||
UnlockList(server_ports);
|
||||
|
||||
ReleaseIntList(ports);
|
||||
|
||||
IncrementServerConfigRevision(a->Server);
|
||||
|
||||
return ERR_NO_ERROR;
|
||||
}
|
||||
|
||||
// List UDP ports the server is listening on
|
||||
UINT StGetPortsUDP(ADMIN *a, RPC_PORTS *t)
|
||||
{
|
||||
LIST *ports = a->Server->PortsUDP;
|
||||
|
||||
FreeRpcPorts(t);
|
||||
|
||||
LockList(ports);
|
||||
{
|
||||
t->Num = LIST_NUM(ports);
|
||||
t->Ports = t->Num > 0 ? Malloc(sizeof(UINT) * t->Num) : NULL;
|
||||
if (t->Ports != NULL)
|
||||
{
|
||||
UINT i;
|
||||
for (i = 0; i < t->Num; ++i)
|
||||
{
|
||||
const UINT port = *(UINT *)LIST_DATA(ports, i);
|
||||
t->Ports[i] = port;
|
||||
}
|
||||
}
|
||||
}
|
||||
UnlockList(ports);
|
||||
|
||||
return ERR_NO_ERROR;
|
||||
}
|
||||
|
||||
// Get server status
|
||||
UINT StGetServerStatus(ADMIN *a, RPC_SERVER_STATUS *t)
|
||||
{
|
||||
@ -12094,6 +12180,49 @@ void FreeRpcListenerList(RPC_LISTENER_LIST *t)
|
||||
Free(t->Errors);
|
||||
}
|
||||
|
||||
// RPC_PORTS
|
||||
void InRpcPorts(RPC_PORTS *t, PACK *p)
|
||||
{
|
||||
UINT i;
|
||||
// Validate arguments
|
||||
if (t == NULL || p == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
t->Num = PackGetIndexCount(p, "Ports");
|
||||
t->Ports = ZeroMalloc(sizeof(UINT) * t->Num);
|
||||
|
||||
for (i = 0; i < t->Num; ++i)
|
||||
{
|
||||
t->Ports[i] = PackGetIntEx(p, "Ports", i);
|
||||
}
|
||||
}
|
||||
void OutRpcPorts(PACK *p, RPC_PORTS *t)
|
||||
{
|
||||
UINT i;
|
||||
// Validate arguments
|
||||
if (t == NULL || p == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < t->Num; ++i)
|
||||
{
|
||||
PackAddIntEx(p, "Ports", t->Ports[i], i, t->Num);
|
||||
}
|
||||
}
|
||||
void FreeRpcPorts(RPC_PORTS *t)
|
||||
{
|
||||
// Validate arguments
|
||||
if (t == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Free(t->Ports);
|
||||
}
|
||||
|
||||
// RPC_STR
|
||||
void InRpcStr(RPC_STR *t, PACK *p)
|
||||
{
|
||||
|
Reference in New Issue
Block a user