public static void UpdateProxySettingOnDemand(Model.Data.ProxySettings proxySetting) { if (!proxySetting.IsEqualTo(GetProxySetting())) { WinInet.SetProxySettings(proxySetting); } }
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); }
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); }
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); }
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); }
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); }
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); }
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); }