// Copyright 2019 Huawei Technologies Co.,Ltd. // Licensed under the Apache License, Version 2.0 (the "License"); you may not use // this file except in compliance with the License. You may obtain a copy of the // License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software distributed // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR // CONDITIONS OF ANY KIND, either express or implied. See the License for the // specific language governing permissions and limitations under the License. #ifndef OBSBaseNetworking_h #define OBSBaseNetworking_h #import "OBSBaseConstDefinition.h" #import "OBSBaseModel.h" @class OBSBFTaskCompletionSource; @class OBSBFTask; @class OBSBaseRequest; @class OBSEndpoint; @class OBSBaseNetworkingRequest; @class OBSBaseConfiguration; @class OBSAbstractCredentailProvider; @protocol NSURLSessionDelegate; @protocol NSURLSessionDataDelegate; @protocol OBSServiceCredentialProvider; #pragma mark - Networking classes @protocol OBSNetworkingRequestPostProcessor @required +(void)processRequest:(OBSBaseNetworkingRequest*) request configuration:(__kindof OBSBaseConfiguration *const) configuration error:(NSError**) error; @end @protocol OBSNetworkingResponsePreProcessor @required +(void)processResponse:(NSMutableDictionary*) responseDict configuration:(__kindof OBSBaseConfiguration *const) configuration error:(NSError**) error; @end @interface OBSRequestURLStringPostProcessor: NSObject @end @interface OBSResouceParameterPostProcessor: NSObject @end @interface OBSHeaderUAPostProcessor: NSObject @end @interface OBSHeaderContentLengthPostProcessor: NSObject @end @interface OBSHeaderContentTypePostProcessor: NSObject @end @interface OBSHeaderHostPostProcessor: NSObject @end @interface OBSURLEncodingPostProcessor: NSObject @end @protocol OBSNetworkingRequestJSONDataProtocol @required +(NSDictionary*) AdditionalJSONData; +(NSDictionary*) getAdditionalJSONDataIncludeParents; @end #pragma mark - Networking Manager @interface OBSNetworkingManager :NSObject @property (nonatomic, readonly, nonnull) OBSBaseConfiguration *configuration; -(instancetype) initWithConfiguration:(OBSBaseConfiguration*) configuration; -(OBSBFTask*) sendRequest: (OBSBaseNetworkingRequest*) request; -(void)releaseSessions; @end #pragma mark - networking base requests @protocol OBSNetworkingGetResponseClazz @optional -(Class)getResponseClazz; @end @interface OBSBaseNetworkingRequest : OBSAbstractModel //config @property (nonatomic, assign) OBSRequestType requestType; @property (nonatomic, copy, nonnull) NSString *requestID; @property (nonatomic, assign) OBSHTTPMethod requestMethod; @property (nonatomic, strong, nullable) NSString *requestBaseURLString; @property (nonatomic, strong, nullable) NSString *requestResourceString; @property (nonatomic, strong, nullable) NSString *requestOriginalResourceString; @property (nonatomic, strong, nullable) NSMutableDictionary *requestResourceParameters; @property (nonatomic, strong, nullable) NSMutableDictionary *requestQueryParameters; @property (nonatomic, strong, nullable) NSMutableDictionary *requestHeadersParameters; @property (nonatomic, strong, nullable) NSMutableArray *addonRequestPostProcessorsParameters; @property (nonatomic, strong, nullable) NSMutableArray *addonResponsePreProcessorsParameters; //processing attribute @property (nonatomic, strong, nullable) NSData *requestBodyData; @property (nonatomic, strong, nullable) NSMutableData *responseData; @property (nonatomic, strong) NSMutableArray> *postProcessors; @property (nonatomic, strong) NSMutableArray> *preProcessors; @property (nonatomic, strong, nullable) OBSWeakMutableArray *sessionTaskList; @property (nonatomic, strong) OBSBFTaskCompletionSource *completionSource; @property (nonatomic, weak, nullable) OBSBaseRequest *obsRequest; @property (readonly, nonatomic, assign) BOOL isCancelled; -(void)cancel; @end @interface OBSNetworkingCommandRequest : OBSBaseNetworkingRequest @property (nonatomic, strong, nullable) NSMutableDictionary *requestBodyParameters; @end @interface OBSNetworkingUploadDataRequest : OBSBaseNetworkingRequest @property (nonatomic, strong, nonnull) NSData *uploadData; @property (nonatomic, copy, nullable) OBSNetworkingUploadProgressBlock uploadProgressBlock; @end @interface OBSNetworkingUploadFileRequest : OBSBaseNetworkingRequest @property (nonatomic, strong, nonnull) NSString *uploadFilePath; @property (nonatomic, assign) BOOL background; @property (nonatomic, copy, nullable) OBSNetworkingUploadProgressBlock uploadProgressBlock; @end @interface OBSNetworkingDownloadDataRequest : OBSBaseNetworkingRequest @property (nonatomic, copy, nonnull) OBSNetworkingOnReceiveDataBlock onReceiveDataBlock; @property (nonatomic, copy) OBSNetworkingDownloadProgressBlock downloadProgressBlock; @property (nonatomic, assign) int64_t bytes_totalGot; @end @interface OBSNetworkingDownloadFileRequest : OBSBaseNetworkingRequest @property (nonatomic, assign) BOOL background; @property (nonatomic, strong, nonnull) NSString * downloadFilePath; @property (nonatomic, copy) OBSNetworkingDownloadProgressBlock downloadProgressBlock; @end #endif /* OBSBaseNetworking_h */