summaryrefslogtreecommitdiffhomepage
path: root/HTTP
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2017-08-10 14:52:04 -0400
committerJoey Hess <joeyh@joeyh.name>2017-08-10 15:46:47 -0400
commita40c18436fb5a58c1636a0980f704ac8e0e2867c (patch)
tree91379ffaa2135f87f415048c9e9e556cb4eff1e0 /HTTP
parent284c623137035d288abc9ab280969f95285f296f (diff)
downloadkeysafe-a40c18436fb5a58c1636a0980f704ac8e0e2867c.tar.gz
updated to http-client 0.5.3, servant 0.11 and stackage lts-9.0
servant broke backwards compatibility; did not try to maintain back-compat (would be possible). New http-client exported some stuff I need; simplified code; did not try to maintain back-compat, although it would not be hard. Test suite passes. This commit was sponsored by Øyvind Andersen Holm.
Diffstat (limited to 'HTTP')
-rw-r--r--HTTP/Client.hs25
1 files changed, 8 insertions, 17 deletions
diff --git a/HTTP/Client.hs b/HTTP/Client.hs
index 25ff536..9626eab 100644
--- a/HTTP/Client.hs
+++ b/HTTP/Client.hs
@@ -15,11 +15,8 @@ import Servant.API
import Servant.Client
import Data.Proxy
import Network.HTTP.Client hiding (port, host, Proxy)
-import Network.HTTP.Client.Internal (Connection, makeConnection)
-import Control.Monad.Trans.Except (ExceptT, runExceptT)
+import Network.HTTP.Client.Internal (Connection)
import Control.Exception
-import qualified Network.Socket
-import Network.Socket.ByteString (sendAll, recv)
import Network.Socks5
import qualified Data.ByteString.UTF8 as BU8
import Data.List
@@ -28,10 +25,10 @@ import Data.Char
httpAPI :: Proxy HttpAPI
httpAPI = Proxy
-motd :: Manager -> BaseUrl -> ClientM Motd
-getObject :: StorableObjectIdent -> Maybe ProofOfWork -> Manager -> BaseUrl -> ClientM (POWGuarded StorableObject)
-putObject :: StorableObjectIdent -> Maybe ProofOfWork -> StorableObject -> Manager -> BaseUrl -> ClientM (POWGuarded StoreResult)
-countObjects :: Maybe ProofOfWork -> Manager -> BaseUrl -> ClientM (POWGuarded CountResult)
+motd :: ClientM Motd
+getObject :: StorableObjectIdent -> Maybe ProofOfWork -> ClientM (POWGuarded StorableObject)
+putObject :: StorableObjectIdent -> Maybe ProofOfWork -> StorableObject -> ClientM (POWGuarded StoreResult)
+countObjects :: Maybe ProofOfWork -> ClientM (POWGuarded CountResult)
motd :<|> getObject :<|> putObject :<|> countObjects = client httpAPI
tryA :: IO a -> IO (Either SomeException a)
@@ -43,7 +40,7 @@ serverRequest
-> (String -> a)
-> (r -> a)
-> p
- -> (Maybe ProofOfWork -> Manager -> BaseUrl -> ExceptT ServantError IO (POWGuarded r))
+ -> (Maybe ProofOfWork -> ClientM (POWGuarded r))
-> IO a
serverRequest srv onerr onsuccess p a = do
r <- tryA $ go Nothing maxProofOfWork
@@ -69,7 +66,7 @@ serverRequest srv onerr onsuccess p a = do
-- comparing IP addresses (which are masked somewhat by using tor).
serverRequest'
:: Server
- -> (Manager -> BaseUrl -> ExceptT ServantError IO r)
+ -> (ClientM r)
-> IO (Either String r)
serverRequest' srv a = go Nothing (serverUrls srv)
where
@@ -77,7 +74,7 @@ serverRequest' srv a = go Nothing (serverUrls srv)
maybe "no known address" (\err -> "server failure: " ++ show err) lasterr
go _ (url:urls) = do
manager <- torableManager
- res <- runExceptT $ a manager url
+ res <- runClientM a (ClientEnv manager url)
case res of
Left err -> go (Just err) urls
Right r -> return (Right r)
@@ -104,12 +101,6 @@ torConnection onionaddress p = do
socksdomain = SocksAddrDomainName (BU8.fromString onionaddress)
socksaddr = SocksAddress socksdomain (fromIntegral p)
-socketConnection :: Network.Socket.Socket -> Int -> IO Connection
-socketConnection socket chunksize = makeConnection
- (recv socket chunksize)
- (sendAll socket)
- (Network.Socket.close socket)
-
serverUrls :: Server -> [BaseUrl]
serverUrls srv = map go (serverAddress srv)
where