QNDnsManager.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. //
  2. // QNDnsManager.h
  3. // HappyDNS
  4. //
  5. // Created by bailong on 15/6/23.
  6. // Copyright (c) 2015年 Qiniu Cloud Storage. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. @class QNNetworkInfo;
  10. @class QNDomain;
  11. /**
  12. * getaddrinfo 回调上层的函数
  13. *
  14. * @param host 请求的域名
  15. * @return ip 列表
  16. */
  17. typedef NSArray * (^QNGetAddrInfoCallback)(NSString *host);
  18. /**
  19. * ip status 回调上层的函数
  20. *
  21. * @param ip 请求的IP
  22. * @param code 错误码
  23. * @param ms 消耗时间
  24. */
  25. typedef void (^QNIpStatusCallback)(NSString *ip, int code, int ms);
  26. /**
  27. * 外部IP 排序接口
  28. */
  29. @protocol QNIpSorter <NSObject>
  30. /**
  31. * 排序方法
  32. *
  33. * @param ips 传入的IP列表
  34. *
  35. * @return 返回排序好的IP 列表
  36. */
  37. - (NSArray *)sort:(NSArray *)ips;
  38. @end
  39. /**
  40. * DNS请求客户端,集成了cache管理
  41. */
  42. @interface QNDnsManager : NSObject
  43. /**
  44. * 解析域名
  45. *
  46. * @param domain 域名
  47. *
  48. * @return IP列表
  49. */
  50. - (NSArray *)query:(NSString *)domain;
  51. /**
  52. * 解析域名,使用Domain对象进行详细约定
  53. *
  54. * @param domain 配置了一些domain 参数的 domain 对象
  55. *
  56. * @return IP 列表
  57. */
  58. - (NSArray *)queryWithDomain:(QNDomain *)domain;
  59. /**
  60. * 通知网络发生变化
  61. *
  62. * @param netInfo 网络信息
  63. */
  64. - (void)onNetworkChange:(QNNetworkInfo *)netInfo;
  65. /**
  66. * Dns client 初始化
  67. *
  68. * @param resolvers 解析服务器列表
  69. * @param netInfo 当前网络信息
  70. *
  71. * @return DnsManager
  72. */
  73. - (instancetype)init:(NSArray *)resolvers networkInfo:(QNNetworkInfo *)netInfo;
  74. /**
  75. * Dns client 初始化
  76. *
  77. * @param resolvers 解析服务器列表
  78. * @param netInfo 当前网络信息
  79. * @param sorter 外部排序函数
  80. *
  81. * @return DnsManager
  82. */
  83. - (instancetype)init:(NSArray *)resolvers networkInfo:(QNNetworkInfo *)netInfo sorter:(id<QNIpSorter>)sorter;
  84. /**
  85. * 内置 Hosts 解析
  86. *
  87. * @param domain 域名
  88. * @param ip 对应IP
  89. *
  90. * @return 当前Dnsmanager, 为了链式调用
  91. */
  92. - (instancetype)putHosts:(NSString *)domain ip:(NSString *)ip;
  93. /**
  94. * 内置 Hosts 解析
  95. *
  96. * @param domain 域名
  97. * @param ip 对应IP
  98. * @param provider 网络运营商
  99. *
  100. * @return 当前Dnsmanager, 为了链式调用
  101. */
  102. - (instancetype)putHosts:(NSString *)domain ip:(NSString *)ip provider:(int)provider;
  103. /**
  104. * 设置底层 getaddrinfo 使用的回调
  105. *
  106. * @param block 回调的代码块
  107. */
  108. + (void)setGetAddrInfoBlock:(QNGetAddrInfoCallback)block;
  109. /**
  110. * 设置底层 getaddrinfo 回调使用的dnsmanager
  111. *
  112. * @param dns 回调用的dnsmanager
  113. */
  114. + (void)setDnsManagerForGetAddrInfo:(QNDnsManager *)dns;
  115. /**
  116. * 设置底层 业务统计 如connect 回调使用的Callback
  117. *
  118. * @param block 回调返回该IP状态
  119. */
  120. + (void)setIpStatusCallback:(QNIpStatusCallback)block;
  121. /**
  122. * 根据时区判断是否要设置httpDns
  123. *
  124. */
  125. + (BOOL)needHttpDns;
  126. @end
  127. /**
  128. * DnsManager 的 URL 辅助类
  129. */
  130. @interface QNDnsManager (NSURL)
  131. /**
  132. * 使用URL 进行请求
  133. *
  134. * @param url 请求的Url
  135. *
  136. * @return 返回IP 替换过的url
  137. */
  138. - (NSURL *)queryAndReplaceWithIP:(NSURL *)url;
  139. @end