Search Unity

Best HTTP Released

Discussion in 'Assets and Asset Store' started by BestHTTP, Sep 11, 2013.

  1. kashif789us

    kashif789us

    Joined:
    May 2, 2013
    Posts:
    163
    Through your plugin?
     
  2. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Yes, of course. :)
    (Using the same code from my previous post.)
     
  3. kashif789us

    kashif789us

    Joined:
    May 2, 2013
    Posts:
    163
    okay thanks :)
     
  4. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Just uploaded a new update with the following release notes:

    [New Feature] ConnectionTimeout added to the HTTPRequest class to maximize the wait time to connect to the server.
    [New Feature] TimeOut added to the HTTPRequest class to maximize the wait time to finish a request.
    [New Feature] Custom certification validation can be added to a HTTPRequest on iOS, Android and Desktop builds by setting the CustomCertificationValidator event.
    [Improvement] Updated BouncyCastle.
    [Improvement] Rewrote the WP8 TcpClient implementation
    [BugFix] Fixed handling of an empty form data.​
     
  5. slumtrimpet

    slumtrimpet

    Joined:
    Mar 18, 2014
    Posts:
    372
    Looking forward to grabbing the 1.5 release once it pops up on the store. In the meantime, I've hit another issue with post data unique to the multipart form encoded data (on v1.4.4). You are posting data like:

    Content-Disposition: form-data; name="reportController"; filename="reportController.dat"
    Content-Type: application/octet-stream
    Content-Length: 102


    {"pageSize":null,"page":null,"sorts":[{"column":"Description","direction":"DESCENDING"}],"filters":[]}

    Your line delimiters between your 'header' and the payload are incorrect. W3 defines newlines in post data as being: \r\n. http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

    You appear to only be sending \n's. I'd imagine this breaks in several frameworks, but at minimum I've found it's invalid in Django (see line 570 of https://github.com/django/django/blob/master/django/http/multipartparser.py).

    Can you please update to include both \r\n when delimiting your multi-part data?

    Also... I love the library but this isn't the first time we've encountered 'weird' issues with it. What are our options to upgrade our purchase from the Basic to Pro versions so we can view source and help out with debugging?
     
  6. eedok

    eedok

    Joined:
    Sep 21, 2009
    Posts:
    194
    Trying to migrate some WWW stuff and having an issue with the statuscode being reported as 0 sometimes
    Code (csharp):
    1.  
    2. using UnityEngine;
    3. using System.Collections;
    4. using BestHTTP;
    5. public class TestBestHTTPCO : MonoBehaviour {
    6.  
    7.     // Use this for initialization
    8.     void Start () {
    9.         StartCoroutine(LoadStuff());
    10.     }
    11.  
    12.     IEnumerator LoadStuff()
    13.     {
    14.         HTTPRequest request = new HTTPRequest(new System.Uri("http://isittuesday.co.uk/"));
    15.         request.Send();
    16.         yield return StartCoroutine(request);
    17.         Debug.Log("Status code: " + request.Response.StatusCode);
    18.     }
    19. }
    20.  
    When I run this, occassionally it'll report the status code as 0, have a workaround where I do this:
    Code (csharp):
    1.  
    2. using UnityEngine;
    3. using System.Collections;
    4. using BestHTTP;
    5. public class TestBestHTTPCO : MonoBehaviour {
    6.  
    7.     // Use this for initialization
    8.     void Start () {
    9.         StartCoroutine(LoadStuff());
    10.     }
    11.  
    12.     IEnumerator LoadStuff()
    13.     {
    14.         HTTPRequest request = new HTTPRequest(new System.Uri("http://isittuesday.co.uk/"));
    15.         request.Send();
    16.         yield return StartCoroutine(request);
    17.         while (request.Response.StatusCode == 0)
    18.         {
    19.             yield return null;
    20.         }
    21.         Debug.Log("Status code: " + request.Response.StatusCode);
    22.     }
    23. }
    24.  
    and this always seems to report the proper status code, but seems excessive to have to do after every call that needs to check the status code, is there something I missed to make it not come out of the coroutine until the status code is filled?
     
  7. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Hi slumtrimpet.

    You are absolutly right, there should be \r\n line endings. I use in that part of code a StreamWriter, but now i remember, i already vowed not to use it becouse of this kind of issue. :/
    I will make a new update tomorrow, and if you send me a mail, i will send you an update too.

    About the upgrade: the only way now, is that we initiate a refund on you Basic purchase, and then you have to buy the Pro.
     
  8. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Hi eedok.

    Thank you for the sample code, it will help a lot. I will check it, and report back as i find something.
     
  9. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Hi slumtrimpet.

    Uploaded a new update including this bugfix.
     
  10. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Hi eedok.

    Tried out your code, but i can't reproduce your issue.
    Made a little change on it to continously start the LoadStuff coroutine after it's finshes. I had let it run several minutes, but got only the normal response code (200).
     
  11. slumtrimpet

    slumtrimpet

    Joined:
    Mar 18, 2014
    Posts:
    372
    Awesome. Can't wait for it to pop on the store. Thanks very much for the quick response on this!
     
  12. light766

    light766

    Joined:
    Apr 23, 2009
    Posts:
    250
    i seem to have a problem streaming video tho, it seems that MovieTexture, cant be read as a string, bytes, or texture, it would have to be read as well a movie, how should i go about this when dealing with (editor/webplayer)

    because i use MovieTexture movie = downloadedFragments[x];

    Code (csharp):
    1.  
    2. List<byte[]> downloadedFragments = resp.GetStreamedFragments();
    3.        
    4.         if (downloadedFragments != null)
    5.         {
    6.             Debug.Log("Buffer size: " + downloadedFragments.Count);
    7.            
    8.             // First time setup:
    9.             if (movie == null)
    10.             {
    11.                 //THIS IS WHERE ERROR IS
    12.                 movie = downloadedFragments[0];
    13.                
    14.                 audio.clip = clip = movie.audioClip;
    15.                 audio.loop = false;
    16.                
    17.                 // no audio samples added yet to our clip
    18.                 samplePos = 0;
    19.             }
    20.            
    21.             // feed our video clip with the newly arrived data
    22.             //FeedVideo(downloadedFragments);
    23.         }
    24.        
    25.         if (resp.IsStreamingFinished)
    26.             Debug.Log("Download Finished!");
    27.     }
    28.  
     
  13. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    You can't cast a byte array directly to a MovieTexture.
    You have to find a way to load a move texture dinamically from a byte array(I don't know how you can, I didn't used MovieTexture).
    Or, maybe you can save the downloaded fragments to a file, and then you can use the WWW class to load it as a movie?
     
  14. light766

    light766

    Joined:
    Apr 23, 2009
    Posts:
    250
    hmm, seems like the only way would be using another plugin that reads from bytes because I cant seem to find anywhere that would convert bytes[] information into something other than a string or a texture.

    Would u recommend any by any chance?
     
  15. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Sorry, I didn't know any. :(
     
  16. slumtrimpet

    slumtrimpet

    Joined:
    Mar 18, 2014
    Posts:
    372
    Is there any Unity holdup with the updates you submitted? I've never paid too close attention to this, but it's been 6 days since you said 1.5 was submitted and still nothing on the store.
     
  17. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Submitted a new version before it got released, so I think it gone back to the end of the queue.
    However, both versions are released today. ;)
     
  18. TonyE

    TonyE

    Joined:
    Oct 23, 2013
    Posts:
    4
    nice asset! Is this support stripping level bytecode, .net 2.0 subset on ios ?
     
  19. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    It should. :) The package contains a link.xml, you can merge it with your current one, or you can use it as is if you don't have any yet.
    Let me know if you find any problem.
     
    Last edited: Oct 29, 2014
  20. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    A new big update(v1.6.0) uploaded to the Asset Store.
    The long awaited Windows Store Apps(a.k.a Metro, WinRT) support are here!

    The new release's tiny release notes:
    • [New Feature] Windows Store Apps support added
    • [Bug fix] Minor bugfixes
     
  21. Robota

    Robota

    Joined:
    Feb 7, 2012
    Posts:
    82
    Hi,
    I still have question about web sockets. I know That best http use web sockets to make http request in the web player.
    Is it the same in stand alone mode? For all request methods (Get, POST, ...) ?
     
  22. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    No Web Sockets are involved in general http requests. The WebSocket protocol are used only if you want to by creating a new WebSocket object from the BestHTTP.WebSocket namespace.
    Whatever you use, all platforms will use the same code path.
     
  23. Robota

    Robota

    Joined:
    Feb 7, 2012
    Posts:
    82
    I use Best HTTP with GET method and it works but something go wrong when I'm using it with POST command and I don't understand why.

    this code produce an error 500, (server error)
    but the equivalent, the same data on a webpage with jQuery (ajax call) return the good values.

    Code (CSharp):
    1.             string data = "{" +
    2.              
    3.                 "\"safeItem\" : {" +
    4.                     "\"size\" : 10" +
    5.                   "}," +
    6.                  
    7.                 "\"searchParameters\" : {" +
    8.                     "\"inFiles\" : true," +
    9.                     "\"inFolders\" : false," +
    10.                  
    11.                     "\"providerSafeboxes\" : true," +
    12.                     "\"privateSafebox\" : true," +
    13.                     "\"trashbin\" : false," +
    14.                  
    15.                     "\"doGetTags\" : true," +
    16.                     "\"tagOrCriteria\" : false," +
    17.                     "\"pagesize\" : 20," +
    18.                  
    19.                     "\"totalCount\" : false," +
    20.                     "\"listSearchOrderParameter\" : [ { \"searchOrderDirectionEnum\" : \"ASC\", \"searchOrderCriteriaEnum\" : \"TITLE\" } ]" +
    21.                 "}," +                  
    22.                                
    23.                 "\"container\" : {" +
    24.                     "\"itemCount\" : 10" +
    25.                 "}," +
    26.              
    27.                 "\"safeBoxType\" : \"PRIVATE\"" +
    28.             "}";
    29.          
    30.             HTTPRequest request = new HTTPRequest(new Uri(s_safeWsUrl + "/api/user/search"), HTTPMethods.Post, (req, resp) => {
    31.                 if (resp != null) {                  
    32.                     if (resp.StatusCode >= 200 && resp.StatusCode <= 205) {
    33.                         Debug.Log ("search ok!");
    34.                     } else {
    35.                         Debug.Log ("search error " + resp.StatusCode);
    36.                     }
    37.                 } else {
    38.                     Debug.Log ("search unknow error ");
    39.                 }
    40.             });
    41.          
    42.             request.AddHeader("Accept", "application/json");
    43.             request.Credentials = _credentialsSafe;          
    44.             request.RawData = UTF8Encoding.UTF8.GetBytes(data);          
    45.             request.Send();
    Should I process my data in some way?
     
  24. slumtrimpet

    slumtrimpet

    Joined:
    Mar 18, 2014
    Posts:
    372
    FYI.. the documentation link under the "most notable features are" section on post #1 of this thread is broken.
     
  25. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Your code looks good to me.
    Can you send me a repro project and a sample jQuery call to my mail address? I will check it, maybe i can see something why it's not working...
     
  26. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Thank you, fixed it.
     
  27. Robota

    Robota

    Joined:
    Feb 7, 2012
    Posts:
    82
    I would like but I don't know If I have the right because I should give you the full url and the test credentials.
    I will ask if it is possible...
    Thanks.
     
  28. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Well, i can understand it. I can assure you that i treat sensitive infos confidentially.
    Also, it would be helpful to know what was the server's problem with the request (authentication, processing the json payload, etc.).
     
  29. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Version 1.6.0 is out now with WinRT support.
     
  30. Uzi187

    Uzi187

    Joined:
    Mar 21, 2014
    Posts:
    16
    Hey I just bought the plugin.. It works great but I got one question;

    How to differentiate between a no connection error and a php error?

    REQUEST:
    HTTPRequest request = new HTTPRequest ( newUri (urlString), HTTPMethods.Get, OnRequestFinished);
    request.Send();

    CALLBACK:
    void OnRequestFinished (HTTPRequest request, HTTPResponse response)

    In both the cases mentioned above the response is null, request.Exception is null and request.state is Aborted.
     
  31. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    If there is a php error on the server (and a server responds with a proper 5xx status code), the response will not be null.
    If there are any internal errors in the plugin the state should be Error with a not null Exception property. This case can be when can't connect to the server.

    Just checked the code, and there might be a bug where an Error state reported as Aborted and the Exception is not set, but i have to investigate it further to say it for sure.
     
    Last edited: Nov 6, 2014
  32. cjimison

    cjimison

    Joined:
    Jan 4, 2014
    Posts:
    11
    Hi BestHTTP,

    I just created a new project did the following:
    • added BestHTTP
    • moved the link.xml to the root Assets folder
    • Changed the iOS player setting to
      • .Net 2.0 Subset
      • Use Micro mscorlib
    • Build iOS project
    After that I am not able to actually create project with the following errors:

    UnityException: Failed assemblies stripper: /Applications/Unity/Unity.app/Contents/Frameworks/Mono/bin/mono "/Applications/Unity/Unity.app/Contents/Frameworks/Tools/UnusedByteCodeStripper/UnusedBytecodeStripper.exe" -l none -c link -a "Assembly-CSharp-firstpass.dll" -a "Assembly-CSharp.dll" -a "Assembly-UnityScript-firstpass.dll" -a "Assembly-UnityScript.dll" -out output -x "/Applications/Unity/Unity.app/Contents/Frameworks/Tools/UnusedByteCodeStripper/link.xml" -d "Temp/StagingArea/Data/Managed" -x "/<PATH TO MY PROJECT>/Assets/link.xml" -x "tmplink.xml" current dir : Temp/StagingArea/Data/Managed
    Env: _WAPI_PROCESS_HANDLE_OFFSET = '5'
    XPC_FLAGS = '0x0'
    Apple_PubSub_Socket_Render = '/private/tmp/com.apple.launchd.koVaeocvvs/Render'
    XPC_SERVICE_NAME = '0'
    LOGNAME = 'cjimison'
    TMPDIR = '/var/folders/hy/p5519rn92tz3vlm10ywh9bm00000gn/T/'
    MONO_PATH = '/Applications/Unity/Unity.app/Contents/Frameworks/Mono/lib/mono/2.0:.'
    SSH_AUTH_SOCK = '/private/tmp/com.apple.launchd.J7gENvL8jt/Listeners'
    PWD = '/Users/cjimison/Develop/merigo/ThirdEarth'
    _ = '/Applications/Unity/Unity.app/Contents/MacOS/Unity'
    __CF_USER_TEXT_ENCODING = '0x1F5:0x0:0x0'
    SHELL = '/bin/zsh'
    USER = 'cjimison'
    HOME = '/Users/cjimison'
    PATH = '/usr/bin:/bin:/usr/sbin:/sbin'
    SHLVL = '1'
    result file exists: False. Timed out: False
    stdout:
    stderr: Unhandled Exception: Mono.Linker.ResolutionException: Can not resolve reference: System.Boolean System.Threading.WaitHandle::WaitOne(System.Int32) at Mono.Linker.Steps.MarkStep.MarkMethod (Mono.Cecil.MethodReference reference, System.Object markedby) [0x00000] in <filename unknown>:0 at Mono.Linker.Steps.MarkStep.MarkInstruction (Mono.Cecil.Cil.Instruction instruction, Mono.Cecil.MethodDefinition markedby) [0x00000] in <filename unknown>:0 at Mono.Linker.Steps.MarkStep.MarkMethodBody (Mono.Cecil.Cil.MethodBody body) [0x00000] in <filename unknown>:0 at Mono.Linker.Steps.MarkStep.ProcessMethod (Mono.Cecil.MethodDefinition method) [0x00000] in <filename unknown>:0 at Mono.Linker.Steps.MarkStep.ProcessQueue () [0x00000] in <filename unknown>:0 at Mono.Linker.Steps.MarkStep.Process () [0x00000] in <filename unknown>:0 at Mono.Linker.Steps.MarkStep.Process (Mono.Linker.LinkContext context) [0x00000] in <filename unknown>:0 at Mono.Linker.Pipeline.Process (Mono.Linker.LinkContext context) [0x00000] in <filename unknown>:0 at UnusedBytecodeStripper.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

    UnityEditor.MonoProcessUtility.RunMonoProcess (System.Diagnostics.Process process, System.String name, System.String resultingFile)
    UnityEditor.MonoAssemblyStripping.MonoLink (BuildTarget buildTarget, System.String managedLibrariesDirectory, System.String[] input, System.String[] allAssemblies, UnityEditor.RuntimeClassRegistry usedClasses)
    UnityEditor.HostView:OnGUI()

    And the link.xml is as follows:

    <linker>
    <assemblyfullname="mscorlib">
    <namespacefullname="System.Security.Cryptography"preserve="all"/>
    </assembly>

    <assemblyfullname="System.Configuration">
    <typefullname="System.Configuration.ExeConfigurationHost"preserve="all"/>
    </assembly>

    <assemblyfullname="System">
    <namespacefullname="System.Configuration"preserve="all"/>
    <namespacefullname="System.ComponentModel"preserve="all"/>
    <namespacefullname="System.Net.Configuration"preserve="all"/>
    </assembly>
    </linker>

    any ideas as to what I am doing wrong? Thanks for the help!
     
  33. cjimison

    cjimison

    Joined:
    Jan 4, 2014
    Posts:
    11
    Oh yeah, I am using the pro version. 1.6.0
     
  34. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Hi cjimison.

    I was able to solve this one, but a new and a more sticky one popped up:
    I had no luck to find what code that i use want to use this property. I will try to find a solution.
     
  35. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Tried out numerous things without any luck. Now i will go back to pervious versions to find the last working one, so i will know what change introduced this. Hopefully I will find a good solution.
     
  36. schmosef

    schmosef

    Joined:
    Mar 6, 2012
    Posts:
    852
    Just bought this as part of the Unity birthday sale.

    I tried importing it into a Unity 4.6.0RC1 project and it worked great.

    Then I tried importing it into a Unity 5.0b12 project and there were compile problems that preventing it from running.

    Have you started testing with Unity 5 yet? Just curious on whether you have a timeline for compatibility.
     
  37. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    I'm working on a more streamlined Unity 5 compatibility, but for now you can try to delete the /Plugins/Metro and /Plugins/WP8 folders. In some cases it can help.
     
  38. schmosef

    schmosef

    Joined:
    Mar 6, 2012
    Posts:
    852
    Thanks, that seemed to get it working.
     
  39. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Version 1.6.1 is uploaded to the Asset Store. It's a bugfix release, only improvement now are the added documentations.

    Release notes:
    • [Bugfix] WebPlayer build failed to connect to the server
    • [Bugfix] Two HTTPRequest states(Aborted and Error) unintentionally swapped, now they are back as supposed
    • [Bugfix] Proxy header handling improvement
    • [Improvement] More documentation
     
  40. cjimison

    cjimison

    Joined:
    Jan 4, 2014
    Posts:
    11
    Does this release also have a fix for the Micro mscorlib compile issue or is that still in the works?

    Thanks!
     
  41. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Narrowed it down, but still don't resolved it and don't wanted to uphold the other fixes.
     
  42. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    I have to give up on this for now. I wasn't able to circumvent the SecurityManager problem.
    So I have to say, that stripping is unsupported on iOS. :(
     
  43. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Version 1.6.1 is gone live finally yesterday, just before i finished 1.6.2. :)

    Release notes for 1.6.2 will be:
    • [Improvement] Native HTTPS support in WP8 and WinRT builds
    • [Improvement] Removed some compiler warnings in WP8/WinRT builds
    • [Improvement] Improved proxy compatibility
    • [Improvement] Non-transparent proxy connection response(status code, message and headers) can be accessed through the request’s ProxyResponse property
    • [Improvement] Added “Known Bugs/Limitations” to the documentation
    • [Bugfix] HTTPManager.MaxConnectionPerServer will be handled correctly with proxies
    • [Bugfix] Idle free connection will be removed correctly
     
  44. pajamajama

    pajamajama

    Joined:
    Oct 22, 2012
    Posts:
    66
    Is there a max length to the response?

    I'm parsing some JSON from HTTPResponse.DataAsText, and I'm noticing that it is getting cut off at a certain point. It's not always the same length. My response is pretty long, any suggestions on how I can handle it with BestHTTP? There's no way for me to shorten the response.

    Code (CSharp):
    1. new HTTPRequest(new System.Uri(hueBaseURL), (request, response) =>
    2.         {
    3.             print(response.DataAsText);
    4.             JSONNode data = JSONData.Parse(response.DataAsText);
    5.  
    6.         }).Send();
     
  45. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    It should download the whole response, my first thought is that the server doesn't send the 'Content-Length' header. In this case the plugin will try to download as much data as it can, but becouse it doesn't know how much will come, it can be problematic.
    In my tests however i can download ~100Mb of json data without any problem.

    If you can send an url that you experience this issue with, i can check it.
     
  46. pajamajama

    pajamajama

    Joined:
    Oct 22, 2012
    Posts:
    66
  47. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Yeah, as i thought there are no Content-Length header. Back in march i wrote the code to handle the no-content-length-header case becouse of Philips Hue lightning system doesn't sent the header...
    I will see what can i improve on my implementation.
     
  48. eedok

    eedok

    Joined:
    Sep 21, 2009
    Posts:
    194
    This constructor is missing:
    Code (CSharp):
    1.         public HTTPRequest(Uri uri, HTTPMethods method)
    2.             : this(uri, method, HTTPManager.KeepAliveDefaultValue, HTTPManager.IsCachingDisabled, null)
    3.         {
    4.         }
    5.  
     
  49. BestHTTP

    BestHTTP

    Joined:
    Sep 11, 2013
    Posts:
    1,664
    Added, it will be in the next release.
     
  50. fingersbleeding

    fingersbleeding

    Joined:
    Jun 10, 2013
    Posts:
    24
    Back on April 9th, 2014, one of my teammates wrote you about moving to SHA-2 SSL certs, and how Mono did not yet support them (themartorana). Your response was to switch to using the BouncyCastle library (http://forum.unity3d.com/threads/best-http-released.200006/page-3 midway down the page). We did, it worked great, thanks for that.

    We recently have seen a major slowdown in response time between devices and our API while using BouncyCastle. A typical request should take .2 seconds and was clocking 2-4 seconds. Turning BouncyCastle off, effectively switching back to using Mono, we get back to those .2 second response times.

    Since we aren't sure why BouncyCastle would seemingly all-of-a-sudden slow down to that extent, nor why Mono would start working with our updated SSL certs, we wanted to reach out to you before shipping this out across our player base. Do you have any info on updates to either of these that we might have picked up unknowingly?

    Thanks for your time,
    Jason