mirror of
https://codeberg.org/cunicu/cunicu.git
synced 2025-09-26 21:01:14 +08:00
60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
// SPDX-FileCopyrightText: 2023-2025 Steffen Vogel <post@steffenvogel.de>
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package daemon
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"cunicu.li/cunicu/pkg/wg"
|
|
)
|
|
|
|
type InterfaceModifiedHandler interface {
|
|
OnInterfaceModified(i *Interface, old *wg.Interface, m InterfaceModifier)
|
|
}
|
|
|
|
type PeerStateChangedHandler interface {
|
|
OnPeerStateChanged(p *Peer, newState, prevState PeerState)
|
|
}
|
|
|
|
type PeerHandler interface {
|
|
OnPeerAdded(p *Peer)
|
|
OnPeerRemoved(p *Peer)
|
|
}
|
|
|
|
func (i *Interface) AddPeerStateChangeHandler(h PeerStateChangedHandler) {
|
|
if !slices.Contains(i.onPeerStateChanged, h) {
|
|
i.onPeerStateChanged = append(i.onPeerStateChanged, h)
|
|
}
|
|
}
|
|
|
|
func (i *Interface) RemovePeerStateChangeHandler(h PeerStateChangedHandler) {
|
|
if idx := slices.Index(i.onPeerStateChanged, h); idx > -1 {
|
|
i.onPeerStateChanged = slices.Delete(i.onPeerStateChanged, idx, idx+1)
|
|
}
|
|
}
|
|
|
|
func (i *Interface) AddModifiedHandler(h InterfaceModifiedHandler) {
|
|
if !slices.Contains(i.onModified, h) {
|
|
i.onModified = append(i.onModified, h)
|
|
}
|
|
}
|
|
|
|
func (i *Interface) RemoveModifiedHandler(h InterfaceModifiedHandler) {
|
|
if idx := slices.Index(i.onModified, h); idx > -1 {
|
|
i.onModified = slices.Delete(i.onModified, idx, idx+1)
|
|
}
|
|
}
|
|
|
|
func (i *Interface) AddPeerHandler(h PeerHandler) {
|
|
if !slices.Contains(i.onPeer, h) {
|
|
i.onPeer = append(i.onPeer, h)
|
|
}
|
|
}
|
|
|
|
func (i *Interface) RemovePeerHandler(h PeerHandler) {
|
|
if idx := slices.Index(i.onPeer, h); idx > -1 {
|
|
i.onPeer = slices.Delete(i.onPeer, idx, idx+1)
|
|
}
|
|
}
|