mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2026-04-20 22:09:26 +03:00
Divide version in multiple macros and set default values
This commit is contained in:
@@ -1961,7 +1961,7 @@ HINSTANCE InstallPcdDriverInternal()
|
||||
if (IsFileExists(tmp))
|
||||
{
|
||||
// If driver file is exist, try to get build number from registry
|
||||
if (LoadPcdDriverBuild() >= CEDAR_BUILD)
|
||||
if (LoadPcdDriverBuild() >= CEDAR_VERSION_BUILD)
|
||||
{
|
||||
// Already latest driver is installed
|
||||
install_driver = false;
|
||||
@@ -1990,7 +1990,7 @@ HINSTANCE InstallPcdDriverInternal()
|
||||
}
|
||||
|
||||
// Save build number
|
||||
SavePcdDriverBuild(CEDAR_BUILD);
|
||||
SavePcdDriverBuild(CEDAR_VERSION_BUILD);
|
||||
}
|
||||
|
||||
dll_filename = BRIDGE_WIN32_PCD_DLL;
|
||||
|
||||
+2
-2
@@ -4419,7 +4419,7 @@ UINT CmMainWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *p
|
||||
if (CmGetNumConnected(hWnd) == 0)
|
||||
{
|
||||
cm->Update = InitUpdateUi(_UU("PRODUCT_NAME_VPN_CMGR"), NAME_OF_VPN_CLIENT_MANAGER, NULL,
|
||||
GetCurrentBuildDate(), CEDAR_BUILD, CEDAR_VER, ((cm->Client == NULL) ? NULL : cm->Client->ClientId),
|
||||
GetCurrentBuildDate(), CEDAR_VERSION_BUILD, GetCedarVersionNumber(), ((cm->Client == NULL) ? NULL : cm->Client->ClientId),
|
||||
true);
|
||||
}
|
||||
}
|
||||
@@ -11171,7 +11171,7 @@ void CmMainWindowOnInit(HWND hWnd)
|
||||
|
||||
UniStrCpy(cm->StatudBar1, sizeof(cm->StatudBar1), _UU("CM_TITLE"));
|
||||
UniStrCpy(cm->StatudBar2, sizeof(cm->StatudBar2), _UU("CM_CONN_NO"));
|
||||
UniFormat(cm->StatudBar3, sizeof(cm->StatudBar3), _UU("CM_PRODUCT_NAME"), CEDAR_BUILD);
|
||||
UniFormat(cm->StatudBar3, sizeof(cm->StatudBar3), _UU("CM_PRODUCT_NAME"), CEDAR_VERSION_BUILD);
|
||||
|
||||
cm->Icon2 = LoadSmallIcon(ICO_SERVER_OFFLINE);
|
||||
cm->Icon3 = LoadSmallIcon(ICO_VPN);
|
||||
|
||||
+16
-7
@@ -1517,9 +1517,19 @@ void GetCedarVersion(char *tmp, UINT size)
|
||||
return;
|
||||
}
|
||||
|
||||
Format(tmp, size, "%u.%02u.%u",
|
||||
CEDAR_VER / 100, CEDAR_VER - (CEDAR_VER / 100) * 100,
|
||||
CEDAR_BUILD);
|
||||
Format(tmp, size, "%u.%02u.%u", CEDAR_VERSION_MAJOR, CEDAR_VERSION_MINOR, CEDAR_VERSION_BUILD);
|
||||
}
|
||||
|
||||
UINT GetCedarVersionNumber()
|
||||
{
|
||||
UINT pow = 10;
|
||||
|
||||
while (CEDAR_VERSION_MAJOR >= pow)
|
||||
{
|
||||
pow *= 10;
|
||||
}
|
||||
|
||||
return CEDAR_VERSION_MAJOR * pow + CEDAR_VERSION_MINOR;
|
||||
}
|
||||
|
||||
// Create Cedar object
|
||||
@@ -1581,8 +1591,8 @@ CEDAR *NewCedar(X *server_x, K *server_k)
|
||||
c->ServerX = CloneX(server_x);
|
||||
}
|
||||
|
||||
c->Version = CEDAR_VER;
|
||||
c->Build = CEDAR_BUILD;
|
||||
c->Version = GetCedarVersionNumber();
|
||||
c->Build = CEDAR_VERSION_BUILD;
|
||||
c->ServerStr = CopyStr(CEDAR_SERVER_STR);
|
||||
|
||||
GetMachineName(tmp, sizeof(tmp));
|
||||
@@ -1628,8 +1638,7 @@ CEDAR *NewCedar(X *server_x, K *server_k)
|
||||
ToStr(tmp2, c->Beta);
|
||||
|
||||
Format(tmp, sizeof(tmp), "Version %u.%02u Build %u %s %s (%s)",
|
||||
CEDAR_VER / 100, CEDAR_VER - (CEDAR_VER / 100) * 100,
|
||||
CEDAR_BUILD,
|
||||
CEDAR_VERSION_MAJOR, CEDAR_VERSION_MINOR, CEDAR_VERSION_BUILD,
|
||||
c->Beta == 0 ? "" : beta_str,
|
||||
c->Beta == 0 ? "" : tmp2,
|
||||
_SS("LANGSTR"));
|
||||
|
||||
+34
-8
@@ -135,10 +135,18 @@
|
||||
|
||||
|
||||
// Version number
|
||||
#define CEDAR_VER 501
|
||||
#ifndef CEDAR_VERSION_MAJOR
|
||||
#define CEDAR_VERSION_MAJOR 0
|
||||
#endif // CEDAR_VERSION_MAJOR
|
||||
|
||||
#ifndef CEDAR_VERSION_MINOR
|
||||
#define CEDAR_VERSION_MINOR 0
|
||||
#endif // CEDAR_VER_MINOR
|
||||
|
||||
// Build Number
|
||||
#define CEDAR_BUILD 9657
|
||||
#ifndef CEDAR_VERSION_BUILD
|
||||
#define CEDAR_VERSION_BUILD 0
|
||||
#endif // CEDAR_VERSION_BUILD
|
||||
|
||||
// Beta number
|
||||
//#define BETA_NUMBER 3
|
||||
@@ -148,21 +156,38 @@
|
||||
|
||||
// Specify the name of the person in charge building
|
||||
#ifndef BUILDER_NAME
|
||||
#define BUILDER_NAME "yagi"
|
||||
#define BUILDER_NAME "Unknown"
|
||||
#endif // BUILDER_NAME
|
||||
|
||||
// Specify the location to build
|
||||
#ifndef BUILD_PLACE
|
||||
#define BUILD_PLACE "pc37"
|
||||
#define BUILD_PLACE "Unknown"
|
||||
#endif // BUILD_PLACE
|
||||
|
||||
// Specifies the build date
|
||||
#define BUILD_DATE_Y 2018
|
||||
#ifndef BUILD_DATE_Y
|
||||
#define BUILD_DATE_Y 1970
|
||||
#endif // BUILD_DATE_Y
|
||||
|
||||
#ifndef BUILD_DATE_M
|
||||
#define BUILD_DATE_M 1
|
||||
#define BUILD_DATE_D 14
|
||||
#endif // BUILD_DATE_M
|
||||
|
||||
#ifndef BUILD_DATE_D
|
||||
#define BUILD_DATE_D 1
|
||||
#endif // BUILD_DATE_D
|
||||
|
||||
#ifndef BUILD_DATE_HO
|
||||
#define BUILD_DATE_HO 0
|
||||
#define BUILD_DATE_MI 36
|
||||
#define BUILD_DATE_SE 20
|
||||
#endif // BUILD_DATE_HO
|
||||
|
||||
#ifndef BUILD_DATE_MI
|
||||
#define BUILD_DATE_MI 0
|
||||
#endif // BUILD_DATE_MI
|
||||
|
||||
#ifndef BUILD_DATE_SE
|
||||
#define BUILD_DATE_SE 0
|
||||
#endif // BUILD_DATE_SE
|
||||
|
||||
// Tolerable time difference
|
||||
#define ALLOW_TIMESTAMP_DIFF (UINT64)(3 * 24 * 60 * 60 * 1000)
|
||||
@@ -1243,6 +1268,7 @@ bool IsSupportedWinVer(RPC_WINVER *v);
|
||||
SOCK *GetInProcListeningSock(CEDAR *c);
|
||||
SOCK *GetReverseListeningSock(CEDAR *c);
|
||||
void GetCedarVersion(char *tmp, UINT size);
|
||||
UINT GetCedarVersionNumber();
|
||||
UINT64 GetCurrentBuildDate();
|
||||
void CedarAddCurrentTcpQueueSize(CEDAR *c, int diff);
|
||||
UINT CedarGetCurrentTcpQueueSize(CEDAR *c);
|
||||
|
||||
+3
-4
@@ -8078,7 +8078,6 @@ bool CtGetVLan(CLIENT *c, RPC_CLIENT_GET_VLAN *get)
|
||||
// Initialize the driver version information structure
|
||||
void CiInitDriverVerStruct(MS_DRIVER_VER *ver)
|
||||
{
|
||||
UINT cedar_ver = CEDAR_VER;
|
||||
// Validate arguments
|
||||
if (ver == NULL)
|
||||
{
|
||||
@@ -8090,9 +8089,9 @@ void CiInitDriverVerStruct(MS_DRIVER_VER *ver)
|
||||
ver->Year = BUILD_DATE_Y;
|
||||
ver->Month = BUILD_DATE_M;
|
||||
ver->Day = BUILD_DATE_D;
|
||||
ver->Major = cedar_ver / 100;
|
||||
ver->Minor = cedar_ver % 100;
|
||||
ver->Build = CEDAR_BUILD;
|
||||
ver->Major = CEDAR_VERSION_MAJOR;
|
||||
ver->Minor = CEDAR_VERSION_MINOR;
|
||||
ver->Build = CEDAR_VERSION_BUILD;
|
||||
}
|
||||
#endif // OS_WIN32
|
||||
|
||||
|
||||
+7
-7
@@ -1004,7 +1004,7 @@ void VpnCmdInitBootPath()
|
||||
// Get the version of vpncmd that is currently installed
|
||||
current_ver = MsRegReadInt(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_VER);
|
||||
|
||||
if ((CEDAR_BUILD >= current_ver) ||
|
||||
if ((CEDAR_VERSION_BUILD >= current_ver) ||
|
||||
MsRegIsValue(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH) == false)
|
||||
{
|
||||
char *src_filename;
|
||||
@@ -1035,7 +1035,7 @@ void VpnCmdInitBootPath()
|
||||
|
||||
if (MsIs64BitWindows() == false || Is64())
|
||||
{
|
||||
if (IsFile(tmp) == false || (CEDAR_BUILD > current_ver) || MsRegIsValue(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH) == false)
|
||||
if (IsFile(tmp) == false || (CEDAR_VERSION_BUILD > current_ver) || MsRegIsValue(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH) == false)
|
||||
{
|
||||
b = FileCopy(src_filename, tmp);
|
||||
}
|
||||
@@ -1048,7 +1048,7 @@ void VpnCmdInitBootPath()
|
||||
|
||||
if (true)
|
||||
{
|
||||
if (IsFile(tmp) == false || (CEDAR_BUILD > current_ver) || MsRegIsValue(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH) == false)
|
||||
if (IsFile(tmp) == false || (CEDAR_VERSION_BUILD > current_ver) || MsRegIsValue(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH) == false)
|
||||
{
|
||||
b = FileCopy(src_filename, tmp);
|
||||
}
|
||||
@@ -1058,7 +1058,7 @@ void VpnCmdInitBootPath()
|
||||
|
||||
if (true)
|
||||
{
|
||||
if (IsFile(tmp) == false || (CEDAR_BUILD > current_ver) || MsRegIsValue(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH) == false)
|
||||
if (IsFile(tmp) == false || (CEDAR_VERSION_BUILD > current_ver) || MsRegIsValue(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH) == false)
|
||||
{
|
||||
b = FileCopy(src_filename, tmp);
|
||||
}
|
||||
@@ -1069,15 +1069,15 @@ void VpnCmdInitBootPath()
|
||||
if (MsIs64BitWindows() == false)
|
||||
{
|
||||
MsRegWriteStr(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH, exe_path);
|
||||
MsRegWriteInt(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_VER, CEDAR_BUILD);
|
||||
MsRegWriteInt(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_VER, CEDAR_VERSION_BUILD);
|
||||
}
|
||||
else
|
||||
{
|
||||
MsRegWriteStrEx2(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH, exe_path, true, false);
|
||||
MsRegWriteIntEx2(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_VER, CEDAR_BUILD, true, false);
|
||||
MsRegWriteIntEx2(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_VER, CEDAR_VERSION_BUILD, true, false);
|
||||
|
||||
MsRegWriteStrEx2(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_PATH, exe_path, false, true);
|
||||
MsRegWriteIntEx2(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_VER, CEDAR_BUILD, false, true);
|
||||
MsRegWriteIntEx2(REG_LOCAL_MACHINE, VPNCMD_BOOTSTRAP_REG_KEYNAME, VPNCMD_BOOTSTRAP_REG_VALUENAME_VER, CEDAR_VERSION_BUILD, false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -358,7 +358,7 @@ bool IPsecWin7InitDriverInner()
|
||||
|
||||
if (IsFileExists(sys_filename) && MsIsServiceInstalled(IPSEC_WIN7_DRIVER_NAME))
|
||||
{
|
||||
if (GetCurrentIPsecWin7DriverBuild() >= CEDAR_BUILD)
|
||||
if (GetCurrentIPsecWin7DriverBuild() >= CEDAR_VERSION_BUILD)
|
||||
{
|
||||
// Not to install since the latest version has been already installed
|
||||
install_driver = false;
|
||||
@@ -485,7 +485,7 @@ void SetCurrentIPsecWin7DriverBuild()
|
||||
{
|
||||
MsRegWriteInt(REG_LOCAL_MACHINE, IPSEC_WIN7_DRIVER_REGKEY,
|
||||
(MsIsWindows10() ? IPSEC_WIN7_DRIVER_BUILDNUMBER_WIN10 : IPSEC_WIN7_DRIVER_BUILDNUMBER),
|
||||
CEDAR_BUILD);
|
||||
CEDAR_VERSION_BUILD);
|
||||
}
|
||||
|
||||
// Get the build number of the current driver
|
||||
|
||||
@@ -1489,8 +1489,8 @@ bool ServerAccept(CONNECTION *c)
|
||||
{
|
||||
StrCpy(c->ClientStr, sizeof(c->ClientStr), "Unknown");
|
||||
}
|
||||
c->ServerVer = CEDAR_VER;
|
||||
c->ServerBuild = CEDAR_BUILD;
|
||||
c->ServerVer = GetCedarVersionNumber();
|
||||
c->ServerBuild = CEDAR_VERSION_BUILD;
|
||||
|
||||
// Get the NODE_INFO
|
||||
Zero(&node, sizeof(node));
|
||||
|
||||
+1
-1
@@ -20270,7 +20270,7 @@ UINT SmMainDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, void *para
|
||||
|
||||
// Updater start
|
||||
sm->Update = InitUpdateUi(_UU("PRODUCT_NAME_VPN_SMGR"), NAME_OF_VPN_SERVER_MANAGER, NULL, GetCurrentBuildDate(),
|
||||
CEDAR_BUILD, CEDAR_VER, NULL, false);
|
||||
CEDAR_VERSION_BUILD, GetCedarVersionNumber(), NULL, false);
|
||||
break;
|
||||
|
||||
case WM_TIMER:
|
||||
|
||||
+10
-16
@@ -896,9 +896,7 @@ void SwGenerateDefaultSfxFileName(wchar_t *name, UINT size)
|
||||
}
|
||||
|
||||
UniFormat(name, size, L"easy-" GC_SW_SOFTETHER_PREFIX_W L"vpnclient-v%u.%02u-%u-%04u-%02u-%02u-windows.exe",
|
||||
CEDAR_VER / 100,
|
||||
CEDAR_VER % 100,
|
||||
CEDAR_BUILD,
|
||||
CEDAR_VERSION_MAJOR, CEDAR_VERSION_MINOR, CEDAR_VERSION_BUILD,
|
||||
BUILD_DATE_Y, BUILD_DATE_M, BUILD_DATE_D);
|
||||
}
|
||||
|
||||
@@ -912,9 +910,7 @@ void SwGenerateDefaultZipFileName(wchar_t *name, UINT size)
|
||||
}
|
||||
|
||||
UniFormat(name, size, L"web-" GC_SW_SOFTETHER_PREFIX_W L"vpnclient-v%u.%02u-%u-%04u-%02u-%02u-windows.zip",
|
||||
CEDAR_VER / 100,
|
||||
CEDAR_VER % 100,
|
||||
CEDAR_BUILD,
|
||||
CEDAR_VERSION_MAJOR, CEDAR_VERSION_MINOR, CEDAR_VERSION_BUILD,
|
||||
BUILD_DATE_Y, BUILD_DATE_M, BUILD_DATE_D);
|
||||
}
|
||||
|
||||
@@ -2941,15 +2937,13 @@ bool SwWebMain(SW *sw, WIZARD_PAGE *wp)
|
||||
char package_name[MAX_SIZE];
|
||||
ZIP_PACKER *z = NULL;
|
||||
|
||||
ToStr(ver_major, CEDAR_VER / 100);
|
||||
ToStr(ver_minor, CEDAR_VER % 100);
|
||||
ToStr(ver_build, CEDAR_BUILD);
|
||||
ToStr(ver_major, CEDAR_VERSION_MAJOR);
|
||||
ToStr(ver_minor, CEDAR_VERSION_MINOR);
|
||||
ToStr(ver_build, CEDAR_VERSION_BUILD);
|
||||
|
||||
Format(package_name, sizeof(package_name),
|
||||
GC_SW_SOFTETHER_PREFIX "vpnclient-v%u.%02u-%u-%04u-%02u-%02u-windows.exe",
|
||||
CEDAR_VER / 100,
|
||||
CEDAR_VER % 100,
|
||||
CEDAR_BUILD,
|
||||
CEDAR_VERSION_MAJOR, CEDAR_VERSION_MINOR, CEDAR_VERSION_BUILD,
|
||||
BUILD_DATE_Y, BUILD_DATE_M, BUILD_DATE_D);
|
||||
|
||||
GetCurrentLang(¤t_lang);
|
||||
@@ -3947,7 +3941,7 @@ L_RETRY_LOG:
|
||||
|
||||
sw->LogFile->IsSystemMode = sw->IsSystemMode;
|
||||
sw->LogFile->Component = sw->CurrentComponent;
|
||||
sw->LogFile->Build = CEDAR_BUILD;
|
||||
sw->LogFile->Build = CEDAR_VERSION_BUILD;
|
||||
|
||||
if (SwSaveLogFile(sw, log_filename, sw->LogFile) == false)
|
||||
{
|
||||
@@ -3978,7 +3972,7 @@ L_RETRY_LOG:
|
||||
MsRegWriteStrEx2W(sw->IsSystemMode ? REG_LOCAL_MACHINE : REG_CURRENT_USER,
|
||||
keyname, "InstalledDir", sw->InstallDir, false, true);
|
||||
MsRegWriteIntEx2(sw->IsSystemMode ? REG_LOCAL_MACHINE : REG_CURRENT_USER,
|
||||
keyname, "InstalledBuild", CEDAR_BUILD, false, true);
|
||||
keyname, "InstalledBuild", CEDAR_VERSION_BUILD, false, true);
|
||||
|
||||
// Set the language to registry
|
||||
MsRegWriteStrEx2(REG_CURRENT_USER, SW_REG_KEY, "Last User Language",
|
||||
@@ -5032,7 +5026,7 @@ UINT SwDir(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, WIZARD *wizard, WI
|
||||
break;
|
||||
}
|
||||
|
||||
if (logfile != NULL && (logfile->Build > CEDAR_BUILD) && UniIsEmptyStr(sw->auto_setting_path) == false &&
|
||||
if (logfile != NULL && (logfile->Build > CEDAR_VERSION_BUILD) && UniIsEmptyStr(sw->auto_setting_path) == false &&
|
||||
sw->CurrentComponent->Id == SW_CMP_VPN_CLIENT && logfile->Component->Id == SW_CMP_VPN_CLIENT)
|
||||
{
|
||||
// In the case of the VPN Client, show a message if a newer version is installed and
|
||||
@@ -5054,7 +5048,7 @@ UINT SwDir(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, WIZARD *wizard, WI
|
||||
{
|
||||
errmsg = _UU("SW_DIR_DST_IS_OTHER_PRODUCT");
|
||||
}
|
||||
else if ((skip_ver_check == false) && (logfile->Build > CEDAR_BUILD))
|
||||
else if ((skip_ver_check == false) && (logfile->Build > CEDAR_VERSION_BUILD))
|
||||
{
|
||||
errmsg = _UU("SW_DIR_DST_IS_NEWER");
|
||||
}
|
||||
|
||||
+1
-1
@@ -3537,7 +3537,7 @@ void AboutDlgInit(HWND hWnd, WINUI_ABOUT *a)
|
||||
SetText(hWnd, 0, tmp);
|
||||
|
||||
SetFont(hWnd, S_INFO1, GetFont("Arial", 12, false, false, false, false));
|
||||
FormatText(hWnd, S_INFO1, CEDAR_VER / 100, CEDAR_VER / 100, CEDAR_VER % 100, CEDAR_BUILD);
|
||||
FormatText(hWnd, S_INFO1, CEDAR_VERSION_MAJOR, CEDAR_VERSION_MAJOR, CEDAR_VERSION_MINOR, CEDAR_VERSION_BUILD);
|
||||
|
||||
SetFont(hWnd, S_INFO2, GetFont("Arial", 8, false, false, false, false));
|
||||
FormatText(hWnd, S_INFO2, BUILD_DATE_Y, a->Cedar->BuildInfo);
|
||||
|
||||
Reference in New Issue
Block a user