コード例 #1
0
 public ApiResult Error(ApiResultCode resultCode, string message = null)
 {
     return(new ApiResult()
     {
         ResultCode = resultCode, Message = message
     });
 }
コード例 #2
0
 public void Login_InvalidCredentials_Throws(string email, string password, ApiResultCode expectedErrorCode)
 {
     Assert.That(
         () => this.Client.Login(email, password),
         Throws.TypeOf <ApiException>()
         .With.Property <ApiException>(x => x.ApiResultCode).EqualTo(expectedErrorCode));
 }
コード例 #3
0
 public ApiResult <T> Error <T>(ApiResultCode resultCode, string message = null, dynamic data = null)
 {
     return(new ApiResult <T>()
     {
         ResultCode = resultCode, Message = message, Data = data
     });
 }
コード例 #4
0
        public async Task <HttpResponseMessage> Delete(Guid id)
        {
            if (id != null)
            {
                await _unit.IItem.Remove(id);

                ApiResultCode result = await _unit.Complete();

                if (result.ResultType == ApiResultType.Success)
                {
                    HttpResponseMessage response = new HttpResponseMessage()
                    {
                        StatusCode = HttpStatusCode.OK
                    };
                    return(response);
                }
                else
                {
                    HttpResponseMessage response = new HttpResponseMessage()
                    {
                        StatusCode = HttpStatusCode.BadRequest
                    };
                    return(response);
                }
            }
            else
            {
                HttpResponseMessage response = new HttpResponseMessage()
                {
                    StatusCode = HttpStatusCode.BadRequest
                };
                return(response);
            }
        }
コード例 #5
0
 protected ApiResult <T> GetApiResult <T>(ApiResultCode code, T data, string msg)
 {
     return(new ApiResult <T>()
     {
         Code = (int)code, Data = data, Message = msg
     });
 }
コード例 #6
0
 protected ApiResult <T> GetApiResult <T>(ApiResultCode code, T data)
 {
     return(new ApiResult <T>()
     {
         Code = (int)code, Data = data, Message = code.GetDescription()
     });
 }
コード例 #7
0
ファイル: ApiResult.cs プロジェクト: kowalski77/SmartBar
 internal ApiResult(
     ApiResultCode code,
     string message)
 {
     this.Code    = code;
     this.Message = message ?? throw new ArgumentNullException(nameof(message));
 }
コード例 #8
0
ファイル: Login.cs プロジェクト: theTwist84/MegaApiClient
 public void Login_InvalidCredentials_Throws(string email, string password, ApiResultCode expectedErrorCode)
 {
     Assert.That(
         () => this.Client.Login(email, password),
         Throws.TypeOf<ApiException>()
         .With.Property<ApiException>(x => x.ApiResultCode).EqualTo(expectedErrorCode));
 }
コード例 #9
0
 private ApiRequestFailedEventArgs(Uri url, int attemptNum, int delayMilliseconds, ApiResultCode apiResult, string responseJson, Exception exception)
 {
     ApiUrl            = url;
     AttemptNum        = attemptNum;
     DelayMilliseconds = delayMilliseconds;
     ApiResult         = apiResult;
     ResponseJson      = responseJson;
     Exception         = exception;
 }
コード例 #10
0
 private ApiRequestFailedEventArgs(Uri url, int attemptNum, TimeSpan retryDelay, ApiResultCode apiResult, string responseJson, Exception exception)
 {
     ApiUrl       = url;
     AttemptNum   = attemptNum;
     RetryDelay   = retryDelay;
     ApiResult    = apiResult;
     ResponseJson = responseJson;
     Exception    = exception;
 }
コード例 #11
0
ファイル: SessionHttpHandler.cs プロジェクト: ben3005/my-api
 private HttpResponseMessage createResponse(HttpStatusCode statusCode, ApiResultCode resultCode)
 {
     var error = new Error();
     error.code = (int)resultCode;
     error.message = _toolUtil.getEnumDescription(resultCode);
     return new HttpResponseMessage(statusCode) {
         Content = new StringContent(JsonConvert.SerializeObject(error, Formatting.Indented))
     };
 }
