QNServerConfig.m 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. //
  2. // QNServerConfig.m
  3. // QiniuSDK
  4. //
  5. // Created by yangsen on 2021/8/30.
  6. // Copyright © 2021 Qiniu. All rights reserved.
  7. //
  8. #import "QNServerConfig.h"
  9. @interface QNServerRegionConfig()
  10. @property(nonatomic, assign)long clearId;
  11. @property(nonatomic, assign)BOOL clearCache;
  12. @end
  13. @implementation QNServerRegionConfig
  14. + (instancetype)config:(NSDictionary *)info {
  15. QNServerRegionConfig *config = [[QNServerRegionConfig alloc] init];
  16. config.clearId = [info[@"clear_id"] longValue];
  17. config.clearCache = [info[@"clear_cache"] longValue];
  18. return config;
  19. }
  20. @end
  21. @interface QNServerDnsServer()
  22. @property(nonatomic, assign)BOOL isOverride;
  23. @property(nonatomic, strong)NSArray <NSString *> *servers;
  24. @end
  25. @implementation QNServerDnsServer
  26. + (instancetype)config:(NSDictionary *)info {
  27. QNServerDnsServer *config = [[QNServerDnsServer alloc] init];
  28. config.isOverride = [info[@"override_default"] boolValue];
  29. if (info[@"ips"] && [info[@"ips"] isKindOfClass:[NSArray class]]) {
  30. config.servers = info[@"ips"];
  31. } else if ([info[@"urls"] isKindOfClass:[NSArray class]]){
  32. config.servers = info[@"urls"];
  33. }
  34. return config;
  35. }
  36. @end
  37. @interface QNServerDohConfig()
  38. @property(nonatomic, strong)NSNumber *enable;
  39. @property(nonatomic, strong)QNServerDnsServer *ipv4Server;
  40. @property(nonatomic, strong)QNServerDnsServer *ipv6Server;
  41. @end
  42. @implementation QNServerDohConfig
  43. + (instancetype)config:(NSDictionary *)info {
  44. QNServerDohConfig *config = [[QNServerDohConfig alloc] init];
  45. config.enable = info[@"enabled"];
  46. config.ipv4Server = [QNServerDnsServer config:info[@"ipv4"]];
  47. config.ipv6Server = [QNServerDnsServer config:info[@"ipv6"]];
  48. return config;
  49. }
  50. @end
  51. @interface QNServerUdpDnsConfig()
  52. @property(nonatomic, strong)NSNumber *enable;
  53. @property(nonatomic, strong)QNServerDnsServer *ipv4Server;
  54. @property(nonatomic, strong)QNServerDnsServer *ipv6Server;
  55. @end
  56. @implementation QNServerUdpDnsConfig
  57. + (instancetype)config:(NSDictionary *)info {
  58. QNServerUdpDnsConfig *config = [[QNServerUdpDnsConfig alloc] init];
  59. config.enable = info[@"enabled"];
  60. config.ipv4Server = [QNServerDnsServer config:info[@"ipv4"]];
  61. config.ipv6Server = [QNServerDnsServer config:info[@"ipv6"]];
  62. return config;
  63. }
  64. @end
  65. @interface QNServerDnsConfig()
  66. @property(nonatomic, strong)NSNumber *enable;
  67. @property(nonatomic, assign)long clearId;
  68. @property(nonatomic, assign)BOOL clearCache;
  69. @property(nonatomic, strong)QNServerUdpDnsConfig *udpConfig;
  70. @property(nonatomic, strong)QNServerDohConfig *dohConfig;
  71. @end
  72. @implementation QNServerDnsConfig
  73. + (instancetype)config:(NSDictionary *)info {
  74. QNServerDnsConfig *config = [[QNServerDnsConfig alloc] init];
  75. config.enable = info[@"enabled"];
  76. config.clearId = [info[@"clear_id"] longValue];
  77. config.clearCache = [info[@"clear_cache"] longValue];
  78. config.dohConfig = [QNServerDohConfig config:info[@"doh"]];
  79. config.udpConfig = [QNServerUdpDnsConfig config:info[@"udp"]];
  80. return config;
  81. }
  82. @end
  83. @interface QNServerConfig()
  84. @property(nonatomic, strong)NSDictionary *info;
  85. @property(nonatomic, assign)double timestamp;
  86. @property(nonatomic, assign)long ttl;
  87. @property(nonatomic, strong)QNServerRegionConfig *regionConfig;
  88. @property(nonatomic, strong)QNServerDnsConfig *dnsConfig;
  89. @end
  90. @implementation QNServerConfig
  91. + (instancetype)config:(NSDictionary *)info {
  92. QNServerConfig *config = [[QNServerConfig alloc] init];
  93. config.ttl = [info[@"ttl"] longValue];
  94. config.regionConfig = [QNServerRegionConfig config:info[@"region"]];
  95. config.dnsConfig = [QNServerDnsConfig config:info[@"dns"]];
  96. if (config.ttl < 10) {
  97. config.ttl = 10;
  98. }
  99. NSMutableDictionary *mutableInfo = [info mutableCopy];
  100. if (info[@"timestamp"] != nil) {
  101. config.timestamp = [info[@"timestamp"] doubleValue];
  102. }
  103. if (config.timestamp == 0) {
  104. config.timestamp = [[NSDate date] timeIntervalSince1970];
  105. mutableInfo[@"timestamp"] = @(config.timestamp);
  106. }
  107. config.info = [mutableInfo copy];
  108. return config;
  109. }
  110. - (BOOL)isValid {
  111. return [[NSDate date] timeIntervalSince1970] < (self.timestamp + self.ttl);
  112. }
  113. @end