private HttpWebResponse CreateMockedHttpWebResponse(int statusCode, string content, string[] headerNames, string[] headerValues)
        {
            byte[] contentBytes   = Encoding.UTF8.GetBytes(content);
            Stream responseStream = new MemoryStream();

            responseStream.Write(contentBytes, 0, contentBytes.Length);
            responseStream.Seek(0, SeekOrigin.Begin);

            WebHeaderCollection h = new WebHeaderCollection();

            if (headerNames != null)
            {
                for (int i = 0; i < headerNames.Length; i++)
                {
                    h.Add(headerNames[i], headerValues[i]);
                }
            }

            HttpWebResponse oNewResponse = (System.Net.HttpWebResponse)System.Activator.CreateInstance(typeof(HttpWebResponse));

            System.Reflection.PropertyInfo oInfo = oNewResponse.GetType().GetProperty("ResponseStream",
                                                                                      System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.FlattenHierarchy);
            oInfo?.SetValue(oNewResponse, responseStream);
            System.Reflection.FieldInfo oFInfo = oNewResponse.GetType().GetField("m_HttpResponseHeaders",
                                                                                 System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.FlattenHierarchy);
            oFInfo?.SetValue(oNewResponse, h);
            oFInfo = oNewResponse.GetType().GetField("m_StatusCode",
                                                     System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.FlattenHierarchy);
            oFInfo?.SetValue(oNewResponse, statusCode);


            return(oNewResponse);
        }
        private static void SetStatusCode(HttpWebResponse webResponce, int sttausCode)
        {
            var statusCodeProp = webResponce.GetType()
                                 .GetField("m_StatusCode", BindingFlags.NonPublic | BindingFlags.Instance);

            statusCodeProp.SetValue(webResponce, sttausCode);
        }
