Ignore:
Timestamp:
12/22/2009 4:31:17 AM (5 years ago)
Author:
lowjoel
Message:

-Parse the stack trace and then verify against the server to see if it is new.
-Create a new FormField? constructor overload that takes strings.

Location:
branches/eraser6/BlackBox/Eraser
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/eraser6/BlackBox/Eraser/BlackBoxUploadForm.cs

    r1403 r1405  
    3333using ICSharpCode.SharpZipLib.BZip2; 
    3434using System.Net; 
     35using System.Xml; 
    3536 
    3637namespace Eraser 
     
    139140        public bool ReportIsNew() 
    140141        { 
    141             throw new NotImplementedException(); 
     142            string[] stackTrace = Report.StackTrace.Split(new char[] { '\n' }); 
     143            MultipartFormDataBuilder builder = new MultipartFormDataBuilder(); 
     144            builder.AddPart(new FormField("action", "status")); 
     145            int exceptionIndex = 0; 
     146 
     147            foreach (string str in stackTrace) 
     148            { 
     149                if (str.StartsWith("Exception ")) 
     150                    ++exceptionIndex; 
     151                else if (!string.IsNullOrEmpty(str.Trim())) 
     152                    builder.AddPart(new FormField( 
     153                        string.Format("stackTrace[{0}][]", exceptionIndex), str.Trim())); 
     154            } 
     155 
     156            WebRequest reportRequest = HttpWebRequest.Create(BlackBoxServer); 
     157            reportRequest.ContentType = "multipart/form-data; boundary=" + builder.Boundary; 
     158            reportRequest.Method = "POST"; 
     159            using (Stream formStream = builder.Stream) 
     160            { 
     161                reportRequest.ContentLength = formStream.Length; 
     162                using (Stream requestStream = reportRequest.GetRequestStream()) 
     163                { 
     164                    int lastRead = 0; 
     165                    byte[] buffer = new byte[32768]; 
     166                    while ((lastRead = formStream.Read(buffer, 0, buffer.Length)) != 0) 
     167                        requestStream.Write(buffer, 0, lastRead); 
     168                } 
     169            } 
     170 
     171            HttpWebResponse response = reportRequest.GetResponse() as HttpWebResponse; 
     172            if (response.StatusCode != HttpStatusCode.OK) 
     173                throw new InvalidDataException(response.StatusDescription); 
     174 
     175            using (Stream responseStream = response.GetResponseStream()) 
     176            using (StreamReader rdr = new StreamReader(responseStream)) 
     177            { 
     178                string str = rdr.ReadToEnd(); 
     179                XmlReader reader = XmlReader.Create(new MemoryStream(Encoding.UTF8.GetBytes(str))); 
     180                reader.ReadToFollowing("crashReport"); 
     181                string reportStatus = reader.GetAttribute("status"); 
     182                switch (reportStatus) 
     183                { 
     184                    case "exists": 
     185                        return false; 
     186 
     187                    case "new": 
     188                        return true; 
     189 
     190                    default: 
     191                        throw new InvalidDataException(S._("Unknown crash report server response.")); 
     192                } 
     193            } 
    142194        } 
    143195 
     
    184236                //Build the POST request 
    185237                MultipartFormDataBuilder builder = new MultipartFormDataBuilder(); 
    186                 builder.AddPart(new FormFileField("CrashReport", "Report.tbz", bzipFile)); 
    187                 builder.AddPart(new FormFileField("DebugLog", "Debug.log", logFile)); 
     238                builder.AddPart(new FormField("action", "upload")); 
     239                builder.AddPart(new FormFileField("crashReport", "Report.tbz", bzipFile)); 
    188240 
    189241                //Upload the POST request 
    190                 Uri blackBoxServer = new Uri("http://eraser.heidi.ie/BlackBox/upload.php"); 
    191                 WebRequest reportRequest = HttpWebRequest.Create(blackBoxServer); 
     242                WebRequest reportRequest = HttpWebRequest.Create(BlackBoxServer); 
    192243                reportRequest.ContentType = "multipart/form-data; boundary=" + builder.Boundary; 
    193244                reportRequest.Method = "POST"; 
     
    210261                HttpWebResponse response = reportRequest.GetResponse() as HttpWebResponse; 
    211262                if (response.StatusCode != HttpStatusCode.OK) 
    212                 { 
    213                     using (Stream responseStream = response.GetResponseStream()) 
    214                     using (TextReader reader = new StreamReader(responseStream)) 
    215                         throw new ArgumentException(reader.ReadToEnd()); 
    216                 } 
     263                    throw new InvalidDataException(response.StatusDescription); 
    217264            } 
    218265        } 
     
    223270        private static readonly string UploadTempDir = 
    224271            Path.Combine(Path.GetTempPath(), "Eraser Crash Reports"); 
     272 
     273        /// <summary> 
     274        /// The URI to the BlackBox server. 
     275        /// </summary> 
     276        private static readonly Uri BlackBoxServer = 
     277            new Uri("http://eraser.joelsplace.dyndns.org/BlackBox/upload.php"); 
    225278 
    226279        /// <summary> 
     
    333386 
    334387        /// <summary> 
     388        /// Constructor. 
     389        /// </summary> 
     390        /// <param name="fieldName">The name of the field.</param> 
     391        /// <param name="stream">The content of the field.</param> 
     392        public FormField(string fieldName, string content) 
     393            : this(fieldName, new MemoryStream(Encoding.UTF8.GetBytes(content))) 
     394        { 
     395        } 
     396 
     397        /// <summary> 
    335398        /// The name of the field. 
    336399        /// </summary> 
  • branches/eraser6/BlackBox/Eraser/Strings.NL.resx

    r1397 r1405  
    151151    <value>Sluiten</value> 
    152152  </data> 
     153  <data name="Unknown crash report server response." xml:space="preserve"> 
     154    <value>(Untranslated)</value> 
     155  </data> 
    153156  <data name="Session: {0:F}" xml:space="preserve"> 
    154157    <value>(Untranslated)</value> 
  • branches/eraser6/BlackBox/Eraser/Strings.en.resx

    r1397 r1405  
    151151    <value>Close</value> 
    152152  </data> 
     153  <data name="Unknown crash report server response." xml:space="preserve"> 
     154    <value>Unknown crash report server response.</value> 
     155  </data> 
    153156  <data name="Session: {0:F}" xml:space="preserve"> 
    154157    <value>Session: {0:F}</value> 
  • branches/eraser6/BlackBox/Eraser/Strings.it.resx

    r1397 r1405  
    151151    <value>Chiudi</value> 
    152152  </data> 
     153  <data name="Unknown crash report server response." xml:space="preserve"> 
     154    <value>(Untranslated)</value> 
     155  </data> 
    153156  <data name="Session: {0:F}" xml:space="preserve"> 
    154157    <value>Sessione: {0:F}</value> 
  • branches/eraser6/BlackBox/Eraser/Strings.resx

    r1397 r1405  
    151151    <value>Close</value> 
    152152  </data> 
     153  <data name="Unknown crash report server response." xml:space="preserve"> 
     154    <value>Unknown crash report server response.</value> 
     155  </data> 
    153156  <data name="Session: {0:F}" xml:space="preserve"> 
    154157    <value>Session: {0:F}</value> 
Note: See TracChangeset for help on using the changeset viewer.