GUI/CrashForm.cs
author moel.mich
Sat, 31 Dec 2011 17:31:04 +0000
changeset 324 c6ee430d6995
parent 150 522da3b8cb1a
child 344 3145aadca3d2
permissions -rw-r--r--
Modified and extended version of the patch v4 by Roland Reinl (see Issue 256). Main differences to the original patch: DeviceIoControl refactorings removed, SmartAttribute is now descriptive only and does not hold any state, report is written as one 80 columns table, sensors are created only for meaningful values and without duplicates (remaining life, temperatures, host writes and reads). Also the current implementation should really preserve all the functionality of the old system. Additionally there is now a simple SMART devices emulation class (DebugSmart) that can be used in place of WindowsSmart for testing with reported data.
moel@150
     1
/*
moel@150
     2
  
moel@150
     3
  Version: MPL 1.1/GPL 2.0/LGPL 2.1
moel@150
     4
moel@150
     5
  The contents of this file are subject to the Mozilla Public License Version
moel@150
     6
  1.1 (the "License"); you may not use this file except in compliance with
moel@150
     7
  the License. You may obtain a copy of the License at
moel@150
     8
 
moel@150
     9
  http://www.mozilla.org/MPL/
moel@150
    10
moel@150
    11
  Software distributed under the License is distributed on an "AS IS" basis,
moel@150
    12
  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
moel@150
    13
  for the specific language governing rights and limitations under the License.
moel@150
    14
moel@150
    15
  The Original Code is the Open Hardware Monitor code.
moel@150
    16
moel@150
    17
  The Initial Developer of the Original Code is 
moel@150
    18
  Michael Möller <m.moeller@gmx.ch>.
moel@150
    19
  Portions created by the Initial Developer are Copyright (C) 2009-2010
moel@150
    20
  the Initial Developer. All Rights Reserved.
moel@150
    21
moel@150
    22
  Contributor(s):
moel@150
    23
moel@150
    24
  Alternatively, the contents of this file may be used under the terms of
moel@150
    25
  either the GNU General Public License Version 2 or later (the "GPL"), or
moel@150
    26
  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
moel@150
    27
  in which case the provisions of the GPL or the LGPL are applicable instead
moel@150
    28
  of those above. If you wish to allow use of your version of this file only
moel@150
    29
  under the terms of either the GPL or the LGPL, and not to allow others to
moel@150
    30
  use your version of this file under the terms of the MPL, indicate your
moel@150
    31
  decision by deleting the provisions above and replace them with the notice
moel@150
    32
  and other provisions required by the GPL or the LGPL. If you do not delete
moel@150
    33
  the provisions above, a recipient may use your version of this file under
moel@150
    34
  the terms of any one of the MPL, the GPL or the LGPL.
moel@150
    35
 
moel@150
    36
*/
moel@150
    37
moel@150
    38
using System;
moel@150
    39
using System.IO;
moel@150
    40
using System.Net;
moel@150
    41
using System.Text;
moel@150
    42
using System.Windows.Forms;
moel@150
    43
moel@150
    44
namespace OpenHardwareMonitor.GUI {
moel@150
    45
  public partial class CrashForm : Form {
moel@150
    46
moel@150
    47
    private Exception exception;
moel@150
    48
moel@150
    49
    public CrashForm() {
moel@150
    50
      InitializeComponent();
moel@150
    51
    }
moel@150
    52
moel@150
    53
    public Exception Exception {
moel@150
    54
      get { return exception; }
moel@150
    55
      set {
moel@150
    56
        exception = value;
moel@150
    57
        StringBuilder s = new StringBuilder();
moel@150
    58
        Version version = typeof(CrashForm).Assembly.GetName().Version;
moel@150
    59
        s.Append("Version: "); s.AppendLine(version.ToString());        
moel@150
    60
        s.AppendLine();
moel@150
    61
        s.AppendLine(exception.ToString());
moel@150
    62
        s.AppendLine();
moel@150
    63
        if (exception.InnerException != null) {
moel@150
    64
          s.AppendLine(exception.InnerException.ToString());
moel@150
    65
          s.AppendLine();
moel@150
    66
        }
moel@150
    67
        s.Append("Common Language Runtime: "); 
moel@150
    68
        s.AppendLine(Environment.Version.ToString());
moel@150
    69
        s.Append("Operating System: ");
moel@150
    70
        s.AppendLine(Environment.OSVersion.ToString());
moel@150
    71
        s.Append("Process Type: ");
moel@150
    72
        s.AppendLine(IntPtr.Size == 4 ? "32-Bit" : "64-Bit");
moel@150
    73
        reportTextBox.Text = s.ToString();        
moel@150
    74
      }
moel@150
    75
    }
moel@150
    76
moel@150
    77
    private void sendButton_Click(object sender, EventArgs e) {
moel@150
    78
      try {
moel@150
    79
        Version version = typeof(CrashForm).Assembly.GetName().Version;
moel@150
    80
        WebRequest request = WebRequest.Create(
moel@150
    81
          "http://openhardwaremonitor.org/report.php");
moel@150
    82
        request.Method = "POST";
moel@150
    83
        request.Timeout = 5000;
moel@150
    84
        request.ContentType = "application/x-www-form-urlencoded";
moel@150
    85
moel@150
    86
        string report =
moel@206
    87
          "type=crash&" +
moel@206
    88
          "version=" + Uri.EscapeDataString(version.ToString()) + "&" +
moel@206
    89
          "report=" + Uri.EscapeDataString(reportTextBox.Text) + "&" +
moel@206
    90
          "comment=" + Uri.EscapeDataString(commentTextBox.Text) + "&" +
moel@206
    91
          "email=" + Uri.EscapeDataString(emailTextBox.Text);
moel@150
    92
        byte[] byteArray = Encoding.UTF8.GetBytes(report);
moel@150
    93
        request.ContentLength = byteArray.Length;
moel@150
    94
moel@150
    95
        try {
moel@150
    96
          Stream dataStream = request.GetRequestStream();
moel@150
    97
          dataStream.Write(byteArray, 0, byteArray.Length);
moel@150
    98
          dataStream.Close();
moel@150
    99
moel@150
   100
          WebResponse response = request.GetResponse();
moel@150
   101
          dataStream = response.GetResponseStream();
moel@150
   102
          StreamReader reader = new StreamReader(dataStream);
moel@150
   103
          string responseFromServer = reader.ReadToEnd();
moel@150
   104
          reader.Close();
moel@150
   105
          dataStream.Close();
moel@150
   106
          response.Close();
moel@150
   107
moel@150
   108
          Close();
moel@150
   109
        } catch (WebException) {
moel@150
   110
          MessageBox.Show("Sending the crash report failed.", "Error", 
moel@150
   111
            MessageBoxButtons.OK, MessageBoxIcon.Error);
moel@150
   112
        }
moel@150
   113
      } catch {
moel@150
   114
      }
moel@150
   115
    }
moel@150
   116
  }  
moel@150
   117
}