Exemple #3
0
        public static void Abort(HttpWebRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            System.Reflection.FieldInfo m_response = request.GetType().GetField("m_response", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

            request.Abort();
            HttpWebResponse stream = (m_response != null ? (HttpWebResponse)m_response.GetValue(request) : null);

            if (stream != null)
            {
                //HACK: This is necessary to avoid the stream to be fully downloaded on pocketpc.
                //Why Abort does not do this?
                System.Reflection.FieldInfo field = stream.GetType().GetField("m_remainingContent", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                if (field != null)
                {
                    field.SetValue(stream, (long)0);
                    field = null;
                }
                //---
            }
            Thread.Sleep(500);
        }
Exemple #4
0
        private static void logResponse(HttpWebResponse response)
        {
            var responseStream = response.GetResponseStream();

            if (responseStream != null)
            {
                Stream streamReplace = new MemoryStream();
                responseStream.CopyTo(streamReplace);
                streamReplace.Seek(0, SeekOrigin.Begin);

                var length = streamReplace.Length;
                var buffer = new byte[length];
                var read   = 0;
                do
                {
                    var readed = streamReplace.Read(buffer, 0, (int)length);
                    read += readed;
                } while (read < length);

                _logger.Trace($"Charset {response.CharacterSet}");

                var text = response.CharacterSet != null && response.CharacterSet.ToLower().Contains("1251")
                    ? Encoding.GetEncoding(1251).GetString(buffer)
                    : Encoding.GetEncoding("UTF-8").GetString(buffer);

                // var text = "";
                streamReplace.Seek(0, SeekOrigin.Begin);

                var fieldInfo = response
                                .GetType()
                                .GetField(
                    "m_ConnectStream",
                    BindingFlags.Instance | BindingFlags.NonPublic
                    );
                if (fieldInfo != null)
                {
                    fieldInfo.SetValue(response, streamReplace);
                }
                var httpWebResponse = response;
                response.Headers["Set-Cookie"] = "--HIDDEN FOR SECURITY REASONS--";
                _logger.Trace(
                    $"\r\n\r\nRECEIVED HTTP RESPONSE\r\nHTTP/{httpWebResponse.ProtocolVersion} {(int) httpWebResponse.StatusCode} {httpWebResponse.StatusDescription}\r\n" +
                    response.Headers +
                    "\r\n\r\n" +
                    text);
            }
        }
Exemple #5
0
        void Download()
        {
            HttpWebResponse response = null;

            try
            {
                //var fs = new FileStream(_savefile, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
                var fs = new FileStream(_savefile, FileMode.Open, FileAccess.Read, FileShare.Read);
                fs.Position = position;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(textBox1.Text);
                request.Method = "GET";
                if (position != 0)
                {
                    request.AddRange((int)position);
                }

                response = (HttpWebResponse)request.GetResponse();

                if (position != 0)
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        MessageBox.Show("服务器不支持断点续传,将重新开始下载");
                        position    = 0;
                        fs.Position = 0;
                    }
                    else if (response.StatusCode != HttpStatusCode.PartialContent)
                    {
                        response.GetType().GetMethod("Abort", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(response, null);
                        MessageBox.Show("下载请求失败,请检查地址是否错误");
                        DataManager.SetControlText(button1, "开始");
                        return;
                    }
                }
                else if (response.StatusCode != HttpStatusCode.OK)
                {
                    response.GetType().GetMethod("Abort", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(response, null);
                    MessageBox.Show("下载请求失败,请检查地址是否错误");
                    DataManager.SetControlText(button1, "开始");
                    return;
                }
                using (Stream responseStream = response.GetResponseStream())
                {
                    CopyStream(responseStream, fs);
                    response.GetType().GetMethod("Abort", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(response, null);
                }
            }
            catch (WebException ex)
            {
                var errResp = ex.Response as HttpWebResponse;
                using (var stream = errResp.GetResponseStream())
                {
                    string message = null;
                    using (var sr = new StreamReader(stream))
                    {
                        message = sr.ReadToEnd();
                        var match = Regex.Match(message, "(?is)(?<=<Text[^>]*>).*(?=</Text>)");
                        if (match.Success)
                        {
                            message = match.Value;
                        }
                    }
                    MessageBox.Show(message);
                }
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message);
            }
        }
Exemple #6
0
        /// <summary>
        /// 自分自身のアップデートが存在するか確認
        /// </summary>
        public static void checkMyUpdate(bool viewCurrentNewVersion)
        {
            System.Text.Encoding enc = System.Text.Encoding.GetEncoding("UTF-8");
            string url   = "http://trickster.anoncom.net/versions.xml";
            string param = @"name=TSLoginManager&version=" + Application.ProductVersion.ToString();

            if (SettingController.Update.checkBetaVersion)
            {
                param += @"&check=beta";
            }
            else
            {
                param += @"&check=release";
            }
            HttpWebRequest  req;
            HttpWebResponse res = null;

            #region ネットワーク接続を試みる
            int inetFlg;
            while (!TricksterTools.Library.WinInet.InternetGetConnectedState(out inetFlg, 0))
            {
                SimpleLogger.WriteLine("Could not connect network.");

                DialogResult dgRes = MessageBox.Show("ネットワークに接続されていないため、処理を続行できません。", global::TSLoginManager.Properties.Settings.Default.AppName, MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
                if (dgRes == DialogResult.Cancel)
                {
                    return;
                }
            }
            #endregion
            url += "?" + param;
            // リクエストの作成
            try
            {
                req           = (HttpWebRequest)HttpWebRequest.Create(url);
                req.Method    = "GET";
                req.UserAgent = LoginController.__USER_AGENT__;
                req.Headers.Add("Accept-Language", "ja");
                //req.KeepAlive = true;
                req.AllowAutoRedirect = true;
                req.Timeout           = 60 * 1000; // タイムアウト1分

                //SimpleLogger.WriteLine("[Request]");
                SimpleLogger.WriteLine("[ Request ] ---------------------------------------");
                SimpleLogger.WriteLine("URL: " + url);
                SimpleLogger.WriteLine("Method: " + req.Method);
                SimpleLogger.WriteLine(req.Headers.ToString());
                SimpleLogger.WriteLine("----------------------------------------------------");

                // レスポンスの取得と読み込み
                res = (System.Net.HttpWebResponse)req.GetResponse();
                //Stream resStream = res.GetResponseStream();

                HttpWebResponse deb_res;
                deb_res = (System.Net.HttpWebResponse)req.GetResponse();
                //SimpleLogger.WriteLine("[Response]\nURL: " + url + Environment.NewLine + deb_res.Headers.ToString());
                SimpleLogger.WriteLine("[ Response ] ---------------------------------------");
                SimpleLogger.WriteLine(deb_res.Headers.ToString());
                SimpleLogger.WriteLine("");

                Stream       deb_st = deb_res.GetResponseStream();
                StreamReader deb_sr = new StreamReader(deb_st, enc);
                SimpleLogger.WriteLine(deb_sr.ReadToEnd().Replace("\n", Environment.NewLine));
                SimpleLogger.WriteLine("----------------------------------------------------");
                SimpleLogger.WriteLine("");
                deb_sr.Close();
                deb_st.Close();


                if (res.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    //System.Text.Encoding enc = System.Text.Encoding.GetEncoding("Shift_JIS");

                    System.Xml.XmlReaderSettings xmlrdset = new System.Xml.XmlReaderSettings();
                    xmlrdset.IgnoreWhitespace = true;
                    xmlrdset.IgnoreComments   = true;
                    System.Xml.XmlReader reader = System.Xml.XmlReader.Create(url, xmlrdset);
                    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(XmlVersionsRoot));
                    XmlVersionsRoot XmlVerRoot = (XmlVersionsRoot)serializer.Deserialize(reader);


                    if (XmlVerRoot.Status.Trim() == "Error")
                    {
                        // メッセージボックスによる通知
                        MessageBox.Show("バージョンチェックエラー", "TSLoginManager", MessageBoxButtons.OK, MessageBoxIcon.Error);

                        // バルーンチップによる通知
                        Program.frm.notifyIcon.BalloonTipIcon  = ToolTipIcon.Error;
                        Program.frm.notifyIcon.BalloonTipTitle = "TSLoginManager";
                        Program.frm.notifyIcon.BalloonTipText  = "バージョンチェック時エラー";
                        Program.frm.notifyIcon.ShowBalloonTip(30 * 1000);   // 表示タイムアウト(30秒)
                        return;
                    }
                    XmlVersionInfo info = (XmlVersionInfo)XmlVerRoot.Information;

                    if (XmlVerRoot.Status.Trim() == "OK")
                    {
                        if (viewCurrentNewVersion)
                        {
                            // メッセージボックスによる通知
                            //MessageBox.Show("使用中のバージョンは最新版です。", "TSLoginManager", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            // バルーンチップによる通知
                            Program.frm.notifyIcon.BalloonTipIcon  = ToolTipIcon.Info;
                            Program.frm.notifyIcon.BalloonTipTitle = "TSLoginManager";
                            Program.frm.notifyIcon.BalloonTipText  = "使用中のバージョンは最新版です。";
                            Program.frm.notifyIcon.ShowBalloonTip(30 * 1000);   // 表示タイムアウト(30秒)

                            Program.frm.notifyIcon.BalloonTipClicked += delegate
                            {
                                return;
                            };
                        }
                    }
                    else if (XmlVerRoot.Status.Trim() == "Update")
                    {
                        string currentVersion = "ver. " + Application.ProductVersion.ToString();
                        string newVersion     = "ver. " + info.Version;
                        if (SettingController.Update.checkBetaVersion && XmlVerRoot.Information.isBeta)
                        {
                            newVersion += "β";
                        }
                        string message = (info.Message.Trim() == "") ? "" : "\n" + info.Message;

                        /*
                         * // メッセージボックスによる通知
                         * DialogResult dres = MessageBox.Show("最新版が公開されています。" + Environment.NewLine +
                         *                                  "ダウンロードしますか?" + Environment.NewLine + Environment.NewLine +
                         *                                  currentVersion + " → " + newVersion + message, "TSLoginManager", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                         * if (dres == DialogResult.Yes)
                         * {
                         *  System.Diagnostics.Process.Start("http://trickster.anoncom.net/tools/TSLoginManager.html");
                         * }
                         */
                        // バルーンチップによる通知
                        Program.frm.notifyIcon.BalloonTipIcon  = ToolTipIcon.Info;
                        Program.frm.notifyIcon.BalloonTipTitle = "TSLoginManager";
                        Program.frm.notifyIcon.BalloonTipText  = "最新版が公開されています。" + Environment.NewLine
                                                                 + "ダウンロードするにはここをクリックしてください。" + Environment.NewLine + Environment.NewLine
                                                                 + currentVersion + " → " + newVersion + Environment.NewLine
                                                                 + message;
                        Program.frm.notifyIcon.BalloonTipClicked += delegate {
                            System.Diagnostics.Process.Start("http://trickster.anoncom.net/tools/TSLoginManager.html");
                        };
                        Program.frm.notifyIcon.ShowBalloonTip(30 * 1000);   // 表示タイムアウト(30秒)
                    }
                    else
                    {
                        // メッセージボックスによる通知
                        //MessageBox.Show("最新版確認時にエラーを取得しました。", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

                        // バルーンチップによる通知
                        Program.frm.notifyIcon.BalloonTipIcon  = ToolTipIcon.Error;
                        Program.frm.notifyIcon.BalloonTipTitle = "TSLoginManager";
                        Program.frm.notifyIcon.BalloonTipText  = "最新版確認時にエラーを取得しました。";
                        Program.frm.notifyIcon.ShowBalloonTip(30 * 1000);   // 表示タイムアウト(30秒)
                        Program.frm.notifyIcon.BalloonTipClicked += delegate
                        {
                            return;
                        };
                    }
                }
                else
                {
                    // メッセージボックスによる通知
                    MessageBox.Show("通信に失敗しました。しばらくたってから再度操作してください。" + Environment.NewLine +
                                    "このエラーが長時間、継続的に表示される場合はお問い合わせください。", "TSLoginManager", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                res.Close();
            }
            catch (WebException we)
            {
                //MessageBox.Show(e.Message.ToString(), "WebException", MessageBoxButtons.OK, MessageBoxIcon.Hand);

                SimpleLogger.WriteLine(we.Message.ToString());
                if (we.Status == WebExceptionStatus.Timeout)
                {
                    MessageBox.Show("通信がタイムアウトしました。しばらくたってから再度操作してください。" + Environment.NewLine +
                                    "このエラーが長時間、継続的に表示される場合はお問い合わせください。", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    MessageBox.Show("通信に失敗しました。しばらくたってから再度操作してください。" + Environment.NewLine +
                                    "このエラーが長時間、継続的に表示される場合はお問い合わせください。", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                return;
            }
            catch (FileLoadException fle)
            {
                SimpleLogger.WriteLine(fle.Message.ToString());

                MessageBox.Show("バージョン情報の取得に失敗しました。" + Environment.NewLine +
                                "コード:101", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (System.Xml.XmlException xe)
            {
                SimpleLogger.WriteLine(xe.Message.ToString());

                MessageBox.Show("バージョン情報の取得に失敗しました。" + Environment.NewLine +
                                "コード:102", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (System.InvalidOperationException ioe)
            {
                SimpleLogger.WriteLine(ioe.Message.ToString());

                MessageBox.Show("バージョン情報の取得に失敗しました。" + Environment.NewLine + "コード:103");
            }
            catch (Exception e)
            {
                SimpleLogger.WriteLine(e.Message.ToString());

                //MessageBox.Show("例外エラー" + Environment.NewLine + "コード:500");
                throw e;
            }
            finally
            {
                if (res != null && res.GetType() == typeof(HttpWebResponse))
                {
                    try
                    {
                        res.Close();
                    }
                    catch { }
                }
            }
        }