DTLSServer¶
Clase de ayuda para implementar un servidor DTLS.
Descripción¶
Esta clase se utiliza para almacenar el estado de un servidor DTLS. Al setup convierte los PacketPeerUDP conectados a PacketPeerDTLS aceptándolos a través del take_connection como clientes DTLS. Bajo el capó, esta clase se utiliza para almacenar el estado de DTLS y las cookies del servidor. La razón por la que el estado y las cookies son necesarios está fuera del alcance de esta documentación.
A continuación un pequeño ejemplo de cómo utilizarlo:
# server.gd
extends Node
var dtlsServidor := DTLSServer.new()
var udpServidor := UDPServer.new()
var pares = []
func _ready():
UDPServidor.listen(4242)
var clave = load("clave.key") # Tu clave privada.
var certificado = load("certificado.crt") # Tu certificado X509.
dtlsServidor.setup(clave, certificado)
func _process(delta):
while udpServidor.is_connection_available():
var par : PacketPeerUDP = udpServidor.take_connection()
var dtls_par : PacketPeerDTLS = dtlsServidor.take_connection(par)
if dtls_par.get_status() != PacketPeerDTLS.STATUS_HANDSHAKING:
continue # Es normal que aproximadamente la mitad de las conexiones fallen debido al intercambio de cookies.
print("Par conectado!")
pares.append(dtls_par)
for p in pares:
p.poll() # Debe hacer poll para actualizar el estado.
if p.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
while p.get_available_packet_count() > 0:
print("Mensaje recibido desde el cliente: %s" % p.get_packet().get_string_from_utf8())
p.put_packet("Hola cliente DTLS".to_utf8())
# client.gd
extends Node
var dtls := PacketPeerDTLS.new()
var udp := PacketPeerUDP.new()
var conectado = false
func _ready():
udp.connect_to_host("127.0.0.1", 4242)
dtls.connect_to_peer(udp, false) # Usa verdadero en producción para la validación del certifícado!
func _process(delta):
dtls.poll()
if dtls.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
if !conectado:
# Intenta conectar con el servidor
dtls.put_packet("La respuesta es ... 42!".to_utf8())
while dtls.get_available_packet_count() > 0:
print("Conectado: %s" % dtls.get_packet().get_string_from_utf8())
conectado = true
Métodos¶
setup ( CryptoKey key, X509Certificate certificate, X509Certificate chain=null ) |
|
take_connection ( PacketPeerUDP udp_peer ) |
Descripciones de Métodos¶
Error setup ( CryptoKey key, X509Certificate certificate, X509Certificate chain=null )
Configurar el servidor de DTLS para usar el private_key
dado y proporcionar el certificate
dado a los clientes. Puede pasar el parámetro opcional chain
para proporcionar información adicional de la cadena de CA junto con el certificado.
PacketPeerDTLS take_connection ( PacketPeerUDP udp_peer )
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.