summaryrefslogtreecommitdiff
path: root/src/Network/DatagramServer.hs
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2017-07-10 20:30:10 -0400
committerjoe <joe@jerkface.net>2017-07-10 20:30:10 -0400
commit2fdb0342f8cfcaf4924a0ce43e7fccb236eb0d5e (patch)
treefe013b9d665d6a6c03f6a35af017851f105115c0 /src/Network/DatagramServer.hs
parentc565ec07f37006a5abb7b3bc5a1b08013fbeb5d7 (diff)
Fixed Tox decryption.
Diffstat (limited to 'src/Network/DatagramServer.hs')
-rw-r--r--src/Network/DatagramServer.hs11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/Network/DatagramServer.hs b/src/Network/DatagramServer.hs
index bcf8b9af..55a26e58 100644
--- a/src/Network/DatagramServer.hs
+++ b/src/Network/DatagramServer.hs
@@ -451,14 +451,15 @@ prettyQF e = T.encodeUtf8 $ "handler fail while performing query: "
451-- corresponding 'QueryFailure's. 451-- corresponding 'QueryFailure's.
452-- 452--
453handler :: forall h a b msg raw. (Applicative h, Functor msg, WireFormat raw msg, SerializableTo raw a, SerializableTo raw b) 453handler :: forall h a b msg raw. (Applicative h, Functor msg, WireFormat raw msg, SerializableTo raw a, SerializableTo raw b)
454 => QueryMethod msg -> (SockAddr -> msg a -> h b) -> Handler h msg raw 454 => (SockAddr -> h (NodeId msg)) -> QueryMethod msg -> (SockAddr -> msg a -> h b) -> Handler h msg raw
455handler name body = (name, wrapper) 455handler whoami name body = (name, wrapper)
456 where 456 where
457 wrapper :: SockAddr -> msg raw -> h (Either String (msg raw)) 457 wrapper :: SockAddr -> msg raw -> h (Either String (msg raw))
458 wrapper addr args = 458 wrapper addr args =
459 case decodePayload args of 459 case decodePayload args of
460 Left e -> pure $ Left e 460 Left e -> pure $ Left e
461 Right a -> Right . encodePayload . buildReply (error "self node-id") addr args <$> body addr a 461 Right a -> do
462 (\me bs -> Right $ encodePayload $ buildReply me addr args bs) <$> whoami addr <*> body addr a
462 463
463runHandler :: ( Envelope msg 464runHandler :: ( Envelope msg
464 , Show (QueryMethod msg) 465 , Show (QueryMethod msg)
@@ -528,8 +529,8 @@ handleQuery :: ( WireFormat raw msg
528handleQuery mgr@Manager{..} hs meth raw q addr = void $ fork $ do 529handleQuery mgr@Manager{..} hs meth raw q addr = void $ fork $ do
529 myThreadId >>= liftIO . flip labelThread "KRPC.handleQuery" 530 myThreadId >>= liftIO . flip labelThread "KRPC.handleQuery"
530 res <- dispatchHandler mgr hs meth q addr 531 res <- dispatchHandler mgr hs meth q addr
532 (me,ctx) <- serverState (error "TODO TOX ToxCipherContext 2 or () for Mainline")
531 let res' = either buildError Just res 533 let res' = either buildError Just res
532 ctx = error "TODO TOX ToxCipherContext 2 or () for Mainline"
533 dest = makeAddress (Right q) addr 534 dest = makeAddress (Right q) addr
534 resbs = fmap (\raw -> encodeHeaders ctx raw dest) res' :: Maybe BS.ByteString 535 resbs = fmap (\raw -> encodeHeaders ctx raw dest) res' :: Maybe BS.ByteString
535 -- TODO: Generalize this debug print. 536 -- TODO: Generalize this debug print.
@@ -565,7 +566,7 @@ listener :: forall raw msg.
565 ) => Manager raw msg -> [Handler IO msg raw] -> Protocol raw msg -> IO () 566 ) => Manager raw msg -> [Handler IO msg raw] -> Protocol raw msg -> IO ()
566listener mgr@Manager{..} hs p = do 567listener mgr@Manager{..} hs p = do
567 fix $ \again -> do 568 fix $ \again -> do
568 let ctx = error "TODO TOX ToxCipherContext or () for Mainline" 569 (me, ctx) <- serverState (error "TODO TOX ToxCipherContext or () for Mainline")
569 (bs, addr) <- liftIO $ do 570 (bs, addr) <- liftIO $ do
570 handle exceptions $ BS.recvFrom sock (optMaxMsgSize options) 571 handle exceptions $ BS.recvFrom sock (optMaxMsgSize options)
571 case parsePacket (msgProxy p) bs >>= \r -> (,) r <$> decodeHeaders ctx r of 572 case parsePacket (msgProxy p) bs >>= \r -> (,) r <$> decodeHeaders ctx r of