diff options
-rw-r--r-- | ToxToXMPP.hs | 39 | ||||
-rw-r--r-- | todo.txt | 2 |
2 files changed, 35 insertions, 6 deletions
diff --git a/ToxToXMPP.hs b/ToxToXMPP.hs index 1493827a..9e72da72 100644 --- a/ToxToXMPP.hs +++ b/ToxToXMPP.hs | |||
@@ -11,6 +11,7 @@ import qualified Data.Conduit.List as CL | |||
11 | import Data.Monoid | 11 | import Data.Monoid |
12 | import qualified Data.Text as T | 12 | import qualified Data.Text as T |
13 | ;import Data.Text (Text) | 13 | ;import Data.Text (Text) |
14 | import Data.Word | ||
14 | import Data.Text.Encoding as T | 15 | import Data.Text.Encoding as T |
15 | import Data.XML.Types as XML | 16 | import Data.XML.Types as XML |
16 | import EventUtil | 17 | import EventUtil |
@@ -23,17 +24,21 @@ import XMPPServer as XMPP | |||
23 | toxToXmpp :: Monad m => SockAddr -> PublicKey -> Text -> Conduit Tox.CryptoMessage m XML.Event | 24 | toxToXmpp :: Monad m => SockAddr -> PublicKey -> Text -> Conduit Tox.CryptoMessage m XML.Event |
24 | toxToXmpp laddr me theirhost = do | 25 | toxToXmpp laddr me theirhost = do |
25 | CL.sourceList $ XMPP.greet' "jabber:server" theirhost | 26 | CL.sourceList $ XMPP.greet' "jabber:server" theirhost |
26 | let me_u = T.pack $ show (key2id me) | 27 | let me_u = T.pack $ show (key2id me) |
28 | im_from = (Just $ "root@" <> theirhost) -- /from/ | ||
29 | im_to = (Just $ unsplitJID | ||
30 | ( Just me_u | ||
31 | -- /to/ should match local address of this node. | ||
32 | , T.pack (show laddr) | ||
33 | , Nothing)) | ||
27 | awaitForever $ \case | 34 | awaitForever $ \case |
28 | 35 | ||
29 | UpToN { msgID = MESSAGE | 36 | UpToN { msgID = MESSAGE |
30 | , msgBytes = bs } | 37 | , msgBytes = bs } |
31 | -> do | 38 | -> do |
32 | xmppInstantMessage "jabber:server" | 39 | xmppInstantMessage "jabber:server" im_from im_to [] (T.decodeUtf8 bs) |
33 | (Just $ "root@" <> theirhost) -- /from/ | 40 | |
34 | (Just $ unsplitJID (Just me_u,T.pack (show laddr),Nothing)) -- /to/ should match local address of this node. | 41 | TwoByte TYPING st -> xmppTyping "jabber:server" im_from im_to st |
35 | [] | ||
36 | (T.decodeUtf8 bs) | ||
37 | 42 | ||
38 | toxmsg | msgID toxmsg == PacketRequest -> return () | 43 | toxmsg | msgID toxmsg == PacketRequest -> return () |
39 | 44 | ||
@@ -44,6 +49,28 @@ toxToXmpp laddr me theirhost = do | |||
44 | [ attr "style" "font-weight:bold; color:red" ] | 49 | [ attr "style" "font-weight:bold; color:red" ] |
45 | (T.pack $ show $ msgID toxmsg) | 50 | (T.pack $ show $ msgID toxmsg) |
46 | 51 | ||
52 | xmppTyping :: Monad m => Text | ||
53 | -> Maybe Text | ||
54 | -> Maybe Text | ||
55 | -> Word8 | ||
56 | -> ConduitM i Event m () | ||
57 | xmppTyping namespace mfrom mto x = | ||
58 | let ns n = n { nameNamespace = Just namespace } | ||
59 | st = case x of | ||
60 | 0 -> "{http://jabber.org/protocol/chatstates}active" | ||
61 | 1 -> "{http://jabber.org/protocol/chatstates}composing" | ||
62 | -- tox-core supports only 0 and 1 | ||
63 | _ -> "{http://jabber.org/protocol/chatstates}paused" | ||
64 | in mapM_ C.yield | ||
65 | [ EventBeginElement (ns "message") | ||
66 | ( maybe id (\t->(attr "from" t:)) mfrom | ||
67 | $ maybe id (\t->(attr "to" t:)) mto | ||
68 | $ [attr "type" "chat" ] ) | ||
69 | , EventBeginElement st [] | ||
70 | , EventEndElement st | ||
71 | , EventEndElement (ns "message") | ||
72 | ] | ||
73 | |||
47 | xmppInstantMessage :: Monad m => Text | 74 | xmppInstantMessage :: Monad m => Text |
48 | -> Maybe Text | 75 | -> Maybe Text |
49 | -> Maybe Text | 76 | -> Maybe Text |
@@ -1,3 +1,5 @@ | |||
1 | kademlia: when <10 nodes in routing table, save-nodes should merge instead of overwrite. | ||
2 | |||
1 | tox: XEdDSA signature algorithm and key conversion. | 3 | tox: XEdDSA signature algorithm and key conversion. |
2 | 4 | ||
3 | maint: send patch to Vincent Hanquez to implement crypto_box_* | 5 | maint: send patch to Vincent Hanquez to implement crypto_box_* |