8
8
enc "github.com/named-data/ndnd/std/encoding"
9
9
"github.com/named-data/ndnd/std/ndn"
10
10
rdr "github.com/named-data/ndnd/std/ndn/rdr_2024"
11
+ spec "github.com/named-data/ndnd/std/ndn/spec_2022"
11
12
sec "github.com/named-data/ndnd/std/security"
12
13
"github.com/named-data/ndnd/std/utils"
13
14
)
@@ -28,7 +29,17 @@ type ProduceArgs struct {
28
29
Expiry time.Time // TODO: not implemented
29
30
}
30
31
32
+ // Produce and sign data, and insert into the client's store
31
33
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 ) {
32
43
content := args .Content
33
44
contentSize := 0
34
45
for _ , c := range content {
@@ -61,13 +72,11 @@ func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
61
72
FinalBlockID : & finalBlockId ,
62
73
}
63
74
64
- // TODO: sign the data
65
75
basename := append (args .Name , enc .NewVersionComponent (version ))
66
- signer := sec .NewSha256Signer ()
67
76
68
77
// 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 ()
71
80
72
81
var seg uint64
73
82
for seg = 0 ; len (content ) > 0 ; seg ++ {
@@ -90,12 +99,12 @@ func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
90
99
}
91
100
}
92
101
93
- data , err := c . engine . Spec () .MakeData (name , cfg , segContent , signer )
102
+ data , err := spec. Spec {} .MakeData (name , cfg , segContent , signer )
94
103
if err != nil {
95
104
return nil , err
96
105
}
97
106
98
- err = c . store .Put (name , version , data .Wire .Join ())
107
+ err = store .Put (name , version , data .Wire .Join ())
99
108
if err != nil {
100
109
return nil , err
101
110
}
@@ -108,7 +117,7 @@ func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
108
117
109
118
{ // write metadata packet
110
119
name := append (args .Name ,
111
- enc . NewStringComponent ( enc . TypeKeywordNameComponent , "metadata" ) ,
120
+ rdr . METADATA ,
112
121
enc .NewVersionComponent (version ),
113
122
enc .NewSegmentComponent (0 ),
114
123
)
@@ -117,12 +126,12 @@ func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
117
126
FinalBlockID : finalBlockId .Bytes (),
118
127
}
119
128
120
- data , err := c . engine . Spec () .MakeData (name , cfg , content .Encode (), signer )
129
+ data , err := spec. Spec {} .MakeData (name , cfg , content .Encode (), signer )
121
130
if err != nil {
122
131
return nil , err
123
132
}
124
133
125
- err = c . store .Put (name , version , data .Wire .Join ())
134
+ err = store .Put (name , version , data .Wire .Join ())
126
135
if err != nil {
127
136
return nil , err
128
137
}
@@ -131,6 +140,7 @@ func (c *Client) Produce(args ProduceArgs) (enc.Name, error) {
131
140
return basename , nil
132
141
}
133
142
143
+ // onInterest looks up the store for the requested data
134
144
func (c * Client ) onInterest (args ndn.InterestHandlerArgs ) {
135
145
// TODO: consult security if we can send this
136
146
wire , err := c .store .Get (args .Interest .Name (), args .Interest .CanBePrefix ())
0 commit comments