From aaef1aadb21a198475a656132ef4488b85b8fd1b Mon Sep 17 00:00:00 2001 From: dummy Date: Thu, 3 Jul 2014 23:22:47 +0000 Subject: [PATCH] use android net.dns1 command instead of resolv.conf file Android has no /etc/resolv.conf. Some might have /system/etc/resolv.conf, but even that does not seem likely. This is likely a little slow, but is at least fine for git-annex's uses, since it only uses this library for occasional SRV lookups. --- Network/DNS/Resolver.hs | 11 +++++++++-- dns.cabal | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Network/DNS/Resolver.hs b/Network/DNS/Resolver.hs index e4124b8..7aca431 100644 --- a/Network/DNS/Resolver.hs +++ b/Network/DNS/Resolver.hs @@ -19,7 +19,7 @@ module Network.DNS.Resolver ( ) where import Control.Applicative ((<$>), (<*>), pure) -import Control.Exception (bracket) +import Control.Exception (bracket, catch, IOException) import qualified Data.ByteString.Char8 as BS import Data.Char (isSpace) import Data.List (isPrefixOf) @@ -32,6 +32,7 @@ import Network.Socket (AddrInfoFlag(..), AddrInfo(..), SockAddr(..), PortNumber( import Prelude hiding (lookup) import System.Random (getStdRandom, randomR) import System.Timeout (timeout) +import System.Process #if mingw32_HOST_OS == 1 import Network.Socket (send) @@ -132,7 +133,13 @@ makeResolvSeed conf = ResolvSeed <$> addr addr = case resolvInfo conf of RCHostName numhost -> makeAddrInfo numhost Nothing RCHostPort numhost mport -> makeAddrInfo numhost $ Just mport - RCFilePath file -> toAddr <$> readFile file >>= \i -> makeAddrInfo i Nothing + RCFilePath file -> do + -- Android has no /etc/resolv.conf; use getprop command. + ls <- catch (lines <$> readProcess "getprop" ["net.dns1"] []) (const (return []) :: IOException -> IO [String]) + let addr = case ls of + [] -> "8.8.8.8" -- google public dns as a fallback only + (l:_) -> l + makeAddrInfo addr Nothing toAddr cs = let l:_ = filter ("nameserver" `isPrefixOf`) $ lines cs in extract l extract = reverse . dropWhile isSpace . reverse . dropWhile isSpace . drop 11 diff --git a/dns.cabal b/dns.cabal index 0a08a9e..724a3e0 100644 --- a/dns.cabal +++ b/dns.cabal @@ -38,6 +38,7 @@ Library , network >= 2.3 , random , resourcet + , process else Build-Depends: base >= 4 && < 5 , attoparsec -- 1.7.10.4