BBAAPIRequestConfiguration.h 3.4 KB
//
//  BBAAPIRequestConfiguration.h
//  BBAPods
//
//  Created by mengxiangping on 16/12/16.
//  Copyright © 2016年 Baidu. All rights reserved.
//

#import <Foundation/Foundation.h>

@class BBAProbeLogInfo;
@class BBABaseAPIRequest;
@class BBANetworkProbeScheduler;

typedef BOOL(^APIRequestProbeTriggerFilter)(NSError *error, NSTimeInterval ttfbMs, NSTimeInterval durationMs);
typedef void(^APIRequestProbeRecorder)(BBAProbeLogInfo *probeLog, BBANetworkProbeScheduler *probeScheduler);

//  外部注册DNS解析服务回调block (探测时使用)
typedef NSArray<NSString *>* (^APIRequestDnsResolve)(NSString *domain);

@interface BBAAPIRequestConfiguration : NSObject

+ (BBAAPIRequestConfiguration *)sharedInstance;

@property (nonatomic, assign) NSInteger maxConcurrent;

@property (nonatomic, copy) NSDictionary *maxOperationCountsOfComponents;

#pragma mark - Network Probe (sdt)

@property (nonatomic, assign, getter=isNetworkProbeEnable) BOOL networkProbeEnable;
@property (nonatomic, assign, getter=getContinuousFailureCheckCount) int32_t continuousFailureCheckCount;
@property (nonatomic, assign, getter=getContinuousSuccessCheckCount) int32_t continuousSuccessCheckCount;
@property (nonatomic, assign, getter=getWeakNetTime) double weakNetTime; // 单位:微秒
@property (nonatomic, assign, getter=getGoodNetTime) double goodNetTime; // 单位:微秒
@property (nonatomic, copy) NSArray<NSString *> *probeDomains;
@property (nonatomic, copy) NSArray<NSString *> *quicDomains;
@property (nonatomic, assign, getter=getQuicFailThreshold) int32_t quicFailThreshold;
@property (nonatomic, copy) APIRequestProbeTriggerFilter failProbeFilter; // 探测过滤器
@property (nonatomic, copy) APIRequestProbeRecorder probeRecorder; // 探测打点器
@property (nonatomic, copy) APIRequestDnsResolve dnsResolver; /// 外部注入DNS域名解析服务
@property (nonatomic, assign) BOOL enableLANetworkInfoLog;  //  是否在日志中记录局域网信息
@property (nonatomic, assign) BOOL enableDnsProbeFailOver;  //  是否开启DNS探测失败时进行容错
@property (nonatomic, assign) BOOL enableNonAPIRequestProbe;    //  是否允许非APIRequest请求触发探测 (SDWebImage、Talos请求)

- (void)setJudgeConfig:(NSString *)judgeConfig; //  质量判断配置信息

@property (nonatomic, strong, readonly) NSArray <NSNumber *> *dnsErrorCodeForBad;               // 需要判断为Bad质量网络的DNS Quary错误码列表
@property (nonatomic, strong, readonly) NSArray <NSNumber *> *pingErrorCodeForBad;              // 需要判断为Bad质量网络的Ping错误码列表
@property (nonatomic, strong, readonly) NSArray <NSNumber *> *dnsErrorCodeForOffline;           // 需要判断为Offline的DNS Query错误码列表
@property (nonatomic, strong, readonly) NSArray <NSNumber *> *pingErrorCodeForOffline;          // 需要判断为Offline的Ping错误码列表
@property (nonatomic, strong, readonly) NSArray <NSNumber *> *dnsSubErrorCodeForOfflineExcluded;    // 需要在判断为Offline时豁免的DNS Query子错误码列表
@property (nonatomic, strong, readonly) NSArray <NSNumber *> *pingSubErrorCodeForOfflineExcluded;   // 需要在判断为Offline时豁免的Ping子错误码列表
@property (nonatomic, strong, readonly) NSArray <NSNumber *> *dnsSubErrorCodeForLocalPermission;    // 可能会造成权限问题的DNS Query子错误码列表

#pragma mark - Utils Method

- (BOOL)checkNumberArrayValid:(NSArray <NSNumber *> *)numArr;

@end