package main import ( "flag" "io/ioutil" "log" "dim13.org/goxy" ) var ( rpcserver = flag.String("server", goxy.RPCPort, "RPC Server") host = flag.String("host", "", "Host URL") upstream = flag.String("up", "", "Upstream URL") keyfile = flag.String("key", "", "TLS Key file") certfile = flag.String("cert", "", "TLS Cert file") remove = flag.Bool("remove", false, "Remove host") ) func getRoute() (r goxy.Route, err error) { r.Host = *host r.Upstream = *upstream if *certfile != "" && *keyfile != "" { r.Cert, err = ioutil.ReadFile(*certfile) if err != nil { return } r.Key, err = ioutil.ReadFile(*keyfile) if err != nil { return } } return } func send(server string, r goxy.Route, del bool) error { client, err := goxy.DialRPC(server) if err != nil { return err } defer client.Close() switch { case r.Host != "" && r.Upstream != "": return client.Call("GoXY.Add", r, nil) case r.Host != "" && del: return client.Call("GoXY.Del", r.Host, nil) default: var ret []string err := client.Call("GoXY.List", struct{}{}, &ret) if err != nil { return err } for _, v := range ret { log.Println(v) } } return nil } func main() { flag.Parse() r, err := getRoute() if err != nil { log.Fatal(err) } if err := send(*rpcserver, r, *remove); err != nil { log.Fatal(err) } }