コード例 #12
0
        private TResponse Request <TResponse>(RequestBase request, object context = null)
            where TResponse : class
        {
            string dataRequest    = JsonConvert.SerializeObject(new object[] { request });
            Uri    uri            = this.GenerateUrl();
            object jsonData       = null;
            int    currentAttempt = 0;

            while (true)
            {
                string dataResult = this._webClient.PostRequestJson(uri, dataRequest);

                jsonData = JsonConvert.DeserializeObject(dataResult);
                if (jsonData is long || (jsonData is JArray && ((JArray)jsonData)[0].Type == JTokenType.Integer))
                {
                    ApiResultCode apiCode = (jsonData is long)
                                                ? (ApiResultCode)Enum.ToObject(typeof(ApiResultCode), jsonData)
                                                : (ApiResultCode)((JArray)jsonData)[0].Value <int>();

                    if (apiCode == ApiResultCode.RequestFailedRetry)
                    {
                        if (currentAttempt == ApiRequestAttempts)
                        {
                            throw new NotSupportedException("Api not available");
                        }

                        Thread.Sleep(ApiRequestDelay);
                        currentAttempt++;
                        continue;
                    }

                    if (apiCode == ApiResultCode.BadSessionId && this._authInfos != null)
                    {
                        this.Logout();
                        this.Login(this._authInfos);
                    }

                    if (apiCode != ApiResultCode.Ok)
                    {
                        throw new ApiException(apiCode);
                    }
                }

                break;
            }

            JsonSerializerSettings settings = new JsonSerializerSettings();

            settings.Context = new StreamingContext(StreamingContextStates.All, context);

            string data = ((JArray)jsonData)[0].ToString();

            return((typeof(TResponse) == typeof(string)) ? data as TResponse : JsonConvert.DeserializeObject <TResponse>(data, settings));
        }
        private HttpStatusCode ConvertResultCode(ApiResultCode resultCode)
        {
            switch (resultCode)
            {
                case ApiResultCode.Success: return HttpStatusCode.OK;
                case ApiResultCode.InternalError: return HttpStatusCode.InternalServerError;
                case ApiResultCode.UnknownUri: return HttpStatusCode.NotFound;
                case ApiResultCode.InvalidBody: return HttpStatusCode.BadRequest;
            }

            throw new NotSupportedException();
        }
コード例 #14
0
        private TResponse RequestCore <TResponse>(RequestBase request, object context = null)
            where TResponse : class
        {
            string dataRequest    = JsonConvert.SerializeObject(new object[] { request });
            Uri    uri            = GenerateUrl(request.QueryArguments);
            object jsonData       = null;
            int    requestDelay   = options.ApiRequestDelay;
            int    remainingRetry = options.ApiRequestAttempts;

            while (remainingRetry-- > 0)
            {
                string dataResult = webClient.PostRequestJson(uri, dataRequest);

                if (string.IsNullOrEmpty(dataResult) ||
                    (jsonData = JsonConvert.DeserializeObject(dataResult)) == null ||
                    jsonData is long ||
                    (jsonData is JArray && ((JArray)jsonData)[0].Type == JTokenType.Integer))
                {
                    ApiResultCode apiCode = jsonData == null
                      ? ApiResultCode.RequestFailedRetry
                      : jsonData is long
                                            ?(ApiResultCode)Enum.ToObject(typeof(ApiResultCode), jsonData)
                                                : (ApiResultCode)((JArray)jsonData)[0].Value <int>();

                    if (apiCode != ApiResultCode.Ok)
                    {
                        ApiRequestFailed?.Invoke(this, new ApiRequestFailedEventArgs(uri, options.ApiRequestAttempts - remainingRetry, requestDelay, apiCode, dataResult));
                    }

                    if (apiCode == ApiResultCode.RequestFailedRetry)
                    {
                        Thread.Sleep(requestDelay = (int)Math.Round(requestDelay * options.ApiRequestDelayExponentialFactor));
                        continue;
                    }

                    if (apiCode != ApiResultCode.Ok)
                    {
                        throw new ApiException(apiCode);
                    }
                }

                break;
            }

            JsonSerializerSettings settings = new JsonSerializerSettings();

            settings.Context = new StreamingContext(StreamingContextStates.All, context);

            string data = ((JArray)jsonData)[0].ToString();

            return((typeof(TResponse) == typeof(string)) ? data as TResponse : JsonConvert.DeserializeObject <TResponse>(data, settings));
        }
