Skip to content

Commit

Permalink
Merge pull request #74 from InvisibleManVPN/develop
Browse files Browse the repository at this point in the history
InvisibleMan XRay version 1.3.2
  • Loading branch information
InvisibleManVPN committed Jul 21, 2023
2 parents 054c0a2 + cf2bfe9 commit 0f3541e
Show file tree
Hide file tree
Showing 105 changed files with 1,818 additions and 399 deletions.
8 changes: 8 additions & 0 deletions InvisibleMan-XRay/Assets/Icons.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -190,4 +190,12 @@
</Canvas>
</VisualBrush.Visual>
</VisualBrush>

<VisualBrush x:Key="Icon.Policy.MintyGreen">
<VisualBrush.Visual>
<Canvas>
<Path Data="M441.7,82.8,253.4,2.9A32.63,32.63,0,0,0,240,0a31.83,31.83,0,0,0-13.3,2.9L38.3,82.8C16.3,92.1-.1,113.8,0,140c.5,99.2,41.3,280.7,213.6,363.2a61.08,61.08,0,0,0,52.8,0C425.35,445.06,546.85,133.44,441.7,82.8ZM352.76,211.94,227.35,337.35a27,27,0,0,1-35,2.69,29.26,29.26,0,0,1-3.19-2.74L127,275.22A27,27,0,1,1,165.22,237l43,43L314.58,173.76a27,27,0,0,1,38.18,38.18Z" Fill="#6dcc8e" />
</Canvas>
</VisualBrush.Visual>
</VisualBrush>
</ResourceDictionary>
16 changes: 15 additions & 1 deletion InvisibleMan-XRay/Core/InvisibleManXRayCore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ namespace InvisibleManXRay.Core
using Handlers.Tunnels;
using Values;
using Utilities;
using Services;
using Services.Analytics.Core;

public class InvisibleManXRayCore
{
Expand All @@ -25,6 +27,8 @@ public class InvisibleManXRayCore
private Func<ITunnel> getTunnel;
private Action<string> onFailLoadingConfig;

private AnalyticsService AnalyticsService => ServiceLocator.Get<AnalyticsService>();

public void Setup(
Func<Config> getConfig,
Func<Mode> getMode,
Expand Down Expand Up @@ -109,12 +113,22 @@ public void Run(string config)
bool isSocks = getProtocol.Invoke() == Protocol.SOCKS || mode == Mode.TUN;
bool isUdpEnabled = getUdpEnabled.Invoke();

SendServerStartEvent();
XRayCoreWrapper.StartServer(config, port, logLevel, logPath, isSocks, isUdpEnabled);

void SendServerStartEvent()
{
if (mode == Mode.PROXY)
AnalyticsService.SendEvent(new ProxyStartedEvent());
else
AnalyticsService.SendEvent(new TunStartedEvent());
}
}

public void Stop()
{
XRayCoreWrapper.StopServer();
AnalyticsService.SendEvent(new StoppedEvent());
}

public void Cancel()
Expand All @@ -123,7 +137,7 @@ public void Cancel()
CancelTunnel();
}

public bool Test(string config)
public int Test(string config)
{
return XRayCoreWrapper.TestConnection(config, getTestPort.Invoke());
}
Expand Down
4 changes: 2 additions & 2 deletions InvisibleMan-XRay/Core/XRayCoreWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ public static void StopServer()
static extern void StopServer();
}

public static bool TestConnection(string config, int port)
public static int TestConnection(string config, int port)
{
return TestConnection(config, port);

[DllImport(Path.XRAY_CORE_DLL, EntryPoint = "TestConnection")]
static extern bool TestConnection(string config, int port);
static extern int TestConnection(string config, int port);
}

