コード例 #1
0
 public static void UpdateProxySettingOnDemand(Model.Data.ProxySettings proxySetting)
 {
     if (!proxySetting.IsEqualTo(GetProxySetting()))
     {
         WinInet.SetProxySettings(proxySetting);
     }
 }
コード例 #2
0
        public void Run(VgcApis.Interfaces.Services.IApiService api)
        {
            orgSysProxySetting = Libs.Sys.ProxySetter.GetProxySetting();

            Microsoft.Win32.SystemEvents.SessionEnding += SessionEndingHandler;

            FileLogger.Info("ProxySetter: remember current sys proxy settings");

            this.vgcApi = api;

            var vgcSetting  = api.GetSettingService();
            var vgcServer   = api.GetServersService();
            var vgcNotifier = api.GetNotifierService();

            pacServer     = new PacServer();
            setting       = new PsSettings();
            serverTracker = new ServerTracker();

            // dependency injection
            setting.Run(vgcSetting);
            pacServer.Run(setting);

            serverTracker.OnSysProxyChanged += UpdateMenuItemCheckedStatHandler;
            serverTracker.Run(setting, pacServer, vgcServer, vgcNotifier);
        }
コード例 #3
0
ファイル: WinInet.cs プロジェクト: jiahua90/V2RayGCon-1
        static Model.Data.ProxySettings IntPtrToProxySettings(IntPtr ptr)
        {
            var options = new List <InternetConnectionOption>();
            int optSize = Marshal.SizeOf(typeof(InternetConnectionOption));

            for (int i = 0; i < QueryOptionCount; ++i)
            {
                IntPtr opt = new IntPtr(ptr.ToInt64() + (i * optSize));
                options.Add(
                    (InternetConnectionOption)Marshal.PtrToStructure(
                        opt, typeof(InternetConnectionOption)));
            }

            var result = new Model.Data.ProxySettings
            {
                proxyMode = options[QueryIndexProxyMode].m_Value.m_Int,

                proxyAddr = Marshal.PtrToStringAuto(
                    options[QueryIndexProxyServer].m_Value.m_StringPtr)
                            ?? string.Empty,

                pacUrl = Marshal.PtrToStringAuto(
                    options[QueryIndexPacUrl].m_Value.m_StringPtr)
                         ?? string.Empty,
            };

            return(result);
        }
コード例 #4
0
ファイル: WinInet.cs プロジェクト: jiahua90/V2RayGCon-1
        public static Model.Data.ProxySettings GetProxySettings()
        {
            var query   = GenQureyOption(true);
            var success = false;
            var result  = new Model.Data.ProxySettings();

            void action(IntPtr _listPtr, int _listSize)
            {
                var newSize = _listSize;

                success = InternetQueryOption(
                    IntPtr.Zero,
                    InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
                    _listPtr, ref newSize);

                if (success)
                {
                    InternetPerConnOptionList optList =
                        (InternetPerConnOptionList)Marshal.PtrToStructure(
                            _listPtr, typeof(InternetPerConnOptionList));
                    result = IntPtrToProxySettings(optList.options);
                }
            }

            SystemProxyHandler(GenQureyOption(true), action);
            if (!success)
            {
                SystemProxyHandler(GenQureyOption(false), action);
            }
            return(result);
        }
コード例 #5
0
        public static void SetGlobalProxy(int port)
        {
            var proxyUrl = string.Format(
                "{0}:{1}",
                LoopBackIP,
                Clamp(port, 0, 65536));

            var proxySetting = new Model.Data.ProxySettings
            {
                proxyMode = (int)WinInet.ProxyModes.Proxy,
                proxyAddr = proxyUrl,
            };

            UpdateProxySettingOnDemand(proxySetting);
        }
コード例 #6
0
ファイル: WinInet.cs プロジェクト: jiahua90/V2RayGCon-1
        public static bool SetProxySettings(
            Model.Data.ProxySettings proxySettings)
        {
            var options = GenProxyOption(proxySettings);
            var result  = false;

            void action(IntPtr listPtr, int listSize)
            {
                result = InternetSetOption(
                    IntPtr.Zero,
                    InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION,
                    listPtr,
                    listSize);
            }

            SystemProxyHandler(options, action);
            ForceSysProxyRefresh();
            return(result);
        }
コード例 #7
0
ファイル: PsLuncher.cs プロジェクト: lovebair2022/V2RayGCon
        public void Run(VgcApis.Models.IServices.IApiService api)
        {
            orgSysProxySetting = Lib.Sys.ProxySetter.GetProxySetting();
            VgcApis.Libs.Sys.FileLogger.Info("ProxySetter: save sys proxy settings");

            this.vgcApi = api;

            var vgcSetting  = api.GetSettingService();
            var vgcServer   = api.GetServersService();
            var vgcNotifier = api.GetNotifierService();

            pacServer     = new PacServer();
            setting       = new PsSettings();
            serverTracker = new ServerTracker();

            // dependency injection
            setting.Run(vgcSetting);
            pacServer.Run(setting);
            serverTracker.Run(setting, pacServer, vgcServer, vgcNotifier);
        }
コード例 #8
0
ファイル: WinInet.cs プロジェクト: jiahua90/V2RayGCon-1
        static InternetConnectionOption[] GenProxyOption(
            Model.Data.ProxySettings proxySettings)
        {
            InternetConnectionOption[] options = new InternetConnectionOption[QueryOptionCount];

            // USE a proxy server ...
            options[QueryIndexProxyMode].m_Option      = PerConnOption.INTERNET_PER_CONN_FLAGS;
            options[QueryIndexProxyMode].m_Value.m_Int = proxySettings.proxyMode;

            options[QueryIndexProxyServer].m_Option =
                PerConnOption.INTERNET_PER_CONN_PROXY_SERVER;
            options[QueryIndexProxyServer].m_Value.m_StringPtr =
                Marshal.StringToHGlobalAuto(proxySettings.proxyAddr ?? @"");

            options[QueryIndexPacUrl].m_Option =
                PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL;
            options[QueryIndexPacUrl].m_Value.m_StringPtr =
                Marshal.StringToHGlobalAuto(proxySettings.pacUrl ?? @"");

            return(options);
        }