コード例 #15
0
        public static ApiResult <T> ToApiResult <T>(this T data,
                                                    string message           = "",
                                                    ApiResultCode resultCode = ApiResultCode.Success)
        {
            var result = new ApiResult <T>
            {
                Code    = (int)resultCode,
                Message = message,
                Data    = data
            };

            return(result);
        }
コード例 #16
0
ファイル: MegaApiClient.cs プロジェクト: zerje/DarkStealer
        // Token: 0x06000953 RID: 2387 RVA: 0x0004C440 File Offset: 0x0004A640
        private TResponse RequestCore <TResponse>(RequestBase request, byte[] key) where TResponse : class
        {
            string jsonData = JsonConvert.SerializeObject(new object[]
            {
                request
            });
            Uri      url = this.GenerateUrl(request.QueryArguments);
            object   obj = null;
            int      num = 0;
            TimeSpan retryDelay;

            while (this.options.ComputeApiRequestRetryWaitDelay(++num, out retryDelay))
            {
                string text = this.webClient.PostRequestJson(url, jsonData);
                if (!string.IsNullOrEmpty(text) && (obj = JsonConvert.DeserializeObject(text)) != null && !(obj is long) && (!(obj is JArray) || ((JArray)obj)[0].Type != JTokenType.Integer))
                {
                    break;
                }
                ApiResultCode apiResultCode = (obj == null) ? ApiResultCode.RequestFailedRetry : ((obj is long) ? ((ApiResultCode)Enum.ToObject(typeof(ApiResultCode), obj)) : ((ApiResultCode)((JArray)obj)[0].Value <int>()));
                if (apiResultCode != ApiResultCode.Ok)
                {
                    EventHandler <ApiRequestFailedEventArgs> apiRequestFailed = this.ApiRequestFailed;
                    if (apiRequestFailed != null)
                    {
                        apiRequestFailed(this, new ApiRequestFailedEventArgs(url, num, retryDelay, apiResultCode, text));
                    }
                }
                if (apiResultCode == ApiResultCode.RequestFailedRetry)
                {
                    this.Wait(retryDelay);
                }
                else
                {
                    if (apiResultCode != ApiResultCode.Ok)
                    {
                        throw new ApiException(apiResultCode);
                    }
                    break;
                }
            }
            string text2 = ((JArray)obj)[0].ToString();

            if (!(typeof(TResponse) == typeof(string)))
            {
                return(JsonConvert.DeserializeObject <TResponse>(text2, new JsonConverter[]
                {
                    new GetNodesResponseConverter(key)
                }));
            }
            return(text2 as TResponse);
        }
コード例 #17
0
ファイル: ApiResult.cs プロジェクト: kowalski77/SmartBar
        internal ApiResult(
            ApiResultCode code,
            string message,
            IReadOnlyList <Result> results) : this(code, message)
        {
            if (results == null)
            {
                throw new ArgumentNullException(nameof(results));
            }

            this.ValidationErrors = results.Select(x =>
                                                   new ValidationErrors(x.Field, x.Error))
                                    .ToList();
        }
コード例 #18
0
        private HttpStatusCode ConvertResultCode(ApiResultCode resultCode)
        {
            switch (resultCode)
            {
            case ApiResultCode.Success: return(HttpStatusCode.OK);

            case ApiResultCode.InternalError: return(HttpStatusCode.InternalServerError);

            case ApiResultCode.UnknownUri: return(HttpStatusCode.NotFound);

            case ApiResultCode.InvalidBody: return(HttpStatusCode.BadRequest);
            }

            throw new NotSupportedException();
        }
