Skip to content

Commit 8a1214f

Browse files
committed
pr fixes
1 parent a45096d commit 8a1214f

3 files changed

Lines changed: 21 additions & 16 deletions

File tree

p2p/transport/webtransport/listener_js.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
package libp2pwebtransport
44

55
import (
6-
"errors"
76
"net"
87
"sync"
98

@@ -12,8 +11,6 @@ import (
1211
manet "github.com/multiformats/go-multiaddr/net"
1312
)
1413

15-
var errListenerClosed = errors.New("webtransport listener closed")
16-
1714
// noopListener is a placeholder listener for js/wasm. The browser cannot accept
1815
// inbound WebTransport sessions, so listing this transport in the host's listen
1916
// addresses must not error. Accept blocks until Close, mirroring how a closed
@@ -69,7 +66,7 @@ func appendComponent(m ma.Multiaddr, c *ma.Component) ma.Multiaddr {
6966

7067
func (l *noopListener) Accept() (tpt.CapableConn, error) {
7168
<-l.closed
72-
return nil, errListenerClosed
69+
return nil, tpt.ErrListenerClosed
7370
}
7471

7572
func (l *noopListener) Close() error {

p2p/transport/webtransport/stream_js.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,19 @@ func (s *stream) Read(b []byte) (int, error) {
4949
return 0, io.EOF
5050
}
5151
n, err := s.read(b)
52+
if n > 0 {
53+
s.readAny = true
54+
}
5255
if err != nil {
5356
if s.readAny && err.Error() == errInputStream {
5457
s.done = true
58+
if n > 0 {
59+
return n, nil
60+
}
5561
return 0, io.EOF
5662
}
5763
return n, err
5864
}
59-
if n > 0 {
60-
s.readAny = true
61-
}
6265
return n, nil
6366
}
6467

p2p/transport/webtransport/transport_js.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
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

137138
func (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

Comments
 (0)