# -*- 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' } }
