mirror of
https://codeberg.org/cunicu/cunicu.git
synced 2025-09-27 21:22:18 +08:00
100 lines
2.0 KiB
Go
100 lines
2.0 KiB
Go
package core
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/stv0g/cunicu/pkg/wg"
|
|
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
|
)
|
|
|
|
type InterfaceHandler interface {
|
|
OnInterfaceAdded(i *Interface)
|
|
OnInterfaceRemoved(i *Interface)
|
|
}
|
|
|
|
type InterfaceModifiedHandler interface {
|
|
OnInterfaceModified(i *Interface, old *wg.Device, m InterfaceModifier)
|
|
}
|
|
|
|
type PeerHandler interface {
|
|
OnPeerAdded(p *Peer)
|
|
OnPeerRemoved(p *Peer)
|
|
}
|
|
|
|
type PeerModifiedHandler interface {
|
|
OnPeerModified(p *Peer, old *wgtypes.Peer, m PeerModifier, ipsAdded, ipsRemoved []net.IPNet)
|
|
}
|
|
|
|
type AllHandler interface {
|
|
InterfaceHandler
|
|
InterfaceModifiedHandler
|
|
PeerHandler
|
|
PeerModifiedHandler
|
|
}
|
|
|
|
type Event any
|
|
|
|
type InterfaceAddedEvent struct {
|
|
Interface *Interface
|
|
}
|
|
|
|
type InterfaceRemovedEvent struct {
|
|
Interface *Interface
|
|
}
|
|
|
|
type InterfaceModifiedEvent struct {
|
|
Interface *Interface
|
|
Old *wg.Device
|
|
Modified InterfaceModifier
|
|
}
|
|
|
|
type PeerAddedEvent struct {
|
|
Peer *Peer
|
|
}
|
|
|
|
type PeerRemovedEvent struct {
|
|
Peer *Peer
|
|
}
|
|
|
|
type PeerModifiedEvent struct {
|
|
Peer *Peer
|
|
Old *wgtypes.Peer
|
|
Modified PeerModifier
|
|
AllowedIPsAdded []net.IPNet
|
|
AllowedIPsRemoved []net.IPNet
|
|
}
|
|
|
|
type EventsHandler struct {
|
|
Events chan Event
|
|
}
|
|
|
|
func NewEventsHandler(len int) *EventsHandler {
|
|
return &EventsHandler{
|
|
Events: make(chan Event, len),
|
|
}
|
|
}
|
|
|
|
func (h *EventsHandler) OnInterfaceAdded(i *Interface) {
|
|
h.Events <- InterfaceAddedEvent{i}
|
|
}
|
|
|
|
func (h *EventsHandler) OnInterfaceRemoved(i *Interface) {
|
|
h.Events <- InterfaceRemovedEvent{i}
|
|
}
|
|
|
|
func (h *EventsHandler) OnInterfaceModified(i *Interface, old *wg.Device, m InterfaceModifier) {
|
|
h.Events <- InterfaceModifiedEvent{i, old, m}
|
|
}
|
|
|
|
func (h *EventsHandler) OnPeerAdded(p *Peer) {
|
|
h.Events <- PeerAddedEvent{p}
|
|
}
|
|
|
|
func (h *EventsHandler) OnPeerRemoved(p *Peer) {
|
|
h.Events <- PeerRemovedEvent{p}
|
|
}
|
|
|
|
func (h *EventsHandler) OnPeerModified(p *Peer, old *wgtypes.Peer, m PeerModifier, ipsAdded, ipsRemoved []net.IPNet) {
|
|
h.Events <- PeerModifiedEvent{p, old, m, ipsAdded, ipsRemoved}
|
|
}
|