mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-15 04:53:00 +08:00
46 lines
1005 B
Go
46 lines
1005 B
Go
package offload
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"UAmask/internal/firewall"
|
|
"UAmask/internal/model"
|
|
)
|
|
|
|
type FirewallTargetOffloader struct {
|
|
executor *firewall.Executor
|
|
setName string
|
|
backend string
|
|
}
|
|
|
|
func NewFirewallTargetOffloader(executor *firewall.Executor, setName, backend string) *FirewallTargetOffloader {
|
|
return &FirewallTargetOffloader{
|
|
executor: executor,
|
|
setName: setName,
|
|
backend: backend,
|
|
}
|
|
}
|
|
|
|
func (o *FirewallTargetOffloader) Handle(signal model.OffloadSignal, completion func(error)) error {
|
|
if o == nil || o.executor == nil {
|
|
return fmt.Errorf("target offloader not configured")
|
|
}
|
|
|
|
ok := o.executor.TryEnqueueWithResult(firewall.BypassTarget{
|
|
IP: signal.Target.IP,
|
|
Port: signal.Target.Port,
|
|
SetName: o.setName,
|
|
Backend: o.backend,
|
|
Timeout: signal.Timeout,
|
|
}, completion)
|
|
if !ok {
|
|
return fmt.Errorf("enqueue target offload failed")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type NoopFlowOffloader struct{}
|
|
|
|
func (NoopFlowOffloader) Handle(model.OffloadSignal) error { return nil }
|