packages feed

postmaster-0.3.1: Postmaster/FSM/PeerHelo.hs

{- |
   Module      :  Postmaster.FSM.PeerHelo
   Copyright   :  (c) 2004-2008 by Peter Simons
   License     :  GPL2

   Maintainer  :  simons@cryp.to
   Stability   :  provisional
   Portability :  Haskell 2-pre
 -}

module Postmaster.FSM.PeerHelo where

import Network ( HostName )
import Postmaster.Base
import Text.Parsec.Rfc2821

-- |Local Variable: @PEERHELO :: 'HostName'@

peerHelo :: SmtpdVariable
peerHelo = defineLocal "peerhelo"

-- |Set when 'SayHelo' or 'SayEhlo' succeed.

handlePeerHelo :: EventT
handlePeerHelo f e = do
  r <- f e
  case (e, isSuccess r) of
    (SayEhlo peer, True) -> peerHelo (`setVar` peer)
    (SayHelo peer, True) -> peerHelo (`setVar` peer)
    (_, _)               -> return ()
  return r

-- |Will 'fail' when @PEERHELO@ is not set.

getPeerHelo :: Smtpd HostName
getPeerHelo = peerHelo getVar_