gi-gio-2.0.27: Gio bindings

Copyright | Will Thompson Iñaki García Etxebarria and Jonas Platte
License | LGPL-2.1
Maintainer | Iñaki García Etxebarria
Safe Haskell | None
Language | Haskell2010

GI.Gio.Interfaces.NetworkMonitor

Contents

- Exported types
- Methods
  - Overloaded methods
  - canReach
  - canReachAsync
  - canReachFinish
  - getConnectivity
  - getDefault
  - getNetworkAvailable
  - getNetworkMetered
- Properties
  - connectivity
  - networkAvailable
  - networkMetered
- Signals
  - networkChanged

Description

`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

Synopsis

- newtype NetworkMonitor = NetworkMonitor (ManagedPtr NetworkMonitor)
- class (GObject o, IsDescendantOf NetworkMonitor o) => IsNetworkMonitor o
- toNetworkMonitor :: (MonadIO m, IsNetworkMonitor o) => o -> m NetworkMonitor
- networkMonitorCanReach :: (HasCallStack, MonadIO m, IsNetworkMonitor a, IsSocketConnectable b, IsCancellable c) => a -> b -> Maybe c -> m ()
- networkMonitorCanReachAsync :: (HasCallStack, MonadIO m, IsNetworkMonitor a, IsSocketConnectable b, IsCancellable c) => a -> b -> Maybe c -> Maybe AsyncReadyCallback -> m ()
- networkMonitorCanReachFinish :: (HasCallStack, MonadIO m, IsNetworkMonitor a, IsAsyncResult b) => a -> b -> m ()
- networkMonitorGetConnectivity :: (HasCallStack, MonadIO m, IsNetworkMonitor a) => a -> m NetworkConnectivity
- networkMonitorGetDefault :: (HasCallStack, MonadIO m) => m NetworkMonitor
- networkMonitorGetNetworkAvailable :: (HasCallStack, MonadIO m, IsNetworkMonitor a) => a -> m Bool
- networkMonitorGetNetworkMetered :: (HasCallStack, MonadIO m, IsNetworkMonitor a) => a -> m Bool
- getNetworkMonitorConnectivity :: (MonadIO m, IsNetworkMonitor o) => o -> m NetworkConnectivity
- getNetworkMonitorNetworkAvailable :: (MonadIO m, IsNetworkMonitor o) => o -> m Bool
- getNetworkMonitorNetworkMetered :: (MonadIO m, IsNetworkMonitor o) => o -> m Bool
- type C_NetworkMonitorNetworkChangedCallback = Ptr () -> CInt -> Ptr () -> IO ()
- type NetworkMonitorNetworkChangedCallback = Bool -> IO ()
- afterNetworkMonitorNetworkChanged :: (IsNetworkMonitor a, MonadIO m) => a -> NetworkMonitorNetworkChangedCallback -> m SignalHandlerId
- genClosure_NetworkMonitorNetworkChanged :: MonadIO m => NetworkMonitorNetworkChangedCallback -> m (GClosure C_NetworkMonitorNetworkChangedCallback)
- mk_NetworkMonitorNetworkChangedCallback :: C_NetworkMonitorNetworkChangedCallback -> IO (FunPtr C_NetworkMonitorNetworkChangedCallback)
- noNetworkMonitorNetworkChangedCallback :: Maybe NetworkMonitorNetworkChangedCallback
- onNetworkMonitorNetworkChanged :: (IsNetworkMonitor a, MonadIO m) => a -> NetworkMonitorNetworkChangedCallback -> m SignalHandlerId
- wrap_NetworkMonitorNetworkChangedCallback :: NetworkMonitorNetworkChangedCallback -> C_NetworkMonitorNetworkChangedCallback

# Exported types

newtype NetworkMonitor Source #

Memory-managed wrapper type.

Constructors

NetworkMonitor (ManagedPtr NetworkMonitor) |

#### Instances

Instances details

Eq NetworkMonitor Source # |
Instance details Defined in GI.Gio.Interfaces.NetworkMonitor Methods (==) :: NetworkMonitor -> NetworkMonitor -> Bool # (/=) :: NetworkMonitor -> NetworkMonitor -> Bool #
GObject NetworkMonitor Source # |
Instance details Defined in GI.Gio.Interfaces.NetworkMonitor
TypedObject NetworkMonitor Source # |
Instance details Defined in GI.Gio.Interfaces.NetworkMonitor Methods glibType :: IO GType Source #
ManagedPtrNewtype NetworkMonitor Source # |
Instance details Defined in GI.Gio.Interfaces.NetworkMonitor Methods toManagedPtr :: NetworkMonitor -> ManagedPtr NetworkMonitor Source #
IsGValue NetworkMonitor Source # | Convert `NetworkMonitor` to and from `GValue` with `toGValue` and `fromGValue`.
Instance details Defined in GI.Gio.Interfaces.NetworkMonitor Methods toGValue :: NetworkMonitor -> IO GValue Source # fromGValue :: GValue -> IO NetworkMonitor Source #
HasParentTypes NetworkMonitor Source # |
Instance details Defined in GI.Gio.Interfaces.NetworkMonitor
type ParentTypes NetworkMonitor Source # |
Instance details Defined in GI.Gio.Interfaces.NetworkMonitor type ParentTypes NetworkMonitor = '[Initable, Object]

class (GObject o, IsDescendantOf NetworkMonitor o) => IsNetworkMonitor o Source #

Type class for types which can be safely cast to `NetworkMonitor`, for instance with `toNetworkMonitor`.

#### Instances

Instances details

(GObject o, IsDescendantOf NetworkMonitor o) => IsNetworkMonitor o Source # |
Instance details Defined in GI.Gio.Interfaces.NetworkMonitor

toNetworkMonitor :: (MonadIO m, IsNetworkMonitor o) => o -> m NetworkMonitor Source #

Cast to `NetworkMonitor`, for types for which this is known to be safe. For general casts, use `castTo`.

# Methods

## Overloaded methods

## canReach

networkMonitorCanReach Source #

Arguments

:: (HasCallStack, MonadIO m, IsNetworkMonitor a, IsSocketConnectable b, IsCancellable c) |
=> a | `monitor`: a `NetworkMonitor`
-> b | `connectable`: a `SocketConnectable`
-> Maybe c | `cancellable`: a `Cancellable`, or `Nothing`
-> m () | (Can throw `GError`)

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 `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 `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 `networkMonitorCanReachAsync`.

Since: 2.32

## canReachAsync

networkMonitorCanReachAsync Source #

Arguments

:: (HasCallStack, MonadIO m, IsNetworkMonitor a, IsSocketConnectable b, IsCancellable c) |
=> a | `monitor`: a `NetworkMonitor`
-> b | `connectable`: a `SocketConnectable`
-> Maybe c | `cancellable`: a `Cancellable`, or `Nothing`
-> Maybe AsyncReadyCallback | `callback`: a `AsyncReadyCallback` to call when the request is satisfied
-> m () |

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 `networkMonitorCanReach`.

When the operation is finished, `callback` will be called. You can then call `networkMonitorCanReachFinish` to get the result of the operation.

## canReachFinish

networkMonitorCanReachFinish Source #

Arguments

:: (HasCallStack, MonadIO m, IsNetworkMonitor a, IsAsyncResult b) |
=> a | `monitor`: a `NetworkMonitor`
-> b | `result`: a `AsyncResult`
-> m () | (Can throw `GError`)

Finishes an async network connectivity test. See `networkMonitorCanReachAsync`.

## getConnectivity

networkMonitorGetConnectivity Source #

Arguments

:: (HasCallStack, MonadIO m, IsNetworkMonitor a) |
=> a | `monitor`: the `NetworkMonitor`
-> m NetworkConnectivity | Returns: the network connectivity state

Gets a more detailed networking state than `networkMonitorGetNetworkAvailable`.

If `NetworkMonitor`:`network-available` is `False`, then the connectivity state will be `NetworkConnectivityLocal`.

If `NetworkMonitor`:`network-available` is `True`, then the connectivity state will be `NetworkConnectivityFull` (if there is full Internet connectivity), `NetworkConnectivityLimited` (if the host has a default route, but appears to be unable to actually reach the full Internet), or `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 `NetworkConnectivityLimited` and `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

## getDefault

networkMonitorGetDefault Source #

Arguments

:: (HasCallStack, MonadIO m) |
=> m NetworkMonitor | Returns: a `NetworkMonitor`

Gets the default `NetworkMonitor` for the system.

Since: 2.32

## getNetworkAvailable

networkMonitorGetNetworkAvailable Source #

Arguments

:: (HasCallStack, MonadIO m, IsNetworkMonitor a) |
=> a | `monitor`: the `NetworkMonitor`
-> m Bool | Returns: whether the network is available

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 `NetworkMonitor`:`network-available` for more details.

Since: 2.32

## getNetworkMetered

networkMonitorGetNetworkMetered Source #

Arguments

:: (HasCallStack, MonadIO m, IsNetworkMonitor a) |
=> a | `monitor`: the `NetworkMonitor`
-> m Bool | Returns: whether the connection is metered

Checks if the network is metered. See `NetworkMonitor`:`network-metered` for more details.

Since: 2.46

# Properties

## connectivity

More detailed information about the host's network connectivity. See `networkMonitorGetConnectivity` and `NetworkConnectivity` for more details.

Since: 2.44

getNetworkMonitorConnectivity :: (MonadIO m, IsNetworkMonitor o) => o -> m NetworkConnectivity Source #

Get the value of the “`connectivity`” property. When overloading is enabled, this is equivalent to

    get networkMonitor #connectivity

## 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 `networkMonitorCanReach` or `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 networkChanged.

