mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 14:07:02 +09:00
peerservice dialScheme
This commit is contained in:
parent
17084d990b
commit
a31f05a201
2 changed files with 29 additions and 17 deletions
|
@ -3,6 +3,7 @@ package peerservice
|
|||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/anyproto/any-sync/app"
|
||||
"github.com/anyproto/any-sync/app/logger"
|
||||
"github.com/anyproto/any-sync/net/peer"
|
||||
|
@ -93,23 +94,9 @@ func (p *peerService) Dial(ctx context.Context, peerId string) (pr peer.Peer, er
|
|||
schemes = quicPreferSchemes
|
||||
}
|
||||
|
||||
err = ErrAddrsNotFound
|
||||
for _, sch := range schemes {
|
||||
for _, addr := range addrs {
|
||||
if scheme(addr) != sch {
|
||||
continue
|
||||
}
|
||||
if sch == transport.Quic {
|
||||
mc, err = p.quic.Dial(ctx, stripScheme(addr))
|
||||
} else {
|
||||
mc, err = p.yamux.Dial(ctx, stripScheme(addr))
|
||||
}
|
||||
if err != nil {
|
||||
log.InfoCtx(ctx, "can't connect to host", zap.String("addr", addr), zap.Error(err))
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
if mc, err = p.dialScheme(ctx, sch, addrs); err == nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
@ -126,6 +113,31 @@ func (p *peerService) Dial(ctx context.Context, peerId string) (pr peer.Peer, er
|
|||
return peer.NewPeer(mc, p.server)
|
||||
}
|
||||
|
||||
func (p *peerService) dialScheme(ctx context.Context, sch string, addrs []string) (mc transport.MultiConn, err error) {
|
||||
var tr transport.Transport
|
||||
switch sch {
|
||||
case transport.Quic:
|
||||
tr = p.quic
|
||||
case transport.Yamux:
|
||||
tr = p.yamux
|
||||
default:
|
||||
return nil, fmt.Errorf("unexpected transport: %v", sch)
|
||||
}
|
||||
|
||||
err = ErrAddrsNotFound
|
||||
for _, addr := range addrs {
|
||||
if scheme(addr) != sch {
|
||||
continue
|
||||
}
|
||||
if mc, err = tr.Dial(ctx, stripScheme(addr)); err == nil {
|
||||
return
|
||||
} else {
|
||||
log.InfoCtx(ctx, "can't connect to host", zap.String("addr", addr), zap.Error(err))
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (p *peerService) Accept(mc transport.MultiConn) (err error) {
|
||||
pr, err := peer.NewPeer(mc, p.server)
|
||||
if err != nil {
|
||||
|
|
|
@ -121,7 +121,7 @@ func (q *quicTransport) Dial(ctx context.Context, addr string) (mc transport.Mul
|
|||
|
||||
stream, err := qConn.OpenStreamSync(ctx)
|
||||
if err != nil {
|
||||
_ = qConn.CloseWithError(1, "")
|
||||
_ = qConn.CloseWithError(1, err.Error())
|
||||
return nil, err
|
||||
}
|
||||
defer func() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue