123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- //
- // OSSNetworking.h
- // oss_ios_sdk
- //
- // Created by zhouzhuo on 8/16/15.
- // Copyright (c) 2015 aliyun.com. All rights reserved.
- //
-
- #import <Foundation/Foundation.h>
- #import "OSSModel.h"
-
- @class OSSSyncMutableDictionary;
- @class OSSNetworkingRequestDelegate;
- @class OSSExecutor;
-
- /**
- 定义重试类型
- */
- typedef NS_ENUM(NSInteger, OSSNetworkingRetryType) {
- OSSNetworkingRetryTypeUnknown,
- OSSNetworkingRetryTypeShouldRetry,
- OSSNetworkingRetryTypeShouldNotRetry,
- OSSNetworkingRetryTypeShouldRefreshCredentialsAndRetry,
- OSSNetworkingRetryTypeShouldCorrectClockSkewAndRetry
- };
-
- /**
- 重试处理器
- */
- @interface OSSURLRequestRetryHandler : NSObject
- @property (nonatomic, assign) uint32_t maxRetryCount;
-
- - (OSSNetworkingRetryType)shouldRetry:(uint32_t)currentRetryCount
- requestDelegate:(OSSNetworkingRequestDelegate *)delegate
- response:(NSHTTPURLResponse *)response
- error:(NSError *)error;
-
- - (NSTimeInterval)timeIntervalForRetry:(uint32_t)currentRetryCount
- retryType:(OSSNetworkingRetryType)retryType;
-
- + (instancetype)defaultRetryHandler;
- @end
-
- /**
- 网络参数设置
- */
- @interface OSSNetworkingConfiguration : NSObject
- @property (nonatomic, assign) uint32_t maxRetryCount;
- @property (nonatomic, assign) uint32_t maxConcurrentRequestCount;
- @property (nonatomic, assign) BOOL enableBackgroundTransmitService;
- @property (nonatomic, strong) NSString * backgroundSessionIdentifier;
- @property (nonatomic, assign) NSTimeInterval timeoutIntervalForRequest;
- @property (nonatomic, assign) NSTimeInterval timeoutIntervalForResource;
- @property (nonatomic, strong) NSString * proxyHost;
- @property (nonatomic, strong) NSNumber * proxyPort;
- @end
-
- /**
- 对操作发起的每一次请求构造一个信息代理
- */
- @interface OSSNetworkingRequestDelegate : NSObject
-
- @property (nonatomic, strong) NSMutableArray * interceptors;
- @property (nonatomic, strong) OSSAllRequestNeededMessage * allNeededMessage;
- @property (nonatomic, strong) NSMutableURLRequest * internalRequest;
- @property (nonatomic, assign) OSSOperationType operType;
- @property (nonatomic, assign) BOOL isAccessViaProxy;
-
- @property (nonatomic, assign) BOOL isRequestCancelled;
-
- @property (nonatomic, strong) OSSHttpResponseParser * responseParser;
-
- @property (nonatomic, strong) NSData * uploadingData;
- @property (nonatomic, strong) NSURL * uploadingFileURL;
-
- @property (nonatomic, assign) int64_t payloadTotalBytesWritten;
-
- @property (nonatomic, assign) BOOL isBackgroundUploadFileTask;
- @property (nonatomic, assign) BOOL isHttpdnsEnable;
-
- @property (nonatomic, strong) OSSURLRequestRetryHandler * retryHandler;
- @property (nonatomic, assign) uint32_t currentRetryCount;
- @property (nonatomic, strong) NSError * error;
- @property (nonatomic, assign) BOOL isHttpRequestNotSuccessResponse;
- @property (nonatomic, strong) NSMutableData * httpRequestNotSuccessResponseBody;
-
- @property (atomic, strong) NSURLSessionDataTask * currentSessionTask;
-
- @property (nonatomic, copy) OSSNetworkingUploadProgressBlock uploadProgress;
- @property (nonatomic, copy) OSSNetworkingDownloadProgressBlock downloadProgress;
- @property (nonatomic, copy) OSSNetworkingCompletionHandlerBlock completionHandler;
- @property (nonatomic, copy) OSSNetworkingOnRecieveDataBlock onRecieveData;
-
- - (OSSTask *)buildInternalHttpRequest;
- - (void)reset;
- - (void)cancel;
- @end
-
- /**
- 包含一次网络请求所需的所有信息
- */
- @interface OSSAllRequestNeededMessage : NSObject
- @property (nonatomic, strong) NSString * endpoint;
- @property (nonatomic, strong) NSString * httpMethod;
- @property (nonatomic, strong) NSString * bucketName;
- @property (nonatomic, strong) NSString * objectKey;
- @property (nonatomic, strong) NSString * contentType;
- @property (nonatomic, strong) NSString * contentMd5;
- @property (nonatomic, strong) NSString * range;
- @property (nonatomic, strong) NSString * date;
- @property (nonatomic, strong) NSMutableDictionary * headerParams;
- @property (nonatomic, strong) NSMutableDictionary * querys;
-
- @property (nonatomic, assign) BOOL isHostInCnameExcludeList;
-
- - (instancetype)initWithEndpoint:(NSString *)endpoint
- httpMethod:(NSString *)httpMethod
- bucketName:(NSString *)bucketName
- objectKey:(NSString *)objectKey
- type:(NSString *)contentType
- md5:(NSString *)contentMd5
- range:(NSString *)range
- date:(NSString *)date
- headerParams:(NSMutableDictionary *)headerParams
- querys:(NSMutableDictionary *)querys;
-
- - (OSSTask *)validateRequestParamsInOperationType:(OSSOperationType)operType;
- @end
-
- /**
- 每个OSSClient持有一个OSSNetworking用以收发网络请求
- */
- @interface OSSNetworking : NSObject <NSURLSessionDelegate>
- @property (nonatomic, strong) NSURLSession * dataSession;
- @property (nonatomic, strong) NSURLSession * uploadFileSession;
- @property (nonatomic, assign) BOOL isUsingBackgroundSession;
- @property (nonatomic, strong) OSSSyncMutableDictionary * sessionDelagateManager;
- @property (nonatomic, strong) OSSNetworkingConfiguration * configuration;
- @property (nonatomic, strong) OSSExecutor * taskExecutor;
-
- - (instancetype)initWithConfiguration:(OSSNetworkingConfiguration *)configuration;
- - (OSSTask *)sendRequest:(OSSNetworkingRequestDelegate *)request;
- @end
|