diff options
Diffstat (limited to 'src/Network/DatagramServer.hs')
-rw-r--r-- | src/Network/DatagramServer.hs | 34 |
1 files changed, 7 insertions, 27 deletions
diff --git a/src/Network/DatagramServer.hs b/src/Network/DatagramServer.hs index e1bf91c5..5c77fb86 100644 --- a/src/Network/DatagramServer.hs +++ b/src/Network/DatagramServer.hs | |||
@@ -62,13 +62,9 @@ | |||
62 | {-# LANGUAGE TemplateHaskell #-} | 62 | {-# LANGUAGE TemplateHaskell #-} |
63 | {-# LANGUAGE KindSignatures #-} | 63 | {-# LANGUAGE KindSignatures #-} |
64 | module Network.DatagramServer | 64 | module Network.DatagramServer |
65 | ( -- * Methods | 65 | ( |
66 | Method | ||
67 | , KRPC (..) | ||
68 | |||
69 | -- * RPC | ||
70 | -- ** Query | 66 | -- ** Query |
71 | , QueryFailure (..) | 67 | QueryFailure (..) |
72 | , query | 68 | , query |
73 | , query' | 69 | , query' |
74 | , queryRaw | 70 | , queryRaw |
@@ -97,7 +93,6 @@ module Network.DatagramServer | |||
97 | ) where | 93 | ) where |
98 | 94 | ||
99 | import Data.Default.Class | 95 | import Data.Default.Class |
100 | import Network.DatagramServer.Mainline | ||
101 | import Network.Socket (SockAddr (..)) | 96 | import Network.Socket (SockAddr (..)) |
102 | 97 | ||
103 | import Control.Applicative | 98 | import Control.Applicative |
@@ -115,11 +110,8 @@ import Control.Monad.Logger | |||
115 | import Control.Monad.Reader | 110 | import Control.Monad.Reader |
116 | import Control.Monad.Trans.Control | 111 | import Control.Monad.Trans.Control |
117 | #ifdef VERSION_bencoding | 112 | #ifdef VERSION_bencoding |
118 | import Data.BEncode as BE | ||
119 | import Data.BEncode.Internal as BE | ||
120 | import Data.BEncode.Pretty (showBEncode) | ||
121 | #else | 113 | #else |
122 | import qualified Network.DatagramServer.Tox as Tox | 114 | -- import qualified Network.DatagramServer.Tox as Tox |
123 | #endif | 115 | #endif |
124 | import qualified Data.ByteString.Base16 as Base16 | 116 | import qualified Data.ByteString.Base16 as Base16 |
125 | import Data.ByteString as BS | 117 | import Data.ByteString as BS |
@@ -136,16 +128,10 @@ import Data.Text.Encoding as T | |||
136 | import Data.Tuple | 128 | import Data.Tuple |
137 | import Data.Typeable | 129 | import Data.Typeable |
138 | import Network.DatagramServer.Types | 130 | import Network.DatagramServer.Types |
139 | import Network.DatagramServer.Mainline | ||
140 | import Network.KRPC.Method hiding (Envelope) | ||
141 | import qualified Network.KRPC.Method as KRPC (Envelope) | ||
142 | import Network.Socket hiding (listen) | 131 | import Network.Socket hiding (listen) |
143 | import Network.Socket.ByteString as BS | 132 | import Network.Socket.ByteString as BS |
144 | import System.IO.Error | 133 | import System.IO.Error |
145 | import System.Timeout | 134 | import System.Timeout |
146 | #ifdef VERSION_bencoding | ||
147 | import Network.DHT.Mainline | ||
148 | #endif | ||
149 | 135 | ||
150 | 136 | ||
151 | {----------------------------------------------------------------------- | 137 | {----------------------------------------------------------------------- |
@@ -356,20 +342,20 @@ sendQuery sock addr q = handle sockError $ sendMessage sock addr q | |||
356 | -- This function should throw 'QueryFailure' exception if quered node | 342 | -- This function should throw 'QueryFailure' exception if quered node |
357 | -- respond with @error@ message or the query timeout expires. | 343 | -- respond with @error@ message or the query timeout expires. |
358 | -- | 344 | -- |
359 | query :: forall h m a b raw msg. (SerializableTo raw b, Show (QueryMethod msg), Ord (TransactionID msg), Serialize (TransactionID msg), SerializableTo raw a, MonadKRPC h m raw msg, WireFormat raw msg, KRPC a b) => QueryMethod msg -> SockAddr -> a -> m b | 345 | query :: forall h m a b raw msg. (SerializableTo raw b, Show (QueryMethod msg), Ord (TransactionID msg), Serialize (TransactionID msg), SerializableTo raw a, MonadKRPC h m raw msg, WireFormat raw msg) => QueryMethod msg -> SockAddr -> a -> m b |
360 | query meth addr params = queryK meth addr params (\_ x _ -> x) | 346 | query meth addr params = queryK meth addr params (\_ x _ -> x) |
361 | 347 | ||
362 | -- | Like 'query' but possibly returns your externally routable IP address. | 348 | -- | Like 'query' but possibly returns your externally routable IP address. |
363 | query' :: forall h m a b raw msg. (SerializableTo raw b, Show (QueryMethod msg), Ord (TransactionID msg), Serialize (TransactionID msg), SerializableTo raw a, MonadKRPC h m raw msg, WireFormat raw msg, KRPC a b) => QueryMethod msg -> SockAddr -> a -> m (b, Maybe ReflectedIP) | 349 | query' :: forall h m a b raw msg. (SerializableTo raw b, Show (QueryMethod msg), Ord (TransactionID msg), Serialize (TransactionID msg), SerializableTo raw a, MonadKRPC h m raw msg, WireFormat raw msg) => QueryMethod msg -> SockAddr -> a -> m (b, Maybe ReflectedIP) |
364 | query' meth addr params = queryK meth addr params (const (,)) | 350 | query' meth addr params = queryK meth addr params (const (,)) |
365 | 351 | ||
366 | -- | Enqueue a query, but give us the complete BEncoded content sent by the | 352 | -- | Enqueue a query, but give us the complete BEncoded content sent by the |
367 | -- remote Node. This is useful for handling extensions that this library does | 353 | -- remote Node. This is useful for handling extensions that this library does |
368 | -- not otherwise support. | 354 | -- not otherwise support. |
369 | queryRaw :: forall h m a b raw msg. (SerializableTo raw b, Show (QueryMethod msg), Ord (TransactionID msg), Serialize (TransactionID msg), SerializableTo raw a, MonadKRPC h m raw msg, WireFormat raw msg, KRPC a b) => QueryMethod msg -> SockAddr -> a -> m (b, raw) | 355 | queryRaw :: forall h m a b raw msg. (SerializableTo raw b, Show (QueryMethod msg), Ord (TransactionID msg), Serialize (TransactionID msg), SerializableTo raw a, MonadKRPC h m raw msg, WireFormat raw msg) => QueryMethod msg -> SockAddr -> a -> m (b, raw) |
370 | queryRaw meth addr params = queryK meth addr params (\raw x _ -> (x,raw)) | 356 | queryRaw meth addr params = queryK meth addr params (\raw x _ -> (x,raw)) |
371 | 357 | ||
372 | queryK :: forall h m a b x raw msg. (SerializableTo raw b, Show (QueryMethod msg), Ord (TransactionID msg), Serialize (TransactionID msg), SerializableTo raw a, MonadKRPC h m raw msg, WireFormat raw msg, KRPC a b) => | 358 | queryK :: forall h m a b x raw msg. (SerializableTo raw b, Show (QueryMethod msg), Ord (TransactionID msg), Serialize (TransactionID msg), SerializableTo raw a, MonadKRPC h m raw msg, WireFormat raw msg) => |
373 | QueryMethod msg -> SockAddr -> a -> (raw -> b -> Maybe ReflectedIP -> x) -> m x | 359 | QueryMethod msg -> SockAddr -> a -> (raw -> b -> Maybe ReflectedIP -> x) -> m x |
374 | queryK meth addr params kont = do | 360 | queryK meth addr params kont = do |
375 | Manager {..} <- getManager | 361 | Manager {..} <- getManager |
@@ -537,7 +523,6 @@ handleQuery meth raw q addr = void $ fork $ do | |||
537 | myThreadId >>= liftIO . flip labelThread "KRPC.handleQuery" | 523 | myThreadId >>= liftIO . flip labelThread "KRPC.handleQuery" |
538 | Manager {..} <- getManager | 524 | Manager {..} <- getManager |
539 | res <- dispatchHandler meth q addr | 525 | res <- dispatchHandler meth q addr |
540 | #ifdef VERSION_bencoding | ||
541 | let res' = either buildError Just res | 526 | let res' = either buildError Just res |
542 | ctx = error "TODO TOX ToxCipherContext 2 or () for Mainline" | 527 | ctx = error "TODO TOX ToxCipherContext 2 or () for Mainline" |
543 | resbs = fmap (encodeHeaders ctx) res' :: Maybe BS.ByteString | 528 | resbs = fmap (encodeHeaders ctx) res' :: Maybe BS.ByteString |
@@ -549,11 +534,6 @@ handleQuery meth raw q addr = void $ fork $ do | |||
549 | -- , either (const "<unicode-fail>") id $ T.decodeUtf8' (BL.toStrict $ showBEncode resbe) | 534 | -- , either (const "<unicode-fail>") id $ T.decodeUtf8' (BL.toStrict $ showBEncode resbe) |
550 | -- ] | 535 | -- ] |
551 | maybe (return ()) (sendMessage sock addr) resbs | 536 | maybe (return ()) (sendMessage sock addr) resbs |
552 | #else | ||
553 | -- Errors not sent for Tox. | ||
554 | let ctx = error "TODO TOX ToxCipherContext 2" | ||
555 | either (const $ return ()) (sendMessage sock addr . encodeHeaders ctx) res | ||
556 | #endif | ||
557 | 537 | ||
558 | handleResponse :: ( MonadKRPC h m raw msg | 538 | handleResponse :: ( MonadKRPC h m raw msg |
559 | , Ord (TransactionID msg) | 539 | , Ord (TransactionID msg) |