diff options
author | joe <joe@jerkface.net> | 2013-06-29 20:23:08 -0400 |
---|---|---|
committer | joe <joe@jerkface.net> | 2013-06-29 20:23:08 -0400 |
commit | 0c0aa967184b5b39f7944f1b901721ff27126a6c (patch) | |
tree | f5c7a765dbae4206b5b3e37a244985c6769c5354 | |
parent | b70a224996222eac816bacced15a3ec7b9c07947 (diff) |
reply to iq-set-session
-rw-r--r-- | Presence/ServerC.hs | 4 | ||||
-rw-r--r-- | Presence/XMPP.hs | 20 |
2 files changed, 22 insertions, 2 deletions
diff --git a/Presence/ServerC.hs b/Presence/ServerC.hs index ae0bf154..b16a0099 100644 --- a/Presence/ServerC.hs +++ b/Presence/ServerC.hs | |||
@@ -125,9 +125,9 @@ packets h = do | |||
125 | 125 | ||
126 | outgoing :: MonadIO m => Handle -> Sink S.ByteString m () | 126 | outgoing :: MonadIO m => Handle -> Sink S.ByteString m () |
127 | outgoing h = do | 127 | outgoing h = do |
128 | liftIO . L.putStrLn $ "outgoing: waiting" | 128 | -- liftIO . L.putStrLn $ "outgoing: waiting" |
129 | mpacket <- await | 129 | mpacket <- await |
130 | liftIO . L.putStrLn $ "outgoing: got packet " <++> bshow mpacket | 130 | -- liftIO . L.putStrLn $ "outgoing: got packet " <++> bshow mpacket |
131 | maybe (return ()) | 131 | maybe (return ()) |
132 | (\r -> (liftIO . S.hPutStrLn h $ r) >> outgoing h) | 132 | (\r -> (liftIO . S.hPutStrLn h $ r) >> outgoing h) |
133 | mpacket | 133 | mpacket |
diff --git a/Presence/XMPP.hs b/Presence/XMPP.hs index e15b10cc..5435c913 100644 --- a/Presence/XMPP.hs +++ b/Presence/XMPP.hs | |||
@@ -282,6 +282,23 @@ handleIQSetBind session cmdChan stanza_id = do | |||
282 | atomically $ writeTChan cmdChan (Send $ iq_bind_reply stanza_id (toStrict $ L.decodeUtf8 $ L.show jid) ) | 282 | atomically $ writeTChan cmdChan (Send $ iq_bind_reply stanza_id (toStrict $ L.decodeUtf8 $ L.show jid) ) |
283 | _ -> unhandledBind | 283 | _ -> unhandledBind |
284 | 284 | ||
285 | |||
286 | iq_session_reply host stanza_id = | ||
287 | [ EventBeginElement "{jabber:client}iq" | ||
288 | [("id",[ContentText stanza_id]) | ||
289 | ,("from",[ContentText host]) | ||
290 | ,("type",[ContentText "result"]) | ||
291 | ] | ||
292 | , EventEndElement "{jabber:client}iq" | ||
293 | ] | ||
294 | |||
295 | handleIQSetSession session cmdChan stanza_id = do | ||
296 | host <- liftIO $ do | ||
297 | jid <- getJID session | ||
298 | names <- getNamesForPeer (peer jid) | ||
299 | return (S.decodeUtf8 . head $ names) | ||
300 | liftIO . atomically . writeTChan cmdChan . Send $ iq_session_reply host stanza_id | ||
301 | |||
285 | handleIQSet session cmdChan tag = do | 302 | handleIQSet session cmdChan tag = do |
286 | withJust (lookupAttrib "id" (tagAttrs tag)) $ \stanza_id -> do | 303 | withJust (lookupAttrib "id" (tagAttrs tag)) $ \stanza_id -> do |
287 | whenJust nextElement $ \child -> do | 304 | whenJust nextElement $ \child -> do |
@@ -289,6 +306,8 @@ handleIQSet session cmdChan tag = do | |||
289 | case tagName child of | 306 | case tagName child of |
290 | "{urn:ietf:params:xml:ns:xmpp-bind}bind" | 307 | "{urn:ietf:params:xml:ns:xmpp-bind}bind" |
291 | -> handleIQSetBind session cmdChan stanza_id | 308 | -> handleIQSetBind session cmdChan stanza_id |
309 | "{urn:ietf:params:xml:ns:xmpp-session}session" | ||
310 | -> handleIQSetSession session cmdChan stanza_id | ||
292 | _ -> unhandledSet | 311 | _ -> unhandledSet |
293 | 312 | ||
294 | matchAttrib name value attrs = | 313 | matchAttrib name value attrs = |
@@ -329,6 +348,7 @@ fromClient session cmdChan = doNestingXML $ do | |||
329 | send $ greet host | 348 | send $ greet host |
330 | 349 | ||
331 | fix $ \loop -> do | 350 | fix $ \loop -> do |
351 | log "waiting for stanza." | ||
332 | whenJust nextElement $ \stanza -> do | 352 | whenJust nextElement $ \stanza -> do |
333 | stanza_lvl <- nesting | 353 | stanza_lvl <- nesting |
334 | 354 | ||