module Network.Ident where

import Network.Simple.TCP
import Data.Ident

-- | Start an ident server given a function to
-- build replies
identServer :: HostPreference -> ServiceName -> (PortPair -> IO Reply) -> IO ()
identServer pref serviceName buildReply =
  serve pref serviceName $ \(sock, addr) -> do
    mRequestString <- recv sock 1024
    let
      sendReply portPair = do
        r <- buildReply portPair
        send sock $ renderReply r
    maybe
      (return ())
      sendReply
      $ parsePortPair =<< mRequestString