summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bridge/bridge.go29
-rw-r--r--gateway/gateway.go16
2 files changed, 33 insertions, 12 deletions
diff --git a/bridge/bridge.go b/bridge/bridge.go
index c8c6ac4e..db26c422 100644
--- a/bridge/bridge.go
+++ b/bridge/bridge.go
@@ -25,16 +25,17 @@ type Bridger interface {
type Bridge struct {
Config config.Protocol
Bridger
- Name string
- Account string
- Protocol string
- ChannelsOut []string
- ChannelsIn []string
- ChannelOptions config.ChannelOptions
+ Name string
+ Account string
+ Protocol string
+ ChannelsIn map[string]config.ChannelOptions
+ ChannelsOut map[string]config.ChannelOptions
}
func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Bridge {
b := new(Bridge)
+ b.ChannelsIn = make(map[string]config.ChannelOptions)
+ b.ChannelsOut = make(map[string]config.ChannelOptions)
accInfo := strings.Split(bridge.Account, ".")
protocol := accInfo[0]
name := accInfo[1]
@@ -75,10 +76,22 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid
func (b *Bridge) JoinChannels() error {
exists := make(map[string]bool)
- for _, channel := range append(b.ChannelsIn, b.ChannelsOut...) {
+ b.joinChannels(b.ChannelsIn, exists)
+ b.joinChannels(b.ChannelsOut, exists)
+ return nil
+}
+
+func (b *Bridge) joinChannels(cMap map[string]config.ChannelOptions, exists map[string]bool) error {
+ mychannel := ""
+ for channel, info := range cMap {
if !exists[channel] {
+ mychannel = channel
log.Infof("%s: joining %s", b.Account, channel)
- b.JoinChannel(channel)
+ if b.Protocol == "irc" && info.Key != "" {
+ log.Debugf("using key %s for channel %s", info.Key, channel)
+ mychannel = mychannel + " " + info.Key
+ }
+ b.JoinChannel(mychannel)
exists[channel] = true
}
}
diff --git a/gateway/gateway.go b/gateway/gateway.go
index 19571776..95bf902a 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -40,10 +40,8 @@ func (gw *Gateway) AddBridge(cfg *config.Bridge) error {
}
log.Infof("Starting bridge: %s ", cfg.Account)
br := bridge.New(gw.Config, cfg, gw.Message)
- br.ChannelsOut = gw.ChannelsOut[br.Account]
- br.ChannelsIn = gw.ChannelsIn[br.Account]
- br.ChannelOptions = gw.ChannelOptions[br.Account]
-
+ gw.mapChannelsToBridge(br, gw.ChannelsOut)
+ gw.mapChannelsToBridge(br, gw.ChannelsIn)
gw.Bridges[cfg.Account] = br
err := br.Connect()
if err != nil {
@@ -53,6 +51,16 @@ func (gw *Gateway) AddBridge(cfg *config.Bridge) error {
return nil
}
+func (gw *Gateway) mapChannelsToBridge(br *bridge.Bridge, cMap map[string][]string) {
+ for _, channel := range cMap[br.Account] {
+ if _, ok := gw.ChannelOptions[br.Account+channel]; ok {
+ br.ChannelsOut[channel] = gw.ChannelOptions[br.Account+channel]
+ } else {
+ br.ChannelsOut[channel] = config.ChannelOptions{}
+ }
+ }
+}
+
func (gw *Gateway) Start() error {
gw.mapChannels()
for _, br := range append(gw.MyConfig.In, append(gw.MyConfig.InOut, gw.MyConfig.Out...)...) {