/// <summary> /// Uploads CAN object to CAN server. /// </summary> /// <param name="ObjectData">CAN object to upload.</param> /// <returns>Structure describing whether the function succeeded and response provided by CAN server.</returns> public async Task <CanUploadResult> CanUploadObject(byte[] ObjectData) { log.Trace("(ObjectData.Length:{0})", ObjectData.Length); CanApiResult apiResult = await SendRequest("add", new NameValueCollection(), "file", "object", ObjectData); CanUploadResult res = CanUploadResult.FromApiResult(apiResult); if (res.Success) { log.Trace("(-):*.Success={0},*.Hash='{1}'", res.Success, res.Hash.ToBase58()); } else { log.Trace("(-):*.Success={0},*.Message='{1}'", res.Success, res.Message); } return(res); }
/// <summary> /// Creates a new object based on a result from CAN API including validation checks. /// </summary> /// <param name="ApiResult">CAN API result object to copy values from.</param> /// <returns>Structure describing result of CAN upload operation.</returns> public static CanUploadResult FromApiResult(CanApiResult ApiResult) { log.Trace("()"); CanUploadResult res = new CanUploadResult(ApiResult); if (res.Success) { bool error = false; try { CanUploadObjectResponse response = JsonConvert.DeserializeObject <CanUploadObjectResponse>(res.DataStr); if (!string.IsNullOrEmpty(response.Hash)) { res.Hash = Base58Encoding.Encoder.DecodeRaw(response.Hash); if (res.Hash == null) { log.Error("Unable to decode hash '{0}'.", response.Hash); error = true; } } else { log.Error("Empty hash in CAN response."); error = true; } } catch (Exception e) { log.Error("Exception occurred: {0}", e.ToString()); error = true; } if (error) { res.Success = false; res.Message = "Invalid CAN response."; res.IsCanError = false; } } log.Trace("(-)"); return(res); }