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

Eredita: RefCounted < Object

Classe di supporto per implementare un server DTLS.

Descrizione

Questa classe serve per memorizzare lo stato di un server DTLS. Dopo aver chiamato setup(), converte i PacketPeerUDP connessi in PacketPeerDTLS accettandoli tramite take_connection() come client DTLS. Internamente, questa classe serve per memorizzare lo stato DTLS e i cookie del server. Il motivo per cui lo stato e i cookie sono necessari è al di fuori dell'ambito di questa documentazione.

Di seguito un piccolo esempio di come utilizzarla:

# 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") # La tua chiave privata.
    var cert = load("cert.crt") # Il tuo certificato 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 # È normale che il 50% delle connessioni falliscano a causa dello scambio di cookie.
        print("Peer connesso!")
        peers.append(dtls_peer)

    for p in peers:
        p.poll() # È necessario effettuare un polling per aggiornare lo stato.
        if p.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
            while p.get_available_packet_count() > 0:
                print("Ricevuto messaggio da un cliente: %s" % p.get_packet().get_string_from_utf8())
                p.put_packet("Ciao 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) # Utilizza true in produzione per convalidare il certificato!

func _process(delta):
    dtls.poll()
    if dtls.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
        if !connected:
            # Prova di contattare il server
            dtls.put_packet("La risposta è... 42!".to_utf8_buffer())
        while dtls.get_available_packet_count() > 0:
            print("Connected: %s" % dtls.get_packet().get_string_from_utf8())
            connected = true

Metodi

Error

setup(server_options: TLSOptions)

PacketPeerDTLS

take_connection(udp_peer: PacketPeerUDP)


Descrizioni dei metodi

Error setup(server_options: TLSOptions) 🔗

Imposta il server DTLS per utilizzare le opzioni del server specificate da server_options. Vedi TLSOptions.server().


PacketPeerDTLS take_connection(udp_peer: PacketPeerUDP) 🔗

Prova ad avviare l'handshake DTLS con il peer udp_peer, il quale deve essere già connesso (vedi PacketPeerUDP.connect_to_host()).

Nota: Devi verificare che lo stato del PacketPeerUDP di ritorno sia PacketPeerDTLS.STATUS_HANDSHAKING, poiché è normale che il 50% delle nuove connessioni non siano valide a causa dello scambio di cookie.