package icsapp import ( "strings" "time" "gitlab.com/ics_cinnamon/voicegateway/icsconf" "gitlab.com/ics_cinnamon/voicegateway/icserror" "gitlab.com/ics_cinnamon/voicegateway/icslog" "gitlab.com/ics_cinnamon/voicegateway/icssessionmanager" "gitlab.com/ics_cinnamon/voicegateway/icssvc" ) type IcsExec struct { service *icssvc.IcsService config *icsconf.IcsConfig //pcap icspcap.IcsPcap } func Init(conf *icsconf.IcsConfig) (e *IcsExec) { e = &IcsExec{} e.service = icssvc.GetServiceStatus() e.config = conf //e.pcap = icspcap.New() return e } func (exe IcsExec) Execute() *icserror.IcsError { l := icslog.GetIcsLog() for !exe.service.GetExit() { for exe.service.GetStop() { time.Sleep(time.Millisecond) } //init session manager and run session, listen SIP port sm := icssessionmanager.NewSessionManager() if sm == nil { l.Print(icslog.LOG_LEVEL_FATAL, -1, "Could not init Session Manager!!!") return icserror.ICSERRSVCInit } sm.Load() /////////////////////////////// //start sip processor smDone := make(chan *icserror.IcsError) go func() { smErr := sm.Run() if smErr != nil { smDone <- smErr return } defer sm.Close() //smDone <- nil }() ///////////////////////////////////////////////////////////////////// //start bot-command TCP listener cmdDone := make(chan *icserror.IcsError) bcValue := strings.ToUpper(exe.config.CommandConfig.Value) if strings.Compare("TRUE", bcValue) == 0 { go func() { cmdErr := sm.RunBotCommandMNG() if cmdErr != nil { cmdDone <- cmdErr return } //defer sm.Close() //cmdDone <- nil }() } select { case err := <-smDone: l.Printf(icslog.LOG_LEVEL_INFO, -1, "Closed SessionManager: %s", err) if err != nil { //err.Print() return err } case err := <-cmdDone: l.Printf(icslog.LOG_LEVEL_INFO, -1, "Closed BotCommand manager: %s", err) if err != nil { //err.Print() return err } } } return nil }