diff options
Diffstat (limited to 'src/Erebos')
| -rw-r--r-- | src/Erebos/Network.hs | 21 | 
1 files changed, 20 insertions, 1 deletions
| diff --git a/src/Erebos/Network.hs b/src/Erebos/Network.hs index dc3df4b..b26ada5 100644 --- a/src/Erebos/Network.hs +++ b/src/Erebos/Network.hs @@ -1,3 +1,5 @@ +{-# LANGUAGE CPP #-} +  module Erebos.Network (      Server,      startServer, @@ -10,7 +12,10 @@ module Erebos.Network (      PeerIdentity(..), peerIdentity,      WaitingRef, wrDigest,      Service(..), -    serverPeer, serverPeerIce, +    serverPeer, +#ifdef ENABLE_ICE_SUPPORT +    serverPeerIce, +#endif      sendToPeer, sendToPeerStored, sendToPeerWith,      runPeerService, @@ -44,7 +49,9 @@ import Network.Socket hiding (ControlMessage)  import qualified Network.Socket.ByteString as S  import Erebos.Channel +#ifdef ENABLE_ICE_SUPPORT  import Erebos.ICE +#endif  import Erebos.Identity  import Erebos.Network.Protocol  import Erebos.PubKey @@ -127,7 +134,9 @@ instance Eq Peer where      (==) = (==) `on` peerIdentityVar  data PeerAddress = DatagramAddress SockAddr +#ifdef ENABLE_ICE_SUPPORT                   | PeerIceSession IceSession +#endif  instance Show PeerAddress where      show (DatagramAddress saddr) = unwords $ case IP.fromSockAddr saddr of @@ -137,18 +146,24 @@ instance Show PeerAddress where          Just (addr, port)              -> [show addr, show port]          _ -> [show saddr] +#ifdef ENABLE_ICE_SUPPORT      show (PeerIceSession ice) = show ice +#endif  instance Eq PeerAddress where      DatagramAddress addr == DatagramAddress addr' = addr == addr' +#ifdef ENABLE_ICE_SUPPORT      PeerIceSession ice   == PeerIceSession ice'   = ice == ice'      _                    == _                     = False +#endif  instance Ord PeerAddress where      compare (DatagramAddress addr) (DatagramAddress addr') = compare addr addr' +#ifdef ENABLE_ICE_SUPPORT      compare (DatagramAddress _   ) _                       = LT      compare _                      (DatagramAddress _    ) = GT      compare (PeerIceSession ice  ) (PeerIceSession ice')   = compare ice ice' +#endif  data PeerIdentity = PeerIdentityUnknown (TVar [UnifiedIdentity -> ExceptT String IO ()]) @@ -261,7 +276,9 @@ startServer opt serverOrigHead logd' serverServices = do                  (paddr, msg) <- readFlowIO serverRawPath                  case paddr of                      DatagramAddress addr -> void $ S.sendTo sock msg addr +#ifdef ENABLE_ICE_SUPPORT                      PeerIceSession ice   -> iceSend ice msg +#endif              forkServerThread server $ forever $ do                  readFlowIO serverControlFlow >>= \case @@ -655,12 +672,14 @@ serverPeer :: Server -> SockAddr -> IO Peer  serverPeer server paddr = do      serverPeer' server (DatagramAddress paddr) +#ifdef ENABLE_ICE_SUPPORT  serverPeerIce :: Server -> IceSession -> IO Peer  serverPeerIce server@Server {..} ice = do      let paddr = PeerIceSession ice      peer <- serverPeer' server paddr      iceSetChan ice $ mapFlow undefined (paddr,) serverRawPath      return peer +#endif  serverPeer' :: Server -> PeerAddress -> IO Peer  serverPeer' server paddr = do |