@@ -2,10 +2,8 @@ use std::collections::VecDeque;
22use std:: marker:: PhantomData ;
33use std:: net:: IpAddr ;
44
5- use futures:: { Async , Future , Poll } ;
6-
7- use actix_rt:: spawn;
85use actix_service:: Service ;
6+ use futures:: { Async , Future , Poll } ;
97use trust_dns_resolver:: config:: { ResolverConfig , ResolverOpts } ;
108pub use trust_dns_resolver:: error:: ResolveError ;
119use trust_dns_resolver:: lookup_ip:: LookupIpFuture ;
@@ -44,7 +42,7 @@ impl<T: RequestHost> Resolver<T> {
4442 /// Create new resolver instance with custom configuration and options.
4543 pub fn new ( cfg : ResolverConfig , opts : ResolverOpts ) -> Self {
4644 let ( resolver, bg) = AsyncResolver :: new ( cfg, opts) ;
47- spawn ( bg) ;
45+ actix_rt :: Arbiter :: spawn ( bg) ;
4846 Resolver {
4947 resolver,
5048 req : PhantomData ,
@@ -79,7 +77,13 @@ impl<T: RequestHost> Service<T> for Resolver<T> {
7977 }
8078
8179 fn call ( & mut self , req : T ) -> Self :: Future {
82- ResolverFuture :: new ( req, & self . resolver )
80+ if let Ok ( ip) = req. host ( ) . parse ( ) {
81+ let mut addrs = VecDeque :: new ( ) ;
82+ addrs. push_back ( ip) ;
83+ ResolverFuture :: new ( req, & self . resolver , Some ( addrs) )
84+ } else {
85+ ResolverFuture :: new ( req, & self . resolver , None )
86+ }
8387 }
8488}
8589
@@ -92,13 +96,13 @@ pub struct ResolverFuture<T> {
9296}
9397
9498impl < T : RequestHost > ResolverFuture < T > {
95- pub fn new ( addr : T , resolver : & AsyncResolver ) -> Self {
99+ pub fn new ( addr : T , resolver : & AsyncResolver , addrs : Option < VecDeque < IpAddr > > ) -> Self {
96100 // we need to do dns resolution
97101 let lookup = Some ( resolver. lookup_ip ( addr. host ( ) ) ) ;
98102 ResolverFuture {
99103 lookup,
104+ addrs,
100105 req : Some ( addr) ,
101- addrs : None ,
102106 }
103107 }
104108}
0 commit comments