# -*- 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 this socket.  Not
#     supported for passive sockets.  (Since 4.2)
#
# @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',
    '*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' } }
