@@ -84,7 +84,7 @@ impl Arbitrary for Ma {
8484struct Proto ( Protocol < ' static > ) ;
8585
8686impl Proto {
87- const IMPL_VARIANT_COUNT : u8 = 32 ;
87+ const IMPL_VARIANT_COUNT : u8 = 39 ;
8888}
8989
9090impl Arbitrary for Proto {
@@ -137,6 +137,29 @@ impl Arbitrary for Proto {
137137 29 => Proto ( WebTransport ) ,
138138 30 => Proto ( Ws ( "/" . into ( ) ) ) ,
139139 31 => Proto ( Wss ( "/" . into ( ) ) ) ,
140+ 32 => Proto ( Ip6zone ( Cow :: Owned ( SubString :: arbitrary ( g) . 0 ) ) ) ,
141+ 33 => Proto ( Ipcidr ( Arbitrary :: arbitrary ( g) ) ) ,
142+ 34 => {
143+ let len = usize:: arbitrary ( g) % ( 462 - 387 ) + 387 ;
144+ let a = iter:: repeat_with ( || u8:: arbitrary ( g) )
145+ . take ( len)
146+ . collect :: < Vec < _ > > ( ) ;
147+ Proto ( Garlic64 ( Cow :: Owned ( a) ) )
148+ }
149+ 35 => {
150+ let len = if bool:: arbitrary ( g) {
151+ 32
152+ } else {
153+ usize:: arbitrary ( g) % 128 + 35
154+ } ;
155+ let a = iter:: repeat_with ( || u8:: arbitrary ( g) )
156+ . take ( len)
157+ . collect :: < Vec < _ > > ( ) ;
158+ Proto ( Garlic32 ( Cow :: Owned ( a) ) )
159+ }
160+ 36 => Proto ( Sni ( Cow :: Owned ( SubString :: arbitrary ( g) . 0 ) ) ) ,
161+ 37 => Proto ( P2pStardust ) ,
162+ 38 => Proto ( WebRTC ) ,
140163 _ => panic ! ( "outside range" ) ,
141164 }
142165 }
@@ -231,6 +254,14 @@ fn construct_success() {
231254 "29260100094F819700803ECA6566E80C21" ,
232255 vec ! [ Ip6 ( "2601:9:4f81:9700:803e:ca65:66e8:c21" . parse( ) . unwrap( ) ) ] ,
233256 ) ;
257+ ma_valid (
258+ "/ip6/fe80::9700:803e:ca65:66e8:c21/ip6zone/wlan0" ,
259+ "29FE80000000009700803ECA6566E80C212A05776C616E30" ,
260+ vec ! [
261+ Ip6 ( "fe80::9700:803e:ca65:66e8:c21" . parse( ) . unwrap( ) ) ,
262+ Ip6zone ( Cow :: Borrowed ( "wlan0" ) ) ,
263+ ] ,
264+ ) ;
234265 ma_valid ( "/udp/0" , "91020000" , vec ! [ Udp ( 0 ) ] ) ;
235266 ma_valid ( "/tcp/0" , "060000" , vec ! [ Tcp ( 0 ) ] ) ;
236267 ma_valid ( "/sctp/0" , "84010000" , vec ! [ Sctp ( 0 ) ] ) ;
@@ -335,6 +366,44 @@ fn construct_success() {
335366 . into( ) ,
336367 ) ] ,
337368 ) ;
369+ ma_valid (
370+ "/garlic64/jT~IyXaoauTni6N4517EG8mrFUKpy0IlgZh-EY9csMAk82Odatmzr~YTZy8Hv7u~wvkg75EFNOyqb~nAPg-khyp2TS~ObUz8WlqYAM2VlEzJ7wJB91P-cUlKF\
371+ 18zSzVoJFmsrcQHZCirSbWoOknS6iNmsGRh5KVZsBEfp1Dg3gwTipTRIx7Vl5Vy~1OSKQVjYiGZS9q8RL0MF~7xFiKxZDLbPxk0AK9TzGGqm~wMTI2HS0Gm4Ycy8LYPVmLvG\
372+ onIBYndg2bJC7WLuF6tVjVquiokSVDKFwq70BCUU5AU-EvdOD5KEOAM7mPfw-gJUG4tm1TtvcobrObqoRnmhXPTBTN5H7qDD12AvlwFGnfAlBXjuP4xOUAISL5SRLiulrsMS\
373+ iT4GcugSI80mF6sdB0zWRgL1yyvoVWeTBn1TqjO27alr95DGTluuSqrNAxgpQzCKEWAyzrQkBfo2avGAmmz2NaHaAvYbOg0QSJz1PLjv2jdPW~ofiQmrGWM1cd~1cCqAAAA",
374+ "BE0383038D3FC8C976A86AE4E78BA378E75EC41BC9AB1542A9CB422581987E118F5CB0C024F3639D6AD9B3AFF613672F07BFBBBFC2F920EF910534ECAA6FF9C03E\
375+ 0FA4872A764D2FCE6D4CFC5A5A9800CD95944CC9EF0241F753FE71494A175F334B35682459ACADC4076428AB49B5A83A49D2EA2366B06461E4A559B0111FA750E0D\
376+ E0C138A94D1231ED5979572FF53922905636221994BDABC44BD0C17FEF11622B16432DB3F193400AF53CC61AA9BFC0C4C8D874B41A6E18732F0B60F5662EF1A89C8\
377+ 0589DD8366C90BB58BB85EAD56356ABA2A244950CA170ABBD01094539014F84BDD383E4A10E00CEE63DFC3E809506E2D9B54EDBDCA1BACE6EAA119E68573D305337\
378+ 91FBA830F5D80BE5C051A77C09415E3B8FE3139400848BE5244B8AE96BB0C4A24F819CBA0488F34985EAC741D3359180BD72CAFA1559E4C19F54EA8CEDBB6A5AFDE\
379+ 4319396EB92AAB340C60A50CC2284580CB3AD09017E8D9ABC60269B3D8D687680BD86CE834412273D4F2E3BF68DD3D6FE87E2426AC658CD5C77FD5C0AA000000",
380+ vec ! [ Garlic64 (
381+ (
382+ & [
383+ 141 , 63 , 200 , 201 , 118 , 168 , 106 , 228 , 231 , 139 , 163 , 120 , 231 , 94 , 196 , 27 , 201 , 171 , 21 , 66 ,
384+ 169 , 203 , 66 , 37 , 129 , 152 , 126 , 17 , 143 , 92 , 176 , 192 , 36 , 243 , 99 , 157 , 106 , 217 , 179 , 175 ,
385+ 246 , 19 , 103 , 47 , 7 , 191 , 187 , 191 , 194 , 249 , 32 , 239 , 145 , 5 , 52 , 236 , 170 , 111 , 249 , 192 ,
386+ 62 , 15 , 164 , 135 , 42 , 118 , 77 , 47 , 206 , 109 , 76 , 252 , 90 , 90 , 152 , 0 , 205 , 149 , 148 , 76 ,
387+ 201 , 239 , 2 , 65 , 247 , 83 , 254 , 113 , 73 , 74 , 23 , 95 , 51 , 75 , 53 , 104 , 36 , 89 , 172 , 173 ,
388+ 196 , 7 , 100 , 40 , 171 , 73 , 181 , 168 , 58 , 73 , 210 , 234 , 35 , 102 , 176 , 100 , 97 , 228 , 165 , 89 ,
389+ 176 , 17 , 31 , 167 , 80 , 224 , 222 , 12 , 19 , 138 , 148 , 209 , 35 , 30 , 213 , 151 , 149 , 114 , 255 , 83 ,
390+ 146 , 41 , 5 , 99 , 98 , 33 , 153 , 75 , 218 , 188 , 68 , 189 , 12 , 23 , 254 , 241 , 22 , 34 , 177 , 100 ,
391+ 50 , 219 , 63 , 25 , 52 , 0 , 175 , 83 , 204 , 97 , 170 , 155 , 252 , 12 , 76 , 141 , 135 , 75 , 65 , 166 ,
392+ 225 , 135 , 50 , 240 , 182 , 15 , 86 , 98 , 239 , 26 , 137 , 200 , 5 , 137 , 221 , 131 , 102 , 201 , 11 , 181 ,
393+ 139 , 184 , 94 , 173 , 86 , 53 , 106 , 186 , 42 , 36 , 73 , 80 , 202 , 23 , 10 , 187 , 208 , 16 , 148 , 83 ,
394+ 144 , 20 , 248 , 75 , 221 , 56 , 62 , 74 , 16 , 224 , 12 , 238 , 99 , 223 , 195 , 232 , 9 , 80 , 110 , 45 ,
395+ 155 , 84 , 237 , 189 , 202 , 27 , 172 , 230 , 234 , 161 , 25 , 230 , 133 , 115 , 211 , 5 , 51 , 121 , 31 , 186 ,
396+ 131 , 15 , 93 , 128 , 190 , 92 , 5 , 26 , 119 , 192 , 148 , 21 , 227 , 184 , 254 , 49 , 57 , 64 , 8 , 72 ,
397+ 190 , 82 , 68 , 184 , 174 , 150 , 187 , 12 , 74 , 36 , 248 , 25 , 203 , 160 , 72 , 143 , 52 , 152 , 94 , 172 ,
398+ 116 , 29 , 51 , 89 , 24 , 11 , 215 , 44 , 175 , 161 , 85 , 158 , 76 , 25 , 245 , 78 , 168 , 206 , 219 , 182 ,
399+ 165 , 175 , 222 , 67 , 25 , 57 , 110 , 185 , 42 , 171 , 52 , 12 , 96 , 165 , 12 , 194 , 40 , 69 , 128 , 203 ,
400+ 58 , 208 , 144 , 23 , 232 , 217 , 171 , 198 , 2 , 105 , 179 , 216 , 214 , 135 , 104 , 11 , 216 , 108 , 232 , 52 ,
401+ 65 , 34 , 115 , 212 , 242 , 227 , 191 , 104 , 221 , 61 , 111 , 232 , 126 , 36 , 38 , 172 , 101 , 140 , 213 , 199 ,
402+ 127 , 213 , 192 , 170 , 0 , 0 , 0 ,
403+ ]
404+ ) . into( )
405+ ) ] ,
406+ ) ;
338407 ma_valid (
339408 "/dnsaddr/sjc-1.bootstrap.libp2p.io" ,
340409 "3819736A632D312E626F6F7473747261702E6C69627032702E696F" ,
@@ -413,6 +482,7 @@ fn construct_fail() {
413482 "/ip4/::1" ,
414483 "/ip4/fdpsofodsajfdoisa" ,
415484 "/ip6" ,
485+ "/ip6/fe80::9700:803e:ca65:66e8:c21/ip6zone" ,
416486 "/udp" ,
417487 "/tcp" ,
418488 "/sctp" ,
@@ -430,6 +500,12 @@ fn construct_fail() {
430500 "/onion3/vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd:-1" ,
431501 "/onion3/vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd" ,
432502 "/onion3/vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyy@:666" ,
503+ "/garlic64/jT~" ,
504+ "/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzu" ,
505+ "/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzu77" ,
506+ "/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzu:80" ,
507+ "/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzuq:-1" ,
508+ "/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzu@" ,
433509 "/udp/1234/sctp" ,
434510 "/udp/1234/udt/1234" ,
435511 "/udp/1234/utp/1234" ,
@@ -581,6 +657,7 @@ fn protocol_stack() {
581657 "/ip4/0.0.0.0" ,
582658 "/ip6/::1" ,
583659 "/ip6/2601:9:4f81:9700:803e:ca65:66e8:c21" ,
660+ "/ip6/fe80::9700:803e:ca65:66e8:c21/ip6zone/wlan0" ,
584661 "/udp/0" ,
585662 "/tcp/0" ,
586663 "/sctp/0" ,
0 commit comments