コード例 #1
0
        /// <summary>
        /// Interpret XML returned from update source; store information.
        /// </summary>
        private static void storeUpdateInfo(XmlDocument xd)
        {
            // Sample response: no update
            // <update>
            //   <available>no</available>
            // </update>
            // Sample response: update available
            // <update>
            //   <available>yes</available>
            //   <url>http://zydeo.net/getupdate/ZydeoSetup-v1.1.exe</url>
            //   <urlhash>QWTTY3gffdkj343rwe+vs789</urlhash>
            //   <filehash>jhkf8r75+vds/sdf56</filehash>
            //   <vmajor>1</vmajor>
            //   <vminor>1</vminor>
            //   <releasedate>2015-01-29</releasedate>
            //   <releasenotes>http://blog.zydeo.net/release-notes-1-1</releasenotes>
            // </update>

            XmlNode root = xd["update"];

            if (root["available"].InnerText != "yes")
            {
                UpdateInfo.ClearUpdate();
                return;
            }
            // Get date out of response
            int      vmaj     = int.Parse(root["vmajor"].InnerText);
            int      vmin     = int.Parse(root["vminor"].InnerText);
            string   rdateStr = root["releasedate"].InnerText;
            int      year     = int.Parse(rdateStr.Substring(0, 4));
            int      month    = int.Parse(rdateStr.Substring(5, 2));
            int      day      = int.Parse(rdateStr.Substring(8, 2));
            DateTime rdate    = new DateTime(year, month, day);

            // Store info about this update
            UpdateInfo.SetUpdate(root["url"].InnerText, root["urlhash"].InnerText, root["filehash"].InnerText,
                                 vmaj, vmin, rdate, root["releasenotes"].InnerText, UILang);
        }
コード例 #2
0
        /// <summary>
        /// Checks for updates online.
        /// </summary>
        private static void checkForUpdates()
        {
            // Version info and salt
            uint            salt     = (uint)Salt.GetSalt();
            Version         ver      = Assembly.GetExecutingAssembly().GetName().Version;
            OperatingSystem osi      = Environment.OSVersion;
            string          osVerStr = osi.Version.Major + "." + osi.Version.Minor + "." + osi.Version.Build + "." + osi.Version.Revision;

            // Create web request; make sure we go through user's configured proxy, if any.
            WebRequest req = HttpWebRequest.Create(Magic.UpdateCheckUrl);

            req.Proxy             = WebRequest.GetSystemWebProxy();
            req.Proxy.Credentials = CredentialCache.DefaultCredentials;
            // POST data
            string pdata = Magic.UpdatePostPattern;

            pdata = string.Format(pdata, Magic.UpdateProduct, salt, ver.Major, ver.Minor, osVerStr);
            byte[] data = Encoding.ASCII.GetBytes(pdata);
            // Send POST data
            req.Method        = "POST";
            req.ContentType   = "application/x-www-form-urlencoded";
            req.ContentLength = data.Length;
            using (var stream = req.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            // Read response, which is an XML.
            // Try-finally to make sure response is closed.
            XmlDocument xmldoc = null;
            WebResponse resp   = req.GetResponse();

            try
            {
                Stream respStream = resp.GetResponseStream();
                using (MemoryStream memStream = new MemoryStream())
                {
                    byte[] buffer = new byte[4096];
                    int    count  = 0;
                    int    n      = 0;
                    do
                    {
                        n      = respStream.Read(buffer, 0, buffer.Length);
                        count += n;
                        if (n == 0)
                        {
                            break;
                        }
                        memStream.Write(buffer, 0, n);
                    } while (n > 0);

                    respStream.Close();
                    memStream.Seek(0, SeekOrigin.Begin);
                    using (TextReader tr = new StreamReader(memStream))
                    {
                        xmldoc = new XmlDocument();
                        xmldoc.LoadXml(tr.ReadToEnd());
                    }
                }
            }
            finally
            {
                resp.Close();
            }
            // Try and store update info.
            // If this throws, then we got trash; store that there's no update.
            try
            {
                storeUpdateInfo(xmldoc);
            }
            catch
            {
                UpdateInfo.ClearUpdate();
            }
        }