diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-03 04:04:41 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-03-03 05:00:40 +0100 |
commit | 69f0fe67b63d90e523a5a1241fb1b46c2e8dbe03 (patch) | |
tree | 1ef86da3242afde462dcadb7241bb09f499d5bd7 /indextable.go | |
parent | d435be35cac49af9367b2005d831d55e570c4b1b (diff) | |
download | wireguard-go-69f0fe67b63d90e523a5a1241fb1b46c2e8dbe03.tar.gz wireguard-go-69f0fe67b63d90e523a5a1241fb1b46c2e8dbe03.zip |
global: begin modularization
Diffstat (limited to 'indextable.go')
-rw-r--r-- | indextable.go | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/indextable.go b/indextable.go deleted file mode 100644 index 046113c..0000000 --- a/indextable.go +++ /dev/null @@ -1,97 +0,0 @@ -/* SPDX-License-Identifier: MIT - * - * Copyright (C) 2017-2019 WireGuard LLC. All Rights Reserved. - */ - -package main - -import ( - "crypto/rand" - "sync" - "unsafe" -) - -type IndexTableEntry struct { - peer *Peer - handshake *Handshake - keypair *Keypair -} - -type IndexTable struct { - sync.RWMutex - table map[uint32]IndexTableEntry -} - -func randUint32() (uint32, error) { - var integer [4]byte - _, err := rand.Read(integer[:]) - return *(*uint32)(unsafe.Pointer(&integer[0])), err -} - -func (table *IndexTable) Init() { - table.Lock() - defer table.Unlock() - table.table = make(map[uint32]IndexTableEntry) -} - -func (table *IndexTable) Delete(index uint32) { - table.Lock() - defer table.Unlock() - delete(table.table, index) -} - -func (table *IndexTable) SwapIndexForKeypair(index uint32, keypair *Keypair) { - table.Lock() - defer table.Unlock() - entry, ok := table.table[index] - if !ok { - return - } - table.table[index] = IndexTableEntry{ - peer: entry.peer, - keypair: keypair, - handshake: nil, - } -} - -func (table *IndexTable) NewIndexForHandshake(peer *Peer, handshake *Handshake) (uint32, error) { - for { - // generate random index - - index, err := randUint32() - if err != nil { - return index, err - } - - // check if index used - - table.RLock() - _, ok := table.table[index] - table.RUnlock() - if ok { - continue - } - - // check again while locked - - table.Lock() - _, found := table.table[index] - if found { - table.Unlock() - continue - } - table.table[index] = IndexTableEntry{ - peer: peer, - handshake: handshake, - keypair: nil, - } - table.Unlock() - return index, nil - } -} - -func (table *IndexTable) Lookup(id uint32) IndexTableEntry { - table.RLock() - defer table.RUnlock() - return table.table[id] -} |