diff options
author | Wim <wim@42.be> | 2018-11-25 10:35:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-25 10:35:35 +0100 |
commit | f4d4dc91b1125a417f7f1e2f704fe2925809ba1c (patch) | |
tree | 6d2e16d7849e57d5e86853460aaac094ba074464 /gateway | |
parent | c6fd65d1d7f5085890c0a00d37be8d6abb458921 (diff) | |
download | matterbridge-msglm-f4d4dc91b1125a417f7f1e2f704fe2925809ba1c.tar.gz matterbridge-msglm-f4d4dc91b1125a417f7f1e2f704fe2925809ba1c.tar.bz2 matterbridge-msglm-f4d4dc91b1125a417f7f1e2f704fe2925809ba1c.zip |
Add option to ignore failing bridge on start. Fixes #455 (#603)
Diffstat (limited to 'gateway')
-rw-r--r-- | gateway/router.go | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/gateway/router.go b/gateway/router.go index 99b34378..13e8ddd8 100644 --- a/gateway/router.go +++ b/gateway/router.go @@ -54,17 +54,46 @@ func (r *Router) Start() error { flog.Infof("Starting bridge: %s ", br.Account) err := br.Connect() if err != nil { - return fmt.Errorf("Bridge %s failed to start: %v", br.Account, err) + e := fmt.Errorf("Bridge %s failed to start: %v", br.Account, err) + if r.disableBridge(br, e) { + continue + } + return e } err = br.JoinChannels() if err != nil { - return fmt.Errorf("Bridge %s failed to join channel: %v", br.Account, err) + e := fmt.Errorf("Bridge %s failed to join channel: %v", br.Account, err) + if r.disableBridge(br, e) { + continue + } + return e + } + } + // remove unused bridges + for _, gw := range r.Gateways { + for i, br := range gw.Bridges { + if br.Bridger == nil { + flog.Errorf("removing failed bridge %s", i) + delete(gw.Bridges, i) + } } } go r.handleReceive() return nil } +// disableBridge returns true and empties a bridge if we have IgnoreFailureOnStart configured +// otherwise returns false +func (r *Router) disableBridge(br *bridge.Bridge, err error) bool { + if r.BridgeValues().General.IgnoreFailureOnStart { + flog.Error(err) + // setting this bridge empty + *br = bridge.Bridge{} + return true + } + return false +} + func (r *Router) getBridge(account string) *bridge.Bridge { for _, gw := range r.Gateways { if br, ok := gw.Bridges[account]; ok { |