Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: dtls connection using mbedtls #10

Merged
merged 46 commits into from
Aug 13, 2024
Merged
Show file tree
Hide file tree
Changes from 45 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
f1707f5
feat: dtls connection using mbedtls
lchenut Mar 8, 2024
db96253
Merge remote-tracking branch 'origin/master' into dtls-protocol
lchenut Apr 12, 2024
bef7f8e
refactor: change according to the stun protocol rework
lchenut Apr 12, 2024
a4e6ab9
Merge remote-tracking branch 'origin/master' into dtls-protocol
lchenut May 24, 2024
2da7046
chore: rename init proc into new
lchenut May 30, 2024
d1b9fda
docs: adds object field comments
lchenut May 31, 2024
6652be6
Merge branch 'master' into dtls-protocol
diegomrsantos Jun 17, 2024
66ca741
chore: split dtls.nim into two files & renaming
lchenut Jun 20, 2024
bf240b1
chore: remove useless code
lchenut Jun 21, 2024
66a2aa7
chore: remove TODOs as they were addressed with a Stun refactorization
lchenut Jun 21, 2024
24e42a9
fix: oversight on dtls.new
lchenut Jun 21, 2024
ba9f04a
feat: add dtls test
lchenut Jun 21, 2024
416ff7b
chore: added license & used pragma on testdtls
lchenut Jun 21, 2024
f8c1b2f
fix: remove usage of deprecated TrackerCounter
lchenut Jun 28, 2024
874cff7
fix: trackers counter
lchenut Jun 28, 2024
bf2e53c
Merge remote-tracking branch 'origin/master' into dtls-protocol
lchenut Jul 19, 2024
3eb4b23
fix:
lchenut Jul 19, 2024
0f144ce
chore: renaming test
lchenut Jul 31, 2024
33372bc
docs: update DtlsConn comment
lchenut Jul 31, 2024
59fd302
fix: remove code duplicate
lchenut Jul 31, 2024
ffa8a51
chore: update comment
lchenut Jul 31, 2024
d003d20
chore: remove duplication mbedtls initialization code in accept/conne…
lchenut Jul 31, 2024
a9ec658
feat: add exception management to dtls_transport
lchenut Aug 1, 2024
f49ecea
fix: check address family before handshake
lchenut Aug 2, 2024
afd80aa
fix: exhaustive case
lchenut Aug 2, 2024
45cc272
fix: do not create dtlsConn if the address family is not IP
lchenut Aug 2, 2024
7cf9423
chore: remove entropy from MbedTLSCtx
lchenut Aug 2, 2024
59f76a0
chore: remove asyncspawn of cleanupdtlsconn
lchenut Aug 7, 2024
c0769c0
chore: ctx is no longer public
lchenut Aug 7, 2024
6a894ac
test: add a test with more than 2 nodes
lchenut Aug 7, 2024
f8bb4b8
chore: started is now useful
lchenut Aug 7, 2024
d7a707c
chore: update Dtls.stop
lchenut Aug 7, 2024
df2737a
chore: removed unecessary todos
lchenut Aug 7, 2024
36700ef
docs: add comments on DtlsConn.read and getters
lchenut Aug 7, 2024
ac80c9c
feat: add tracker for dtls connection and transport
lchenut Aug 7, 2024
2c327c5
chore: privatize local and remote certificate
lchenut Aug 7, 2024
6975f76
style: use nph
lchenut Aug 9, 2024
c89590f
fix: remove laddr from dtls_conn (not used)
lchenut Aug 9, 2024
8f51516
style: sort imports
lchenut Aug 9, 2024
54f4523
chore: clean Dtls.stop
lchenut Aug 9, 2024
ab02a68
fix: remote address is no longer exposed
lchenut Aug 9, 2024
c5681ed
fix: raddr change oversight
lchenut Aug 9, 2024
a8692af
chore: change `verify` name
lchenut Aug 9, 2024
e056631
chore: changed `sendFuture: Future[void]` into `dataToSend: seq[byte]`
lchenut Aug 13, 2024
5d7b428
chore: avoid sequence copy
lchenut Aug 13, 2024
a90d85f
chore: change assert message
lchenut Aug 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tests/runalltests.nim
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@
{.used.}

import teststun
import testdtls
83 changes: 83 additions & 0 deletions tests/testdtls.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Nim-WebRTC
# Copyright (c) 2024 Status Research & Development GmbH
# Licensed under either of
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
# * MIT license ([LICENSE-MIT](LICENSE-MIT))
# at your option.
# This file may not be copied, modified, or distributed except according to
# those terms.

{.used.}

import chronos
import ../webrtc/udp_transport
import ../webrtc/stun/stun_transport
import ../webrtc/dtls/dtls_transport
import ../webrtc/dtls/dtls_connection
import ./asyncunit

suite "DTLS":
teardown:
checkLeaks()

