diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2018-01-26 22:52:32 +0100 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2018-01-26 22:52:32 +0100 |
commit | f73d2fb2d96bc3fbc8bc4cce452e3c19689de01e (patch) | |
tree | 52e392cf6313e7e9e5e87539fcb5e88817e47f37 /src/receive.go | |
parent | 068d932f2c54f3b1cf0873d74113205dbeb1816f (diff) | |
download | wireguard-go-f73d2fb2d96bc3fbc8bc4cce452e3c19689de01e.tar.gz wireguard-go-f73d2fb2d96bc3fbc8bc4cce452e3c19689de01e.zip |
Added initial version of peer teardown
There is a double lock issue with device.Close which has yet to be
resolved.
Diffstat (limited to '')
-rw-r--r-- | src/receive.go | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/receive.go b/src/receive.go index 0b87a3c..5ad7c4b 100644 --- a/src/receive.go +++ b/src/receive.go @@ -123,7 +123,7 @@ func (device *Device) RoutineReceiveIncoming(IP int, bind Bind) { case ipv6.Version: size, endpoint, err = bind.ReceiveIPv6(buffer[:]) default: - return + panic("invalid IP version") } if err != nil { @@ -184,9 +184,11 @@ func (device *Device) RoutineReceiveIncoming(IP int, bind Bind) { // add to decryption queues - device.addToDecryptionQueue(device.queue.decryption, elem) - device.addToInboundQueue(peer.queue.inbound, elem) - buffer = device.GetMessageBuffer() + if peer.isRunning.Get() { + device.addToDecryptionQueue(device.queue.decryption, elem) + device.addToInboundQueue(peer.queue.inbound, elem) + buffer = device.GetMessageBuffer() + } continue @@ -308,13 +310,20 @@ func (device *Device) RoutineHandshake() { return } - // lookup peer and consume response + // lookup peer from index entry := device.indices.Lookup(reply.Receiver) + if entry.peer == nil { continue } - entry.peer.mac.ConsumeReply(&reply) + + // consume reply + + if peer := entry.peer; peer.isRunning.Get() { + peer.mac.ConsumeReply(&reply) + } + continue case MessageInitiationType, MessageResponseType: |