diff options
author | joe <joe@jerkface.net> | 2018-05-27 01:40:05 -0400 |
---|---|---|
committer | joe <joe@jerkface.net> | 2018-05-27 01:40:05 -0400 |
commit | 735fa5c892700efb78c7a9205b719f064ce429a6 (patch) | |
tree | f51b6e7039af4c59e2bf13667ba416b3e3d09b73 /src/Network/QueryResponse.hs | |
parent | 98000ec40f7ce9adfbc8464ec87d2230345a55d1 (diff) |
WIP: "lan" command to announce this Tox node on the lan.
Diffstat (limited to 'src/Network/QueryResponse.hs')
-rw-r--r-- | src/Network/QueryResponse.hs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/Network/QueryResponse.hs b/src/Network/QueryResponse.hs index 0345dd88..4f65b886 100644 --- a/src/Network/QueryResponse.hs +++ b/src/Network/QueryResponse.hs | |||
@@ -519,14 +519,19 @@ saferSendTo sock bs saddr = void (B.sendTo sock bs saddr) | |||
519 | -- low-level 'Transport' that can be transformed for higher-level protocols | 519 | -- low-level 'Transport' that can be transformed for higher-level protocols |
520 | -- using 'layerTransport'. | 520 | -- using 'layerTransport'. |
521 | udpTransport :: SockAddr -> IO (Transport err SockAddr ByteString) | 521 | udpTransport :: SockAddr -> IO (Transport err SockAddr ByteString) |
522 | udpTransport bind_address = do | 522 | udpTransport bind_address = fst <$> udpTransport' bind_address |
523 | |||
524 | -- | Like 'udpTransport' except also returns the raw socket (for broadcast use). | ||
525 | udpTransport' :: SockAddr -> IO (Transport err SockAddr ByteString, Socket) | ||
526 | udpTransport' bind_address = do | ||
523 | let family = sockAddrFamily bind_address | 527 | let family = sockAddrFamily bind_address |
524 | sock <- socket family Datagram defaultProtocol | 528 | sock <- socket family Datagram defaultProtocol |
525 | when (family == AF_INET6) $ do | 529 | when (family == AF_INET6) $ do |
526 | setSocketOption sock IPv6Only 0 | 530 | setSocketOption sock IPv6Only 0 |
531 | setSocketOption sock Broadcast 1 | ||
527 | bind sock bind_address | 532 | bind sock bind_address |
528 | return Transport | 533 | let tr = Transport { |
529 | { awaitMessage = \kont -> do | 534 | awaitMessage = \kont -> do |
530 | r <- handle (ignoreEOF $ Just $ Right (B.empty, SockAddrInet 0 0)) $ do | 535 | r <- handle (ignoreEOF $ Just $ Right (B.empty, SockAddrInet 0 0)) $ do |
531 | Just . Right <$!> B.recvFrom sock udpBufferSize | 536 | Just . Right <$!> B.recvFrom sock udpBufferSize |
532 | kont $! r | 537 | kont $! r |
@@ -547,3 +552,4 @@ udpTransport bind_address = do | |||
547 | _ -> \addr bs -> saferSendTo sock bs addr | 552 | _ -> \addr bs -> saferSendTo sock bs addr |
548 | , closeTransport = close sock | 553 | , closeTransport = close sock |
549 | } | 554 | } |
555 | return (tr, sock) | ||