summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ToxToXMPP.hs39
-rw-r--r--todo.txt2
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
11import Data.Monoid 11import Data.Monoid
12import qualified Data.Text as T 12import qualified Data.Text as T
13 ;import Data.Text (Text) 13 ;import Data.Text (Text)
14import Data.Word
14import Data.Text.Encoding as T 15import Data.Text.Encoding as T
15import Data.XML.Types as XML 16import Data.XML.Types as XML
16import EventUtil 17import EventUtil
@@ -23,17 +24,21 @@ import XMPPServer as XMPP
23toxToXmpp :: Monad m => SockAddr -> PublicKey -> Text -> Conduit Tox.CryptoMessage m XML.Event 24toxToXmpp :: Monad m => SockAddr -> PublicKey -> Text -> Conduit Tox.CryptoMessage m XML.Event
24toxToXmpp laddr me theirhost = do 25toxToXmpp 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
52xmppTyping :: Monad m => Text
53 -> Maybe Text
54 -> Maybe Text
55 -> Word8
56 -> ConduitM i Event m ()
57xmppTyping 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
47xmppInstantMessage :: Monad m => Text 74xmppInstantMessage :: Monad m => Text
48 -> Maybe Text 75 -> Maybe Text
49 -> Maybe Text 76 -> Maybe Text
diff --git a/todo.txt b/todo.txt
index 94fe6cd3..5c5b57b6 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,3 +1,5 @@
1kademlia: when <10 nodes in routing table, save-nodes should merge instead of overwrite.
2
1tox: XEdDSA signature algorithm and key conversion. 3tox: XEdDSA signature algorithm and key conversion.
2 4
3maint: send patch to Vincent Hanquez to implement crypto_box_* 5maint: send patch to Vincent Hanquez to implement crypto_box_*