Пример #1
0
func main() {
	o := ParseOpts()
	if o.ShowVersion {
		fmt.Println("sms-api-server", Version)
		os.Exit(0)
	}
	tx := &smpp.Transceiver{
		Addr:   o.SMPPAddr,
		User:   os.Getenv("SMPP_USER"),
		Passwd: os.Getenv("SMPP_PASSWD"),
	}
	exit := make(chan os.Signal, 1)
	signal.Notify(exit, os.Interrupt, os.Kill)
	go func() {
		<-exit
		tx.Close()
		os.Exit(0)
	}()
	if o.ClientTLS {
		host, _, _ := net.SplitHostPort(tx.Addr)
		tx.TLS = &tls.Config{
			ServerName: host,
		}
		if o.ClientTLSInsecure {
			tx.TLS.InsecureSkipVerify = true
		}
	}
	api := &apiserver.Handler{Prefix: o.APIPrefix, Tx: tx}
	conn := api.Register(http.DefaultServeMux)
	go func() {
		for c := range conn {
			m := fmt.Sprintf("SMPP connection status to %s: %s",
				o.SMPPAddr, c.Status())
			if err := c.Error(); err != nil {
				m = fmt.Sprintf("%s (%v)", m, err)
			}
			log.Println(m)
		}
	}()
	if o.PublicDir != "" {
		fs := http.FileServer(http.Dir(o.PublicDir))
		http.Handle("/", http.StripPrefix(o.APIPrefix, fs))
	}
	mux := http.Handler(http.DefaultServeMux)
	if o.Log {
		var l *log.Logger
		if o.LogTS {
			l = log.New(os.Stderr, "", log.LstdFlags)
		} else {
			l = log.New(os.Stderr, "", 0)
		}
		mux = httplog.ApacheCombinedFormat(l)(mux.ServeHTTP)
	}
	err := ListenAndServe(o, mux)
	if err != nil {
		log.Fatal(err)
	}
}
Пример #2
0
func (f *apiHandler) config(mc *httpmux.Config) error {
	mc.Prefix = f.conf.APIPrefix
	if f.conf.PublicDir != "" {
		mc.NotFound = f.publicDir()
	}
	if f.conf.UseXForwardedFor {
		mc.UseFunc(httplog.UseXForwardedFor)
	}
	if !f.conf.Silent {
		mc.UseFunc(httplog.ApacheCombinedFormat(f.conf.accessLogger()))
	}
	mc.UseFunc(f.metrics)
	if f.conf.RateLimitLimit > 0 {
		rl, err := newRateLimiter(f.conf)
		if err != nil {
			return fmt.Errorf("failed to create rate limiter: %v", err)
		}
		mc.Use(rl.Handle)
	}
	return nil
}