type Timer struct {
timer *time.Timer
- modifyingLock sync.Mutex
+ modifyingLock sync.RWMutex
runningLock sync.Mutex
isPending bool
}
timer.runningLock.Unlock()
}
+func (timer *Timer) IsPending() bool {
+ timer.modifyingLock.RLock()
+ defer timer.modifyingLock.RUnlock()
+ return timer.isPending
+}
+
func (peer *Peer) timersActive() bool {
return peer.isRunning.Get() && peer.device != nil && peer.device.isUp.Get() && len(peer.device.peers.keyMap) > 0
}
/* We set a timer for destroying any residue that might be left
* of a partial exchange.
*/
- if peer.timersActive() && !peer.timers.zeroKeyMaterial.isPending {
+ if peer.timersActive() && !peer.timers.zeroKeyMaterial.IsPending() {
peer.timers.zeroKeyMaterial.Mod(RejectAfterTime * 3)
}
} else {
/* Should be called after an authenticated data packet is sent. */
func (peer *Peer) timersDataSent() {
- if peer.timersActive() && !peer.timers.newHandshake.isPending {
+ if peer.timersActive() && !peer.timers.newHandshake.IsPending() {
peer.timers.newHandshake.Mod(KeepaliveTimeout + RekeyTimeout)
}
}
/* Should be called after an authenticated data packet is received. */
func (peer *Peer) timersDataReceived() {
if peer.timersActive() {
- if !peer.timers.sendKeepalive.isPending {
+ if !peer.timers.sendKeepalive.IsPending() {
peer.timers.sendKeepalive.Mod(KeepaliveTimeout)
} else {
peer.timers.needAnotherKeepalive = true