Last dtls fixes
This commit is contained in:
parent
2a9b8298eb
commit
4e576e0bb9
|
@ -100,9 +100,9 @@ type
|
||||||
|
|
||||||
proc updateOrAdd(aq: AsyncQueue[(TransportAddress, seq[byte])],
|
proc updateOrAdd(aq: AsyncQueue[(TransportAddress, seq[byte])],
|
||||||
raddr: TransportAddress, buf: seq[byte]) =
|
raddr: TransportAddress, buf: seq[byte]) =
|
||||||
for (k, v) in aq.mitems():
|
for kv in aq.mitems():
|
||||||
if k == raddr:
|
if kv[0] == raddr:
|
||||||
v = buf
|
kv[1] = buf
|
||||||
return
|
return
|
||||||
aq.addLastNoWait((raddr, buf))
|
aq.addLastNoWait((raddr, buf))
|
||||||
|
|
||||||
|
@ -135,6 +135,9 @@ proc stop*(self: Dtls) =
|
||||||
self.started = false
|
self.started = false
|
||||||
|
|
||||||
proc serverHandshake(self: DtlsConn) {.async.} =
|
proc serverHandshake(self: DtlsConn) {.async.} =
|
||||||
|
var shouldRead = true
|
||||||
|
while self.ssl.private_state != MBEDTLS_SSL_HANDSHAKE_OVER:
|
||||||
|
if shouldRead:
|
||||||
case self.raddr.family
|
case self.raddr.family
|
||||||
of AddressFamily.IPv4:
|
of AddressFamily.IPv4:
|
||||||
mb_ssl_set_client_transport_id(self.ssl, self.raddr.address_v4)
|
mb_ssl_set_client_transport_id(self.ssl, self.raddr.address_v4)
|
||||||
|
@ -142,10 +145,6 @@ proc serverHandshake(self: DtlsConn) {.async.} =
|
||||||
mb_ssl_set_client_transport_id(self.ssl, self.raddr.address_v6)
|
mb_ssl_set_client_transport_id(self.ssl, self.raddr.address_v6)
|
||||||
else:
|
else:
|
||||||
raise newException(DtlsError, "Remote address isn't an IP address")
|
raise newException(DtlsError, "Remote address isn't an IP address")
|
||||||
|
|
||||||
var shouldRead = true
|
|
||||||
while self.ssl.private_state != MBEDTLS_SSL_HANDSHAKE_OVER:
|
|
||||||
if shouldRead:
|
|
||||||
let tmp = await self.dataRecv.popFirst()
|
let tmp = await self.dataRecv.popFirst()
|
||||||
self.dataRecv.addFirstNoWait(tmp)
|
self.dataRecv.addFirstNoWait(tmp)
|
||||||
self.sendFuture = nil
|
self.sendFuture = nil
|
||||||
|
@ -206,6 +205,7 @@ proc accept*(self: Dtls): Future[DtlsConn] {.async.} =
|
||||||
res.dataRecv.addLastNoWait(buf)
|
res.dataRecv.addLastNoWait(buf)
|
||||||
self.connections[raddr] = res
|
self.connections[raddr] = res
|
||||||
await res.serverHandshake()
|
await res.serverHandshake()
|
||||||
|
break
|
||||||
except CatchableError as exc:
|
except CatchableError as exc:
|
||||||
trace "Handshake fail", remoteAddress = raddr, error = exc.msg
|
trace "Handshake fail", remoteAddress = raddr, error = exc.msg
|
||||||
self.connections.del(raddr)
|
self.connections.del(raddr)
|
||||||
|
@ -216,6 +216,7 @@ proc dial*(self: Dtls, raddr: TransportAddress): DtlsConn =
|
||||||
discard
|
discard
|
||||||
|
|
||||||
import ../udp_connection
|
import ../udp_connection
|
||||||
|
import stew/byteutils
|
||||||
proc main() {.async.} =
|
proc main() {.async.} =
|
||||||
let laddr = initTAddress("127.0.0.1:4433")
|
let laddr = initTAddress("127.0.0.1:4433")
|
||||||
let udp = UdpConn()
|
let udp = UdpConn()
|
||||||
|
@ -225,6 +226,6 @@ proc main() {.async.} =
|
||||||
let dtls = Dtls()
|
let dtls = Dtls()
|
||||||
dtls.start(stun, laddr)
|
dtls.start(stun, laddr)
|
||||||
let x = await dtls.accept()
|
let x = await dtls.accept()
|
||||||
echo "After accept"
|
echo "Recv: <", string.fromBytes(await x.read()), ">"
|
||||||
|
|
||||||
waitFor(main())
|
waitFor(main())
|
||||||
|
|
Loading…
Reference in New Issue