# -*- Mode: Python -*-
# vim: filetype=python

##
# *****************
# Socket data types
# *****************
##

##
# @NetworkAddressFamily:
#
# The network address family
#
# @ipv4: IPV4 family
#
# @ipv6: IPV6 family
#
# @unix: unix socket
#
# @vsock: vsock family (since 2.8)
#
# @unknown: otherwise
#
# Since: 2.1
##
{ 'enum': 'NetworkAddressFamily',
  'data': [ 'ipv4', 'ipv6', 'unix', 'vsock', 'unknown' ] }

##
# @InetSocketAddressBase:
#
# @host: host part of the address
#
# @port: port part of the address
##
{ 'struct': 'InetSocketAddressBase',
  'data': {
    'host': 'str',
    'port': 'str' } }

##
# @InetSocketAddress:
#
# Captures a socket address or address range in the Internet
# namespace.
#
# @numeric: true if the host/port are guaranteed to be numeric, false
#     if name resolution should be attempted.  Defaults to false.
#     (Since 2.9)
#
# @to: If present, this is range of possible addresses, with port
#     between @port and @to.
#
# @ipv4: whether to accept IPv4 addresses, default try both IPv4 and
#     IPv6
#
# @ipv6: whether to accept IPv6 addresses, default try both IPv4 and
#     IPv6
#
# @keep-alive: enable keep-alive when connecting to/listening on this socket.
#     (Since 4.2, not supported for listening sockets until 10.1)
#
# @keep-alive-count: number of keep-alive packets sent before the connection is
#     closed.  Only supported for TCP sockets on systems where TCP_KEEPCNT
#     socket option is defined (this includes Linux, Windows, macOS, FreeBSD,
#     but not OpenBSD).  When set to 0, system setting is used.  (Since 10.1)
#
# @keep-alive-idle: time in seconds the connection needs to be idle before
#     sending a keepalive packet.  Only supported for TCP sockets on systems
#     where TCP_KEEPIDLE socket option is defined (this includes Linux,
#     Windows, macOS, FreeBSD, but not OpenBSD).  When set to 0, system setting
#     is used.  (Since 10.1)
#
# @keep-alive-interval: time in seconds between keep-alive packets.  Only
#     supported for TCP sockets on systems where TCP_KEEPINTVL is defined (this
#     includes Linux, Windows, macOS, FreeBSD, but not OpenBSD).  When set to
#     0, system setting is used.  (Since 10.1)
#
# @mptcp: enable multi-path TCP.  (Since 6.1)
#
# Since: 1.3
##
{ 'struct': 'InetSocketAddress',
  'base': 'InetSocketAddressBase',
  'data': {
    '*numeric':  'bool',
    '*to': 'uint16',
    '*ipv4': 'bool',
    '*ipv6': 'bool',
    '*keep-alive': 'bool',
    '*keep-alive-count': { 'type': 'uint32', 'if': 'HAVE_TCP_KEEPCNT' },
    '*keep-alive-idle': { 'type': 'uint32', 'if': 'HAVE_TCP_KEEPIDLE' },
    '*keep-alive-interval': { 'type': 'uint32', 'if': 'HAVE_TCP_KEEPINTVL' },
    '*mptcp': { 'type': 'bool', 'if': 'HAVE_IPPROTO_MPTCP' } } }

##
# @UnixSocketAddress:
#
# Captures a socket address in the local ("Unix socket") namespace.
#
# @path: filesystem path to use
#
# @abstract: if true, this is a Linux abstract socket address.  @path
#     will be prefixed by a null byte, and optionally padded with null
#     bytes.  Defaults to false.  (Since 5.1)
#
# @tight: if false, pad an abstract socket address with enough null
#     bytes to make it fill struct sockaddr_un member sun_path.
#     Defaults to true.  (Since 5.1)
#
# Since: 1.3
##
{ 'struct': 'UnixSocketAddress',
  'data': {
    'path': 'str',
    '*abstract': { 'type': 'bool', 'if': 'CONFIG_LINUX' },
    '*tight': { 'type': 'bool', 'if': 'CONFIG_LINUX' } } }

##
# @VsockSocketAddress:
#
# Captures a socket address in the vsock namespace.
#
# @cid: unique host identifier
#
# @port: port
#
# .. note:: String types are used to allow for possible future
#    hostname or service resolution support.
#
# Since: 2.8
##
{ 'struct': 'VsockSocketAddress',
  'data': {
    'cid': 'str',
    'port': 'str' } }

##
# @FdSocketAddress:
#
# A file descriptor name or number.
#
# @str: decimal is for file descriptor number, otherwise it's a file
#     descriptor name.  Named file descriptors are permitted in
#     monitor commands, in combination with the `getfd` command.
#     Decimal file descriptors are permitted at startup or other
#     contexts where no monitor context is active.
#
# Since: 1.2
##
{ 'struct': 'FdSocketAddress',
  'data': {
    'str': 'str' } }

##
# @InetSocketAddressWrapper:
#
# @data: internet domain socket address
#
# Since: 1.3
##
{ 'struct': 'InetSocketAddressWrapper',
  'data': { 'data': 'InetSocketAddress' } }

##
# @UnixSocketAddressWrapper:
#
# @data: UNIX domain socket address
#
# Since: 1.3
##
{ 'struct': 'UnixSocketAddressWrapper',
  'data': { 'data': 'UnixSocketAddress' } }

##
# @VsockSocketAddressWrapper:
#
# @data: VSOCK domain socket address
#
# Since: 2.8
##
{ 'struct': 'VsockSocketAddressWrapper',
  'data': { 'data': 'VsockSocketAddress' } }

##
# @FdSocketAddressWrapper:
#
# @data: file descriptor name or number
#
# Since: 1.3
##
{ 'struct': 'FdSocketAddressWrapper',
  'data': { 'data': 'FdSocketAddress' } }

##
# @SocketAddressLegacy:
#
# Captures the address of a socket, which could also be a named file
# descriptor
#
# @type: Transport type
#
# Since: 1.3
##
{ 'union': 'SocketAddressLegacy',
  'base': { 'type': 'SocketAddressType' },
  'discriminator': 'type',
  'data': {
    'inet': 'InetSocketAddressWrapper',
    'unix': 'UnixSocketAddressWrapper',
    'vsock': 'VsockSocketAddressWrapper',
    'fd': 'FdSocketAddressWrapper' } }
# Note: This type is deprecated in favor of `SocketAddress`.  The
# difference between `SocketAddressLegacy` and `SocketAddress` is that the
# latter has fewer ``{}`` on the wire.

##
# @SocketAddressType:
#
# Available `SocketAddress` types
#
# @inet: Internet address
#
# @unix: Unix domain socket
#
# @vsock: VMCI address
#
# @fd: Socket file descriptor
#
# Since: 2.9
##
{ 'enum': 'SocketAddressType',
  'data': [ 'inet', 'unix', 'vsock', 'fd' ] }

##
# @SocketAddress:
#
# Captures the address of a socket, which could also be a socket file
# descriptor
#
# @type: Transport type
#
# Since: 2.9
##
{ 'union': 'SocketAddress',
  'base': { 'type': 'SocketAddressType' },
  'discriminator': 'type',
  'data': { 'inet': 'InetSocketAddress',
            'unix': 'UnixSocketAddress',
            'vsock': 'VsockSocketAddress',
            'fd': 'FdSocketAddress' } }
