diff --git a/CHANGELOG.md b/CHANGELOG.md index af9b239f..bd62ded4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Backtrace Unity Release Notes -## Version 3.4.0-rc2 +## Version 3.4.0-rc3 - native/managed attachment support - user can add path to attachments via BacktraceClient Initialize method or via Unity Editor in the BacktraceClient's inspector. Once user add them on the initialization method/game object - it will be available in every report that BacktraceClient will send to Backtrace. - background thread support - now BacktraceClient will report exceptions/unhandled exceptions generated by any background thread. diff --git a/Runtime/BacktraceClient.cs b/Runtime/BacktraceClient.cs index 56036097..fe5e6980 100644 --- a/Runtime/BacktraceClient.cs +++ b/Runtime/BacktraceClient.cs @@ -22,7 +22,7 @@ public class BacktraceClient : MonoBehaviour, IBacktraceClient { public BacktraceConfiguration Configuration; - public const string VERSION = "3.4.0-rc2"; + public const string VERSION = "3.4.0-rc3"; public bool Enabled { get; private set; } /// diff --git a/Runtime/Services/BacktraceApi.cs b/Runtime/Services/BacktraceApi.cs index 5bac1c8a..b262ab02 100644 --- a/Runtime/Services/BacktraceApi.cs +++ b/Runtime/Services/BacktraceApi.cs @@ -18,6 +18,10 @@ namespace Backtrace.Unity.Services /// internal class BacktraceApi : IBacktraceApi { + /// + /// Name reserved file with diagnostic data - JSON diagnostic data/minidump file + /// + private const string DiagnosticFileName = "upload_file"; /// /// User custom request method /// @@ -114,20 +118,7 @@ public IEnumerator SendMinidump(string minidumpPath, IEnumerable attachm { yield break; } - List formData = new List - { - new MultipartFormFileSection("upload_file", minidumpBytes) - }; - - foreach (var file in attachments) - { - if (File.Exists(file) && new FileInfo(file).Length < 10000000) - { - formData.Add(new MultipartFormFileSection( - string.Format("attachment__{0}", Path.GetFileName(file)), - File.ReadAllBytes(file))); - } - } + var formData = CreateMinidumpFormData(minidumpBytes, attachments); yield return new WaitForEndOfFrame(); var boundaryIdBytes = UnityWebRequest.GenerateBoundary(); @@ -221,22 +212,7 @@ public IEnumerator Send(string json, List attachments, Dictionary formData = new List - { - new MultipartFormFileSection("upload_file", Encoding.UTF8.GetBytes(json), "upload_file.json", "application/json") - }; - - foreach (var file in attachments) - { - if (File.Exists(file) && new FileInfo(file).Length < 10000000) - { - formData.Add(new MultipartFormFileSection( - string.Format("attachment__{0}", Path.GetFileName(file)), - File.ReadAllBytes(file))); - } - } - + var formData = CreateJsonFormData(Encoding.UTF8.GetBytes(json), attachments); var boundaryIdBytes = UnityWebRequest.GenerateBoundary(); using (var request = UnityWebRequest.Post(requestUrl, formData, boundaryIdBytes)) @@ -299,6 +275,55 @@ public IEnumerator Send(string json, List attachments, Dictionary + /// Generate JSON form data + /// + /// Diagnostic JSON bytes + /// List of attachments + /// Diagnostic JSON form data + private List CreateJsonFormData(byte[] json, IEnumerable attachments) + { + List formData = new List + { + new MultipartFormFileSection(DiagnosticFileName, json, string.Format("{0}.json",DiagnosticFileName), "application/json") + }; + AddAttachmentToFormData(formData, attachments); + return formData; + } + + /// + /// Create minidump form data + /// + /// Minidump bytes + /// list of attachments + /// Minidump form data + private List CreateMinidumpFormData(byte[] minidump, IEnumerable attachments) + { + + List formData = new List + { + new MultipartFormFileSection(DiagnosticFileName, minidump) + }; + AddAttachmentToFormData(formData, attachments); + return formData; + } + + private void AddAttachmentToFormData(List formData, IEnumerable attachments) + { + // make sure attachments are not bigger than 10 Mb. + const int maximumAttachmentSize = 10000000; + const string attachmentPrefix = "attachment_"; + foreach (var file in attachments) + { + if (File.Exists(file) && new FileInfo(file).Length < maximumAttachmentSize) + { + formData.Add(new MultipartFormFileSection( + string.Format("{0}{1}", attachmentPrefix, Path.GetFileName(file)), + File.ReadAllBytes(file))); + } + } + } + private void PrintLog(UnityWebRequest request) { if (!_shouldDisplayFailureMessage) diff --git a/package.json b/package.json index 48689380..6adc14e5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "io.backtrace.unity", "displayName": "Backtrace", - "version": "3.4.0-rc2", + "version": "3.4.0-rc3", "unity": "2017.1", "description": "Backtrace's integration with Unity games allows customers to capture and report handled and unhandled Unity exceptions to their Backtrace instance, instantly offering the ability to prioritize and debug software errors.", "keywords": [