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": [