diff options
author | joe <joe@jerkface.net> | 2014-02-12 22:24:47 -0500 |
---|---|---|
committer | joe <joe@jerkface.net> | 2014-02-12 22:24:47 -0500 |
commit | 50e310c03544fd7b2ac0293c38d91831d53a2b67 (patch) | |
tree | daea61a4acf32d0b258cf7672fadb8e325c962f5 | |
parent | 7ccaa169bc2309df7df2db118dd646177867f2b0 (diff) |
Added ConnectFail event
-rw-r--r-- | Presence/Server.hs | 11 | ||||
-rw-r--r-- | xmppServer.hs | 15 |
2 files changed, 24 insertions, 2 deletions
diff --git a/Presence/Server.hs b/Presence/Server.hs index e5ceaf2d..4cbaaa7d 100644 --- a/Presence/Server.hs +++ b/Presence/Server.hs | |||
@@ -145,6 +145,8 @@ data ConnectionEvent b | |||
145 | -- ^ Arrival of data from a socket | 145 | -- ^ Arrival of data from a socket |
146 | | Connection (STM Bool) (IO (Maybe ByteString)) (ByteString -> IO Bool) | 146 | | Connection (STM Bool) (IO (Maybe ByteString)) (ByteString -> IO Bool) |
147 | -- ^ A new connection was established | 147 | -- ^ A new connection was established |
148 | | ConnectFailure SockAddr | ||
149 | -- ^ A 'Connect' command failed. | ||
148 | | HalfConnection InOrOut | 150 | | HalfConnection InOrOut |
149 | -- ^ Half of a half-duplex connection is avaliable. | 151 | -- ^ Half of a half-duplex connection is avaliable. |
150 | | EOF | 152 | | EOF |
@@ -267,7 +269,14 @@ server = do | |||
267 | proto <- getProtocolNumber "tcp" | 269 | proto <- getProtocolNumber "tcp" |
268 | sock <- bracketOnError | 270 | sock <- bracketOnError |
269 | (socket (socketFamily addr) Stream proto) | 271 | (socket (socketFamily addr) Stream proto) |
270 | (sClose . trace "connect-error" ) -- only done if there's an error | 272 | (\sock -> do -- only done if there's an error |
273 | -- Weird hack: puting the would-be peer address | ||
274 | -- instead of local socketName | ||
275 | conkey <- makeConnKey params (sock,addr) -- XXX: ? | ||
276 | sClose sock | ||
277 | atomically | ||
278 | $ writeTChan (serverEvent server) | ||
279 | $ (conkey,ConnectFailure addr)) | ||
271 | $ \sock -> do connect sock addr | 280 | $ \sock -> do connect sock addr |
272 | return sock | 281 | return sock |
273 | me <- getSocketName sock | 282 | me <- getSocketName sock |
diff --git a/xmppServer.hs b/xmppServer.hs index f91c20ce..40c423aa 100644 --- a/xmppServer.hs +++ b/xmppServer.hs | |||
@@ -298,6 +298,8 @@ monitor sv params = do | |||
298 | let (xsrc,xsnk) = xmlStream conread conwrite | 298 | let (xsrc,xsnk) = xmlStream conread conwrite |
299 | forkConnection k pingflag xsrc xsnk stanzas | 299 | forkConnection k pingflag xsrc xsnk stanzas |
300 | return () | 300 | return () |
301 | ConnectFailure addr -> do | ||
302 | wlog $ tomsg k "ConnectFailure" | ||
301 | EOF -> wlog $ tomsg k "EOF" | 303 | EOF -> wlog $ tomsg k "EOF" |
302 | HalfConnection In -> do | 304 | HalfConnection In -> do |
303 | wlog $ tomsg k "ReadOnly" | 305 | wlog $ tomsg k "ReadOnly" |
@@ -323,11 +325,15 @@ data ConnectionKey | |||
323 | deriving (Show, Ord, Eq) | 325 | deriving (Show, Ord, Eq) |
324 | 326 | ||
325 | peerKey (sock,addr) = do | 327 | peerKey (sock,addr) = do |
326 | peer <- getPeerName sock | 328 | peer <- |
329 | sIsBound sock >>= \c -> | ||
330 | if c then getPeerName sock -- addr is normally socketName | ||
331 | else return addr -- Weird hack: addr is would-be peer name | ||
327 | return $ PeerKey (peer `withPort` fromIntegral peerport) | 332 | return $ PeerKey (peer `withPort` fromIntegral peerport) |
328 | 333 | ||
329 | clientKey (sock,addr) = return $ ClientKey addr | 334 | clientKey (sock,addr) = return $ ClientKey addr |
330 | 335 | ||
336 | |||
331 | peerport = 5269 | 337 | peerport = 5269 |
332 | clientport = 5222 | 338 | clientport = 5222 |
333 | 339 | ||
@@ -339,6 +345,13 @@ main = runResourceT $ do | |||
339 | , timeout = 10000 | 345 | , timeout = 10000 |
340 | , duplex = False } | 346 | , duplex = False } |
341 | client_params <- return $ connectionDefaults clientKey | 347 | client_params <- return $ connectionDefaults clientKey |
348 | let testaddr0 = "fd97:ca88:fa7c:b94b:c8b8:fad4:1021:a54d" | ||
349 | testaddr<- fmap (addrAddress . head) $ | ||
350 | getAddrInfo (Just $ defaultHints { addrFlags = [ AI_CANONNAME ]}) | ||
351 | (Just testaddr0) | ||
352 | (Just "5269") | ||
353 | putStrLn $ "Connecting to "++show testaddr | ||
354 | control sv (Connect testaddr peer_params) | ||
342 | forkIO $ monitor sv peer_params | 355 | forkIO $ monitor sv peer_params |
343 | control sv (Listen peerport peer_params) | 356 | control sv (Listen peerport peer_params) |
344 | -- control sv (Listen clientport client_params) | 357 | -- control sv (Listen clientport client_params) |