func startDiameterAgent(internalSMGChan chan rpcclient.RpcClientConnection, exitChan chan bool) { utils.Logger.Info("Starting CGRateS DiameterAgent service.") var smgConn *rpcclient.RpcClient var err error if cfg.DiameterAgentCfg().SMGeneric == utils.INTERNAL { smgRpc := <-internalSMGChan internalSMGChan <- smgRpc smgConn, err = rpcclient.NewRpcClient("", "", 0, 0, rpcclient.INTERNAL_RPC, smgRpc) } else { smgConn, err = rpcclient.NewRpcClient("tcp", cfg.DiameterAgentCfg().SMGeneric, cfg.ConnectAttempts, cfg.Reconnects, utils.GOB, nil) } if err != nil { utils.Logger.Crit(fmt.Sprintf("<DiameterAgent> Could not connect to SMG: %s", err.Error())) exitChan <- true return } da, err := agents.NewDiameterAgent(cfg, smgConn) if err != nil { utils.Logger.Err(fmt.Sprintf("<DiameterAgent> error: %s!", err)) exitChan <- true return } if err = da.ListenAndServe(); err != nil { utils.Logger.Err(fmt.Sprintf("<DiameterAgent> error: %s!", err)) } exitChan <- true }
func startDiameterAgent(internalSMGChan, internalPubSubSChan chan rpcclient.RpcClientConnection, exitChan chan bool) { utils.Logger.Info("Starting CGRateS DiameterAgent service.") var smgConn, pubsubConn *rpcclient.RpcClientPool if len(cfg.DiameterAgentCfg().SMGenericConns) != 0 { smgConn, err = engine.NewRPCPool(rpcclient.POOL_BROADCAST, cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, cfg.DiameterAgentCfg().SMGenericConns, internalSMGChan, cfg.InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<DiameterAgent> Could not connect to SMG: %s", err.Error())) exitChan <- true return } } if len(cfg.DiameterAgentCfg().PubSubConns) != 0 { pubsubConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, cfg.DiameterAgentCfg().PubSubConns, internalPubSubSChan, cfg.InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<DiameterAgent> Could not connect to PubSubS: %s", err.Error())) exitChan <- true return } } da, err := agents.NewDiameterAgent(cfg, smgConn, pubsubConn) if err != nil { utils.Logger.Err(fmt.Sprintf("<DiameterAgent> error: %s!", err)) exitChan <- true return } if err = da.ListenAndServe(); err != nil { utils.Logger.Err(fmt.Sprintf("<DiameterAgent> error: %s!", err)) } exitChan <- true }
func startDiameterAgent(internalSMGChan chan *sessionmanager.SMGeneric, internalPubSubSChan chan rpcclient.RpcClientConnection, exitChan chan bool) { utils.Logger.Info("Starting CGRateS DiameterAgent service.") smgChan := make(chan rpcclient.RpcClientConnection, 1) // Use it to pass smg go func(internalSMGChan chan *sessionmanager.SMGeneric, smgChan chan rpcclient.RpcClientConnection) { // Need this to pass from *sessionmanager.SMGeneric to rpcclient.RpcClientConnection smg := <-internalSMGChan internalSMGChan <- smg smgChan <- smg }(internalSMGChan, smgChan) var smgConn, pubsubConn *rpcclient.RpcClientPool if len(cfg.DiameterAgentCfg().SMGenericConns) != 0 { smgConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, cfg.DiameterAgentCfg().SMGenericConns, smgChan, cfg.InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<DiameterAgent> Could not connect to SMG: %s", err.Error())) exitChan <- true return } } if len(cfg.DiameterAgentCfg().PubSubConns) != 0 { pubsubConn, err = engine.NewRPCPool(rpcclient.POOL_FIRST, cfg.ConnectAttempts, cfg.Reconnects, cfg.ConnectTimeout, cfg.ReplyTimeout, cfg.DiameterAgentCfg().PubSubConns, internalPubSubSChan, cfg.InternalTtl) if err != nil { utils.Logger.Crit(fmt.Sprintf("<DiameterAgent> Could not connect to PubSubS: %s", err.Error())) exitChan <- true return } } da, err := agents.NewDiameterAgent(cfg, smgConn, pubsubConn) if err != nil { utils.Logger.Err(fmt.Sprintf("<DiameterAgent> error: %s!", err)) exitChan <- true return } if err = da.ListenAndServe(); err != nil { utils.Logger.Err(fmt.Sprintf("<DiameterAgent> error: %s!", err)) } exitChan <- true }