From 719cc5375972fdab189bc1672dfa062e1734f75a Mon Sep 17 00:00:00 2001 From: Mitchell Rosen Date: Sat, 27 Oct 2018 16:51:05 -0500 Subject: Return a dbus error if unknown method or signal --- src/IPC/DBus.hs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/IPC/DBus.hs b/src/IPC/DBus.hs index b9bffd5..f6fdcb7 100644 --- a/src/IPC/DBus.hs +++ b/src/IPC/DBus.hs @@ -17,7 +17,7 @@ module IPC.DBus (runIPC) where import DBus import DBus.Client hiding (interfaceName) import qualified DBus.Client as DC -import Control.Monad (when) +import Data.Maybe (isNothing) import Control.Concurrent.STM import Control.Exception (handle) import System.IO (stderr, hPutStrLn) @@ -57,10 +57,17 @@ sendSignalMethod mvst = makeMethod sendSignalName sendSignalName = memberName_ "SendSignal" sendSignalMethodCall :: MethodCall -> DBusR Reply - sendSignalMethodCall mc = liftIO $ do - when ( methodCallMember mc == sendSignalName ) - $ mapM_ (sendSignal . fromVariant) (methodCallBody mc) - return ( ReplyReturn [] ) + sendSignalMethodCall mc = liftIO $ + if methodCallMember mc == sendSignalName + then do + let signals :: [Maybe SignalType] + signals = map fromVariant (methodCallBody mc) + mapM_ sendSignal signals + if any isNothing signals + then return ( ReplyError errorInvalidParameters [] ) + else return ( ReplyReturn [] ) + else + return ( ReplyError errorUnknownMethod [] ) sendSignal :: Maybe SignalType -> IO () sendSignal = maybe (return ()) (atomically . putTMVar mvst) -- cgit v1.2.3