Skip to content
Snippets Groups Projects
Commit 7d39a948 authored by Benjamin Wenger's avatar Benjamin Wenger
Browse files

made TrackerID public and make external APIs return a copy

parent 37731bd0
No related branches found
No related tags found
1 merge request!510Release
......@@ -51,20 +51,20 @@ type Tracker interface {
AddIdentity(id *id.ID, validUntil time.Time, persistent bool)
RemoveIdentity(id *id.ID)
GetEphemeralIdentity(rng io.Reader, addressSize uint8) (receptionID.IdentityUse, error)
GetIdentity(get *id.ID) (trackedID, error)
GetIdentity(get *id.ID) (TrackedID, error)
}
type manager struct {
tracked []*trackedID
tracked []*TrackedID
ephemeral *receptionID.Store
session storage.Session
newIdentity chan trackedID
newIdentity chan TrackedID
deleteIdentity chan *id.ID
addrSpace address.Space
mux *sync.Mutex
}
type trackedID struct {
type TrackedID struct {
NextGeneration time.Time
LastGeneration time.Time
Source *id.ID
......@@ -76,9 +76,9 @@ type trackedID struct {
func NewOrLoadTracker(session storage.Session, addrSpace address.Space) *manager {
// Initialization
t := &manager{
tracked: make([]*trackedID, 0),
tracked: make([]*TrackedID, 0),
session: session,
newIdentity: make(chan trackedID, trackedIDChanSize),
newIdentity: make(chan TrackedID, trackedIDChanSize),
deleteIdentity: make(chan *id.ID, deleteIDChanSize),
addrSpace: addrSpace,
mux: &sync.Mutex{},
......@@ -92,7 +92,7 @@ func NewOrLoadTracker(session storage.Session, addrSpace address.Space) *manager
jww.WARN.Printf("No tracked identities found, creating a new " +
"tracked identity from legacy stored timestamp.")
t.tracked = append(t.tracked, &trackedID{
t.tracked = append(t.tracked, &TrackedID{
// Make the next generation now so a generation triggers on
// first run
NextGeneration: netTime.Now(),
......@@ -128,7 +128,7 @@ func (t *manager) StartProcesses() stoppable.Stoppable {
// AddIdentity adds an identity to be tracked.
func (t *manager) AddIdentity(id *id.ID, validUntil time.Time, persistent bool) {
t.newIdentity <- trackedID{
t.newIdentity <- TrackedID{
NextGeneration: netTime.Now().Add(-time.Second),
LastGeneration: netTime.Now().Add(-time.Duration(ephemeral.Period)),
Source: id,
......@@ -150,15 +150,15 @@ func (t *manager) GetEphemeralIdentity(rng io.Reader, addressSize uint8) (
}
// GetIdentity returns a currently tracked identity
func (t *manager) GetIdentity(get *id.ID) (*trackedID, error) {
func (t *manager) GetIdentity(get *id.ID) (TrackedID, error) {
t.mux.Lock()
defer t.mux.Unlock()
for i := range t.tracked {
if get.Cmp(t.tracked[i].Source) {
return t.tracked[i], nil
return *t.tracked[i], nil
}
}
return nil, errors.Errorf("could not find id %s", get)
return TrackedID{}, errors.Errorf("could not find id %s", get)
}
func (t *manager) track(stop *stoppable.Single) {
......@@ -268,7 +268,7 @@ func (t *manager) processIdentities(addressSize uint8) time.Time {
// Process any deletions
if len(toRemove) > 0 {
newTracked := make([]*trackedID, 0, len(t.tracked))
newTracked := make([]*TrackedID, 0, len(t.tracked))
for i := range t.tracked {
if _, remove := toRemove[i]; !remove {
newTracked = append(newTracked, t.tracked[i])
......@@ -306,7 +306,7 @@ func unmarshalTimestamp(lastTimestampObj *versioned.Object) (time.Time, error) {
// generateIdentitiesOverRange generates and adds all not yet existing ephemeral Ids
// and returns the timestamp of the next generation for the given TrackedID
func (t *manager) generateIdentitiesOverRange(inQuestion *trackedID,
func (t *manager) generateIdentitiesOverRange(inQuestion *TrackedID,
addressSize uint8) time.Time {
// Ensure that ephemeral IDs will not be generated after the
// identity is invalid
......@@ -371,7 +371,7 @@ func (t *manager) generateIdentitiesOverRange(inQuestion *trackedID,
func (t *manager) save() {
t.mux.Lock()
defer t.mux.Unlock()
persistent := make([]trackedID, 0, len(t.tracked))
persistent := make([]TrackedID, 0, len(t.tracked))
for i := range t.tracked {
if t.tracked[i].Persistent {
......
......@@ -67,9 +67,9 @@ func TestManager_processIdentities(t *testing.T) {
addrSpace.UpdateAddressSpace(18)
session := storage.InitTestingSession(t)
m := &manager{
tracked: make([]*trackedID, 0),
tracked: make([]*TrackedID, 0),
session: session,
newIdentity: make(chan trackedID, trackedIDChanSize),
newIdentity: make(chan TrackedID, trackedIDChanSize),
deleteIdentity: make(chan *id.ID, deleteIDChanSize),
addrSpace: addrSpace,
ephemeral: receptionID.NewOrLoadStore(session.GetKV()),
......@@ -79,7 +79,7 @@ func TestManager_processIdentities(t *testing.T) {
// Add some expired test IDs
testId := id.NewIdFromUInt(0, id.User, t)
validUntil := netTime.Now().Add(time.Minute)
m.tracked = append(m.tracked, &trackedID{
m.tracked = append(m.tracked, &TrackedID{
NextGeneration: netTime.Now(),
LastGeneration: time.Time{},
Source: testId,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment