mfproxy/config.go

51 lines
1.2 KiB
Go

package main
import (
"fmt"
"local/args"
"log"
"time"
"golang.org/x/time/rate"
)
type Config struct {
Listen string
Timeout time.Duration
TLSInsecure bool
Limiter *rate.Limiter
DNS string
TCPProxy string
}
func NewConfig() *Config {
as := args.NewArgSet()
as.Append(args.INT, "p", "port to listen on", 61113)
as.Append(args.INT, "kbps", "kilobytes per sec limit", -1)
as.Append(args.BOOL, "tls-insecure", "permit tls insecure", false)
as.Append(args.DURATION, "t", "timeout", time.Minute)
as.Append(args.STRING, "dns", "dns ip:port", "1.1.1.1:53")
as.Append(args.STRING, "tcp-proxy", "host:port to tcp proxy to instead", "")
if err := as.Parse(); err != nil {
panic(err)
}
var limiter *rate.Limiter
if kbps := as.GetInt("kbps"); kbps > 0 {
limiter = rate.NewLimiter(rate.Limit(kbps*1024), 100*1024)
log.Printf("created limiter with (%v, %v)", limiter.Limit(), limiter.Burst())
}
return &Config{
Listen: fmt.Sprintf(":%v", as.GetInt("p")),
Timeout: as.GetDuration("t"),
TLSInsecure: as.GetBool("tls-insecure"),
Limiter: limiter,
DNS: as.GetString("dns"),
TCPProxy: as.GetString("tcp-proxy"),
}
}