public long GetFileSize(String file) { IntPtr remoteFile = new IntPtr(WinINet.FtpOpenFile(m_hConnect, file, WinApi.GENERIC_READ, WinINet.FTP_TRANSFER_TYPE_BINARY, IntPtr.Zero)); if (remoteFile == IntPtr.Zero) { } else { try { Int32 sizeHigh = 0; Int32 sizeLo = WinINet.FtpGetFileSize(remoteFile, ref sizeHigh); long fileSize = ((long)sizeHigh << 32) | sizeLo; return(fileSize); } catch (Exception ex) { } finally { WinINet.InternetCloseHandle(remoteFile); } } return(0); }
public void RenameFile(String file, String newFileName) { Int32 result = WinINet.FtpRenameFile(m_hConnect, file, newFileName); if (result == 0) { } }
public void PutFile(String localFile, String remoteFile) { Int32 result = WinINet.FtpPutFile(m_hConnect, localFile, remoteFile, WinINet.FTP_TRANSFER_TYPE_BINARY, IntPtr.Zero); if (result == 0) { } }
public void GetFile(String remoteFile, String localFile, Boolean overrideIfExists) { Int32 result = WinINet.FtpGetFile(m_hConnect, remoteFile, localFile, overrideIfExists, WinApi.FILE_ATTRIBUTE_NORMAL, WinINet.FTP_TRANSFER_TYPE_BINARY, IntPtr.Zero); if (result == 0) { } }
public void RemoveDirectory(String directory) { Int32 result = WinINet.FtpRemoveDirectory(m_hConnect, directory); if (result == 0) { } }
public void RemoveFile(String file) { Int32 result = WinINet.FtpDeleteFile(m_hConnect, file); if (result == 0) { } }
public void SetCurrentDirectory(String directory) { Int32 result = WinINet.FtpSetCurrentDirectory(m_hConnect, directory); if (result == 0) { } }
public FtpDirectoryInfo[] GetDirectories(String path) { WIN32_FIND_DATA findData = new WIN32_FIND_DATA(); IntPtr findFile = WinINet.FtpFindFirstFile(m_hConnect, path, ref findData, WinINet.INTERNET_FLAG_NO_CACHE_WRITE, IntPtr.Zero); try { List <FtpDirectoryInfo> directories = new List <FtpDirectoryInfo>(); if (findFile == IntPtr.Zero) { if (Marshal.GetLastWin32Error() == WinApi.ERROR_NO_MORE_FILES) { return(directories.ToArray()); } else { return(directories.ToArray()); } } if ((findData.dfFileAttributes & WinApi.FILE_ATTRIBUTE_DIRECTORY) == WinApi.FILE_ATTRIBUTE_DIRECTORY) { FtpDirectoryInfo directoryInfo = new FtpDirectoryInfo(this, new String(findData.fileName).TrimEnd('\0')); directoryInfo.LastAccessTime = findData.ftLastAccessTime.ToDateTime(); directoryInfo.LastWriteTime = findData.ftLastWriteTime.ToDateTime(); directoryInfo.CreationTime = findData.ftCreationTime.ToDateTime(); directoryInfo.Attributes = (FileAttributes)findData.dfFileAttributes; directories.Add(directoryInfo); } findData = new WIN32_FIND_DATA(); while (WinINet.InternetFindNextFile(findFile, ref findData) != 0) { if ((findData.dfFileAttributes & WinApi.FILE_ATTRIBUTE_DIRECTORY) == WinApi.FILE_ATTRIBUTE_DIRECTORY) { FtpDirectoryInfo directoryInfo = new FtpDirectoryInfo(this, new String(findData.fileName).TrimEnd('\0')); directoryInfo.LastAccessTime = findData.ftLastAccessTime.ToDateTime(); directoryInfo.LastWriteTime = findData.ftLastWriteTime.ToDateTime(); directoryInfo.CreationTime = findData.ftCreationTime.ToDateTime(); directoryInfo.Attributes = (FileAttributes)findData.dfFileAttributes; directories.Add(directoryInfo); } findData = new WIN32_FIND_DATA(); } if (Marshal.GetLastWin32Error() != WinApi.ERROR_NO_MORE_FILES) { } return(directories.ToArray()); } finally { if (findFile != IntPtr.Zero) { WinINet.InternetCloseHandle(findFile); } } }
private List <String> List(String mask, Boolean onlyDirectories) { WIN32_FIND_DATA findData = new WIN32_FIND_DATA(); IntPtr findFile = WinINet.FtpFindFirstFile(m_hConnect, mask, ref findData, WinINet.INTERNET_FLAG_NO_CACHE_WRITE, IntPtr.Zero); try { List <String> files = new List <String>(); if (findFile == IntPtr.Zero) { if (Marshal.GetLastWin32Error() == WinApi.ERROR_NO_MORE_FILES) { return(files); } else { return(files); } } if (onlyDirectories && (findData.dfFileAttributes & WinApi.FILE_ATTRIBUTE_DIRECTORY) == WinApi.FILE_ATTRIBUTE_DIRECTORY) { files.Add(new String(findData.fileName).TrimEnd('\0')); } else if (!onlyDirectories) { files.Add(new String(findData.fileName).TrimEnd('\0')); } findData = new WIN32_FIND_DATA(); while (WinINet.InternetFindNextFile(findFile, ref findData) != 0) { if (onlyDirectories && (findData.dfFileAttributes & WinApi.FILE_ATTRIBUTE_DIRECTORY) == WinApi.FILE_ATTRIBUTE_DIRECTORY) { files.Add(new String(findData.fileName).TrimEnd('\0')); } else if (!onlyDirectories) { files.Add(new String(findData.fileName).TrimEnd('\0')); } findData = new WIN32_FIND_DATA(); } if (Marshal.GetLastWin32Error() != WinApi.ERROR_NO_MORE_FILES) { } return(files); } finally { if (findFile != IntPtr.Zero) { WinINet.InternetCloseHandle(findFile); } } }
public static void Update(Configuration config, bool forceDisable, PACServer pacSrv, bool noRetry = false) { bool global = config.global; bool enabled = config.enabled; if (forceDisable || !WinINet.operational) { enabled = false; } try { if (enabled) { if (global) { WinINet.ProxyGlobal("localhost:" + config.localPort.ToString(), "<local>"); } else { string pacUrl; if (config.useOnlinePac && !string.IsNullOrEmpty(config.pacUrl)) { pacUrl = config.pacUrl; } else { pacUrl = pacSrv.PacUrl; } WinINet.ProxyPAC(pacUrl); } } else { WinINet.Restore(); } } catch (ProxyException ex) { logger.LogUsefulException(ex); if (ex.Type != ProxyExceptionType.Unspecific && !noRetry) { var ret = MessageBox.Show(I18N.GetString("Error occured when process proxy setting, do you want reset current setting and retry?"), I18N.GetString("Shadowsocks"), MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (ret == DialogResult.Yes) { WinINet.Reset(); Update(config, forceDisable, pacSrv, true); } } else { MessageBox.Show(I18N.GetString("Unrecoverable proxy setting error occured, see log for detail"), I18N.GetString("Shadowsocks"), MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
private void PacFileUpdater_PACFileChanged(object sender, FileSystemEventArgs e) { if (Config.Global) { return; } logger.Info("PAC File Changed."); NewTempPacFile(); WinINet.SetSystemProxy(WinINet.SystemProxyOption.Proxy_PAC, null, GetTempPacFile()); }
public void Open() { if (String.IsNullOrEmpty(m_host)) { throw new ArgumentException("Host"); } m_hInternet = WinINet.InternetOpen(Environment.UserName, WinINet.INTERNET_OPEN_TYPE_PRECONFIG, null, null, WinINet.INTERNET_FLAG_ASYNC); if (m_hInternet == IntPtr.Zero) { } }
public void Login(String username, String password) { if (username == null) { throw new ArgumentNullException("username"); } if (password == null) { throw new ArgumentNullException("password"); } m_hConnect = WinINet.InternetConnect(m_hInternet, m_host, m_port, username, password, WinINet.INTERNET_SERVICE_FTP, WinINet.INTERNET_FLAG_PASSIVE, IntPtr.Zero); }
public void Stop() { if (!IsRunning) { return; } IsRunning = false; _listener?.Stop(); _privoxyRunner?.Stop(); WinINet.SetSystemProxy(WinINet.SystemProxyOption.Proxy_None, null, null); }
public String GetCurrentDirectory() { Int32 bufferLength = WinApi.MAX_PATH + 1; StringBuilder stringBuilder = new StringBuilder(bufferLength); Int32 result = WinINet.FtpGetCurrentDirectory(m_hConnect, stringBuilder, ref bufferLength); if (result == 0) { return(null); } return(stringBuilder.ToString()); }
public static void Update(bool forceDisable, bool enabled, bool global) { var settings = Locator.Current.GetService <Settings>(); var appSettings = settings.App; var netSettings = settings.Net; var pacSettings = settings.PAC; if (forceDisable || !WinINet.operational) { enabled = false; } try { if (enabled) { if (global) { WinINet.ProxyGlobal($"localhost:{netSettings.HttpListeningPort}", "<local>"); } else { var pacUrl = string.IsNullOrEmpty(pacSettings.CustomPACUrl) ? Locator.Current.GetService <PACServer>().PacUrl : pacSettings.CustomPACUrl; WinINet.ProxyPAC(pacUrl); } } else { WinINet.Restore(); } } catch (ProxyException ex) { LogHost.Default.Error(ex, "An error occurred while updating system proxy."); /*if (ex.Type != ProxyExceptionType.Unspecific && !noRetry) * { * var ret = MessageBox.Show(I18N.GetString("Error occured when process proxy setting, do you want reset current setting and retry?"), I18N.GetString("Shadowsocks"), MessageBoxButtons.YesNo, MessageBoxIcon.Warning); * if (ret == DialogResult.Yes) * { * WinINet.Reset(); * Update(config, forceDisable, pacSrv, true); * } * } * else * { * MessageBox.Show(I18N.GetString("Unrecoverable proxy setting error occured, see log for detail"), I18N.GetString("Shadowsocks"), MessageBoxButtons.OK, MessageBoxIcon.Error); * }*/ } }
protected override void SetProxy(ProxyInfo proxyInfo) { //Proxy was not specified if (WinINet.ProxyIpPort == null) { WinINet.SetProxy(proxyInfo != null, proxyInfo != null ? GetProtocolString(proxyInfo) : null); return; } List <string> arguments = WinINet.ProxyIpPort .Split(';') .ToList(); //Single host is used for all types of proxy if (arguments.Count == 1 && arguments.Single().Split('=').Length == 1) { WinINet.SetProxy(proxyInfo != null, proxyInfo != null ? proxyInfo.AddressPort : null); return; } //Single protocol specific proxy is set or array of them int index = GetIndexOfCurrentProtocol(arguments); if (proxyInfo == null) { if (index != -1) { arguments.RemoveAt(index); } WinINet.SetProxy(arguments.Any(), arguments.Any() ? string.Join(",", arguments) : null); return; } if (index == -1) { arguments.Add(GetProtocolString(proxyInfo)); } else { arguments[index] = GetProtocolString(proxyInfo); } WinINet.SetProxy(true, string.Join(",", arguments)); }
public void SetMode(bool globalMode) { Contract.Requires <Exception>(IsRunning); Config.Global = globalMode; if (globalMode) { logger.Info("Proxy Mode: Global"); WinINet.SetSystemProxy(WinINet.SystemProxyOption.Proxy_Direct, _privoxyRunner.BindEp.ToString(), null); } else { //pacMode logger.Info("Proxy Mode: PAC"); //设置系统代理 WinINet.SetSystemProxy(WinINet.SystemProxyOption.Proxy_PAC, null, GetTempPacFile()); } }
public void Dispose() { if (!m_disposed) { if (m_hConnect != IntPtr.Zero) { WinINet.InternetCloseHandle(m_hConnect); } if (m_hInternet != IntPtr.Zero) { WinINet.InternetCloseHandle(m_hInternet); } m_hInternet = IntPtr.Zero; m_hConnect = IntPtr.Zero; m_disposed = true; GC.SuppressFinalize(this); } }
public Boolean DirectoryExists(String path) { WIN32_FIND_DATA findData = new WIN32_FIND_DATA(); IntPtr findFile = WinINet.FtpFindFirstFile(m_hConnect, path, ref findData, WinINet.INTERNET_FLAG_NO_CACHE_WRITE, IntPtr.Zero); try { if (findFile == IntPtr.Zero) { return(false); } return(true); } finally { if (findFile != IntPtr.Zero) { WinINet.InternetCloseHandle(findFile); } } }
public static bool SetAutoProxy(bool enabled) { if (enabled) { string pacUrl = null; StreamReader sr = new StreamReader(Application.StartupPath + "\\rc.txt", Encoding.Default); String line; while ((line = sr.ReadLine()) != null) { if (line != null && line.Trim().Contains("listen") && line.Trim()[0] != '#') { pacUrl = line.Split('=')[1].Trim() + "/pac"; } } if (string.IsNullOrEmpty(pacUrl)) { MessageBox.Show("未找到listen地址!"); return(false); } if (!pacUrl.Contains("http")) { MessageBox.Show("listen配置有误!"); return(false); } if (pacUrl.Contains(" ")) { pacUrl = pacUrl.Split(' ')[0] + "/pac"; } WinINet.SetIEProxy(true, false, "", pacUrl); } else { WinINet.SetIEProxy(false, false, "", ""); } return(true); }
public void CreateDirectory(String path) { if (WinINet.FtpCreateDirectory(m_hConnect, path) == 0) { } }
public static void Disable() { WinINet.SetIEProxy(false, false, "", ""); }