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