Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

DTLSServer

Hereda: RefCounted < Object

Clase de ayuda para implementar un servidor DTLS.

Descripción

Esta clase se utiliza para almacenar el estado de un servidor DTLS. Tras llamar a setup(), convierte los PacketPeerUDP conectados en PacketPeerDTLS, aceptándolos a través de take_connection() como clientes DTLS. Internamente, esta clase se utiliza para almacenar el estado DTLS y las cookies del servidor. El motivo por el cual el estado y las cookies son necesarios queda fuera del alcance de esta documentación.

A continuación, un pequeño ejemplo de cómo utilizarla:

# server_node.gd
extends Node

var dtls = DTLSServer.new()
var server = UDPServer.new()
var peers = []

func _ready():
    server.listen(4242)
    var key = load("key.key") # Su llave privada.
    var cert = load("cert.crt") # Su certificado X509.
    dtls.setup(TlsOptions.server(key, cert))

func _process(delta):
    while server.is_connection_available():
        var peer = server.take_connection()
        var dtls_peer = dtls.take_connection(peer)
        if dtls_peer.get_status() != PacketPeerDTLS.STATUS_HANDSHAKING:
            continue # Es normal que el 50% de las conexiones fallen debido al intercambio de cookies.
        print("¡Par conectado!")
        peers.append(dtls_peer)

    for p in peers:
        p.poll() # Debe llamar a poll para actualizar el estado.
        if p.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
            while p.get_available_packet_count() > 0:
                print("Mensaje recibido del cliente: %s" % p.get_packet().get_string_from_utf8())
                p.put_packet("Hola cliente DTLS".to_utf8_buffer())
# client_node.gd
extends Node

var dtls = PacketPeerDTLS.new()
var udp = PacketPeerUDP.new()
var connected = false

func _ready():
    udp.connect_to_host("127.0.0.1", 4242)
    dtls.connect_to_peer(udp, false) # ¡Use true en producción para la validación de certificados!

func _process(delta):
    dtls.poll()
    if dtls.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
        if !connected:
            # Intentar contactar con el servidor
            dtls.put_packet("La respuesta es... ¡42!".to_utf8_buffer())
        while dtls.get_available_packet_count() > 0:
            print("Conectado: %s" % dtls.get_packet().get_string_from_utf8())
            connected = true

Métodos

Error

setup(server_options: TLSOptions)

PacketPeerDTLS

take_connection(udp_peer: PacketPeerUDP)


Descripciones de Métodos

Error setup(server_options: TLSOptions) 🔗

Setup the DTLS server to use the given server_options. See TLSOptions.server().


PacketPeerDTLS take_connection(udp_peer: PacketPeerUDP) 🔗

Try to initiate the DTLS handshake with the given udp_peer which must be already connected (see PacketPeerUDP.connect_to_host()).

Note: You must check that the state of the return PacketPeerUDP is PacketPeerDTLS.STATUS_HANDSHAKING, as it is normal that 50% of the new connections will be invalid due to cookie exchange.