aboutsummaryrefslogtreecommitdiff
path: root/rpc.go
diff options
context:
space:
mode:
Diffstat (limited to 'rpc.go')
-rw-r--r--rpc.go30
1 files changed, 26 insertions, 4 deletions
diff --git a/rpc.go b/rpc.go
index bf34484..a96bb61 100644
--- a/rpc.go
+++ b/rpc.go
@@ -2,10 +2,12 @@ package goxy
import (
"crypto/tls"
+ "encoding/json"
"errors"
"fmt"
"net/rpc"
"net/url"
+ "os"
)
var (
@@ -16,6 +18,8 @@ var (
const RPCPort = ":8000"
+type Entries map[string]Entry
+
// Entry holds routing settings
type Entry struct {
Host string // URL
@@ -56,7 +60,7 @@ func (s *GoXY) Add(e Entry, _ *struct{}) error {
if host.Path == "" {
host.Path = "/"
}
- r := route{
+ r := Route{
ServerName: host,
Upstream: up,
}
@@ -71,7 +75,7 @@ func (s *GoXY) Add(e Entry, _ *struct{}) error {
r.Certificate = &crt
}
defer s.server.Save(s.server.DataFile)
- s.server.Route[host.Host] = r
+ s.server.Routes[host.Host] = r
return s.server.Update()
}
@@ -84,15 +88,33 @@ func (s *GoXY) Del(host string, _ *struct{}) error {
if h.Host == "" {
return ErrEmptyHost
}
- delete(s.server.Route, h.Host)
+ delete(s.server.Routes, h.Host)
s.server.Save(s.server.DataFile)
return s.server.Update()
}
// List routes
func (s GoXY) List(_ struct{}, ret *[]string) error {
- for _, v := range s.server.Route {
+ for _, v := range s.server.Routes {
*ret = append(*ret, fmt.Sprint(v))
}
return nil
}
+
+func (e Entries) Save(fname string) error {
+ fd, err := os.Create(fname)
+ if err != nil {
+ return err
+ }
+ defer fd.Close()
+ return json.NewEncoder(fd).Encode(e)
+}
+
+func (e *Entries) Load(fname string) error {
+ fd, err := os.Open(fname)
+ if err != nil {
+ return err
+ }
+ defer fd.Close()
+ return json.NewDecoder(fd).Decode(e)
+}