public static string GetVersion()
Expand Down
22 changes: 21 additions & 1 deletion InvisibleMan-XRay/Factories/WindowFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@ public MainWindow CreateMainWindow()
ConfigHandler configHandler = handlersManager.GetHandler<ConfigHandler>();
UpdateHandler updateHandler = handlersManager.GetHandler<UpdateHandler>();
BroadcastHandler broadcastHandler = handlersManager.GetHandler<BroadcastHandler>();
SettingsHandler settingsHandler = handlersManager.GetHandler<SettingsHandler>();
LinkHandler linkHandler = handlersManager.GetHandler<LinkHandler>();

MainWindow mainWindow = new MainWindow();
mainWindow.Setup(
isNeedToShowPolicyWindow: IsNeedToShowPolicyWindow,
getConfig: configHandler.GetCurrentConfig,
loadConfig: core.LoadConfig,
enableMode: core.EnableMode,
Expand All @@ -38,16 +40,20 @@ public MainWindow CreateMainWindow()
openSettingsWindow: CreateSettingsWindow,
openUpdateWindow: CreateUpdateWindow,
openAboutWindow: CreateAboutWindow,
openPolicyWindow: CreatePolicyWindow,
onRunServer: core.Run,
onStopServer: core.Stop,
onCancelServer: core.Cancel,
onDisableMode: core.DisableMode,
onGenerateClientId: settingsHandler.GenerateClientId,
onGitHubClick: linkHandler.OpenGitHubRepositoryLink,
onBugReportingClick: linkHandler.OpenBugReportingLink,
onCustomLinkClick: linkHandler.OpenCustomLink
);

return mainWindow;

bool IsNeedToShowPolicyWindow() => settingsHandler.UserSettings.GetClientId() == "";
}

public SettingsWindow CreateSettingsWindow()
Expand All @@ -60,14 +66,16 @@ public SettingsWindow CreateSettingsWindow()
getMode: settingsHandler.UserSettings.GetMode,
getProtocol: settingsHandler.UserSettings.GetProtocol,
getUdpEnabled: settingsHandler.UserSettings.GetUdpEnabled,
getRunAtStartupEnabled: settingsHandler.UserSettings.GetRunAtStartupEnabled,
getRunningAtStartupEnabled: settingsHandler.UserSettings.GetRunningAtStartupEnabled,
getSendingAnalyticsEnabled: settingsHandler.UserSettings.GetSendingAnalyticsEnabled,
getProxyPort: settingsHandler.UserSettings.GetProxyPort,
getTunPort: settingsHandler.UserSettings.GetTunPort,
getTestPort: settingsHandler.UserSettings.GetTestPort,
getDeviceIp: settingsHandler.UserSettings.GetTunIp,
getDns: settingsHandler.UserSettings.GetDns,
getLogLevel: settingsHandler.UserSettings.GetLogLevel,
getLogPath: settingsHandler.UserSettings.GetLogPath,
openPolicyWindow: CreatePolicyWindow,
onUpdateUserSettings: UpdateUserSettings
);

Expand Down Expand Up @@ -153,5 +161,17 @@ void UpdateConfig(int index)
mainWindow.TryRerun();
}
}

public PolicyWindow CreatePolicyWindow()
{
LinkHandler linkHandler = handlersManager.GetHandler<LinkHandler>();

PolicyWindow policyWindow = new PolicyWindow();
policyWindow.Setup(
onEmailClick: linkHandler.OpenEmailLink
);

return policyWindow;
}
}
}
4 changes: 2 additions & 2 deletions InvisibleMan-XRay/Foundation/Processor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public Processor()
this.processes = new Dictionary<string, Process>();
}

