aliyun-oss-react-native

OSSNetworking.h 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. //
  2. // OSSNetworking.h
  3. // oss_ios_sdk
  4. //
  5. // Created by zhouzhuo on 8/16/15.
  6. // Copyright (c) 2015 aliyun.com. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "OSSModel.h"
  10. @class OSSSyncMutableDictionary;
  11. @class OSSNetworkingRequestDelegate;
  12. @class OSSExecutor;
  13. /**
  14. 定义重试类型
  15. */
  16. typedef NS_ENUM(NSInteger, OSSNetworkingRetryType) {
  17. OSSNetworkingRetryTypeUnknown,
  18. OSSNetworkingRetryTypeShouldRetry,
  19. OSSNetworkingRetryTypeShouldNotRetry,
  20. OSSNetworkingRetryTypeShouldRefreshCredentialsAndRetry,
  21. OSSNetworkingRetryTypeShouldCorrectClockSkewAndRetry
  22. };
  23. /**
  24. 重试处理器
  25. */
  26. @interface OSSURLRequestRetryHandler : NSObject
  27. @property (nonatomic, assign) uint32_t maxRetryCount;
  28. - (OSSNetworkingRetryType)shouldRetry:(uint32_t)currentRetryCount
  29. requestDelegate:(OSSNetworkingRequestDelegate *)delegate
  30. response:(NSHTTPURLResponse *)response
  31. error:(NSError *)error;
  32. - (NSTimeInterval)timeIntervalForRetry:(uint32_t)currentRetryCount
  33. retryType:(OSSNetworkingRetryType)retryType;
  34. + (instancetype)defaultRetryHandler;
  35. @end
  36. /**
  37. 网络参数设置
  38. */
  39. @interface OSSNetworkingConfiguration : NSObject
  40. @property (nonatomic, assign) uint32_t maxRetryCount;
  41. @property (nonatomic, assign) uint32_t maxConcurrentRequestCount;
  42. @property (nonatomic, assign) BOOL enableBackgroundTransmitService;
  43. @property (nonatomic, strong) NSString * backgroundSessionIdentifier;
  44. @property (nonatomic, assign) NSTimeInterval timeoutIntervalForRequest;
  45. @property (nonatomic, assign) NSTimeInterval timeoutIntervalForResource;
  46. @property (nonatomic, strong) NSString * proxyHost;
  47. @property (nonatomic, strong) NSNumber * proxyPort;
  48. @end
  49. /**
  50. 对操作发起的每一次请求构造一个信息代理
  51. */
  52. @interface OSSNetworkingRequestDelegate : NSObject
  53. @property (nonatomic, strong) NSMutableArray * interceptors;
  54. @property (nonatomic, strong) OSSAllRequestNeededMessage * allNeededMessage;
  55. @property (nonatomic, strong) NSMutableURLRequest * internalRequest;
  56. @property (nonatomic, assign) OSSOperationType operType;
  57. @property (nonatomic, assign) BOOL isAccessViaProxy;
  58. @property (nonatomic, assign) BOOL isRequestCancelled;
  59. @property (nonatomic, strong) OSSHttpResponseParser * responseParser;
  60. @property (nonatomic, strong) NSData * uploadingData;
  61. @property (nonatomic, strong) NSURL * uploadingFileURL;
  62. @property (nonatomic, assign) int64_t payloadTotalBytesWritten;
  63. @property (nonatomic, assign) BOOL isBackgroundUploadFileTask;
  64. @property (nonatomic, assign) BOOL isHttpdnsEnable;
  65. @property (nonatomic, strong) OSSURLRequestRetryHandler * retryHandler;
  66. @property (nonatomic, assign) uint32_t currentRetryCount;
  67. @property (nonatomic, strong) NSError * error;
  68. @property (nonatomic, assign) BOOL isHttpRequestNotSuccessResponse;
  69. @property (nonatomic, strong) NSMutableData * httpRequestNotSuccessResponseBody;
  70. @property (atomic, strong) NSURLSessionDataTask * currentSessionTask;
  71. @property (nonatomic, copy) OSSNetworkingUploadProgressBlock uploadProgress;
  72. @property (nonatomic, copy) OSSNetworkingDownloadProgressBlock downloadProgress;
  73. @property (nonatomic, copy) OSSNetworkingCompletionHandlerBlock completionHandler;
  74. @property (nonatomic, copy) OSSNetworkingOnRecieveDataBlock onRecieveData;
  75. - (OSSTask *)buildInternalHttpRequest;
  76. - (void)reset;
  77. - (void)cancel;
  78. @end
  79. /**
  80. 包含一次网络请求所需的所有信息
  81. */
  82. @interface OSSAllRequestNeededMessage : NSObject
  83. @property (nonatomic, strong) NSString * endpoint;
  84. @property (nonatomic, strong) NSString * httpMethod;
  85. @property (nonatomic, strong) NSString * bucketName;
  86. @property (nonatomic, strong) NSString * objectKey;
  87. @property (nonatomic, strong) NSString * contentType;
  88. @property (nonatomic, strong) NSString * contentMd5;
  89. @property (nonatomic, strong) NSString * range;
  90. @property (nonatomic, strong) NSString * date;
  91. @property (nonatomic, strong) NSMutableDictionary * headerParams;
  92. @property (nonatomic, strong) NSMutableDictionary * querys;
  93. @property (nonatomic, assign) BOOL isHostInCnameExcludeList;
  94. - (instancetype)initWithEndpoint:(NSString *)endpoint
  95. httpMethod:(NSString *)httpMethod
  96. bucketName:(NSString *)bucketName
  97. objectKey:(NSString *)objectKey
  98. type:(NSString *)contentType
  99. md5:(NSString *)contentMd5
  100. range:(NSString *)range
  101. date:(NSString *)date
  102. headerParams:(NSMutableDictionary *)headerParams
  103. querys:(NSMutableDictionary *)querys;
  104. - (OSSTask *)validateRequestParamsInOperationType:(OSSOperationType)operType;
  105. @end
  106. /**
  107. 每个OSSClient持有一个OSSNetworking用以收发网络请求
  108. */
  109. @interface OSSNetworking : NSObject <NSURLSessionDelegate>
  110. @property (nonatomic, strong) NSURLSession * dataSession;
  111. @property (nonatomic, strong) NSURLSession * uploadFileSession;
  112. @property (nonatomic, assign) BOOL isUsingBackgroundSession;
  113. @property (nonatomic, strong) OSSSyncMutableDictionary * sessionDelagateManager;
  114. @property (nonatomic, strong) OSSNetworkingConfiguration * configuration;
  115. @property (nonatomic, strong) OSSExecutor * taskExecutor;
  116. - (instancetype)initWithConfiguration:(OSSNetworkingConfiguration *)configuration;
  117. - (OSSTask *)sendRequest:(OSSNetworkingRequestDelegate *)request;
  118. @end