53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"sync"
|
|
)
|
|
|
|
type Service struct {
|
|
// State
|
|
portMutex sync.RWMutex
|
|
ports []uint16
|
|
// Fixed parameters
|
|
settings Settings
|
|
puid int
|
|
pgid int
|
|
// Fixed injected objects
|
|
routing Routing
|
|
client *http.Client
|
|
portAllower PortAllower
|
|
logger Logger
|
|
cmder Cmder
|
|
// Internal channels and locks
|
|
startStopMutex sync.Mutex
|
|
keepPortCancel context.CancelFunc
|
|
keepPortDoneCh <-chan struct{}
|
|
}
|
|
|
|
func New(settings Settings, routing Routing, client *http.Client,
|
|
portAllower PortAllower, logger Logger, cmder Cmder, puid, pgid int,
|
|
) *Service {
|
|
return &Service{
|
|
// Fixed parameters
|
|
settings: settings,
|
|
puid: puid,
|
|
pgid: pgid,
|
|
// Fixed injected objects
|
|
routing: routing,
|
|
client: client,
|
|
portAllower: portAllower,
|
|
logger: logger,
|
|
cmder: cmder,
|
|
}
|
|
}
|
|
|
|
func (s *Service) GetPortsForwarded() (ports []uint16) {
|
|
s.portMutex.RLock()
|
|
defer s.portMutex.RUnlock()
|
|
ports = make([]uint16, len(s.ports))
|
|
copy(ports, s.ports)
|
|
return ports
|
|
}
|