{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor' provides an easy-to-use cross-platform API for monitoring network connectivity. On Linux, the available implementations are based on the kernel\'s netlink interface and on NetworkManager. There is also an implementation for use inside Flatpak sandboxes. /Since: 2.32/ -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Gio.Interfaces.NetworkMonitor ( -- * Exported types NetworkMonitor(..) , noNetworkMonitor , IsNetworkMonitor , toNetworkMonitor , -- * Methods -- ** canReach #method:canReach# #if ENABLE_OVERLOADING NetworkMonitorCanReachMethodInfo , #endif networkMonitorCanReach , -- ** canReachAsync #method:canReachAsync# #if ENABLE_OVERLOADING NetworkMonitorCanReachAsyncMethodInfo , #endif networkMonitorCanReachAsync , -- ** canReachFinish #method:canReachFinish# #if ENABLE_OVERLOADING NetworkMonitorCanReachFinishMethodInfo , #endif networkMonitorCanReachFinish , -- ** getConnectivity #method:getConnectivity# #if ENABLE_OVERLOADING NetworkMonitorGetConnectivityMethodInfo , #endif networkMonitorGetConnectivity , -- ** getDefault #method:getDefault# networkMonitorGetDefault , -- ** getNetworkAvailable #method:getNetworkAvailable# #if ENABLE_OVERLOADING NetworkMonitorGetNetworkAvailableMethodInfo, #endif networkMonitorGetNetworkAvailable , -- ** getNetworkMetered #method:getNetworkMetered# #if ENABLE_OVERLOADING NetworkMonitorGetNetworkMeteredMethodInfo, #endif networkMonitorGetNetworkMetered , -- * Properties -- ** connectivity #attr:connectivity# {- | More detailed information about the host\'s network connectivity. See 'GI.Gio.Interfaces.NetworkMonitor.networkMonitorGetConnectivity' and 'GI.Gio.Enums.NetworkConnectivity' for more details. /Since: 2.44/ -} #if ENABLE_OVERLOADING NetworkMonitorConnectivityPropertyInfo , #endif getNetworkMonitorConnectivity , #if ENABLE_OVERLOADING networkMonitorConnectivity , #endif -- ** networkAvailable #attr:networkAvailable# {- | Whether the network is considered available. That is, whether the system has a default route for at least one of IPv4 or IPv6. Real-world networks are of course much more complicated than this; the machine may be connected to a wifi hotspot that requires payment before allowing traffic through, or may be connected to a functioning router that has lost its own upstream connectivity. Some hosts might only be accessible when a VPN is active. Other hosts might only be accessible when the VPN is not active. Thus, it is best to use 'GI.Gio.Interfaces.NetworkMonitor.networkMonitorCanReach' or 'GI.Gio.Interfaces.NetworkMonitor.networkMonitorCanReachAsync' to test for reachability on a host-by-host basis. (On the other hand, when the property is 'False', the application can reasonably expect that no remote hosts at all are reachable, and should indicate this to the user in its UI.) See also 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor'::@/network-changed/@. /Since: 2.32/ -} #if ENABLE_OVERLOADING NetworkMonitorNetworkAvailablePropertyInfo, #endif getNetworkMonitorNetworkAvailable , #if ENABLE_OVERLOADING networkMonitorNetworkAvailable , #endif -- ** networkMetered #attr:networkMetered# {- | Whether the network is considered metered. That is, whether the system has traffic flowing through the default connection that is subject to limitations set by service providers. For example, traffic might be billed by the amount of data transmitted, or there might be a quota on the amount of traffic per month. This is typical with tethered connections (3G and 4G) and in such situations, bandwidth intensive applications may wish to avoid network activity where possible if it will cost the user money or use up their limited quota. If more information is required about specific devices then the system network management API should be used instead (for example, NetworkManager or ConnMan). If this information is not available then no networks will be marked as metered. See also 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor':@/network-available/@. /Since: 2.46/ -} #if ENABLE_OVERLOADING NetworkMonitorNetworkMeteredPropertyInfo, #endif getNetworkMonitorNetworkMetered , #if ENABLE_OVERLOADING networkMonitorNetworkMetered , #endif -- * Signals -- ** networkChanged #signal:networkChanged# C_NetworkMonitorNetworkChangedCallback , NetworkMonitorNetworkChangedCallback , #if ENABLE_OVERLOADING NetworkMonitorNetworkChangedSignalInfo , #endif afterNetworkMonitorNetworkChanged , genClosure_NetworkMonitorNetworkChanged , mk_NetworkMonitorNetworkChangedCallback , noNetworkMonitorNetworkChangedCallback , onNetworkMonitorNetworkChanged , wrap_NetworkMonitorNetworkChangedCallback, ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import qualified GHC.OverloadedLabels as OL import qualified GI.GObject.Objects.Object as GObject.Object import qualified GI.Gio.Callbacks as Gio.Callbacks import {-# SOURCE #-} qualified GI.Gio.Enums as Gio.Enums import {-# SOURCE #-} qualified GI.Gio.Interfaces.AsyncResult as Gio.AsyncResult import {-# SOURCE #-} qualified GI.Gio.Interfaces.Initable as Gio.Initable import {-# SOURCE #-} qualified GI.Gio.Interfaces.SocketConnectable as Gio.SocketConnectable import {-# SOURCE #-} qualified GI.Gio.Objects.Cancellable as Gio.Cancellable -- interface NetworkMonitor -- | Memory-managed wrapper type. newtype NetworkMonitor = NetworkMonitor (ManagedPtr NetworkMonitor) -- | A convenience alias for `Nothing` :: `Maybe` `NetworkMonitor`. noNetworkMonitor :: Maybe NetworkMonitor noNetworkMonitor = Nothing -- signal NetworkMonitor::network-changed {- | Emitted when the network configuration changes. /Since: 2.32/ -} type NetworkMonitorNetworkChangedCallback = Bool {- ^ /@networkAvailable@/: the current value of 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor':@/network-available/@ -} -> IO () -- | A convenience synonym for @`Nothing` :: `Maybe` `NetworkMonitorNetworkChangedCallback`@. noNetworkMonitorNetworkChangedCallback :: Maybe NetworkMonitorNetworkChangedCallback noNetworkMonitorNetworkChangedCallback = Nothing -- | Type for the callback on the (unwrapped) C side. type C_NetworkMonitorNetworkChangedCallback = Ptr () -> -- object CInt -> Ptr () -> -- user_data IO () -- | Generate a function pointer callable from C code, from a `C_NetworkMonitorNetworkChangedCallback`. foreign import ccall "wrapper" mk_NetworkMonitorNetworkChangedCallback :: C_NetworkMonitorNetworkChangedCallback -> IO (FunPtr C_NetworkMonitorNetworkChangedCallback) -- | Wrap the callback into a `GClosure`. genClosure_NetworkMonitorNetworkChanged :: MonadIO m => NetworkMonitorNetworkChangedCallback -> m (GClosure C_NetworkMonitorNetworkChangedCallback) genClosure_NetworkMonitorNetworkChanged cb = liftIO $ do let cb' = wrap_NetworkMonitorNetworkChangedCallback cb mk_NetworkMonitorNetworkChangedCallback cb' >>= B.GClosure.newGClosure -- | Wrap a `NetworkMonitorNetworkChangedCallback` into a `C_NetworkMonitorNetworkChangedCallback`. wrap_NetworkMonitorNetworkChangedCallback :: NetworkMonitorNetworkChangedCallback -> C_NetworkMonitorNetworkChangedCallback wrap_NetworkMonitorNetworkChangedCallback _cb _ networkAvailable _ = do let networkAvailable' = (/= 0) networkAvailable _cb networkAvailable' {- | Connect a signal handler for the “@network-changed@” signal, to be run before the default handler. When is enabled, this is equivalent to @ 'Data.GI.Base.Signals.on' networkMonitor #networkChanged callback @ -} onNetworkMonitorNetworkChanged :: (IsNetworkMonitor a, MonadIO m) => a -> NetworkMonitorNetworkChangedCallback -> m SignalHandlerId onNetworkMonitorNetworkChanged obj cb = liftIO $ do let cb' = wrap_NetworkMonitorNetworkChangedCallback cb cb'' <- mk_NetworkMonitorNetworkChangedCallback cb' connectSignalFunPtr obj "network-changed" cb'' SignalConnectBefore {- | Connect a signal handler for the “@network-changed@” signal, to be run after the default handler. When is enabled, this is equivalent to @ 'Data.GI.Base.Signals.after' networkMonitor #networkChanged callback @ -} afterNetworkMonitorNetworkChanged :: (IsNetworkMonitor a, MonadIO m) => a -> NetworkMonitorNetworkChangedCallback -> m SignalHandlerId afterNetworkMonitorNetworkChanged obj cb = liftIO $ do let cb' = wrap_NetworkMonitorNetworkChangedCallback cb cb'' <- mk_NetworkMonitorNetworkChangedCallback cb' connectSignalFunPtr obj "network-changed" cb'' SignalConnectAfter #if ENABLE_OVERLOADING data NetworkMonitorNetworkChangedSignalInfo instance SignalInfo NetworkMonitorNetworkChangedSignalInfo where type HaskellCallbackType NetworkMonitorNetworkChangedSignalInfo = NetworkMonitorNetworkChangedCallback connectSignal _ obj cb connectMode = do let cb' = wrap_NetworkMonitorNetworkChangedCallback cb cb'' <- mk_NetworkMonitorNetworkChangedCallback cb' connectSignalFunPtr obj "network-changed" cb'' connectMode type instance O.SignalList NetworkMonitor = NetworkMonitorSignalList type NetworkMonitorSignalList = ('[ '("networkChanged", NetworkMonitorNetworkChangedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)]) #endif foreign import ccall "g_network_monitor_get_type" c_g_network_monitor_get_type :: IO GType instance GObject NetworkMonitor where gobjectType = c_g_network_monitor_get_type -- | Type class for types which can be safely cast to `NetworkMonitor`, for instance with `toNetworkMonitor`. class (GObject o, O.IsDescendantOf NetworkMonitor o) => IsNetworkMonitor o instance (GObject o, O.IsDescendantOf NetworkMonitor o) => IsNetworkMonitor o instance O.HasParentTypes NetworkMonitor type instance O.ParentTypes NetworkMonitor = '[Gio.Initable.Initable, GObject.Object.Object] -- | Cast to `NetworkMonitor`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`. toNetworkMonitor :: (MonadIO m, IsNetworkMonitor o) => o -> m NetworkMonitor toNetworkMonitor = liftIO . unsafeCastTo NetworkMonitor -- VVV Prop "connectivity" -- Type: TInterface (Name {namespace = "Gio", name = "NetworkConnectivity"}) -- Flags: [PropertyReadable] -- Nullable: (Just False,Nothing) {- | Get the value of the “@connectivity@” property. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' networkMonitor #connectivity @ -} getNetworkMonitorConnectivity :: (MonadIO m, IsNetworkMonitor o) => o -> m Gio.Enums.NetworkConnectivity getNetworkMonitorConnectivity obj = liftIO $ B.Properties.getObjectPropertyEnum obj "connectivity" #if ENABLE_OVERLOADING data NetworkMonitorConnectivityPropertyInfo instance AttrInfo NetworkMonitorConnectivityPropertyInfo where type AttrAllowedOps NetworkMonitorConnectivityPropertyInfo = '[ 'AttrGet] type AttrSetTypeConstraint NetworkMonitorConnectivityPropertyInfo = (~) () type AttrBaseTypeConstraint NetworkMonitorConnectivityPropertyInfo = IsNetworkMonitor type AttrGetType NetworkMonitorConnectivityPropertyInfo = Gio.Enums.NetworkConnectivity type AttrLabel NetworkMonitorConnectivityPropertyInfo = "connectivity" type AttrOrigin NetworkMonitorConnectivityPropertyInfo = NetworkMonitor attrGet _ = getNetworkMonitorConnectivity attrSet _ = undefined attrConstruct _ = undefined attrClear _ = undefined #endif -- VVV Prop "network-available" -- Type: TBasicType TBoolean -- Flags: [PropertyReadable] -- Nullable: (Just False,Nothing) {- | Get the value of the “@network-available@” property. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' networkMonitor #networkAvailable @ -} getNetworkMonitorNetworkAvailable :: (MonadIO m, IsNetworkMonitor o) => o -> m Bool getNetworkMonitorNetworkAvailable obj = liftIO $ B.Properties.getObjectPropertyBool obj "network-available" #if ENABLE_OVERLOADING data NetworkMonitorNetworkAvailablePropertyInfo instance AttrInfo NetworkMonitorNetworkAvailablePropertyInfo where type AttrAllowedOps NetworkMonitorNetworkAvailablePropertyInfo = '[ 'AttrGet] type AttrSetTypeConstraint NetworkMonitorNetworkAvailablePropertyInfo = (~) () type AttrBaseTypeConstraint NetworkMonitorNetworkAvailablePropertyInfo = IsNetworkMonitor type AttrGetType NetworkMonitorNetworkAvailablePropertyInfo = Bool type AttrLabel NetworkMonitorNetworkAvailablePropertyInfo = "network-available" type AttrOrigin NetworkMonitorNetworkAvailablePropertyInfo = NetworkMonitor attrGet _ = getNetworkMonitorNetworkAvailable attrSet _ = undefined attrConstruct _ = undefined attrClear _ = undefined #endif -- VVV Prop "network-metered" -- Type: TBasicType TBoolean -- Flags: [PropertyReadable] -- Nullable: (Just False,Nothing) {- | Get the value of the “@network-metered@” property. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' networkMonitor #networkMetered @ -} getNetworkMonitorNetworkMetered :: (MonadIO m, IsNetworkMonitor o) => o -> m Bool getNetworkMonitorNetworkMetered obj = liftIO $ B.Properties.getObjectPropertyBool obj "network-metered" #if ENABLE_OVERLOADING data NetworkMonitorNetworkMeteredPropertyInfo instance AttrInfo NetworkMonitorNetworkMeteredPropertyInfo where type AttrAllowedOps NetworkMonitorNetworkMeteredPropertyInfo = '[ 'AttrGet] type AttrSetTypeConstraint NetworkMonitorNetworkMeteredPropertyInfo = (~) () type AttrBaseTypeConstraint NetworkMonitorNetworkMeteredPropertyInfo = IsNetworkMonitor type AttrGetType NetworkMonitorNetworkMeteredPropertyInfo = Bool type AttrLabel NetworkMonitorNetworkMeteredPropertyInfo = "network-metered" type AttrOrigin NetworkMonitorNetworkMeteredPropertyInfo = NetworkMonitor attrGet _ = getNetworkMonitorNetworkMetered attrSet _ = undefined attrConstruct _ = undefined attrClear _ = undefined #endif #if ENABLE_OVERLOADING instance O.HasAttributeList NetworkMonitor type instance O.AttributeList NetworkMonitor = NetworkMonitorAttributeList type NetworkMonitorAttributeList = ('[ '("connectivity", NetworkMonitorConnectivityPropertyInfo), '("networkAvailable", NetworkMonitorNetworkAvailablePropertyInfo), '("networkMetered", NetworkMonitorNetworkMeteredPropertyInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING networkMonitorConnectivity :: AttrLabelProxy "connectivity" networkMonitorConnectivity = AttrLabelProxy networkMonitorNetworkAvailable :: AttrLabelProxy "networkAvailable" networkMonitorNetworkAvailable = AttrLabelProxy networkMonitorNetworkMetered :: AttrLabelProxy "networkMetered" networkMonitorNetworkMetered = AttrLabelProxy #endif #if ENABLE_OVERLOADING type family ResolveNetworkMonitorMethod (t :: Symbol) (o :: *) :: * where ResolveNetworkMonitorMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo ResolveNetworkMonitorMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo ResolveNetworkMonitorMethod "canReach" o = NetworkMonitorCanReachMethodInfo ResolveNetworkMonitorMethod "canReachAsync" o = NetworkMonitorCanReachAsyncMethodInfo ResolveNetworkMonitorMethod "canReachFinish" o = NetworkMonitorCanReachFinishMethodInfo ResolveNetworkMonitorMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo ResolveNetworkMonitorMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo ResolveNetworkMonitorMethod "getv" o = GObject.Object.ObjectGetvMethodInfo ResolveNetworkMonitorMethod "init" o = Gio.Initable.InitableInitMethodInfo ResolveNetworkMonitorMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo ResolveNetworkMonitorMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo ResolveNetworkMonitorMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo ResolveNetworkMonitorMethod "ref" o = GObject.Object.ObjectRefMethodInfo ResolveNetworkMonitorMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo ResolveNetworkMonitorMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo ResolveNetworkMonitorMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo ResolveNetworkMonitorMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo ResolveNetworkMonitorMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo ResolveNetworkMonitorMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo ResolveNetworkMonitorMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo ResolveNetworkMonitorMethod "getConnectivity" o = NetworkMonitorGetConnectivityMethodInfo ResolveNetworkMonitorMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo ResolveNetworkMonitorMethod "getNetworkAvailable" o = NetworkMonitorGetNetworkAvailableMethodInfo ResolveNetworkMonitorMethod "getNetworkMetered" o = NetworkMonitorGetNetworkMeteredMethodInfo ResolveNetworkMonitorMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo ResolveNetworkMonitorMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo ResolveNetworkMonitorMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo ResolveNetworkMonitorMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo ResolveNetworkMonitorMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveNetworkMonitorMethod t NetworkMonitor, O.MethodInfo info NetworkMonitor p) => OL.IsLabel t (NetworkMonitor -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif -- method NetworkMonitor::can_reach -- method type : OrdinaryMethod -- Args : [Arg {argCName = "monitor", argType = TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GNetworkMonitor", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "connectable", argType = TInterface (Name {namespace = "Gio", name = "SocketConnectable"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GSocketConnectable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GCancellable, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : True -- Skip return : False foreign import ccall "g_network_monitor_can_reach" g_network_monitor_can_reach :: Ptr NetworkMonitor -> -- monitor : TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}) Ptr Gio.SocketConnectable.SocketConnectable -> -- connectable : TInterface (Name {namespace = "Gio", name = "SocketConnectable"}) Ptr Gio.Cancellable.Cancellable -> -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"}) Ptr (Ptr GError) -> -- error IO CInt {- | Attempts to determine whether or not the host pointed to by /@connectable@/ can be reached, without actually trying to connect to it. This may return 'True' even when 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor':@/network-available/@ is 'False', if, for example, /@monitor@/ can determine that /@connectable@/ refers to a host on a local network. If /@monitor@/ believes that an attempt to connect to /@connectable@/ will succeed, it will return 'True'. Otherwise, it will return 'False' and set /@error@/ to an appropriate error (such as 'GI.Gio.Enums.IOErrorEnumHostUnreachable'). Note that although this does not attempt to connect to /@connectable@/, it may still block for a brief period of time (eg, trying to do multicast DNS on the local network), so if you do not want to block, you should use 'GI.Gio.Interfaces.NetworkMonitor.networkMonitorCanReachAsync'. /Since: 2.32/ -} networkMonitorCanReach :: (B.CallStack.HasCallStack, MonadIO m, IsNetworkMonitor a, Gio.SocketConnectable.IsSocketConnectable b, Gio.Cancellable.IsCancellable c) => a {- ^ /@monitor@/: a 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor' -} -> b {- ^ /@connectable@/: a 'GI.Gio.Interfaces.SocketConnectable.SocketConnectable' -} -> Maybe (c) {- ^ /@cancellable@/: a 'GI.Gio.Objects.Cancellable.Cancellable', or 'Nothing' -} -> m () {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -} networkMonitorCanReach monitor connectable cancellable = liftIO $ do monitor' <- unsafeManagedPtrCastPtr monitor connectable' <- unsafeManagedPtrCastPtr connectable maybeCancellable <- case cancellable of Nothing -> return nullPtr Just jCancellable -> do jCancellable' <- unsafeManagedPtrCastPtr jCancellable return jCancellable' onException (do _ <- propagateGError $ g_network_monitor_can_reach monitor' connectable' maybeCancellable touchManagedPtr monitor touchManagedPtr connectable whenJust cancellable touchManagedPtr return () ) (do return () ) #if ENABLE_OVERLOADING data NetworkMonitorCanReachMethodInfo instance (signature ~ (b -> Maybe (c) -> m ()), MonadIO m, IsNetworkMonitor a, Gio.SocketConnectable.IsSocketConnectable b, Gio.Cancellable.IsCancellable c) => O.MethodInfo NetworkMonitorCanReachMethodInfo a signature where overloadedMethod _ = networkMonitorCanReach #endif -- method NetworkMonitor::can_reach_async -- method type : OrdinaryMethod -- Args : [Arg {argCName = "monitor", argType = TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GNetworkMonitor", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "connectable", argType = TInterface (Name {namespace = "Gio", name = "SocketConnectable"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GSocketConnectable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GCancellable, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GAsyncReadyCallback to call when the\n request is satisfied", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = 4, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the data to pass to callback function", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "g_network_monitor_can_reach_async" g_network_monitor_can_reach_async :: Ptr NetworkMonitor -> -- monitor : TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}) Ptr Gio.SocketConnectable.SocketConnectable -> -- connectable : TInterface (Name {namespace = "Gio", name = "SocketConnectable"}) Ptr Gio.Cancellable.Cancellable -> -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"}) FunPtr Gio.Callbacks.C_AsyncReadyCallback -> -- callback : TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"}) Ptr () -> -- user_data : TBasicType TPtr IO () {- | Asynchronously attempts to determine whether or not the host pointed to by /@connectable@/ can be reached, without actually trying to connect to it. For more details, see 'GI.Gio.Interfaces.NetworkMonitor.networkMonitorCanReach'. When the operation is finished, /@callback@/ will be called. You can then call 'GI.Gio.Interfaces.NetworkMonitor.networkMonitorCanReachFinish' to get the result of the operation. -} networkMonitorCanReachAsync :: (B.CallStack.HasCallStack, MonadIO m, IsNetworkMonitor a, Gio.SocketConnectable.IsSocketConnectable b, Gio.Cancellable.IsCancellable c) => a {- ^ /@monitor@/: a 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor' -} -> b {- ^ /@connectable@/: a 'GI.Gio.Interfaces.SocketConnectable.SocketConnectable' -} -> Maybe (c) {- ^ /@cancellable@/: a 'GI.Gio.Objects.Cancellable.Cancellable', or 'Nothing' -} -> Maybe (Gio.Callbacks.AsyncReadyCallback) {- ^ /@callback@/: a 'GI.Gio.Callbacks.AsyncReadyCallback' to call when the request is satisfied -} -> m () networkMonitorCanReachAsync monitor connectable cancellable callback = liftIO $ do monitor' <- unsafeManagedPtrCastPtr monitor connectable' <- unsafeManagedPtrCastPtr connectable maybeCancellable <- case cancellable of Nothing -> return nullPtr Just jCancellable -> do jCancellable' <- unsafeManagedPtrCastPtr jCancellable return jCancellable' maybeCallback <- case callback of Nothing -> return (castPtrToFunPtr nullPtr) Just jCallback -> do ptrcallback <- callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback)) jCallback' <- Gio.Callbacks.mk_AsyncReadyCallback (Gio.Callbacks.wrap_AsyncReadyCallback (Just ptrcallback) (Gio.Callbacks.drop_closures_AsyncReadyCallback jCallback)) poke ptrcallback jCallback' return jCallback' let userData = nullPtr g_network_monitor_can_reach_async monitor' connectable' maybeCancellable maybeCallback userData touchManagedPtr monitor touchManagedPtr connectable whenJust cancellable touchManagedPtr return () #if ENABLE_OVERLOADING data NetworkMonitorCanReachAsyncMethodInfo instance (signature ~ (b -> Maybe (c) -> Maybe (Gio.Callbacks.AsyncReadyCallback) -> m ()), MonadIO m, IsNetworkMonitor a, Gio.SocketConnectable.IsSocketConnectable b, Gio.Cancellable.IsCancellable c) => O.MethodInfo NetworkMonitorCanReachAsyncMethodInfo a signature where overloadedMethod _ = networkMonitorCanReachAsync #endif -- method NetworkMonitor::can_reach_finish -- method type : OrdinaryMethod -- Args : [Arg {argCName = "monitor", argType = TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GNetworkMonitor", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "result", argType = TInterface (Name {namespace = "Gio", name = "AsyncResult"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GAsyncResult", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : True -- Skip return : False foreign import ccall "g_network_monitor_can_reach_finish" g_network_monitor_can_reach_finish :: Ptr NetworkMonitor -> -- monitor : TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}) Ptr Gio.AsyncResult.AsyncResult -> -- result : TInterface (Name {namespace = "Gio", name = "AsyncResult"}) Ptr (Ptr GError) -> -- error IO CInt {- | Finishes an async network connectivity test. See 'GI.Gio.Interfaces.NetworkMonitor.networkMonitorCanReachAsync'. -} networkMonitorCanReachFinish :: (B.CallStack.HasCallStack, MonadIO m, IsNetworkMonitor a, Gio.AsyncResult.IsAsyncResult b) => a {- ^ /@monitor@/: a 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor' -} -> b {- ^ /@result@/: a 'GI.Gio.Interfaces.AsyncResult.AsyncResult' -} -> m () {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -} networkMonitorCanReachFinish monitor result_ = liftIO $ do monitor' <- unsafeManagedPtrCastPtr monitor result_' <- unsafeManagedPtrCastPtr result_ onException (do _ <- propagateGError $ g_network_monitor_can_reach_finish monitor' result_' touchManagedPtr monitor touchManagedPtr result_ return () ) (do return () ) #if ENABLE_OVERLOADING data NetworkMonitorCanReachFinishMethodInfo instance (signature ~ (b -> m ()), MonadIO m, IsNetworkMonitor a, Gio.AsyncResult.IsAsyncResult b) => O.MethodInfo NetworkMonitorCanReachFinishMethodInfo a signature where overloadedMethod _ = networkMonitorCanReachFinish #endif -- method NetworkMonitor::get_connectivity -- method type : OrdinaryMethod -- Args : [Arg {argCName = "monitor", argType = TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GNetworkMonitor", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gio", name = "NetworkConnectivity"})) -- throws : False -- Skip return : False foreign import ccall "g_network_monitor_get_connectivity" g_network_monitor_get_connectivity :: Ptr NetworkMonitor -> -- monitor : TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}) IO CUInt {- | Gets a more detailed networking state than 'GI.Gio.Interfaces.NetworkMonitor.networkMonitorGetNetworkAvailable'. If 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor':@/network-available/@ is 'False', then the connectivity state will be 'GI.Gio.Enums.NetworkConnectivityLocal'. If 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor':@/network-available/@ is 'True', then the connectivity state will be 'GI.Gio.Enums.NetworkConnectivityFull' (if there is full Internet connectivity), 'GI.Gio.Enums.NetworkConnectivityLimited' (if the host has a default route, but appears to be unable to actually reach the full Internet), or 'GI.Gio.Enums.NetworkConnectivityPortal' (if the host is trapped behind a \"captive portal\" that requires some sort of login or acknowledgement before allowing full Internet access). Note that in the case of 'GI.Gio.Enums.NetworkConnectivityLimited' and 'GI.Gio.Enums.NetworkConnectivityPortal', it is possible that some sites are reachable but others are not. In this case, applications can attempt to connect to remote servers, but should gracefully fall back to their \"offline\" behavior if the connection attempt fails. /Since: 2.44/ -} networkMonitorGetConnectivity :: (B.CallStack.HasCallStack, MonadIO m, IsNetworkMonitor a) => a {- ^ /@monitor@/: the 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor' -} -> m Gio.Enums.NetworkConnectivity {- ^ __Returns:__ the network connectivity state -} networkMonitorGetConnectivity monitor = liftIO $ do monitor' <- unsafeManagedPtrCastPtr monitor result <- g_network_monitor_get_connectivity monitor' let result' = (toEnum . fromIntegral) result touchManagedPtr monitor return result' #if ENABLE_OVERLOADING data NetworkMonitorGetConnectivityMethodInfo instance (signature ~ (m Gio.Enums.NetworkConnectivity), MonadIO m, IsNetworkMonitor a) => O.MethodInfo NetworkMonitorGetConnectivityMethodInfo a signature where overloadedMethod _ = networkMonitorGetConnectivity #endif -- method NetworkMonitor::get_network_available -- method type : OrdinaryMethod -- Args : [Arg {argCName = "monitor", argType = TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GNetworkMonitor", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : False -- Skip return : False foreign import ccall "g_network_monitor_get_network_available" g_network_monitor_get_network_available :: Ptr NetworkMonitor -> -- monitor : TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}) IO CInt {- | Checks if the network is available. \"Available\" here means that the system has a default route available for at least one of IPv4 or IPv6. It does not necessarily imply that the public Internet is reachable. See 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor':@/network-available/@ for more details. /Since: 2.32/ -} networkMonitorGetNetworkAvailable :: (B.CallStack.HasCallStack, MonadIO m, IsNetworkMonitor a) => a {- ^ /@monitor@/: the 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor' -} -> m Bool {- ^ __Returns:__ whether the network is available -} networkMonitorGetNetworkAvailable monitor = liftIO $ do monitor' <- unsafeManagedPtrCastPtr monitor result <- g_network_monitor_get_network_available monitor' let result' = (/= 0) result touchManagedPtr monitor return result' #if ENABLE_OVERLOADING data NetworkMonitorGetNetworkAvailableMethodInfo instance (signature ~ (m Bool), MonadIO m, IsNetworkMonitor a) => O.MethodInfo NetworkMonitorGetNetworkAvailableMethodInfo a signature where overloadedMethod _ = networkMonitorGetNetworkAvailable #endif -- method NetworkMonitor::get_network_metered -- method type : OrdinaryMethod -- Args : [Arg {argCName = "monitor", argType = TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GNetworkMonitor", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : False -- Skip return : False foreign import ccall "g_network_monitor_get_network_metered" g_network_monitor_get_network_metered :: Ptr NetworkMonitor -> -- monitor : TInterface (Name {namespace = "Gio", name = "NetworkMonitor"}) IO CInt {- | Checks if the network is metered. See 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor':@/network-metered/@ for more details. /Since: 2.46/ -} networkMonitorGetNetworkMetered :: (B.CallStack.HasCallStack, MonadIO m, IsNetworkMonitor a) => a {- ^ /@monitor@/: the 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor' -} -> m Bool {- ^ __Returns:__ whether the connection is metered -} networkMonitorGetNetworkMetered monitor = liftIO $ do monitor' <- unsafeManagedPtrCastPtr monitor result <- g_network_monitor_get_network_metered monitor' let result' = (/= 0) result touchManagedPtr monitor return result' #if ENABLE_OVERLOADING data NetworkMonitorGetNetworkMeteredMethodInfo instance (signature ~ (m Bool), MonadIO m, IsNetworkMonitor a) => O.MethodInfo NetworkMonitorGetNetworkMeteredMethodInfo a signature where overloadedMethod _ = networkMonitorGetNetworkMetered #endif -- method NetworkMonitor::get_default -- method type : MemberFunction -- Args : [] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gio", name = "NetworkMonitor"})) -- throws : False -- Skip return : False foreign import ccall "g_network_monitor_get_default" g_network_monitor_get_default :: IO (Ptr NetworkMonitor) {- | Gets the default 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor' for the system. /Since: 2.32/ -} networkMonitorGetDefault :: (B.CallStack.HasCallStack, MonadIO m) => m NetworkMonitor {- ^ __Returns:__ a 'GI.Gio.Interfaces.NetworkMonitor.NetworkMonitor' -} networkMonitorGetDefault = liftIO $ do result <- g_network_monitor_get_default checkUnexpectedReturnNULL "networkMonitorGetDefault" result result' <- (newObject NetworkMonitor) result return result' #if ENABLE_OVERLOADING #endif