@@ -22,7 +22,7 @@ func preallocateCapture() *preallocatedCapture {
2222 ),
2323 meg .Val (multiaddr .P_UDP ),
2424 meg .Val (multiaddr .P_WEBRTC_DIRECT ),
25- meg .CaptureZeroOrMore (multiaddr .P_CERTHASH , & p .certHashes ),
25+ meg .CaptureZeroOrMoreStringVals (multiaddr .P_CERTHASH , & p .certHashes ),
2626 )
2727 return p
2828}
@@ -87,19 +87,19 @@ func isWebTransportMultiaddrPrealloc() *preallocatedCapture {
8787 var sni string
8888 p .matcher = meg .PatternToMatcher (
8989 meg .Or (
90- meg .CaptureVal (multiaddr .P_IP4 , & ip4Addr ),
91- meg .CaptureVal (multiaddr .P_IP6 , & ip6Addr ),
92- meg .CaptureVal (multiaddr .P_DNS4 , & dnsName ),
93- meg .CaptureVal (multiaddr .P_DNS6 , & dnsName ),
94- meg .CaptureVal (multiaddr .P_DNS , & dnsName ),
90+ meg .CaptureStringVal (multiaddr .P_IP4 , & ip4Addr ),
91+ meg .CaptureStringVal (multiaddr .P_IP6 , & ip6Addr ),
92+ meg .CaptureStringVal (multiaddr .P_DNS4 , & dnsName ),
93+ meg .CaptureStringVal (multiaddr .P_DNS6 , & dnsName ),
94+ meg .CaptureStringVal (multiaddr .P_DNS , & dnsName ),
9595 ),
96- meg .CaptureVal (multiaddr .P_UDP , & udpPort ),
96+ meg .CaptureStringVal (multiaddr .P_UDP , & udpPort ),
9797 meg .Val (multiaddr .P_QUIC_V1 ),
9898 meg .Optional (
99- meg .CaptureVal (multiaddr .P_SNI , & sni ),
99+ meg .CaptureStringVal (multiaddr .P_SNI , & sni ),
100100 ),
101101 meg .Val (multiaddr .P_WEBTRANSPORT ),
102- meg .CaptureZeroOrMore (multiaddr .P_CERTHASH , & p .certHashes ),
102+ meg .CaptureZeroOrMoreStringVals (multiaddr .P_CERTHASH , & p .certHashes ),
103103 )
104104 wtPrealloc = p
105105 return p
@@ -120,26 +120,55 @@ func IsWebTransportMultiaddr(m multiaddr.Multiaddr) (bool, int) {
120120 var certHashesStr []string
121121 matched , _ := m .Match (
122122 meg .Or (
123- meg .CaptureVal (multiaddr .P_IP4 , & ip4Addr ),
124- meg .CaptureVal (multiaddr .P_IP6 , & ip6Addr ),
125- meg .CaptureVal (multiaddr .P_DNS4 , & dnsName ),
126- meg .CaptureVal (multiaddr .P_DNS6 , & dnsName ),
127- meg .CaptureVal (multiaddr .P_DNS , & dnsName ),
123+ meg .CaptureStringVal (multiaddr .P_IP4 , & ip4Addr ),
124+ meg .CaptureStringVal (multiaddr .P_IP6 , & ip6Addr ),
125+ meg .CaptureStringVal (multiaddr .P_DNS4 , & dnsName ),
126+ meg .CaptureStringVal (multiaddr .P_DNS6 , & dnsName ),
127+ meg .CaptureStringVal (multiaddr .P_DNS , & dnsName ),
128128 ),
129- meg .CaptureVal (multiaddr .P_UDP , & udpPort ),
129+ meg .CaptureStringVal (multiaddr .P_UDP , & udpPort ),
130130 meg .Val (multiaddr .P_QUIC_V1 ),
131131 meg .Optional (
132- meg .CaptureVal (multiaddr .P_SNI , & sni ),
132+ meg .CaptureStringVal (multiaddr .P_SNI , & sni ),
133133 ),
134134 meg .Val (multiaddr .P_WEBTRANSPORT ),
135- meg .CaptureZeroOrMore (multiaddr .P_CERTHASH , & certHashesStr ),
135+ meg .CaptureZeroOrMoreStringVals (multiaddr .P_CERTHASH , & certHashesStr ),
136136 )
137137 if ! matched {
138138 return false , 0
139139 }
140140 return true , len (certHashesStr )
141141}
142142
143+ func IsWebTransportMultiaddrCaptureBytes (m multiaddr.Multiaddr ) (bool , int ) {
144+ var dnsName []byte
145+ var ip4Addr []byte
146+ var ip6Addr []byte
147+ var udpPort []byte
148+ var sni []byte
149+ var certHashes [][]byte
150+ matched , _ := m .Match (
151+ meg .Or (
152+ meg .CaptureBytes (multiaddr .P_IP4 , & ip4Addr ),
153+ meg .CaptureBytes (multiaddr .P_IP6 , & ip6Addr ),
154+ meg .CaptureBytes (multiaddr .P_DNS4 , & dnsName ),
155+ meg .CaptureBytes (multiaddr .P_DNS6 , & dnsName ),
156+ meg .CaptureBytes (multiaddr .P_DNS , & dnsName ),
157+ ),
158+ meg .CaptureBytes (multiaddr .P_UDP , & udpPort ),
159+ meg .Val (multiaddr .P_QUIC_V1 ),
160+ meg .Optional (
161+ meg .CaptureBytes (multiaddr .P_SNI , & sni ),
162+ ),
163+ meg .Val (multiaddr .P_WEBTRANSPORT ),
164+ meg .CaptureZeroOrMoreBytes (multiaddr .P_CERTHASH , & certHashes ),
165+ )
166+ if ! matched {
167+ return false , 0
168+ }
169+ return true , len (certHashes )
170+ }
171+
143172func IsWebTransportMultiaddrNoCapture (m multiaddr.Multiaddr ) (bool , int ) {
144173 matched , _ := m .Match (
145174 meg .Or (
@@ -355,6 +384,18 @@ func BenchmarkIsWebTransportMultiaddrNoCapture(b *testing.B) {
355384 }
356385}
357386
387+ func BenchmarkIsWebTransportMultiaddrCaptureBytes (b * testing.B ) {
388+ addr := multiaddr .StringCast ("/ip4/1.2.3.4/udp/1234/quic-v1/sni/example.com/webtransport" )
389+
390+ b .ResetTimer ()
391+ for i := 0 ; i < b .N ; i ++ {
392+ isWT , count := IsWebTransportMultiaddrCaptureBytes (addr )
393+ if ! isWT || count != 0 {
394+ b .Fatal ("unexpected result" )
395+ }
396+ }
397+ }
398+
358399func BenchmarkIsWebTransportMultiaddr (b * testing.B ) {
359400 addr := multiaddr .StringCast ("/ip4/1.2.3.4/udp/1234/quic-v1/sni/example.com/webtransport" )
360401
0 commit comments