77 "context"
88 "errors"
99 "fmt"
10+ "net"
1011
1112 "github.com/libp2p/go-libp2p/core/connmgr"
1213 ic "github.com/libp2p/go-libp2p/core/crypto"
@@ -135,12 +136,15 @@ func (t *transport) dialWithScope(ctx context.Context, raddr ma.Multiaddr, p pee
135136}
136137
137138func (t * transport ) dial (ctx context.Context , maddr ma.Multiaddr , host , sni string , certHashes []multihash.DecodedMultihash ) (* session , error ) {
138- var url string
139+ dialHost := host
139140 if sni != "" {
140- url = fmt .Sprintf ("https://%s%s?type=noise" , sni , webtransportHTTPEndpoint )
141- } else {
142- url = fmt .Sprintf ("https://%s%s?type=noise" , host , webtransportHTTPEndpoint )
141+ _ , port , err := net .SplitHostPort (host )
142+ if err != nil {
143+ return nil , err
144+ }
145+ dialHost = net .JoinHostPort (sni , port )
143146 }
147+ url := fmt .Sprintf ("https://%s%s?type=noise" , dialHost , webtransportHTTPEndpoint )
144148 certHashValues := make ([]web_transport.CertificateHashValue , 0 )
145149 for _ , hash := range certHashes {
146150 certHashValues = append (certHashValues , web_transport .CertificateHash ("sha-256" , hash .Digest ))
@@ -155,10 +159,12 @@ func (t *transport) upgrade(ctx context.Context, sess *session, p peer.ID, certH
155159 if err != nil {
156160 return nil , err
157161 }
158- defer s .Close ()
159162
160163 var verified bool
161164 n , err := t .noise .WithSessionOptions (noise .EarlyData (newEarlyDataReceiver (func (b * pb.NoiseExtensions ) error {
165+ if b == nil {
166+ return errors .New ("missing webtransport certificate hashes" )
167+ }
162168 decodedCertHashes , err := decodeCertHashesFromProtobuf (b .WebtransportCerthashes )
163169 if err != nil {
164170 return err
@@ -179,15 +185,14 @@ func (t *transport) upgrade(ctx context.Context, sess *session, p peer.ID, certH
179185 return nil
180186 }), nil ))
181187 if err != nil {
182- return nil , fmt .Errorf ("failed to create Noise transport: %w" , err )
188+ return nil , errors . Join ( s . Close (), fmt .Errorf ("failed to create Noise transport: %w" , err ) )
183189 }
184190 c , err := n .SecureOutbound (ctx , s , p )
185191 if err != nil {
186- return nil , err
192+ return nil , errors . Join ( s . Close (), err )
187193 }
188- defer c .Close ()
189194 if ! verified {
190- return nil , errors .New ("didn't verify" )
195+ return nil , errors .Join ( s . Close (), errors . New ("didn't verify" ) )
191196 }
192197 return & connSecurityMultiaddrs {
193198 ConnSecurity : c ,
0 commit comments