コード例 #19
0
        private TResponse RequestCore <TResponse>(RequestBase request, byte[] key)
            where TResponse : class
        {
            string dataRequest    = JsonConvert.SerializeObject(new object[] { request });
            Uri    uri            = this.GenerateUrl(request.QueryArguments);
            object jsonData       = null;
            int    requestDelay   = this.options.ApiRequestDelay;
            int    remainingRetry = this.options.ApiRequestAttempts;

            while (remainingRetry-- > 0)
            {
                string dataResult = this.webClient.PostRequestJson(uri, dataRequest);

                if (string.IsNullOrEmpty(dataResult) ||
                    (jsonData = JsonConvert.DeserializeObject(dataResult)) == null ||
                    jsonData is long ||
                    (jsonData is JArray && ((JArray)jsonData)[0].Type == JTokenType.Integer))
                {
                    ApiResultCode apiCode = jsonData == null
            ? ApiResultCode.RequestFailedRetry
            : jsonData is long
                                            ?(ApiResultCode)Enum.ToObject(typeof(ApiResultCode), jsonData)
                                                : (ApiResultCode)((JArray)jsonData)[0].Value <int>();

                    if (apiCode != ApiResultCode.Ok)
                    {
                        this.ApiRequestFailed?.Invoke(this, new ApiRequestFailedEventArgs(uri, this.options.ApiRequestAttempts - remainingRetry, requestDelay, apiCode, dataResult));
                    }

                    if (apiCode == ApiResultCode.RequestFailedRetry)
                    {
                        requestDelay = this.Wait(requestDelay);
                        continue;
                    }

                    if (apiCode != ApiResultCode.Ok)
                    {
                        throw new ApiException(apiCode);
                    }
                }

                break;
            }

            string data = ((JArray)jsonData)[0].ToString();

            return((typeof(TResponse) == typeof(string)) ? data as TResponse : JsonConvert.DeserializeObject <TResponse>(data, new GetNodesResponseConverter(key)));
        }
コード例 #20
0
 internal ApiException(ApiResultCode apiResultCode)
 {
     ApiResultCode = apiResultCode;
 }
コード例 #21
0
ファイル: Login.cs プロジェクト: rajeshwarn/MegaApiClient
        public void Login_InvalidCredentials_Throws(string email, string password, ApiResultCode expectedErrorCode)
        {
            var exception = Assert.Throws <ApiException>(() => this.context.Client.Login(email, password));

            Assert.Equal(expectedErrorCode, exception.ApiResultCode);
        }
コード例 #22
0
        public async Task <HttpResponseMessage> Post([FromBody] ItemViewModel value)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    bool isEdit   = true;
                    Guid ItemGuid = Guid.Empty;
                    isEdit = value.ItemId > 0 ? true : false;
                    ApiResult <bool> isExist = await _unit.IItem.Exists(t => t.ItemName == value.Name && value.SubcategoryId == value.SubcategoryId);

                    if (isExist.UserObject)
                    {
                        HttpResponseMessage response = new HttpResponseMessage()
                        {
                            StatusCode = HttpStatusCode.Conflict
                        };
                        return(response);
                    }
                    else
                    {
                        TblItemMaster data = AutoMapper.Mapper.Map <TblItemMaster>(value);
                        if (!isEdit)
                        {
                            data.Id          = value.ItemId;
                            data.CreatedDate = DateTime.Now;
                            data.IsDeleted   = false;
                            await _unit.IItem.Add(data);

                            ApiResultCode result = await _unit.Complete();

                            if (result.ResultType == ApiResultType.Success)
                            {
                                HttpResponseMessage response = new HttpResponseMessage()
                                {
                                    StatusCode = HttpStatusCode.OK
                                };
                                return(response);
                            }
                        }
                        else
                        {
                            data              = (await _unit.IItem.GetByID(Id: ItemGuid)).UserObject;
                            data.ItemName     = value.Name;
                            data.ModifiedDate = DateTime.Now;
                            data.ModifiedBy   = null;
                            _unit.IItem.Update(data);
                            ApiResultCode result = await _unit.Complete();

                            if (result.ResultType == ApiResultType.Success)
                            {
                                HttpResponseMessage response = new HttpResponseMessage()
                                {
                                    StatusCode = HttpStatusCode.OK
                                };
                                return(response);
                            }
                        }
                    }
                }
                else
                {
                    HttpResponseMessage response = new HttpResponseMessage()
                    {
                        StatusCode = HttpStatusCode.BadRequest
                    };
                }
            }
            catch (Exception ex)
            {
                ErrorTrace.Logger(LogArea.ApplicationTier, ex);
                HttpResponseMessage response = new HttpResponseMessage()
                {
                    StatusCode = HttpStatusCode.BadRequest
                };
                return(response);
            }
            HttpResponseMessage response1 = new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.BadRequest
            };

            return(response1);
        }
