@@ -122,16 +122,18 @@ func NewNameSystem(r routing.ValueStore, opts ...Option) (NameSystem, error) {
122122}
123123
124124// Resolve implements Resolver.
125- func (ns * nameSys ) Resolve (ctx context.Context , name string , options ... ResolveOption ) (path.Path , error ) {
125+ func (ns * nameSys ) Resolve (ctx context.Context , name string , options ... ResolveOption ) (path.Path , time. Duration , error ) {
126126 ctx , span := startSpan (ctx , "MPNS.Resolve" , trace .WithAttributes (attribute .String ("Name" , name )))
127127 defer span .End ()
128128
129129 if strings .HasPrefix (name , "/ipfs/" ) {
130- return path .ParsePath (name )
130+ p , err := path .ParsePath (name )
131+ return p , 0 , err
131132 }
132133
133134 if ! strings .HasPrefix (name , "/" ) {
134- return path .ParsePath ("/ipfs/" + name )
135+ p , err := path .ParsePath ("/ipfs/" + name )
136+ return p , 0 , err
135137 }
136138
137139 return resolve (ctx , ns , name , ProcessResolveOptions (options ))
@@ -144,15 +146,15 @@ func (ns *nameSys) ResolveAsync(ctx context.Context, name string, options ...Res
144146 if strings .HasPrefix (name , "/ipfs/" ) {
145147 p , err := path .ParsePath (name )
146148 res := make (chan ResolveResult , 1 )
147- res <- ResolveResult {p , err }
149+ res <- ResolveResult {Path : p , Err : err }
148150 close (res )
149151 return res
150152 }
151153
152154 if ! strings .HasPrefix (name , "/" ) {
153155 p , err := path .ParsePath ("/ipfs/" + name )
154156 res := make (chan ResolveResult , 1 )
155- res <- ResolveResult {p , err }
157+ res <- ResolveResult {Path : p , Err : err }
156158 close (res )
157159 return res
158160 }
@@ -161,19 +163,19 @@ func (ns *nameSys) ResolveAsync(ctx context.Context, name string, options ...Res
161163}
162164
163165// resolveOnce implements resolver.
164- func (ns * nameSys ) resolveOnceAsync (ctx context.Context , name string , options ResolveOptions ) <- chan onceResult {
166+ func (ns * nameSys ) resolveOnceAsync (ctx context.Context , name string , options ResolveOptions ) <- chan ResolveResult {
165167 ctx , span := startSpan (ctx , "MPNS.ResolveOnceAsync" )
166168 defer span .End ()
167169
168- out := make (chan onceResult , 1 )
170+ out := make (chan ResolveResult , 1 )
169171
170172 if ! strings .HasPrefix (name , ipns .NamespacePrefix ) {
171173 name = ipns .NamespacePrefix + name
172174 }
173175 segments := strings .SplitN (name , "/" , 4 )
174176 if len (segments ) < 3 || segments [0 ] != "" {
175177 log .Debugf ("invalid name syntax for %s" , name )
176- out <- onceResult { err : ErrResolveFailed }
178+ out <- ResolveResult { Err : ErrResolveFailed }
177179 close (out )
178180 return out
179181 }
@@ -194,7 +196,7 @@ func (ns *nameSys) resolveOnceAsync(ctx context.Context, name string, options Re
194196 fixedCid := cid .NewCidV1 (cid .Libp2pKey , ipnsCid .Hash ()).String ()
195197 codecErr := fmt .Errorf ("peer ID represented as CIDv1 require libp2p-key multicodec: retry with /ipns/%s" , fixedCid )
196198 log .Debugf ("RoutingResolver: could not convert public key hash %q to peer ID: %s\n " , key , codecErr )
197- out <- onceResult { err : codecErr }
199+ out <- ResolveResult { Err : codecErr }
198200 close (out )
199201 return out
200202 }
@@ -213,7 +215,7 @@ func (ns *nameSys) resolveOnceAsync(ctx context.Context, name string, options Re
213215 span .SetAttributes (attribute .Bool ("CacheHit" , true ))
214216 span .RecordError (err )
215217
216- out <- onceResult { value : p , err : err }
218+ out <- ResolveResult { Path : p , Err : err }
217219 close (out )
218220 return out
219221 }
@@ -224,37 +226,37 @@ func (ns *nameSys) resolveOnceAsync(ctx context.Context, name string, options Re
224226 } else if _ , ok := dns .IsDomainName (key ); ok {
225227 res = ns .dnsResolver
226228 } else {
227- out <- onceResult { err : fmt .Errorf ("invalid IPNS root: %q" , key )}
229+ out <- ResolveResult { Err : fmt .Errorf ("invalid IPNS root: %q" , key )}
228230 close (out )
229231 return out
230232 }
231233
232234 resCh := res .resolveOnceAsync (ctx , key , options )
233- var best onceResult
235+ var best ResolveResult
234236 go func () {
235237 defer close (out )
236238 for {
237239 select {
238240 case res , ok := <- resCh :
239241 if ! ok {
240- if best != (onceResult {}) {
241- ns .cacheSet (cacheKey , best .value , best .ttl )
242+ if best != (ResolveResult {}) {
243+ ns .cacheSet (cacheKey , best .Path , best .TTL )
242244 }
243245 return
244246 }
245- if res .err == nil {
247+ if res .Err == nil {
246248 best = res
247249 }
248- p := res .value
249- err := res .err
250- ttl := res .ttl
250+ p := res .Path
251+ err := res .Err
252+ ttl := res .TTL
251253
252254 // Attach rest of the path
253255 if len (segments ) > 3 {
254256 p , err = path .FromSegments ("" , strings .TrimRight (p .String (), "/" ), segments [3 ])
255257 }
256258
257- emitOnceResult (ctx , out , onceResult { value : p , ttl : ttl , err : err })
259+ emitOnceResult (ctx , out , ResolveResult { Path : p , TTL : ttl , Err : err })
258260 case <- ctx .Done ():
259261 return
260262 }
@@ -264,7 +266,7 @@ func (ns *nameSys) resolveOnceAsync(ctx context.Context, name string, options Re
264266 return out
265267}
266268
267- func emitOnceResult (ctx context.Context , outCh chan <- onceResult , r onceResult ) {
269+ func emitOnceResult (ctx context.Context , outCh chan <- ResolveResult , r ResolveResult ) {
268270 select {
269271 case outCh <- r :
270272 case <- ctx .Done ():
0 commit comments