123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- //
- // QNHijackingDetectWrapper.m
- // HappyDNS
- //
- // Created by bailong on 15/7/16.
- // Copyright (c) 2015年 Qiniu Cloud Storage. All rights reserved.
- //
- #import "QNHijackingDetectWrapper.h"
- #import "QNDomain.h"
- #import "QNRecord.h"
- #import "QNResolver.h"
- @interface QNHijackingDetectWrapper ()
- @property (nonatomic, readonly) QNResolver *resolver;
- @end
- @implementation QNHijackingDetectWrapper
- - (NSArray *)query:(QNDomain *)domain networkInfo:(QNNetworkInfo *)netInfo error:(NSError *__autoreleasing *)error {
- NSArray *result = [_resolver query:domain networkInfo:netInfo error:error];
- if (((!domain.hasCname) && domain.maxTtl == 0) || result == nil || result.count == 0) {
- return result;
- }
- BOOL hasCname = NO;
- BOOL outOfTtl = NO;
- for (int i = 0; i < result.count; i++) {
- QNRecord *record = [result objectAtIndex:i];
- if (record.type == kQNTypeCname) {
- hasCname = YES;
- }
- if (domain.maxTtl > 0 && record.type == kQNTypeA && record.ttl > domain.maxTtl) {
- outOfTtl = YES;
- }
- }
- if ((domain.hasCname && !hasCname) || outOfTtl) {
- if (error != nil) {
- *error = [[NSError alloc] initWithDomain:domain.domain code:kQNDomainHijackingCode userInfo:nil];
- }
- return nil;
- }
- return result;
- }
- - (instancetype)initWithResolver:(QNResolver *)resolver {
- if (self = [super init]) {
- _resolver = resolver;
- }
- return self;
- }
- @end
|