mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2025-07-13 11:14:59 +03:00
Merge PR #1200: Implement support for WireGuard
This commit is contained in:
@ -7483,6 +7483,9 @@ void PsMain(PS *ps)
|
||||
{"RouterTableDel", PsRouterTableDel},
|
||||
{"LogFileList", PsLogFileList},
|
||||
{"LogFileGet", PsLogFileGet},
|
||||
{"WgkAdd", PsWgkAdd},
|
||||
{"WgkDelete", PsWgkDelete},
|
||||
{"WgkEnum", PsWgkEnum},
|
||||
{"HubCreate", PsHubCreate},
|
||||
{"HubCreateDynamic", PsHubCreateDynamic},
|
||||
{"HubCreateStatic", PsHubCreateStatic},
|
||||
@ -7493,6 +7496,7 @@ void PsMain(PS *ps)
|
||||
{"Hub", PsHub},
|
||||
{"Online", PsOnline},
|
||||
{"Offline", PsOffline},
|
||||
{"SetStaticNetwork", PsSetStaticNetwork},
|
||||
{"SetMaxSession", PsSetMaxSession},
|
||||
{"SetHubPassword", PsSetHubPassword},
|
||||
{"SetEnumAllow", PsSetEnumAllow},
|
||||
@ -10561,6 +10565,137 @@ UINT PsLogFileGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Add a WireGuard key (TODO: ability add multiple keys in a single call)
|
||||
UINT PsWgkAdd(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
|
||||
{
|
||||
PS *ps = (PS *)param;
|
||||
RPC_WGK t;
|
||||
UINT ret;
|
||||
LIST *o;
|
||||
PARAM args[] =
|
||||
{
|
||||
{"[key]", CmdPrompt, _UU("CMD_WgkAdd_Prompt_[key]"), CmdEvalNotEmpty, NULL},
|
||||
{"HUB", CmdPrompt, _UU("CMD_WgkAdd_Prompt_HUB"), NULL, NULL},
|
||||
{"USER", CmdPrompt, _UU("CMD_WgkAdd_Prompt_USER"), NULL, NULL}
|
||||
};
|
||||
|
||||
o = ParseCommandList(c, cmd_name, str, args, sizeof(args) / sizeof(args[0]));
|
||||
if (o == NULL)
|
||||
{
|
||||
return ERR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Zero(&t, sizeof(t));
|
||||
t.Num = 1;
|
||||
t.Wgks = ZeroMalloc(sizeof(WGK));
|
||||
|
||||
StrCpy(t.Wgks[0].Key, sizeof(t.Wgks[0].Key), GetParamStr(o, "[key]"));
|
||||
StrCpy(t.Wgks[0].Hub, sizeof(t.Wgks[0].Hub), GetParamStr(o, "HUB"));
|
||||
StrCpy(t.Wgks[0].User, sizeof(t.Wgks[0].User), GetParamStr(o, "USER"));
|
||||
|
||||
FreeParamValueList(o);
|
||||
|
||||
ret = ScAddWgk(ps->Rpc, &t);
|
||||
if (ret != ERR_NO_ERROR)
|
||||
{
|
||||
CmdPrintError(c, ret);
|
||||
}
|
||||
|
||||
FreeRpcWgk(&t);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Delete a WireGuard key (TODO: ability to delete multiple keys in a single call)
|
||||
UINT PsWgkDelete(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
|
||||
{
|
||||
PS *ps = (PS *)param;
|
||||
RPC_WGK t;
|
||||
UINT ret;
|
||||
LIST *o;
|
||||
PARAM args[] =
|
||||
{
|
||||
{"[key]", CmdPrompt, _UU("CMD_WgkDelete_Prompt_[key]"), CmdEvalNotEmpty, NULL},
|
||||
};
|
||||
|
||||
o = ParseCommandList(c, cmd_name, str, args, sizeof(args) / sizeof(args[0]));
|
||||
if (o == NULL)
|
||||
{
|
||||
return ERR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Zero(&t, sizeof(t));
|
||||
t.Num = 1;
|
||||
t.Wgks = ZeroMalloc(sizeof(WGK));
|
||||
|
||||
StrCpy(t.Wgks[0].Key, sizeof(t.Wgks[0].Key), GetParamStr(o, "[key]"));
|
||||
|
||||
FreeParamValueList(o);
|
||||
|
||||
ret = ScDeleteWgk(ps->Rpc, &t);
|
||||
if (ret != ERR_NO_ERROR)
|
||||
{
|
||||
CmdPrintError(c, ret);
|
||||
}
|
||||
|
||||
FreeRpcWgk(&t);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// List the WireGuard keys
|
||||
UINT PsWgkEnum(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
|
||||
{
|
||||
UINT ret = ERR_NO_ERROR;
|
||||
PS *ps = (PS *)param;
|
||||
RPC_WGK t;
|
||||
LIST *o;
|
||||
|
||||
o = ParseCommandList(c, cmd_name, str, NULL, 0);
|
||||
if (o == NULL)
|
||||
{
|
||||
return ERR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Zero(&t, sizeof(t));
|
||||
|
||||
ret = ScEnumWgk(ps->Rpc, &t);
|
||||
if (ret == ERR_NO_ERROR)
|
||||
{
|
||||
UINT i;
|
||||
CT *ct = CtNew();
|
||||
CtInsertColumn(ct, _UU("CMD_WgkEnum_Column_Key"), false);
|
||||
CtInsertColumn(ct, _UU("CMD_WgkEnum_Column_Hub"), false);
|
||||
CtInsertColumn(ct, _UU("CMD_WgkEnum_Column_User"), false);
|
||||
|
||||
for (i = 0; i < t.Num; ++i)
|
||||
{
|
||||
const WGK *wgk = &t.Wgks[i];
|
||||
wchar_t *key, *hub, *user;
|
||||
|
||||
key = CopyStrToUni(wgk->Key);
|
||||
hub = CopyStrToUni(wgk->Hub);
|
||||
user = CopyStrToUni(wgk->User);
|
||||
|
||||
CtInsert(ct, key, hub, user);
|
||||
|
||||
Free(key);
|
||||
Free(hub);
|
||||
Free(user);
|
||||
}
|
||||
|
||||
CtFree(ct, c);
|
||||
}
|
||||
else
|
||||
{
|
||||
CmdPrintError(c, ret);
|
||||
}
|
||||
|
||||
FreeRpcWgk(&t);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Create a New Virtual HUB
|
||||
UINT PsHubCreate(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
|
||||
{
|
||||
@ -11143,6 +11278,53 @@ UINT PsOffline(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Set the static IPv4 network parameters for the Virtual HUB
|
||||
UINT PsSetStaticNetwork(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
|
||||
{
|
||||
LIST *o;
|
||||
PS *ps = (PS *)param;
|
||||
UINT ret = 0;
|
||||
RPC_CREATE_HUB t;
|
||||
PARAM args[] =
|
||||
{
|
||||
{"GATEWAY", CmdPrompt, _UU("CMD_SetStaticNetwork_Prompt_GATEWAY"), CmdEvalIp, NULL},
|
||||
{"SUBNET", CmdPrompt, _UU("CMD_SetStaticNetwork_Prompt_SUBNET"), CmdEvalIp, NULL}
|
||||
};
|
||||
|
||||
if (ps->HubName == NULL)
|
||||
{
|
||||
c->Write(c, _UU("CMD_Hub_Not_Selected"));
|
||||
return ERR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
o = ParseCommandList(c, cmd_name, str, args, sizeof(args) / sizeof(args[0]));
|
||||
if (o == NULL)
|
||||
{
|
||||
return ERR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Zero(&t, sizeof(t));
|
||||
StrCpy(t.HubName, sizeof(t.HubName), ps->HubName);
|
||||
ret = ScGetHub(ps->Rpc, &t);
|
||||
if (ret != ERR_NO_ERROR)
|
||||
{
|
||||
goto FINAL;
|
||||
}
|
||||
|
||||
t.HubOption.DefaultGateway = StrToIP32(GetParamStr(o, "GATEWAY"));
|
||||
t.HubOption.DefaultSubnet = StrToIP32(GetParamStr(o, "SUBNET"));
|
||||
|
||||
ret = ScSetHub(ps->Rpc, &t);
|
||||
FINAL:
|
||||
if (ret != ERR_NO_ERROR)
|
||||
{
|
||||
CmdPrintError(c, ret);
|
||||
}
|
||||
|
||||
FreeParamValueList(o);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Set the maximum number of concurrent connecting sessions of the Virtual HUB
|
||||
UINT PsSetMaxSession(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
|
||||
{
|
||||
@ -11420,6 +11602,12 @@ UINT PsOptionsGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
|
||||
|
||||
CtInsert(ct, _UU("CMD_OptionsGet_TYPE"), GetHubTypeStr(t.HubType));
|
||||
|
||||
IPToUniStr32(tmp, sizeof(tmp), t.HubOption.DefaultGateway);
|
||||
CtInsert(ct, _UU("CMD_OptionsGet_GATEWAY"), tmp);
|
||||
|
||||
IPToUniStr32(tmp, sizeof(tmp), t.HubOption.DefaultSubnet);
|
||||
CtInsert(ct, _UU("CMD_OptionsGet_SUBNET"), tmp);
|
||||
|
||||
CtFree(ct, c);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user