asyncTest "Two DTLS nodes connecting to each other, then sending/receiving data":
let
localAddr1 = initTAddress("127.0.0.1:4444")
localAddr2 = initTAddress("127.0.0.1:5555")
udp1 = UdpTransport.new(localAddr1)
udp2 = UdpTransport.new(localAddr2)
stun1 = Stun.new(udp1)
stun2 = Stun.new(udp2)
dtls1 = Dtls.new(stun1)
dtls2 = Dtls.new(stun2)
conn1Fut = dtls1.accept()
conn2 = await dtls2.connect(localAddr1)
conn1 = await conn1Fut

await conn1.write(@[1'u8, 2, 3, 4])
let seq1 = await conn2.read()
check seq1 == @[1'u8, 2, 3, 4]

await conn2.write(@[5'u8, 6, 7, 8])
let seq2 = await conn1.read()
check seq2 == @[5'u8, 6, 7, 8]
await allFutures(conn1.close(), conn2.close())
await allFutures(dtls1.stop(), dtls2.stop())
await allFutures(stun1.stop(), stun2.stop())
await allFutures(udp1.close(), udp2.close())

asyncTest "Two DTLS nodes connecting to the same DTLS server, sending/receiving data":
let
localAddr1 = initTAddress("127.0.0.1:4444")
localAddr2 = initTAddress("127.0.0.1:5555")
localAddr3 = initTAddress("127.0.0.1:6666")
udp1 = UdpTransport.new(localAddr1)
udp2 = UdpTransport.new(localAddr2)
udp3 = UdpTransport.new(localAddr3)
stun1 = Stun.new(udp1)
stun2 = Stun.new(udp2)
stun3 = Stun.new(udp3)
dtls1 = Dtls.new(stun1)
dtls2 = Dtls.new(stun2)
dtls3 = Dtls.new(stun3)
servConn1Fut = dtls1.accept()
servConn2Fut = dtls1.accept()
clientConn1 = await dtls2.connect(localAddr1)
clientConn2 = await dtls3.connect(localAddr1)
servConn1 = await servConn1Fut
servConn2 = await servConn2Fut

await servConn1.write(@[1'u8, 2, 3, 4])
await servConn2.write(@[5'u8, 6, 7, 8])
await clientConn1.write(@[9'u8, 10, 11, 12])
await clientConn2.write(@[13'u8, 14, 15, 16])
check:
(await clientConn1.read()) == @[1'u8, 2, 3, 4]
(await clientConn2.read()) == @[5'u8, 6, 7, 8]
(await servConn1.read()) == @[9'u8, 10, 11, 12]
(await servConn2.read()) == @[13'u8, 14, 15, 16]
await allFutures(servConn1.close(), servConn2.close())
await allFutures(clientConn1.close(), clientConn2.close())
await allFutures(dtls1.stop(), dtls2.stop(), dtls3.stop())
await allFutures(stun1.stop(), stun2.stop(), stun3.stop())
await allFutures(udp1.close(), udp2.close(), udp3.close())
8 changes: 4 additions & 4 deletions tests/teststun.nim
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ suite "Stun message encoding/decoding":
decoded == msg
messageIntegrity.attributeType == AttrMessageIntegrity.uint16
fingerprint.attributeType == AttrFingerprint.uint16
conn.close()
await conn.close()
await udp.close()

asyncTest "Get BindingResponse from BindingRequest + encode & decode":
Expand All @@ -82,7 +82,7 @@ suite "Stun message encoding/decoding":
bindingResponse == decoded
messageIntegrity.attributeType == AttrMessageIntegrity.uint16
fingerprint.attributeType == AttrFingerprint.uint16
conn.close()
await conn.close()
await udp.close()

suite "Stun checkForError":
Expand Down Expand Up @@ -114,7 +114,7 @@ suite "Stun checkForError":

check:
errorMissUsername.getAttribute(ErrorCode).get().getErrorCode() == ECBadRequest
conn.close()
await conn.close()
await udp.close()

asyncTest "checkForError: UsernameChecker returns false":
Expand All @@ -136,5 +136,5 @@ suite "Stun checkForError":

check:
error.getAttribute(ErrorCode).get().getErrorCode() == ECUnauthorized
conn.close()
await conn.close()
await udp.close()
5 changes: 4 additions & 1 deletion webrtc.nimble
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@ let lang = getEnv("NIMLANG", "c") # Which backend (c/cpp/js)
let flags = getEnv("NIMFLAGS", "") # Extra flags for the compiler
let verbose = getEnv("V", "") notin ["", "0"]

let cfg =
var cfg =
" --styleCheck:usages --styleCheck:error" &
(if verbose: "" else: " --verbosity:0 --hints:off") &
" --skipParentCfg --skipUserCfg -f" &
" --threads:on --opt:speed"

when defined(windows):
cfg = cfg & " --clib:ws2_32"

import hashes

proc runTest(filename: string) =
Expand Down
Loading
Loading