Skip to content

Commit 0180ee3

Browse files
daonbSean-Der
authored andcommitted
Use OnOpen handler for DataChannels
Using an improvment of pion/datachannel, the channel opener can now set an event to be called when the DATA_CHANNEL_ACK message is recieved Resolves pion#1063 Relates to pion/datachannel#81
1 parent 1eb3d4c commit 0180ee3

File tree

4 files changed

+16
-10
lines changed

4 files changed

+16
-10
lines changed

datachannel.go

+12-3
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ func (d *DataChannel) open(sctpTransport *SCTPTransport) error {
169169
dc.OnBufferedAmountLow(d.onBufferedAmountLow)
170170
d.mu.Unlock()
171171

172-
d.handleOpen(dc)
172+
d.handleOpen(dc, false)
173173
return nil
174174
}
175175

@@ -263,13 +263,22 @@ func (d *DataChannel) onMessage(msg DataChannelMessage) {
263263
handler(msg)
264264
}
265265

266-
func (d *DataChannel) handleOpen(dc *datachannel.DataChannel) {
266+
func (d *DataChannel) handleOpen(dc *datachannel.DataChannel, isRemote bool) {
267267
d.mu.Lock()
268268
d.dataChannel = dc
269269
d.mu.Unlock()
270270
d.setReadyState(DataChannelStateOpen)
271271

272-
d.onOpen()
272+
// Fire the OnOpen handler immediately not using pion/datachannel
273+
// * detached datachannels have no read loop, the user needs to read and query themselves
274+
// * remote datachannels should fire OnOpened. This isn't spec compliant, but we can't break behavior yet
275+
if d.api.settingEngine.detach.DataChannels || isRemote {
276+
d.onOpen()
277+
} else {
278+
dc.OnOpen(func() {
279+
d.onOpen()
280+
})
281+
}
273282

274283
d.mu.Lock()
275284
defer d.mu.Unlock()

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.13
55
require (
66
github.com/onsi/ginkgo v1.16.1 // indirect
77
github.com/onsi/gomega v1.11.0 // indirect
8-
github.com/pion/datachannel v1.4.21
8+
github.com/pion/datachannel v1.5.0
99
github.com/pion/dtls/v2 v2.0.10
1010
github.com/pion/ice/v2 v2.1.13
1111
github.com/pion/interceptor v0.1.0

go.sum

+2-5
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J
3737
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
3838
github.com/onsi/gomega v1.11.0 h1:+CqWgvj0OZycCaqclBD1pxKHAU+tOkHmQIWvDHq2aug=
3939
github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg=
40-
github.com/pion/datachannel v1.4.21 h1:3ZvhNyfmxsAqltQrApLPQMhSFNA+aT87RqyCq4OXmf0=
41-
github.com/pion/datachannel v1.4.21/go.mod h1:oiNyP4gHx2DIwRzX/MFyH0Rz/Gz05OgBlayAI2hAWjg=
40+
github.com/pion/datachannel v1.5.0 h1:Jy6xWr9hysxet69qP23ibiJ6M0P30ZRnndHU+N6cpkY=
41+
github.com/pion/datachannel v1.5.0/go.mod h1:TVbgWP+PVM9TlwL1IkG3JqXXfjGxLvsu9QUeFdpTegI=
4242
github.com/pion/dtls/v2 v2.0.9/go.mod h1:O0Wr7si/Zj5/EBFlDzDd6UtVxx25CE1r7XM7BQKYQho=
4343
github.com/pion/dtls/v2 v2.0.10 h1:wgys7gPR1NMbWjmjJ3CW7lkUGaun8djgH8nahpNLnxI=
4444
github.com/pion/dtls/v2 v2.0.10/go.mod h1:00OxfeCRWHShcqT9jx8pKKmBWuTt0NCZoVPCaC4VKvU=
@@ -59,7 +59,6 @@ github.com/pion/rtp v1.7.0/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko
5959
github.com/pion/rtp v1.7.2/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko=
6060
github.com/pion/rtp v1.7.4 h1:4dMbjb1SuynU5OpA3kz1zHK+u+eOCQjW3MAeVHf1ODA=
6161
github.com/pion/rtp v1.7.4/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko=
62-
github.com/pion/sctp v1.7.10/go.mod h1:EhpTUQu1/lcK3xI+eriS6/96fWetHGCvBi9MSsnaBN0=
6362
github.com/pion/sctp v1.7.12 h1:GsatLufywVruXbZZT1CKg+Jr8ZTkwiPnmUC/oO9+uuY=
6463
github.com/pion/sctp v1.7.12/go.mod h1:xFe9cLMZ5Vj6eOzpyiKjT9SwGM4KpK/8Jbw5//jc+0s=
6564
github.com/pion/sdp/v3 v3.0.4 h1:2Kf+dgrzJflNCSw3TV5v2VLeI0s/qkzy2r5jlR0wzf8=
@@ -76,8 +75,6 @@ github.com/pion/turn/v2 v2.0.5 h1:iwMHqDfPEDEOFzwWKT56eFmh6DYC6o/+xnLAEzgISbA=
7675
github.com/pion/turn/v2 v2.0.5/go.mod h1:APg43CFyt/14Uy7heYUOGWdkem/Wu4PhCO/bjyrTqMw=
7776
github.com/pion/udp v0.1.1 h1:8UAPvyqmsxK8oOjloDk4wUt63TzFe9WEJkg5lChlj7o=
7877
github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M=
79-
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
80-
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
8178
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
8279
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
8380
github.com/sclevine/agouti v3.0.0+incompatible h1:8IBJS6PWz3uTlMP3YBIR5f+KAldcGuOeFkFbUWfBgK4=

sctptransport.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ func (r *SCTPTransport) acceptDataChannels(a *sctp.Association) {
195195
}
196196

197197
<-r.onDataChannel(rtcDC)
198-
rtcDC.handleOpen(dc)
198+
rtcDC.handleOpen(dc, true)
199199

200200
r.lock.Lock()
201201
r.dataChannelsOpened++

0 commit comments

Comments
 (0)