File tree 3 files changed +33
-7
lines changed
3 files changed +33
-7
lines changed Original file line number Diff line number Diff line change @@ -27,7 +27,9 @@ module.exports = {
27
27
cleanPath : cleanPath ,
28
28
29
29
ParseError : ParseError ,
30
- protoFromTuple : protoFromTuple
30
+ protoFromTuple : protoFromTuple ,
31
+
32
+ sizeForAddr : sizeForAddr
31
33
}
32
34
33
35
// string -> [[str name, str addr]... ]
Original file line number Diff line number Diff line change @@ -62,14 +62,20 @@ Multiaddr.prototype.protos = function protos () {
62
62
63
63
// get the multiaddr protocol codes
64
64
Multiaddr . prototype . protoCodes = function protoCodes ( ) {
65
- var codes = [ ]
66
- for ( var i = 0 ; i < this . buffer . length ; i ++ ) {
67
- var code = varint . decode ( this . buffer , i )
68
- var size = protocols ( code ) . size / 8
69
- i = i + varint . decode . bytes - 1
70
- i += size // skip over proto data
65
+ const codes = [ ]
66
+ const buf = this . buffer
67
+ let i = 0
68
+ while ( i < buf . length ) {
69
+ const code = varint . decode ( buf , i )
70
+ const n = varint . decode . bytes
71
+
72
+ const p = protocols ( code )
73
+ const size = codec . sizeForAddr ( p , buf . slice ( i + n ) )
74
+
75
+ i += ( size + n )
71
76
codes . push ( code )
72
77
}
78
+
73
79
return codes
74
80
}
75
81
Original file line number Diff line number Diff line change @@ -323,6 +323,24 @@ describe('helpers', () => {
323
323
size : 0
324
324
} ] )
325
325
} )
326
+
327
+ it ( 'works with ipfs' , ( ) => {
328
+ expect (
329
+ multiaddr ( '/ip4/0.0.0.0/utp/ipfs/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSupNKC' ) . protos ( )
330
+ ) . to . be . eql ( [ {
331
+ code : 4 ,
332
+ name : 'ip4' ,
333
+ size : 32
334
+ } , {
335
+ code : 302 ,
336
+ name : 'utp' ,
337
+ size : 0
338
+ } , {
339
+ code : 421 ,
340
+ name : 'ipfs' ,
341
+ size : - 1
342
+ } ] )
343
+ } )
326
344
} )
327
345
328
346
describe ( '.tuples' , ( ) => {
You can’t perform that action at this time.
0 commit comments