mirror of
https://github.com/cmz0228/hysteria-dev.git
synced 2025-06-09 05:49:54 +00:00
Merge pull request #572 from shadow750d6/master
Add `lazy_start` option.
This commit is contained in:
commit
13d46da998
@ -136,6 +136,7 @@ func client(config *clientConfig) {
|
|||||||
for {
|
for {
|
||||||
try += 1
|
try += 1
|
||||||
c, err := cs.NewClient(config.Server, auth, tlsConfig, quicConfig, pktConnFunc, up, down, config.FastOpen,
|
c, err := cs.NewClient(config.Server, auth, tlsConfig, quicConfig, pktConnFunc, up, down, config.FastOpen,
|
||||||
|
config.LazyStart,
|
||||||
func(err error) {
|
func(err error) {
|
||||||
if config.QuitOnDisconnect {
|
if config.QuitOnDisconnect {
|
||||||
logrus.WithFields(logrus.Fields{
|
logrus.WithFields(logrus.Fields{
|
||||||
@ -170,7 +171,11 @@ func client(config *clientConfig) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
defer client.Close()
|
defer client.Close()
|
||||||
|
if config.LazyStart {
|
||||||
|
logrus.WithField("addr", config.Server).Info("Lazy start enabled, waiting for first connection")
|
||||||
|
} else {
|
||||||
logrus.WithField("addr", config.Server).Info("Connected")
|
logrus.WithField("addr", config.Server).Info("Connected")
|
||||||
|
}
|
||||||
|
|
||||||
// Local
|
// Local
|
||||||
errChan := make(chan error)
|
errChan := make(chan error)
|
||||||
|
@ -227,6 +227,7 @@ type clientConfig struct {
|
|||||||
ReceiveWindow uint64 `json:"recv_window"`
|
ReceiveWindow uint64 `json:"recv_window"`
|
||||||
DisableMTUDiscovery bool `json:"disable_mtu_discovery"`
|
DisableMTUDiscovery bool `json:"disable_mtu_discovery"`
|
||||||
FastOpen bool `json:"fast_open"`
|
FastOpen bool `json:"fast_open"`
|
||||||
|
LazyStart bool `json:"lazy_start"`
|
||||||
Resolver string `json:"resolver"`
|
Resolver string `json:"resolver"`
|
||||||
ResolvePreference string `json:"resolve_preference"`
|
ResolvePreference string `json:"resolve_preference"`
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ type Client struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewClient(serverAddr string, auth []byte, tlsConfig *tls.Config, quicConfig *quic.Config,
|
func NewClient(serverAddr string, auth []byte, tlsConfig *tls.Config, quicConfig *quic.Config,
|
||||||
pktConnFunc pktconns.ClientPacketConnFunc, sendBPS uint64, recvBPS uint64, fastOpen bool,
|
pktConnFunc pktconns.ClientPacketConnFunc, sendBPS uint64, recvBPS uint64, fastOpen bool, lazyStart bool,
|
||||||
quicReconnectFunc func(err error),
|
quicReconnectFunc func(err error),
|
||||||
) (*Client, error) {
|
) (*Client, error) {
|
||||||
quicConfig.DisablePathMTUDiscovery = quicConfig.DisablePathMTUDiscovery || pmtud.DisablePathMTUDiscovery
|
quicConfig.DisablePathMTUDiscovery = quicConfig.DisablePathMTUDiscovery || pmtud.DisablePathMTUDiscovery
|
||||||
@ -64,6 +64,9 @@ func NewClient(serverAddr string, auth []byte, tlsConfig *tls.Config, quicConfig
|
|||||||
pktConnFunc: pktConnFunc,
|
pktConnFunc: pktConnFunc,
|
||||||
quicReconnectFunc: quicReconnectFunc,
|
quicReconnectFunc: quicReconnectFunc,
|
||||||
}
|
}
|
||||||
|
if lazyStart {
|
||||||
|
return c, nil
|
||||||
|
}
|
||||||
if err := c.connect(); err != nil {
|
if err := c.connect(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -182,6 +185,7 @@ func (c *Client) openStreamWithReconnect() (quic.Connection, quic.Stream, error)
|
|||||||
if c.closed {
|
if c.closed {
|
||||||
return nil, nil, ErrClosed
|
return nil, nil, ErrClosed
|
||||||
}
|
}
|
||||||
|
if c.quicConn != nil {
|
||||||
stream, err := c.quicConn.OpenStream()
|
stream, err := c.quicConn.OpenStream()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
// All good
|
// All good
|
||||||
@ -195,13 +199,14 @@ func (c *Client) openStreamWithReconnect() (quic.Connection, quic.Stream, error)
|
|||||||
if c.quicReconnectFunc != nil {
|
if c.quicReconnectFunc != nil {
|
||||||
c.quicReconnectFunc(err)
|
c.quicReconnectFunc(err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Permanent error, need to reconnect
|
// Permanent error, need to reconnect
|
||||||
if err := c.connect(); err != nil {
|
if err := c.connect(); err != nil {
|
||||||
// Still error, oops
|
// Still error, oops
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
// We are not going to try again even if it still fails the second time
|
// We are not going to try again even if it still fails the second time
|
||||||
stream, err = c.quicConn.OpenStream()
|
stream, err := c.quicConn.OpenStream()
|
||||||
return c.quicConn, &qStream{stream}, err
|
return c.quicConn, &qStream{stream}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user