diff --git a/ipe/ipe.go b/ipe/ipe.go index 16b9720..a26d941 100644 --- a/ipe/ipe.go +++ b/ipe/ipe.go @@ -10,41 +10,61 @@ import ( "net/http" "math/rand" "time" + + "github.com/gorilla/mux" + log "github.com/golang/glog" ) // Conf holds the global configuration state var conf configFile +func Run(conf configFile, router *mux.Router) chan error { + + errs := make(chan error) + + // Starting HTTP server + go func() { + log.Infof("Staring HTTP service on %s ...", conf.Host) + + if err := http.ListenAndServe(conf.Host, router); err != nil { + errs <- err + } + + }() + + if conf.Encrypted { + // Starting HTTPS server + go func() { + log.Infof("Staring HTTPS service on %s ...", conf.SSLHost) + if err := http.ListenAndServeTLS(conf.SSLHost, conf.SSLPublicKey, conf.SSLPrivateKey, router); err != nil { + errs <- err + } + }() + } + + return errs +} + // Start Parse the configuration file and starts the ipe server -func Start(configfile string) error { +func Start(configfile string) { rand.Seed(time.Now().Unix()) file, err := ioutil.ReadFile(configfile) if err != nil { - return err + log.Fatal(err) } if err := json.Unmarshal(file, &conf); err != nil { - return err + log.Fatal(err) } conf.Init() router := newRouter() - if conf.Encrypted { - go func () { - if err := http.ListenAndServe(conf.Host, router); err != nil { - return err - } - } - if err := http.ListenAndServeTLS(conf.SSLHost, conf.SSLPublicKey, conf.SSLPrivateKey, router); err != nil { - return err - } - }else{ - if err := http.ListenAndServe(conf.Host, router); err != nil { - return err - } - } + errs := Run(conf, router) - return nil + select { + case err := <-errs: + log.Errorf("Could not start serving service due to (error: %s)", err) + } } diff --git a/main.go b/main.go index 9e16226..6745b28 100644 --- a/main.go +++ b/main.go @@ -9,7 +9,6 @@ import ( "fmt" "github.com/dimiro1/ipe/ipe" - log "github.com/golang/glog" ) // Main function, initialze the system @@ -19,9 +18,7 @@ func main() { printBanner() - if err := ipe.Start(*filename); err != nil { - log.Fatal(err) - } + ipe.Start(*filename) } // Print a beautifull banner