Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        public void RenameFile(String file, String newFileName)
        {
            Int32 result = WinINet.FtpRenameFile(m_hConnect, file, newFileName);

            if (result == 0)
            {
            }
        }
Exemplo n.º 3
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)
            {
            }
        }
Exemplo n.º 4
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)
            {
            }
        }
Exemplo n.º 5
0
        public void RemoveDirectory(String directory)
        {
            Int32 result = WinINet.FtpRemoveDirectory(m_hConnect, directory);

            if (result == 0)
            {
            }
        }
Exemplo n.º 6
0
        public void RemoveFile(String file)
        {
            Int32 result = WinINet.FtpDeleteFile(m_hConnect, file);

            if (result == 0)
            {
            }
        }
Exemplo n.º 7
0
        public void SetCurrentDirectory(String directory)
        {
            Int32 result = WinINet.FtpSetCurrentDirectory(m_hConnect, directory);

            if (result == 0)
            {
            }
        }
Exemplo n.º 8
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);
                }
            }
        }
Exemplo n.º 9
0
        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);
                }
            }
        }
Exemplo n.º 10
0
        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);
                }
            }
        }
Exemplo n.º 11
0
        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());
        }
Exemplo n.º 12
0
        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)
            {
            }
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        public void Stop()
        {
            if (!IsRunning)
            {
                return;
            }
            IsRunning = false;

            _listener?.Stop();
            _privoxyRunner?.Stop();

            WinINet.SetSystemProxy(WinINet.SystemProxyOption.Proxy_None, null, null);
        }
Exemplo n.º 15
0
        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());
        }
Exemplo n.º 16
0
        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));
        }
Exemplo n.º 18
0
        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());
            }
        }
Exemplo n.º 19
0
        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);
            }
        }
Exemplo n.º 20
0
        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);
                }
            }
        }
Exemplo n.º 21
0
        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);
        }
Exemplo n.º 22
0
 public void CreateDirectory(String path)
 {
     if (WinINet.FtpCreateDirectory(m_hConnect, path) == 0)
     {
     }
 }
Exemplo n.º 23
0
 public static void Disable()
 {
     WinINet.SetIEProxy(false, false, "", "");
 }