Skip to content

Commit f960e16

Browse files
committed
object: refactor RDR bits
1 parent 0a00b43 commit f960e16

File tree

4 files changed

+28
-13
lines changed

4 files changed

+28
-13
lines changed

std/ndn/rdr_2024/definitions.go

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package rdr
33

44
import enc "github.com/named-data/ndnd/std/encoding"
55

6+
var METADATA = enc.NewStringComponent(enc.TypeKeywordNameComponent, "metadata")
7+
68
type ManifestDigest struct {
79
//+field:natural
810
SegNo uint64 `tlv:"0xcc"`

std/object/client.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type Client struct {
2727
segcheck chan bool
2828
}
2929

30+
// Create a new client with given engine and store
3031
func NewClient(engine ndn.Engine, store ndn.Store) *Client {
3132
client := new(Client)
3233
client.engine = engine
@@ -42,6 +43,7 @@ func NewClient(engine ndn.Engine, store ndn.Store) *Client {
4243
return client
4344
}
4445

46+
// Start the client. The engine must be running.
4547
func (c *Client) Start() error {
4648
if !c.engine.IsRunning() {
4749
return errors.New("client start when engine not running")
@@ -55,15 +57,17 @@ func (c *Client) Start() error {
5557
return nil
5658
}
5759

60+
// Stop the client
5861
func (c *Client) Stop() {
5962
c.stop <- true
6063
}
6164

65+
// Get the underlying engine
6266
func (c *Client) Engine() ndn.Engine {
6367
return c.engine
6468
}
6569

66-
// main goroutine for all client processing
70+
// Main goroutine for all client processing
6771
func (c *Client) run() {
6872
for {
6973
select {

std/object/client_consume.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,14 @@ func (c *Client) consumeObject(state *ConsumeState) {
137137
c.segfetch <- state
138138
}
139139

140+
// fetch RDR metadata for an object with a given name
140141
func (c *Client) fetchMetadata(
141142
name enc.Name,
142143
callback func(meta *rdr.MetaData, err error),
143144
) {
144145
log.Debugf("consume: fetching object metadata %s", name)
145146
args := ExpressRArgs{
146-
Name: append(name,
147-
enc.NewStringComponent(enc.TypeKeywordNameComponent, "metadata"),
148-
),
147+
Name: append(name, rdr.METADATA),
149148
Config: &ndn.InterestConfig{
150149
CanBePrefix: true,
151150
MustBeFresh: true,

std/object/client_produce.go

+19-9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
enc "github.com/named-data/ndnd/std/encoding"
99
"github.com/named-data/ndnd/std/ndn"
1010
rdr "github.com/named-data/ndnd/std/ndn/rdr_2024"
11+
spec "github.com/named-data/ndnd/std/ndn/spec_2022"
1112
sec "github.com/named-data/ndnd/std/security"
1213
"github.com/named-data/ndnd/std/utils"
1314
)
@@ -28,7 +29,17 @@ type ProduceArgs struct {
2829
Expiry time.Time // TODO: not implemented
2930
}
3031

32+
// Produce and sign data, and insert into the client's store
3133
func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
34+
// TODO: sign the data
35+
signer := sec.NewSha256Signer()
36+
37+
return Produce(args, c.store, signer)
38+
}
39+
40+
// Produce and sign data, and insert into a store
41+
// This function does not rely on the engine or client, so it can also be used in YaNFD
42+
func Produce(args ProduceArgs, store ndn.Store, signer ndn.Signer) (enc.Name, error) {
3243
content := args.Content
3344
contentSize := 0
3445
for _, c := range content {
@@ -61,13 +72,11 @@ func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
6172
FinalBlockID: &finalBlockId,
6273
}
6374

64-
// TODO: sign the data
6575
basename := append(args.Name, enc.NewVersionComponent(version))
66-
signer := sec.NewSha256Signer()
6776

6877
// use a transaction to ensure the entire object is written
69-
c.store.Begin()
70-
defer c.store.Commit()
78+
store.Begin()
79+
defer store.Commit()
7180

7281
var seg uint64
7382
for seg = 0; len(content) > 0; seg++ {
@@ -90,12 +99,12 @@ func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
9099
}
91100
}
92101

93-
data, err := c.engine.Spec().MakeData(name, cfg, segContent, signer)
102+
data, err := spec.Spec{}.MakeData(name, cfg, segContent, signer)
94103
if err != nil {
95104
return nil, err
96105
}
97106

98-
err = c.store.Put(name, version, data.Wire.Join())
107+
err = store.Put(name, version, data.Wire.Join())
99108
if err != nil {
100109
return nil, err
101110
}
@@ -108,7 +117,7 @@ func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
108117

109118
{ // write metadata packet
110119
name := append(args.Name,
111-
enc.NewStringComponent(enc.TypeKeywordNameComponent, "metadata"),
120+
rdr.METADATA,
112121
enc.NewVersionComponent(version),
113122
enc.NewSegmentComponent(0),
114123
)
@@ -117,12 +126,12 @@ func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
117126
FinalBlockID: finalBlockId.Bytes(),
118127
}
119128

120-
data, err := c.engine.Spec().MakeData(name, cfg, content.Encode(), signer)
129+
data, err := spec.Spec{}.MakeData(name, cfg, content.Encode(), signer)
121130
if err != nil {
122131
return nil, err
123132
}
124133

125-
err = c.store.Put(name, version, data.Wire.Join())
134+
err = store.Put(name, version, data.Wire.Join())
126135
if err != nil {
127136
return nil, err
128137
}
@@ -131,6 +140,7 @@ func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
131140
return basename, nil
132141
}
133142

143+
// onInterest looks up the store for the requested data
134144
func (c *Client) onInterest(args ndn.InterestHandlerArgs) {
135145
// TODO: consult security if we can send this
136146
wire, err := c.store.Get(args.Interest.Name(), args.Interest.CanBePrefix())

0 commit comments

Comments
 (0)