MCPcopy
hub / github.com/livekit/livekit / CreateReadableDataChannel

Method CreateReadableDataChannel

pkg/rtc/transport.go:1343–1381  ·  view source on GitHub ↗

for testing only

(label string, dci *webrtc.DataChannelInit)

Source from the content-addressed store, hash-verified

1341
1342// for testing only
1343func (t *PCTransport) CreateReadableDataChannel(label string, dci *webrtc.DataChannelInit) error {
1344 dc, err := t.pc.CreateDataChannel(label, dci)
1345 if err != nil {
1346 return err
1347 }
1348
1349 dc.OnOpen(func() {
1350 t.params.Logger.Debugw(dc.Label() + " data channel open")
1351 rawDC, err := dc.DetachWithDeadline()
1352 if err != nil {
1353 t.params.Logger.Errorw("failed to detach data channel", err, "label", dc.Label())
1354 return
1355 }
1356
1357 t.lock.Lock()
1358 t.unlabeledDataChannels = append(
1359 t.unlabeledDataChannels,
1360 datachannel.NewDataChannelWriterReliable(dc, rawDC, t.params.DatachannelSlowThreshold),
1361 )
1362 t.lock.Unlock()
1363
1364 go func() {
1365 defer rawDC.Close()
1366 buffer := make([]byte, dataChannelBufferSize)
1367 for {
1368 n, _, err := rawDC.ReadDataChannel(buffer)
1369 if err != nil {
1370 if !errors.Is(err, io.EOF) && !strings.Contains(err.Error(), "state=Closed") {
1371 t.params.Logger.Warnw("error reading data channel", err, "label", dc.Label())
1372 }
1373 return
1374 }
1375
1376 t.params.Handler.OnDataMessageUnlabeled(buffer[:n])
1377 }
1378 }()
1379 })
1380 return nil
1381}
1382
1383func (t *PCTransport) CreateDataChannelIfEmpty(dcLabel string, dci *webrtc.DataChannelInit) (label string, id uint16, existing bool, err error) {
1384 if dcLabel == DataTrackDataChannel && !t.params.EnableDataTracks {

Callers 1

createTransportMethod · 0.80

Calls 4

CreateDataChannelMethod · 0.80
CloseMethod · 0.65

Tested by

no test coverage detected