@@ -299,7 +299,7 @@ - (NSMutableURLRequest *)urlRequestForStack:(Stack*)stack
299299 [additionalHeaders enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
300300 [request setValue: obj forHTTPHeaderField: key];
301301 }];
302-
302+
303303 NSString *userAgent = [self userAgent ];
304304 NSString *version = sdkVersion;
305305 [request setValue: [NSString stringWithFormat: @" contentstack-ios/%@ " ,version] forHTTPHeaderField: @" X-User-Agent" ];
@@ -337,7 +337,6 @@ - (NSURLSessionDataTask*)requestForStack:(Stack*)stack
337337 urlString = [NSString stringWithFormat: @" %@ ://%@%@ " , [self protocolStringForSSL ], stack.hostURL, urlPath];
338338 }
339339 // Cache handler
340- ResponseType resType = NETWORK;
341340// switch (cachePolicy) {
342341// case NETWORK_ONLY:
343342// [self.httpSessionManager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
@@ -370,19 +369,7 @@ - (NSURLSessionDataTask*)requestForStack:(Stack*)stack
370369 // Initiate request
371370 NSMutableURLRequest *mutableRequest = [self urlRequestForStack: stack withURLPath: urlString requestType: requestType params: paramDict additionalHeaders: additionalHeaders];
372371 mutableRequest.HTTPMethod = @" GET" ;
373-
374- NSURLSessionDataTask *task = [self .urlSessionManager dataTaskWithRequest: mutableRequest success: ^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
375- if ((cachePolicy != NETWORK_ONLY || cachePolicy != CACHE_THEN_NETWORK) && responseObject != nil ) {
376- [self saveToCacheDataTask: task responseObject: responseObject];
377- }
378- completionBlock (resType, responseObject, nil );
379- } failure: ^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
380- if (cachePolicy == NETWORK_ELSE_CACHE) {
381- [self fullfillRequestWithCache: task.originalRequest completion: completionBlock];
382- } else {
383- completionBlock (resType, task.response , error);
384- }
385- }];
372+
386373// NSURLSessionDataTask *task = [self.httpSessionManager GET:urlString parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
387374// if (cachePolicy != NETWORK_ONLY || cachePolicy != CACHE_THEN_NETWORK) {
388375// [self saveToCacheDataTask:task responseObject:responseObject];
@@ -407,6 +394,45 @@ - (NSURLSessionDataTask*)requestForStack:(Stack*)stack
407394// [self fullfillRequestWithCache:task.originalRequest completion:completionBlock];
408395// [task suspend];
409396// }
397+ return [self performRequest: mutableRequest cachePolicy: cachePolicy completion: completionBlock];
398+ }
399+
400+ - (NSURLSessionDataTask *) performRequest : (NSMutableURLRequest *) mutableRequest
401+ cachePolicy : (CachePolicy)cachePolicy
402+ completion : (CSIONetworkCompletionHandler)completionBlock {
403+ ResponseType resType = NETWORK;
404+ NSString *retryCount = mutableRequest.allHTTPHeaderFields [@" x-cs-retry-count" ];
405+ if (retryCount) {
406+ int retryInt = [retryCount intValue ];// I assume you need it as an integer.
407+ [mutableRequest setValue: [NSString stringWithFormat: @" %d " ,(++retryInt)] forHTTPHeaderField: @" x-cs-retry-count" ];
408+ }else {
409+ [mutableRequest setValue: @" 0" forHTTPHeaderField: @" x-cs-retry-count" ];
410+ }
411+
412+ __weak typeof (self) weakSelf = self;
413+
414+ NSURLSessionDataTask *task = [self .urlSessionManager dataTaskWithRequest: mutableRequest success: ^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
415+ if (cachePolicy != NETWORK_ONLY && responseObject != nil ) {
416+ [self saveToCacheDataTask: task responseObject: responseObject];
417+ }
418+
419+ completionBlock (resType, responseObject, nil );
420+ } failure: ^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
421+ if (cachePolicy == NETWORK_ELSE_CACHE) {
422+ [self fullfillRequestWithCache: task.originalRequest completion: completionBlock];
423+ } else {
424+ NSString *retryCount = task.originalRequest .allHTTPHeaderFields [@" x-cs-retry-count" ];
425+ int currentRetryCount = [retryCount intValue ];
426+
427+ if ((error.code == 408 || error.code == 429 )&& currentRetryCount < 5 ) {
428+ NSTimeInterval timeInterval = pow (2 , ++currentRetryCount) * 100 / 1000 ;
429+ [NSThread sleepForTimeInterval: timeInterval];
430+ [weakSelf performRequest: task.originalRequest.mutableCopy cachePolicy: cachePolicy completion: completionBlock];
431+ }else {
432+ completionBlock (resType, task.response , error);
433+ }
434+ }
435+ }];
410436 return task;
411437}
412438
0 commit comments