diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-10-10 16:45:24 +0200 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-10-13 19:48:22 +0200 |
| commit | 1ec9f4ae125b72b430683cf4a9dcf0ff8fd176d8 (patch) | |
| tree | 8cfec0de852d1ecc7350b3e3b82ebb09af8f7f11 | |
| parent | 7af37da0f304be4e458e2bca5b09258b3db66139 (diff) | |
Accept port for localhost connection in ‘peer-add’ command
| -rw-r--r-- | main/Main.hs | 20 |
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 |