summaryrefslogtreecommitdiff
path: root/main/Main.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-10-10 16:45:24 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-10-13 19:48:22 +0200
commit1ec9f4ae125b72b430683cf4a9dcf0ff8fd176d8 (patch)
tree8cfec0de852d1ecc7350b3e3b82ebb09af8f7f11 /main/Main.hs
parent7af37da0f304be4e458e2bca5b09258b3db66139 (diff)
Accept port for localhost connection in ‘peer-add’ command
Diffstat (limited to 'main/Main.hs')
-rw-r--r--main/Main.hs20
1 files changed, 14 insertions, 6 deletions
diff --git a/main/Main.hs b/main/Main.hs
index 291829b..a3de46a 100644
--- a/main/Main.hs
+++ b/main/Main.hs
@@ -776,17 +776,25 @@ cmdPeers = do
forM_ (zip [1..] peers) $ \(i :: Int, (_, name)) -> do
printSelectOption i $ plainText name
+peerAddressFromText :: (MonadIO m, MonadError ErebosError m) => Text -> m SockAddr
+peerAddressFromText taddr = do
+ ( hostname, port ) <- case words (T.unpack taddr) of
+ hostname : p : _ -> return ( hostname, p )
+ [ single ]
+ | all isDigit single -> return ( "localhost", single )
+ | otherwise -> return ( single, show discoveryPort )
+ [] -> throwOtherError "missing peer address"
+ liftIO (getAddrInfo (Just $ defaultHints { addrSocketType = Datagram }) (Just hostname) (Just port)) >>= \case
+ addr : _ -> return (addrAddress addr)
+ [] -> throwOtherError "address not found"
+
cmdPeerAdd :: Command
cmdPeerAdd = void $ do
server <- asks ciServer
- (hostname, port) <- (words <$> asks ciLine) >>= \case
- hostname:p:_ -> return (hostname, p)
- [hostname] -> return (hostname, show discoveryPort)
- [] -> throwOtherError "missing peer address"
- addr:_ <- liftIO $ getAddrInfo (Just $ defaultHints { addrSocketType = Datagram }) (Just hostname) (Just port)
+ addr <- peerAddressFromText . T.pack =<< asks ciLine
contextOptsVar <- asks ciContextOptionsVar
liftIO $ modifyMVar_ contextOptsVar $ return . first (const $ Just WatchPeers)
- liftIO $ serverPeer server (addrAddress addr)
+ liftIO $ serverPeer server addr
cmdPeerAddPublic :: Command
cmdPeerAddPublic = do