コード例 #23
0
 public ApiException(ApiResultCode apiExceptionCode, Exception innerException)
     : base("", innerException)
 {
     this.ApiExceptionCode = apiExceptionCode;
 }
コード例 #24
0
 // Token: 0x060007E0 RID: 2016 RVA: 0x000395D8 File Offset: 0x000377D8
 public ApiRequestFailedEventArgs(Uri url, int attemptNum, TimeSpan retryDelay, ApiResultCode apiResult, Exception exception) : this(url, attemptNum, retryDelay, apiResult, null, exception)
 {
 }
コード例 #25
0
        public INode Upload(Stream stream, string name, INode parent, DateTime?modificationDate = null, CancellationToken?cancellationToken = null)
#endif
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("name");
            }

            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            if (parent.Type == NodeType.File)
            {
                throw new ArgumentException("Invalid parent node");
            }

            this.EnsureLoggedIn();

#if !NET35
            if (cancellationToken.HasValue)
            {
                stream = new CancellableStream(stream, cancellationToken.Value);
            }
#endif

            string completionHandle = string.Empty;
            int    requestDelay     = this.options.ApiRequestDelay;
            int    remainingRetry   = this.options.ApiRequestAttempts;
            while (remainingRetry-- > 0)
            {
                // Retrieve upload URL
                UploadUrlRequest  uploadRequest  = new UploadUrlRequest(stream.Length);
                UploadUrlResponse uploadResponse = this.Request <UploadUrlResponse>(uploadRequest);

                ApiResultCode apiResult = ApiResultCode.Ok;
                using (MegaAesCtrStreamCrypter encryptedStream = new MegaAesCtrStreamCrypter(stream))
                {
                    var chunkStartPosition  = 0;
                    var chunksSizesToUpload = this.ComputeChunksSizesToUpload(encryptedStream.ChunksPositions, encryptedStream.Length).ToArray();
                    Uri uri = null;
                    for (int i = 0; i < chunksSizesToUpload.Length; i++)
                    {
                        completionHandle = string.Empty;

                        int    chunkSize   = chunksSizesToUpload[i];
                        byte[] chunkBuffer = new byte[chunkSize];
                        encryptedStream.Read(chunkBuffer, 0, chunkSize);

                        using (MemoryStream chunkStream = new MemoryStream(chunkBuffer))
                        {
                            uri = new Uri(uploadResponse.Url + "/" + chunkStartPosition);
                            chunkStartPosition += chunkSize;
                            try
                            {
                                completionHandle = this.webClient.PostRequestRaw(uri, chunkStream);
                                if (string.IsNullOrEmpty(completionHandle))
                                {
                                    apiResult = ApiResultCode.Ok;
                                    continue;
                                }

                                long retCode;
                                if (completionHandle.FromBase64().Length != 27 && long.TryParse(completionHandle, out retCode))
                                {
                                    apiResult = (ApiResultCode)retCode;
                                    break;
                                }
                            }
                            catch (Exception ex)
                            {
                                apiResult = ApiResultCode.RequestFailedRetry;
                                this.ApiRequestFailed?.Invoke(this, new ApiRequestFailedEventArgs(uri, remainingRetry, requestDelay, apiResult, ex));

                                break;
                            }
                        }
                    }

                    if (apiResult != ApiResultCode.Ok)
                    {
                        this.ApiRequestFailed?.Invoke(this, new ApiRequestFailedEventArgs(uri, remainingRetry, requestDelay, apiResult, completionHandle));

                        if (apiResult == ApiResultCode.RequestFailedRetry || apiResult == ApiResultCode.RequestFailedPermanetly || apiResult == ApiResultCode.TooManyRequests)
                        {
                            // Restart upload from the beginning
                            requestDelay = this.Wait(requestDelay);

                            // Reset steam position
                            stream.Seek(0, SeekOrigin.Begin);

                            continue;
                        }

                        throw new ApiException(apiResult);
                    }

                    // Encrypt attributes
                    byte[] cryptedAttributes = Crypto.EncryptAttributes(new Attributes(name, stream, modificationDate), encryptedStream.FileKey);

                    // Compute the file key
                    byte[] fileKey = new byte[32];
                    for (int i = 0; i < 8; i++)
                    {
                        fileKey[i]      = (byte)(encryptedStream.FileKey[i] ^ encryptedStream.Iv[i]);
                        fileKey[i + 16] = encryptedStream.Iv[i];
                    }

                    for (int i = 8; i < 16; i++)
                    {
                        fileKey[i]      = (byte)(encryptedStream.FileKey[i] ^ encryptedStream.MetaMac[i - 8]);
                        fileKey[i + 16] = encryptedStream.MetaMac[i - 8];
                    }

                    byte[] encryptedKey = Crypto.EncryptKey(fileKey, this.masterKey);

                    CreateNodeRequest createNodeRequest  = CreateNodeRequest.CreateFileNodeRequest(parent, cryptedAttributes.ToBase64(), encryptedKey.ToBase64(), fileKey, completionHandle);
                    GetNodesResponse  createNodeResponse = this.Request <GetNodesResponse>(createNodeRequest, this.masterKey);
                    return(createNodeResponse.Nodes[0]);
                }
            }

            throw new UploadException(completionHandle);
        }