Since: 2.32

getNetworkMonitorNetworkAvailable :: (MonadIO m, IsNetworkMonitor o) => o -> m Bool Source #

Get the value of the “`network-available`” property. When overloading is enabled, this is equivalent to

    get networkMonitor #networkAvailable

## 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 `NetworkMonitor`:`network-available`.

Since: 2.46

getNetworkMonitorNetworkMetered :: (MonadIO m, IsNetworkMonitor o) => o -> m Bool Source #

Get the value of the “`network-metered`” property. When overloading is enabled, this is equivalent to

    get networkMonitor #networkMetered

# Signals

## networkChanged

type C_NetworkMonitorNetworkChangedCallback = Ptr () -> CInt -> Ptr () -> IO () Source #

Type for the callback on the (unwrapped) C side.

type NetworkMonitorNetworkChangedCallback Source #

Arguments

= Bool | `networkAvailable`: the current value of `NetworkMonitor`:`network-available`
-> IO () |

Emitted when the network configuration changes.

Since: 2.32

afterNetworkMonitorNetworkChanged :: (IsNetworkMonitor a, MonadIO m) => a -> NetworkMonitorNetworkChangedCallback -> m SignalHandlerId Source #

Connect a signal handler for the networkChanged signal, to be run after the default handler. When overloading is enabled, this is equivalent to

    after networkMonitor #networkChanged callback

