mirror of
https://github.com/cloudflare/cloudflared.git
synced 2025-05-24 07:06:35 +00:00

Some more legacy h2mux code to be cleaned up and moved out of the way. The h2mux.Header used in the serialization for http2 proxied headers is moved to connection module. Additionally, the booleanfuse structure is also moved to supervisor as it is also needed. Both of these structures could be evaluated later for removal/updates, however, the intent of the proposed changes here is to remove the dependencies on the h2mux code and removal. Approved-by: Chung-Ting Huang <chungting@cloudflare.com> Approved-by: Luis Neto <lneto@cloudflare.com> Approved-by: Gonçalo Garcia <ggarcia@cloudflare.com> MR: https://gitlab.cfdata.org/cloudflare/tun/cloudflared/-/merge_requests/1576
79 lines
1.7 KiB
Go
79 lines
1.7 KiB
Go
package connection
|
|
|
|
import (
|
|
"github.com/cloudflare/cloudflared/edgediscovery"
|
|
tunnelpogs "github.com/cloudflare/cloudflared/tunnelrpc/pogs"
|
|
)
|
|
|
|
const (
|
|
DuplicateConnectionError = "EDUPCONN"
|
|
)
|
|
|
|
type DupConnRegisterTunnelError struct{}
|
|
|
|
var errDuplicationConnection = DupConnRegisterTunnelError{}
|
|
|
|
func (e DupConnRegisterTunnelError) Error() string {
|
|
return "already connected to this server, trying another address"
|
|
}
|
|
|
|
// Dial to edge server with quic failed
|
|
type EdgeQuicDialError struct {
|
|
Cause error
|
|
}
|
|
|
|
func (e *EdgeQuicDialError) Error() string {
|
|
return "failed to dial to edge with quic: " + e.Cause.Error()
|
|
}
|
|
|
|
func (e *EdgeQuicDialError) Unwrap() error {
|
|
return e.Cause
|
|
}
|
|
|
|
// RegisterTunnel error from server
|
|
type ServerRegisterTunnelError struct {
|
|
Cause error
|
|
Permanent bool
|
|
}
|
|
|
|
func (e ServerRegisterTunnelError) Error() string {
|
|
return e.Cause.Error()
|
|
}
|
|
|
|
func serverRegistrationErrorFromRPC(err error) ServerRegisterTunnelError {
|
|
if retryable, ok := err.(*tunnelpogs.RetryableError); ok {
|
|
return ServerRegisterTunnelError{
|
|
Cause: retryable.Unwrap(),
|
|
Permanent: false,
|
|
}
|
|
}
|
|
return ServerRegisterTunnelError{
|
|
Cause: err,
|
|
Permanent: true,
|
|
}
|
|
}
|
|
|
|
type muxerShutdownError struct{}
|
|
|
|
func (e muxerShutdownError) Error() string {
|
|
return "muxer shutdown"
|
|
}
|
|
|
|
var errMuxerStopped = muxerShutdownError{}
|
|
|
|
func isHandshakeErrRecoverable(err error, connIndex uint8, observer *Observer) bool {
|
|
log := observer.log.With().
|
|
Uint8(LogFieldConnIndex, connIndex).
|
|
Err(err).
|
|
Logger()
|
|
|
|
switch err.(type) {
|
|
case edgediscovery.DialError:
|
|
log.Error().Msg("Connection unable to dial edge")
|
|
default:
|
|
log.Error().Msg("Connection failed")
|
|
return false
|
|
}
|
|
return true
|
|
}
|