コード例 #26
0
ファイル: ApiResultBase.cs プロジェクト: zezezez/ToolsWebApp
 public ApiResultBase(ApiResultCode code = ApiResultCode.Success)
 {
     this.code = code;
 }
コード例 #27
0
ファイル: ApiResultBase.cs プロジェクト: zezezez/ToolsWebApp
 public ApiResultBase(ApiResultCode code, string msg)
 {
     this.code = code;
     this.msg  = msg;
 }
コード例 #28
0
ファイル: ApiResultBase.cs プロジェクト: zezezez/ToolsWebApp
 public ApiResultBase(ApiResultCode code, string msg, string subMsg)
 {
     this.code    = code;
     this.msg     = msg;
     this.sub_msg = subMsg;
 }
コード例 #29
0
 internal ApiException(ApiResultCode apiResultCode)
 {
     this.ApiResultCode = apiResultCode;
 }
コード例 #30
0
 public ApiRequestFailedEventArgs(Uri url, int attemptNum, int delayMilliseconds, ApiResultCode apiResult, string responseJson)
     : this(url, attemptNum, delayMilliseconds, apiResult, responseJson, null)
 {
 }
コード例 #31
0
ファイル: MegaApiClient.cs プロジェクト: zerje/DarkStealer
        // Token: 0x0600094C RID: 2380 RVA: 0x0004BE18 File Offset: 0x0004A018
        public INode Upload(Stream stream, string name, INode parent, DateTime?modificationDate = null, CancellationToken?cancellationToken = null)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("name");
            }
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }
            if (parent.Type == NodeType.File)
            {
                throw new ArgumentException("Invalid parent node");
            }
            this.EnsureLoggedIn();
            if (cancellationToken != null)
            {
                stream = new CancellableStream(stream, cancellationToken.Value);
            }
            string   text = string.Empty;
            int      num  = 0;
            TimeSpan retryDelay;

            while (this.options.ComputeApiRequestRetryWaitDelay(++num, out retryDelay))
            {
                UploadUrlRequest  request           = new UploadUrlRequest(stream.Length);
                UploadUrlResponse uploadUrlResponse = this.Request <UploadUrlResponse>(request, null);
                ApiResultCode     apiResultCode     = ApiResultCode.Ok;
                using (MegaAesCtrStreamCrypter megaAesCtrStreamCrypter = new MegaAesCtrStreamCrypter(stream))
                {
                    long  num2  = 0L;
                    int[] array = this.ComputeChunksSizesToUpload(megaAesCtrStreamCrypter.ChunksPositions, megaAesCtrStreamCrypter.Length).ToArray <int>();
                    Uri   url   = null;
                    for (int i = 0; i < array.Length; i++)
                    {
                        text = string.Empty;
                        int    num3   = array[i];
                        byte[] buffer = new byte[num3];
                        megaAesCtrStreamCrypter.Read(buffer, 0, num3);
                        using (MemoryStream memoryStream = new MemoryStream(buffer))
                        {
                            url   = new Uri(uploadUrlResponse.Url + "/" + num2);
                            num2 += (long)num3;
                            try
                            {
                                text = this.webClient.PostRequestRaw(url, memoryStream);
                                long num4;
                                if (string.IsNullOrEmpty(text))
                                {
                                    apiResultCode = ApiResultCode.Ok;
                                }
                                else if (text.FromBase64().Length != 27 && long.TryParse(text, out num4))
                                {
                                    apiResultCode = (ApiResultCode)num4;
                                    break;
                                }
                            }
                            catch (Exception exception)
                            {
                                apiResultCode = ApiResultCode.RequestFailedRetry;
                                EventHandler <ApiRequestFailedEventArgs> apiRequestFailed = this.ApiRequestFailed;
                                if (apiRequestFailed != null)
                                {
                                    apiRequestFailed(this, new ApiRequestFailedEventArgs(url, num, retryDelay, apiResultCode, exception));
                                }
                                break;
                            }
                        }
                    }
                    if (apiResultCode == ApiResultCode.Ok)
                    {
                        byte[] data   = Crypto.EncryptAttributes(new Attributes(name, stream, modificationDate), megaAesCtrStreamCrypter.FileKey);
                        byte[] array2 = new byte[32];
                        for (int j = 0; j < 8; j++)
                        {
                            array2[j]      = (megaAesCtrStreamCrypter.FileKey[j] ^ megaAesCtrStreamCrypter.Iv[j]);
                            array2[j + 16] = megaAesCtrStreamCrypter.Iv[j];
                        }
                        for (int k = 8; k < 16; k++)
                        {
                            array2[k]      = (megaAesCtrStreamCrypter.FileKey[k] ^ megaAesCtrStreamCrypter.MetaMac[k - 8]);
                            array2[k + 16] = megaAesCtrStreamCrypter.MetaMac[k - 8];
                        }
                        byte[]            data2    = Crypto.EncryptKey(array2, this.masterKey);
                        CreateNodeRequest request2 = CreateNodeRequest.CreateFileNodeRequest(parent, data.ToBase64(), data2.ToBase64(), array2, text);
                        return(this.Request <GetNodesResponse>(request2, this.masterKey).Nodes[0]);
                    }
                    EventHandler <ApiRequestFailedEventArgs> apiRequestFailed2 = this.ApiRequestFailed;
                    if (apiRequestFailed2 != null)
                    {
                        apiRequestFailed2(this, new ApiRequestFailedEventArgs(url, num, retryDelay, apiResultCode, text));
                    }
                    if (apiResultCode != ApiResultCode.RequestFailedRetry && apiResultCode != ApiResultCode.RequestFailedPermanetly)
                    {
                        if (apiResultCode != ApiResultCode.TooManyRequests)
                        {
                            throw new ApiException(apiResultCode);
                        }
                    }
                    this.Wait(retryDelay);
                    stream.Seek(0L, SeekOrigin.Begin);
                }
            }
            throw new UploadException(text);
        }
コード例 #32
0
 public ApiException(ApiResultCode apiExceptionCode)
 {
     this.ApiExceptionCode = apiExceptionCode;
 }
コード例 #33
0
 public ApiRequestFailedEventArgs(Uri url, int attemptNum, int delayMilliseconds, ApiResultCode apiResult, Exception exception)
     : this(url, attemptNum, delayMilliseconds, apiResult, null, exception)
 {
 }
コード例 #34
0
 // Token: 0x060007DF RID: 2015 RVA: 0x000395C8 File Offset: 0x000377C8
 public ApiRequestFailedEventArgs(Uri url, int attemptNum, TimeSpan retryDelay, ApiResultCode apiResult, string responseJson) : this(url, attemptNum, retryDelay, apiResult, responseJson, null)
 {
 }