diff --git a/pkg/connector/client.go b/pkg/connector/client.go index 60af485c..b0034654 100644 --- a/pkg/connector/client.go +++ b/pkg/connector/client.go @@ -58,6 +58,7 @@ type MetaClient struct { E2EEClient *whatsmeow.Client WADevice *store.Device e2eeConnectLock sync.Mutex + waGenericErrors int metaState status.BridgeState waState status.BridgeState diff --git a/pkg/connector/handlewhatsapp.go b/pkg/connector/handlewhatsapp.go index 678aa24a..5d51a06d 100644 --- a/pkg/connector/handlewhatsapp.go +++ b/pkg/connector/handlewhatsapp.go @@ -18,6 +18,8 @@ import ( "go.mau.fi/mautrix-meta/pkg/metaid" ) +var MaxGenericWhatsappErrorRetries = 5 + func (m *MetaClient) e2eeEventHandler(rawEvt any) bool { if m == nil || m.E2EEClient == nil { return false @@ -80,6 +82,7 @@ func (m *MetaClient) e2eeEventHandler(rawEvt any) bool { m.e2eeConnectWaiter.Set() m.waState = status.BridgeState{StateEvent: status.StateConnected} m.UserLogin.BridgeState.Send(m.waState) + m.waGenericErrors = 0 case *events.Disconnected: log.Debug().Msg("Disconnected from WhatsApp socket") m.e2eeConnectWaiter.Clear() @@ -128,6 +131,10 @@ func (m *MetaClient) e2eeEventHandler(rawEvt any) bool { m.resetWADevice() log.Debug().Msg("Doing full reconnect after WhatsApp 418 error") go m.FullReconnect() + } else if e.Reason == events.ConnectFailureGeneric && m.canReconnect() && m.waGenericErrors < MaxGenericWhatsappErrorRetries { + log.Debug().Msg("Doing full reconnect after WhatsApp 400 error") + m.waGenericErrors++ + go m.FullReconnect() } }