summaryrefslogtreecommitdiffstats
path: root/gateway/router.go
diff options
context:
space:
mode:
authorWim <wim@42.be>2018-11-25 10:35:35 +0100
committerGitHub <noreply@github.com>2018-11-25 10:35:35 +0100
commitf4d4dc91b1125a417f7f1e2f704fe2925809ba1c (patch)
tree6d2e16d7849e57d5e86853460aaac094ba074464 /gateway/router.go
parentc6fd65d1d7f5085890c0a00d37be8d6abb458921 (diff)
downloadmatterbridge-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/router.go')
-rw-r--r--gateway/router.go33
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 {