hprox-0.3.0: src/Network/HProx/Util.hs
-- SPDX-License-Identifier: Apache-2.0
--
-- Copyright (C) 2023 Bin Jin. All Rights Reserved.
module Network.HProx.Util
( parseHostPort
, parseHostPortWithDefault
) where
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BS8
import Data.Maybe (fromMaybe)
parseHostPort :: BS.ByteString -> Maybe (BS.ByteString, Int)
parseHostPort hostPort = do
lastColon <- BS8.elemIndexEnd ':' hostPort
port <- BS8.readInt (BS.drop (lastColon+1) hostPort) >>= checkPort
return (BS.take lastColon hostPort, port)
where
checkPort (p, bs)
| BS.null bs && 1 <= p && p <= 65535 = Just p
| otherwise = Nothing
parseHostPortWithDefault :: Int -> BS.ByteString -> (BS.ByteString, Int)
parseHostPortWithDefault defaultPort hostPort =
fromMaybe (hostPort, defaultPort) $ parseHostPort hostPort