(src key.NodePublic, res *overlayMessage, offer webrtc.SessionDescription)
| 452 | } |
| 453 | |
| 454 | func (r *Receive) setupWebrtcConnection(src key.NodePublic, res *overlayMessage, offer webrtc.SessionDescription) { |
| 455 | // Configure larger buffer sizes |
| 456 | settingEngine := webrtc.SettingEngine{} |
| 457 | // Set maximum message size to 16MB |
| 458 | settingEngine.SetSCTPMaxReceiveBufferSize(64 * 1024 * 1024) |
| 459 | |
| 460 | api := webrtc.NewAPI(webrtc.WithSettingEngine(settingEngine)) |
| 461 | |
| 462 | // Use the custom API to create the peer connection |
| 463 | peerConnection, err := api.NewPeerConnection(getWebRTCConfig()) |
| 464 | if err != nil { |
| 465 | panic(err) |
| 466 | } |
| 467 | |
| 468 | peerConnection.OnConnectionStateChange(func(s webrtc.PeerConnectionState) { |
| 469 | switch s { |
| 470 | case webrtc.PeerConnectionStateConnected: |
| 471 | case webrtc.PeerConnectionStateDisconnected: |
| 472 | case webrtc.PeerConnectionStateFailed: |
| 473 | case webrtc.PeerConnectionStateClosed: |
| 474 | } |
| 475 | }) |
| 476 | |
| 477 | peerConnection.OnDataChannel(func(d *webrtc.DataChannel) { |
| 478 | // Increase buffer sizes |
| 479 | d.SetBufferedAmountLowThreshold(65535) |
| 480 | |
| 481 | var ( |
| 482 | fi *os.File |
| 483 | bar *progressbar.ProgressBar |
| 484 | mw io.Writer |
| 485 | fiSize int |
| 486 | read int |
| 487 | ) |
| 488 | |
| 489 | d.OnMessage(func(msg webrtc.DataChannelMessage) { |
| 490 | if msg.IsString { |
| 491 | meta := RtcMetadata{} |
| 492 | |
| 493 | err := json.Unmarshal(msg.Data, &meta) |
| 494 | if err != nil { |
| 495 | fmt.Println("failed to unmarshal file metadata:") |
| 496 | d.Close() |
| 497 | return |
| 498 | } |
| 499 | |
| 500 | if meta.Type == RtcMetadataTypeFileMetadata { |
| 501 | fiSize = meta.FileMetadata.FileSize |
| 502 | fi, err = os.OpenFile(meta.FileMetadata.FileName, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0644) |
| 503 | if err != nil { |
| 504 | fmt.Println("failed to open file", err) |
| 505 | } |
| 506 | |
| 507 | bar = progressbar.DefaultBytes( |
| 508 | int64(fiSize), |
| 509 | fmt.Sprintf("Downloading %q", meta.FileMetadata.FileName), |
| 510 | ) |
| 511 | mw = io.MultiWriter(fi, bar) |
no test coverage detected