QNConfiguration.m 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. //
  2. // QNConfiguration.m
  3. // QiniuSDK
  4. //
  5. // Created by bailong on 15/5/21.
  6. // Copyright (c) 2015年 Qiniu. All rights reserved.
  7. //
  8. #import "QNConfiguration.h"
  9. #import "QNResponseInfo.h"
  10. #import "QNUpToken.h"
  11. #import "QNReportConfig.h"
  12. #import "QNAutoZone.h"
  13. const UInt32 kQNBlockSize = 4 * 1024 * 1024;
  14. const UInt32 kQNDefaultDnsCacheTime = 2 * 60;
  15. @implementation QNConfiguration
  16. + (instancetype)defaultConfiguration{
  17. QNConfigurationBuilder *builder = [[QNConfigurationBuilder alloc] init];
  18. return [[QNConfiguration alloc] initWithBuilder:builder];
  19. }
  20. + (instancetype)build:(QNConfigurationBuilderBlock)block {
  21. QNConfigurationBuilder *builder = [[QNConfigurationBuilder alloc] init];
  22. block(builder);
  23. return [[QNConfiguration alloc] initWithBuilder:builder];
  24. }
  25. - (instancetype)initWithBuilder:(QNConfigurationBuilder *)builder {
  26. if (self = [super init]) {
  27. _useConcurrentResumeUpload = builder.useConcurrentResumeUpload;
  28. _resumeUploadVersion = builder.resumeUploadVersion;
  29. _concurrentTaskCount = builder.concurrentTaskCount;
  30. _chunkSize = builder.chunkSize;
  31. if (builder.resumeUploadVersion == QNResumeUploadVersionV1) {
  32. if (_chunkSize < 1024) {
  33. _chunkSize = 1024;
  34. }
  35. } else if (builder.resumeUploadVersion == QNResumeUploadVersionV2) {
  36. if (_chunkSize < 1024 * 1024) {
  37. _chunkSize = 1024 * 1024;
  38. }
  39. }
  40. _putThreshold = builder.putThreshold;
  41. _retryMax = builder.retryMax;
  42. _retryInterval = builder.retryInterval;
  43. _timeoutInterval = builder.timeoutInterval;
  44. _recorder = builder.recorder;
  45. _recorderKeyGen = builder.recorderKeyGen;
  46. _proxy = builder.proxy;
  47. _converter = builder.converter;
  48. _zone = builder.zone;
  49. _useHttps = builder.useHttps;
  50. _allowBackupHost = builder.allowBackupHost;
  51. }
  52. return self;
  53. }
  54. @end
  55. @interface QNGlobalConfiguration()
  56. @property(nonatomic, strong)NSArray *defaultDohIpv4Servers;
  57. @property(nonatomic, strong)NSArray *defaultDohIpv6Servers;
  58. @property(nonatomic, strong)NSArray *defaultUdpDnsIpv4Servers;
  59. @property(nonatomic, strong)NSArray *defaultUdpDnsIpv6Servers;
  60. @end
  61. @implementation QNGlobalConfiguration
  62. + (instancetype)shared{
  63. static QNGlobalConfiguration *config = nil;
  64. static dispatch_once_t onceToken;
  65. dispatch_once(&onceToken, ^{
  66. config = [[QNGlobalConfiguration alloc] init];
  67. [config setupData];
  68. });
  69. return config;
  70. }
  71. - (void)setupData{
  72. _isDnsOpen = YES;
  73. _dnsResolveTimeout = 2;
  74. _dnsCacheDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches/Dns"];
  75. _dnsRepreHostNum = 2;
  76. _dnsCacheTime = kQNDefaultDnsCacheTime;
  77. _dnsCacheMaxTTL = 10*60;
  78. _dohEnable = true;
  79. _defaultDohIpv4Servers = @[@"https://223.6.6.6/dns-query", @"https://8.8.8.8/dns-query"];
  80. _udpDnsEnable = true;
  81. _defaultUdpDnsIpv4Servers = @[@"223.5.5.5", @"114.114.114.114", @"1.1.1.1", @"8.8.8.8"];
  82. _globalHostFrozenTime = 10;
  83. _partialHostFrozenTime = 5*60;
  84. _connectCheckEnable = YES;
  85. _connectCheckTimeout = 2;
  86. _connectCheckURLStrings = @[@"https://www.qiniu.com", @"https://www.baidu.com", @"https://www.google.com"];
  87. }
  88. - (BOOL)isDohEnable {
  89. return _dohEnable && (_dohIpv4Servers.count > 0) ;
  90. }
  91. - (NSArray<NSString *> *)dohIpv4Servers {
  92. if (_dohIpv4Servers) {
  93. return _dohIpv4Servers;
  94. } else {
  95. return _defaultDohIpv4Servers;
  96. }
  97. }
  98. - (NSArray<NSString *> *)dohIpv6Servers {
  99. if (_dohIpv6Servers) {
  100. return _dohIpv6Servers;
  101. } else {
  102. return _defaultDohIpv6Servers;
  103. }
  104. }
  105. - (NSArray<NSString *> *)udpDnsIpv4Servers {
  106. if (_udpDnsIpv4Servers) {
  107. return _udpDnsIpv4Servers;
  108. } else {
  109. return _defaultUdpDnsIpv4Servers;
  110. }
  111. }
  112. - (NSArray<NSString *> *)udpDnsIpv6Servers {
  113. if (_udpDnsIpv6Servers) {
  114. return _udpDnsIpv6Servers;
  115. } else {
  116. return _defaultUdpDnsIpv6Servers;
  117. }
  118. }
  119. - (BOOL)isUdpDnsEnable {
  120. return _udpDnsEnable && (_udpDnsIpv4Servers.count > 0) ;
  121. }
  122. @end
  123. @implementation QNConfigurationBuilder
  124. - (instancetype)init {
  125. if (self = [super init]) {
  126. _zone = [[QNAutoZone alloc] init];
  127. _chunkSize = 2 * 1024 * 1024;
  128. _putThreshold = 4 * 1024 * 1024;
  129. _retryMax = 1;
  130. _timeoutInterval = 90;
  131. _retryInterval = 0.5;
  132. _recorder = nil;
  133. _recorderKeyGen = nil;
  134. _proxy = nil;
  135. _converter = nil;
  136. _useHttps = YES;
  137. _allowBackupHost = YES;
  138. _useConcurrentResumeUpload = NO;
  139. _resumeUploadVersion = QNResumeUploadVersionV1;
  140. _concurrentTaskCount = 3;
  141. }
  142. return self;
  143. }
  144. @end