Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
2 changes: 1 addition & 1 deletion Runtime/BacktraceClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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; }

/// <summary>
Expand Down
85 changes: 55 additions & 30 deletions Runtime/Services/BacktraceApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ namespace Backtrace.Unity.Services
/// </summary>
internal class BacktraceApi : IBacktraceApi
{
/// <summary>
/// Name reserved file with diagnostic data - JSON diagnostic data/minidump file
/// </summary>
private const string DiagnosticFileName = "upload_file";
/// <summary>
/// User custom request method
/// </summary>
Expand Down Expand Up @@ -114,20 +118,7 @@ public IEnumerator SendMinidump(string minidumpPath, IEnumerable<string> attachm
{
yield break;
}
List<IMultipartFormSection> formData = new List<IMultipartFormSection>
{
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();
Expand Down Expand Up @@ -221,22 +212,7 @@ public IEnumerator Send(string json, List<string> attachments, Dictionary<string
? GetParametrizedQuery(_serverUrl.ToString(), queryAttributes)
: ServerUrl;


List<IMultipartFormSection> formData = new List<IMultipartFormSection>
{
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))
Expand Down Expand Up @@ -299,6 +275,55 @@ public IEnumerator Send(string json, List<string> attachments, Dictionary<string
}
}

/// <summary>
/// Generate JSON form data
/// </summary>
/// <param name="json">Diagnostic JSON bytes</param>
/// <param name="attachments">List of attachments</param>
/// <returns>Diagnostic JSON form data</returns>
private List<IMultipartFormSection> CreateJsonFormData(byte[] json, IEnumerable<string> attachments)
{
List<IMultipartFormSection> formData = new List<IMultipartFormSection>
{
new MultipartFormFileSection(DiagnosticFileName, json, string.Format("{0}.json",DiagnosticFileName), "application/json")
};
AddAttachmentToFormData(formData, attachments);
return formData;
}

/// <summary>
/// Create minidump form data
/// </summary>
/// <param name="minidump">Minidump bytes</param>
/// <param name="attachments">list of attachments</param>
/// <returns>Minidump form data</returns>
private List<IMultipartFormSection> CreateMinidumpFormData(byte[] minidump, IEnumerable<string> attachments)
{

List<IMultipartFormSection> formData = new List<IMultipartFormSection>
{
new MultipartFormFileSection(DiagnosticFileName, minidump)
};
AddAttachmentToFormData(formData, attachments);
return formData;
}

private void AddAttachmentToFormData(List<IMultipartFormSection> formData, IEnumerable<string> 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)
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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": [
Expand Down