MCPcopy
hub / github.com/livekit/livekit / CreateDataChannelIfEmpty

Method CreateDataChannelIfEmpty

pkg/rtc/transport.go:1383–1420  ·  view source on GitHub ↗
(dcLabel string, dci *webrtc.DataChannelInit)

Source from the content-addressed store, hash-verified

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 {
1385 t.params.Logger.Debugw("data tracks not enabled")
1386 err = errors.New("data tracks not enabled")
1387 return
1388 }
1389
1390 t.lock.RLock()
1391 var dcw *datachannel.DataChannelWriter[*webrtc.DataChannel]
1392 switch dcLabel {
1393 case ReliableDataChannel:
1394 dcw = t.reliableDC
1395 case LossyDataChannel:
1396 dcw = t.lossyDC
1397 case DataTrackDataChannel:
1398 dcw = t.dataTrackDC
1399 default:
1400 t.params.Logger.Warnw("unknown data channel label", nil, "label", label)
1401 err = errors.New("unknown data channel label")
1402 }
1403 t.lock.RUnlock()
1404 if err != nil {
1405 return
1406 }
1407
1408 if dcw != nil {
1409 dc := dcw.BufferedAmountGetter()
1410 return dc.Label(), *dc.ID(), true, nil
1411 }
1412
1413 dc, err := t.pc.CreateDataChannel(dcLabel, dci)
1414 if err != nil {
1415 return
1416 }
1417
1418 t.onDataChannel(dc)
1419 return dc.Label(), *dc.ID(), false, nil
1420}
1421
1422func (t *PCTransport) GetRTT() (float64, bool) {
1423 scps, ok := t.iceTransport.GetSelectedCandidatePairStats()

Calls 4

onDataChannelMethod · 0.95
BufferedAmountGetterMethod · 0.80
CreateDataChannelMethod · 0.80
IDMethod · 0.65

Tested by

no test coverage detected