Add pause support

This commit is contained in:
世界 2023-08-07 20:57:31 +08:00
parent b4db0692d3
commit 7be452de15
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
4 changed files with 18 additions and 7 deletions

View file

@ -6,11 +6,14 @@
package device
import (
"context"
"runtime"
"sync"
"sync/atomic"
"time"
"github.com/sagernet/sing/service"
"github.com/sagernet/sing/service/pause"
"github.com/sagernet/wireguard-go/conn"
"github.com/sagernet/wireguard-go/ratelimiter"
"github.com/sagernet/wireguard-go/rwcancel"
@ -86,9 +89,10 @@ type Device struct {
mtu atomic.Int32
}
ipcMutex sync.RWMutex
closed chan struct{}
log *Logger
ipcMutex sync.RWMutex
closed chan struct{}
log *Logger
pauseManager pause.Manager
}
// deviceState represents the state of a Device.
@ -281,8 +285,9 @@ func (device *Device) SetPrivateKey(sk NoisePrivateKey) error {
return nil
}
func NewDevice(tunDevice tun.Device, bind conn.Bind, logger *Logger, workers int) *Device {
func NewDevice(ctx context.Context, tunDevice tun.Device, bind conn.Bind, logger *Logger, workers int) *Device {
device := new(Device)
device.pauseManager = service.FromContext[pause.Manager](ctx)
device.state.state.Store(uint32(deviceStateDown))
device.closed = make(chan struct{})
device.log = logger