diff --git a/lns.go b/lns.go index 04d7832..ca18ce1 100644 --- a/lns.go +++ b/lns.go @@ -301,6 +301,12 @@ func (s *Service) LockedSize() int { return s.LockedCatalog().Size() } +// LockedPrefixSize reports the byte offset where locked-name entries begin in +// the reference table. +func (s *Service) LockedPrefixSize() int { + return s.LockedCatalog().PrefixSize() +} + // LockedEntries exposes the locked-name catalog entries used by the service. func (s *Service) LockedEntries() []covenant.LockedEntry { return s.LockedCatalog().Entries() diff --git a/lns_test.go b/lns_test.go index 65d4fb3..ea4bd05 100644 --- a/lns_test.go +++ b/lns_test.go @@ -493,6 +493,10 @@ func TestServiceLockedCatalog(t *testing.T) { t.Fatalf("LockedSize() = %d, want %d", got, catalog.Size()) } + if got := svc.LockedPrefixSize(); got != catalog.PrefixSize() { + t.Fatalf("LockedPrefixSize() = %d, want %d", got, catalog.PrefixSize()) + } + if !catalog.HasByName("NEC") { t.Fatal("LockedCatalog should expose the locked catalog helpers") } diff --git a/pkg/covenant/locked_lookup.go b/pkg/covenant/locked_lookup.go index 3358d72..e151407 100644 --- a/pkg/covenant/locked_lookup.go +++ b/pkg/covenant/locked_lookup.go @@ -38,6 +38,8 @@ type LockedEntry struct { Value LockedName } +const lockedCatalogPrefixSize = 4 + var ( lockedCatalogOnce sync.Once lockedCatalog *LockedCatalog @@ -87,6 +89,11 @@ func (c *LockedCatalog) Size() int { return len(c.byHash) } +// PrefixSize reports the byte offset where the locked-name table entries begin. +func (c *LockedCatalog) PrefixSize() int { + return lockedCatalogPrefixSize +} + // Has reports whether the catalog contains the hash. func (c *LockedCatalog) Has(hash primitives.Hash) bool { if c == nil { diff --git a/pkg/covenant/locked_lookup_test.go b/pkg/covenant/locked_lookup_test.go index c6f277f..8250368 100644 --- a/pkg/covenant/locked_lookup_test.go +++ b/pkg/covenant/locked_lookup_test.go @@ -89,6 +89,10 @@ func TestLockedCatalogHelpers(t *testing.T) { t.Fatal("catalog should report a non-zero size") } + if catalog.PrefixSize() != lockedCatalogPrefixSize { + t.Fatalf("catalog.PrefixSize() = %d, want %d", catalog.PrefixSize(), lockedCatalogPrefixSize) + } + if !catalog.HasByName("NEC") { t.Fatal("catalog should find names case-insensitively") }