Skip to content

Commit 99a5d13

Browse files
Danielius1922Daniel Adam
authored and
Daniel Adam
committed
Upgrade to github.com/pion/dtls/v3
1 parent 1afdeb7 commit 99a5d13

File tree

25 files changed

+175
-348
lines changed

25 files changed

+175
-348
lines changed

.golangci.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ linters-settings:
55
enable:
66
- nilness
77
- shadow
8-
gomoddirectives:
9-
replace-allow-list:
10-
- github.com/pion/dtls/v2
118

129
linters:
1310
enable:

dtls/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import (
44
"fmt"
55
"time"
66

7-
"github.com/pion/dtls/v2"
8-
dtlsnet "github.com/pion/dtls/v2/pkg/net"
7+
"github.com/pion/dtls/v3"
8+
dtlsnet "github.com/pion/dtls/v3/pkg/net"
99
"github.com/plgd-dev/go-coap/v3/dtls/server"
1010
"github.com/plgd-dev/go-coap/v3/message"
1111
"github.com/plgd-dev/go-coap/v3/message/codes"

dtls/client_test.go

Lines changed: 41 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"testing"
1212
"time"
1313

14-
piondtls "github.com/pion/dtls/v2"
14+
piondtls "github.com/pion/dtls/v3"
1515
"github.com/plgd-dev/go-coap/v3/dtls"
1616
"github.com/plgd-dev/go-coap/v3/message"
1717
"github.com/plgd-dev/go-coap/v3/message/codes"
@@ -20,7 +20,6 @@ import (
2020
coapNet "github.com/plgd-dev/go-coap/v3/net"
2121
"github.com/plgd-dev/go-coap/v3/net/responsewriter"
2222
"github.com/plgd-dev/go-coap/v3/options"
23-
"github.com/plgd-dev/go-coap/v3/options/config"
2423
"github.com/plgd-dev/go-coap/v3/pkg/runner/periodic"
2524
"github.com/plgd-dev/go-coap/v3/udp/client"
2625
"github.com/stretchr/testify/assert"
@@ -123,7 +122,7 @@ func TestConnGet(t *testing.T) {
123122

124123
for _, tt := range tests {
125124
t.Run(tt.name, func(t *testing.T) {
126-
ctx, cancel := context.WithTimeout(context.Background(), time.Second*3600)
125+
ctx, cancel := context.WithTimeout(context.Background(), Timeout)
127126
defer cancel()
128127
got, err := cc.Get(ctx, tt.args.path, tt.args.opts...)
129128
if tt.wantErr {
@@ -216,7 +215,7 @@ func TestConnGetSeparateMessage(t *testing.T) {
216215
require.NoError(t, errC)
217216
}()
218217

219-
ctx, cancel := context.WithTimeout(context.Background(), time.Second*3600)
218+
ctx, cancel := context.WithTimeout(context.Background(), Timeout)
220219
defer cancel()
221220

222221
req, err := cc.NewGetRequest(ctx, "/a")
@@ -340,7 +339,7 @@ func TestConnPost(t *testing.T) {
340339
require.NoError(t, errC)
341340
}()
342341

343-
ctx, cancel := context.WithTimeout(context.Background(), time.Second*3600)
342+
ctx, cancel := context.WithTimeout(context.Background(), Timeout)
344343
defer cancel()
345344
got, err := cc.Post(ctx, tt.args.path, tt.args.contentFormat, tt.args.payload, tt.args.opts...)
346345
if tt.wantErr {
@@ -475,7 +474,7 @@ func TestConnPut(t *testing.T) {
475474
require.NoError(t, errC)
476475
}()
477476

478-
ctx, cancel := context.WithTimeout(context.Background(), time.Second*3600)
477+
ctx, cancel := context.WithTimeout(context.Background(), Timeout)
479478
defer cancel()
480479
got, err := cc.Put(ctx, tt.args.path, tt.args.contentFormat, tt.args.payload, tt.args.opts...)
481480
if tt.wantErr {
@@ -590,7 +589,7 @@ func TestConnDelete(t *testing.T) {
590589

591590
for _, tt := range tests {
592591
t.Run(tt.name, func(t *testing.T) {
593-
ctx, cancel := context.WithTimeout(context.Background(), time.Second*3600)
592+
ctx, cancel := context.WithTimeout(context.Background(), Timeout)
594593
defer cancel()
595594
got, err := cc.Delete(ctx, tt.args.path, tt.args.opts...)
596595
if tt.wantErr {
@@ -654,58 +653,12 @@ func TestConnPing(t *testing.T) {
654653
require.NoError(t, err)
655654
}
656655

657-
func TestConnHandeShakeFailure(t *testing.T) {
658-
dtlsCfg := &piondtls.Config{
659-
PSK: func(hint []byte) ([]byte, error) {
660-
fmt.Printf("Hint: %s \n", hint)
661-
return []byte{0xAB, 0xC1, 0x23}, nil
662-
},
663-
PSKIdentityHint: []byte("Pion DTLS Server"),
664-
CipherSuites: []piondtls.CipherSuiteID{piondtls.TLS_PSK_WITH_AES_128_CCM_8},
665-
ConnectContextMaker: func() (context.Context, func()) {
666-
return context.WithTimeout(context.Background(), 1*time.Second)
667-
},
668-
}
669-
l, err := coapNet.NewDTLSListener("udp", "", dtlsCfg)
670-
require.NoError(t, err)
671-
defer func() {
672-
errC := l.Close()
673-
require.NoError(t, errC)
674-
}()
675-
var wg sync.WaitGroup
676-
defer wg.Wait()
677-
678-
s := dtls.NewServer()
679-
defer s.Stop()
680-
681-
wg.Add(1)
682-
go func() {
683-
defer wg.Done()
684-
errS := s.Serve(l)
685-
assert.NoError(t, errS)
686-
}()
687-
688-
dtlsCfgClient := &piondtls.Config{
689-
PSK: func(hint []byte) ([]byte, error) {
690-
fmt.Printf("Hint: %s \n", hint)
691-
return []byte{0xAB, 0xC1, 0x24}, nil
692-
},
693-
PSKIdentityHint: []byte("Pion DTLS Client"),
694-
CipherSuites: []piondtls.CipherSuiteID{piondtls.TLS_PSK_WITH_AES_128_CCM_8},
695-
ConnectContextMaker: func() (context.Context, func()) {
696-
return context.WithTimeout(context.Background(), 1*time.Second)
697-
},
698-
}
699-
_, err = dtls.Dial(l.Addr().String(), dtlsCfgClient)
700-
require.Error(t, err)
701-
}
702-
703656
func TestClientInactiveMonitor(t *testing.T) {
704657
var inactivityDetected atomic.Bool
705658

706659
ctx, cancel := context.WithTimeout(context.Background(), Timeout)
707660
defer cancel()
708-
serverCgf, clientCgf, _, err := createDTLSConfig(ctx)
661+
serverCgf, clientCgf, _, err := createDTLSConfig()
709662
require.NoError(t, err)
710663

711664
ld, err := coapNet.NewDTLSListener("udp4", "", serverCgf)
@@ -745,7 +698,9 @@ func TestClientInactiveMonitor(t *testing.T) {
745698
serverWg.Wait()
746699
}()
747700

748-
cc, err := dtls.Dial(ld.Addr().String(), clientCgf,
701+
cc, err := dtls.Dial(
702+
ld.Addr().String(),
703+
clientCgf,
749704
options.WithInactivityMonitor(100*time.Millisecond, func(cc *client.Conn) {
750705
require.False(t, inactivityDetected.Load())
751706
inactivityDetected.Store(true)
@@ -774,65 +729,71 @@ func TestClientInactiveMonitor(t *testing.T) {
774729
func TestClientKeepAliveMonitor(t *testing.T) {
775730
var inactivityDetected atomic.Bool
776731

777-
ctx, cancel := context.WithTimeout(context.Background(), Timeout)
778-
defer cancel()
779-
serverCgf, clientCgf, _, err := createDTLSConfig(ctx)
732+
serverCgf, clientCgf, _, err := createDTLSConfig()
780733
require.NoError(t, err)
781-
782734
ld, err := coapNet.NewDTLSListener("udp4", "", serverCgf)
783735
require.NoError(t, err)
736+
defer func() {
737+
errC := ld.Close()
738+
require.NoError(t, errC)
739+
}()
740+
741+
ctx, cancel := context.WithTimeout(context.Background(), Timeout)
742+
defer cancel()
784743

785-
checkClose := semaphore.NewWeighted(1)
786-
err = checkClose.Acquire(ctx, 1)
744+
checkClose := semaphore.NewWeighted(2)
745+
err = checkClose.Acquire(ctx, 2)
787746
require.NoError(t, err)
788747

748+
sd := dtls.NewServer(
749+
options.WithOnNewConn(func(cc *client.Conn) {
750+
cc.AddOnClose(func() {
751+
checkClose.Release(1)
752+
})
753+
}),
754+
options.WithPeriodicRunner(periodic.New(ctx.Done(), time.Millisecond*10)),
755+
options.WithRequestMonitor(func(_ *client.Conn, _ *pool.Message) (bool, error) {
756+
// lets drop all messages, this will trigger keep alive because of inactivity
757+
return true, nil
758+
}),
759+
)
760+
789761
var serverWg sync.WaitGroup
790762
serverWg.Add(1)
791763
go func() {
792764
defer serverWg.Done()
793-
for {
794-
c, errA := ld.AcceptWithContext(ctx)
795-
if errA != nil {
796-
if errors.Is(errA, coapNet.ErrListenerIsClosed) {
797-
return
798-
}
799-
}
800-
defer c.Close()
801-
assert.NoError(t, errA)
802-
}
765+
errS := sd.Serve(ld)
766+
assert.NoError(t, errS)
803767
}()
804768
defer func() {
805-
errC := ld.Close()
806-
require.NoError(t, errC)
769+
sd.Stop()
770+
serverWg.Wait()
807771
}()
808772

809773
cc, err := dtls.Dial(
810774
ld.Addr().String(),
811775
clientCgf,
812776
options.WithKeepAlive(3, 100*time.Millisecond, func(cc *client.Conn) {
777+
t.Log("client - close for inactivity")
813778
require.False(t, inactivityDetected.Load())
814779
inactivityDetected.Store(true)
815780
errC := cc.Close()
816781
require.NoError(t, errC)
817782
}),
818783
options.WithPeriodicRunner(periodic.New(ctx.Done(), time.Millisecond*10)),
819-
options.WithReceivedMessageQueueSize(32),
820-
options.WithProcessReceivedMessageFunc(func(req *pool.Message, cc *client.Conn, handler config.HandlerFunc[*client.Conn]) {
821-
cc.ProcessReceivedMessageWithHandler(req, handler)
822-
}),
823784
)
824785
require.NoError(t, err)
825786
cc.AddOnClose(func() {
787+
t.Log("connection is closed")
826788
checkClose.Release(1)
827789
})
828790

829791
// send ping to create server side connection
830792
ctxPing, cancel := context.WithTimeout(ctx, time.Second)
831793
defer cancel()
832-
err = cc.Ping(ctxPing)
833-
require.Error(t, err)
794+
_ = cc.Ping(ctxPing)
834795

835-
err = checkClose.Acquire(ctx, 1)
796+
err = checkClose.Acquire(ctx, 2)
836797
require.NoError(t, err)
837798
require.True(t, inactivityDetected.Load())
838799
}

dtls/example_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"log"
88
"time"
99

10-
piondtls "github.com/pion/dtls/v2"
10+
piondtls "github.com/pion/dtls/v3"
1111
"github.com/plgd-dev/go-coap/v3/dtls"
1212
"github.com/plgd-dev/go-coap/v3/net"
1313
)

dtls/server/server.go

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,20 @@ func (s *Server) checkAndSetListener(l Listener) error {
8989
s.listenMutex.Lock()
9090
defer s.listenMutex.Unlock()
9191
if s.listen != nil {
92-
return errors.New("server already serve listener")
92+
return errors.New("server already serves listener")
9393
}
9494
s.listen = l
9595
return nil
9696
}
9797

98+
func (s *Server) popListener() Listener {
99+
s.listenMutex.Lock()
100+
defer s.listenMutex.Unlock()
101+
l := s.listen
102+
s.listen = nil
103+
return l
104+
}
105+
98106
func (s *Server) checkAcceptError(err error) bool {
99107
if err == nil {
100108
return true
@@ -116,7 +124,14 @@ func (s *Server) checkAcceptError(err error) bool {
116124
}
117125
}
118126

119-
func (s *Server) serveConnection(connections *connections.Connections, cc *udpClient.Conn) {
127+
func (s *Server) serveConnection(connections *connections.Connections, rw net.Conn) {
128+
inactivityMonitor := s.cfg.CreateInactivityMonitor()
129+
requestMonitor := s.cfg.RequestMonitor
130+
dtlsConn := coapNet.NewConn(rw)
131+
cc := s.createConn(dtlsConn, inactivityMonitor, requestMonitor)
132+
if s.cfg.OnNewConn != nil {
133+
s.cfg.OnNewConn(cc)
134+
}
120135
connections.Store(cc)
121136
defer connections.Delete(cc)
122137

@@ -129,16 +144,14 @@ func (s *Server) Serve(l Listener) error {
129144
if s.cfg.BlockwiseSZX > blockwise.SZX1024 {
130145
return errors.New("invalid blockwiseSZX")
131146
}
147+
132148
err := s.checkAndSetListener(l)
133149
if err != nil {
134150
return err
135151
}
136152
defer func() {
137-
s.listenMutex.Lock()
138-
defer s.listenMutex.Unlock()
139-
s.listen = nil
153+
s.Stop()
140154
}()
141-
142155
var wg sync.WaitGroup
143156
defer wg.Wait()
144157

@@ -158,32 +171,22 @@ func (s *Server) Serve(l Listener) error {
158171
continue
159172
}
160173
wg.Add(1)
161-
var cc *udpClient.Conn
162-
inactivityMonitor := s.cfg.CreateInactivityMonitor()
163-
requestMonitor := s.cfg.RequestMonitor
164-
165-
cc = s.createConn(coapNet.NewConn(rw), inactivityMonitor, requestMonitor)
166-
if s.cfg.OnNewConn != nil {
167-
s.cfg.OnNewConn(cc)
168-
}
169174
go func() {
170175
defer wg.Done()
171-
s.serveConnection(connections, cc)
176+
s.serveConnection(connections, rw)
172177
}()
173178
}
174179
}
175180

176181
// Stop stops server without wait of ends Serve function.
177182
func (s *Server) Stop() {
178183
s.cancel()
179-
s.listenMutex.Lock()
180-
l := s.listen
181-
s.listen = nil
182-
s.listenMutex.Unlock()
183-
if l != nil {
184-
if err := l.Close(); err != nil {
185-
s.cfg.Errors(fmt.Errorf("cannot close listener: %w", err))
186-
}
184+
l := s.popListener()
185+
if l == nil {
186+
return
187+
}
188+
if err := l.Close(); err != nil {
189+
s.cfg.Errors(fmt.Errorf("cannot close listener: %w", err))
187190
}
188191
}
189192

0 commit comments

Comments
 (0)