public void StartProcess(string processName, string fileName, string command, bool runAsAdmin)
public void StartProcess(string processName, string fileName, string workingDirectory, string command, bool runAsAdmin)
{
try
{
Expand All @@ -24,7 +24,7 @@ public void StartProcess(string processName, string fileName, string command, bo
process.StartInfo.UseShellExecute = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.WorkingDirectory = Directory.SERVICES;
process.StartInfo.WorkingDirectory = workingDirectory;

if (runAsAdmin)
process.StartInfo.Verb = "runas";
Expand Down
51 changes: 45 additions & 6 deletions InvisibleMan-XRay/Handlers/NotifyHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
namespace InvisibleManXRay.Handlers
{
using Models;
using Services;
using Services.Analytics.Notify;

public class NotifyHandler : Handler
{
Expand All @@ -22,6 +24,8 @@ public class NotifyHandler : Handler

private Dictionary<Mode, ToolStripMenuItem> modeItems;

private AnalyticsService AnalyticsService => ServiceLocator.Get<AnalyticsService>();

public NotifyHandler()
{
InitializeNotifyIcon();
Expand Down Expand Up @@ -82,15 +86,15 @@ private void AddMenuStrip()
{
ContextMenuStrip contextMenuStrip = new ContextMenuStrip();
modeItems = new Dictionary<Mode, ToolStripMenuItem>() {
{ Mode.PROXY, CreateItem("Proxy", onProxyModeClick, true, getMode.Invoke() == Mode.PROXY) },
{ Mode.TUN, CreateItem("TUN (Experimental)", onTunnelModeClick, true, getMode.Invoke() == Mode.TUN) }
{ Mode.PROXY, CreateItem("Proxy", OnProxyModeClick, true, getMode.Invoke() == Mode.PROXY) },
{ Mode.TUN, CreateItem("TUN", OnTunnelModeClick, true, getMode.Invoke() == Mode.TUN) }
};

AddMenuItem("Open Invisible Man XRay", onOpenClick);
AddMenuItem("Open Invisible Man XRay", OnOpenClick);
AddMenuItem("Mode", delegate { }, modeItems.Values.ToArray());
AddMenuItem("Check for updates", onUpdateClick);
AddMenuItem("About", onAboutClick);
AddMenuItem("Close", onCloseClick);
AddMenuItem("Check for updates", OnUpdateClick);
AddMenuItem("About", OnAboutClick);
AddMenuItem("Close", OnCloseClick);

notifyIcon.ContextMenuStrip = contextMenuStrip;

Expand Down Expand Up @@ -129,6 +133,41 @@ void HandleToggleClick()
CheckItem(item);
}
}

void OnProxyModeClick()
{
AnalyticsService.SendEvent(new ProxyModeClickedEvent());
onProxyModeClick.Invoke();
}

void OnTunnelModeClick()
{
AnalyticsService.SendEvent(new TunModeClickedEvent());
onTunnelModeClick.Invoke();
}

void OnOpenClick()
{
AnalyticsService.SendEvent(new OpenClickedEvent());
onOpenClick.Invoke();
}

void OnUpdateClick()
{
AnalyticsService.SendEvent(new CheckForUpdateClickedEvent());
onUpdateClick.Invoke();
}

void OnAboutClick()
{
AnalyticsService.SendEvent(new AboutClickedEvent());
onAboutClick.Invoke();
}

void OnCloseClick()
{
onCloseClick.Invoke();
}
}

private void UncheckAllItems()
Expand Down
19 changes: 19 additions & 0 deletions InvisibleMan-XRay/Handlers/ProcessHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using System;

namespace InvisibleManXRay.Handlers
{
using Processes;

public class ProcessHandler : Handler
{
private TunnelProcess tunnelProcess;

public TunnelProcess TunnelProcess => tunnelProcess;

public void Setup(Func<int> getTunnelPort)
{
tunnelProcess = new TunnelProcess();
tunnelProcess.Setup(getPort: getTunnelPort);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
using System.Net;
using System.Net.Sockets;

namespace InvisibleManXRay.Handlers.Services
namespace InvisibleManXRay.Handlers.Processes
{
using Models;
using Foundation;
using Utilities;
using Values;

public class TunnelService
public class TunnelProcess
{
private IPHostEntry hostEntry;
private IPAddress address;
Expand All @@ -23,7 +23,7 @@ public class TunnelService

private const string INVISIBLEMAN_TUN_PROCESS = "InvisibleMan-TUN";

public TunnelService()
public TunnelProcess()
{
this.hostEntry = Dns.GetHostEntry(Dns.GetHostName());
this.address = hostEntry.AddressList.First();
Expand All @@ -38,14 +38,15 @@ public void Setup(Func<int> getPort)

public void Start()
{
if (IsServiceRunning())
if (IsProcessRunning())
return;

processor.StopSystemProcesses(INVISIBLEMAN_TUN_PROCESS);

processor.StartProcess(
processName: INVISIBLEMAN_TUN_PROCESS,
fileName: System.IO.Path.GetFullPath(Path.INVISIBLEMAN_TUN_EXE),
workingDirectory: Directory.TUN,
command: $"-port={getPort.Invoke()}",
runAsAdmin: true
);
Expand Down Expand Up @@ -112,8 +113,8 @@ public Status Execute(string command)
}
}

public bool IsServiceRunning() => processor.IsProcessRunning(INVISIBLEMAN_TUN_PROCESS);
public bool IsProcessRunning() => processor.IsProcessRunning(INVISIBLEMAN_TUN_PROCESS);

public bool IsServicePortActive() => NetworkUtility.IsPortActive(getPort.Invoke());
public bool IsProcessPortActive() => NetworkUtility.IsPortActive(getPort.Invoke());
}
}
19 changes: 0 additions & 19 deletions InvisibleMan-XRay/Handlers/ServiceHandler.cs

This file was deleted.

11 changes: 9 additions & 2 deletions InvisibleMan-XRay/Handlers/SettingsHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ public void UpdateUserSettings(UserSettings userSettings)
this.userSettings.Protocol = userSettings.Protocol;
this.userSettings.LogLevel = userSettings.LogLevel;
this.userSettings.IsUdpEnable = userSettings.IsUdpEnable;
this.userSettings.IsRunAtStartup = userSettings.IsRunAtStartup;
this.userSettings.IsRunningAtStartup = userSettings.IsRunningAtStartup;
this.userSettings.IsSendingAnalytics = userSettings.IsSendingAnalytics;
this.userSettings.ProxyPort = userSettings.ProxyPort;
this.userSettings.TunPort = userSettings.TunPort;
this.userSettings.TestPort = userSettings.TestPort;
Expand All @@ -37,6 +38,12 @@ public void UpdateUserSettings(UserSettings userSettings)
SaveUserSettings();
}

public void GenerateClientId()
{
userSettings.ClientId = IdentificationUtility.GenerateClientId();
SaveUserSettings();
}

public void UpdateCurrentConfigIndex(int index)
{
userSettings.CurrentConfigIndex = index;
Expand All @@ -53,7 +60,7 @@ private void UpdateStartupSetting()
{
IStartupSetting startupSetting = new WindowsStartupSetting();

if (userSettings.IsRunAtStartup)
if (userSettings.IsRunningAtStartup)
startupSetting.EnableRunAtStartup();
else
startupSetting.DisableRunAtStartup();
Expand Down
4 changes: 2 additions & 2 deletions InvisibleMan-XRay/Handlers/UpdateHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ public Status CheckForUpdate()

bool IsUpdateAvailable()
{
AppVersion latestReleaseAppVersion = convertToAppVersion.Invoke(latestReleaseVersion); //ConvertToAppVersion(latestReleaseVersion);
AppVersion currentReleaseAppVersion = getApplicationVersion.Invoke(); //ConvertToAppVersion(GetCurrentReleaseVersion());
AppVersion latestReleaseAppVersion = convertToAppVersion.Invoke(latestReleaseVersion);
AppVersion currentReleaseAppVersion = getApplicationVersion.Invoke();

if (latestReleaseAppVersion.Major > currentReleaseAppVersion.Major)
return true;
Expand Down
Loading

0 comments on commit 0f3541e

Please sign in to comment.