genClosure_NetworkMonitorNetworkChanged :: MonadIO m => NetworkMonitorNetworkChangedCallback -> m (GClosure C_NetworkMonitorNetworkChangedCallback) Source #

Wrap the callback into a `GClosure`.

mk_NetworkMonitorNetworkChangedCallback :: C_NetworkMonitorNetworkChangedCallback -> IO (FunPtr C_NetworkMonitorNetworkChangedCallback) Source #

Generate a function pointer callable from C code, from a `C_NetworkMonitorNetworkChangedCallback`.

noNetworkMonitorNetworkChangedCallback :: Maybe NetworkMonitorNetworkChangedCallback Source #

A convenience synonym for ``Nothing` :: `Maybe` `NetworkMonitorNetworkChangedCallback``.

onNetworkMonitorNetworkChanged :: (IsNetworkMonitor a, MonadIO m) => a -> NetworkMonitorNetworkChangedCallback -> m SignalHandlerId Source #

Connect a signal handler for the networkChanged signal, to be run before the default handler. When overloading is enabled, this is equivalent to

    on networkMonitor #networkChanged callback

wrap_NetworkMonitorNetworkChangedCallback :: NetworkMonitorNetworkChangedCallback -> C_NetworkMonitorNetworkChangedCallback Source #

Wrap a `NetworkMonitorNetworkChangedCallback` into a `C_NetworkMonitorNetworkChangedCallback`.