aboutsummaryrefslogtreecommitdiff
path: root/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'server.go')
-rw-r--r--server.go42
1 files changed, 8 insertions, 34 deletions
diff --git a/server.go b/server.go
index e7ba6cd..9300497 100644
--- a/server.go
+++ b/server.go
@@ -2,11 +2,9 @@ package goxy
import (
"crypto/tls"
- "encoding/json"
"net/http"
"net/http/httputil"
"net/url"
- "os"
"strings"
)
@@ -16,43 +14,19 @@ type Server struct {
http.Server
}
-func NewServer(fname string) (*Server, error) {
+func NewServer(dataFile string) (*Server, error) {
r := make(Route)
s := http.Server{TLSConfig: &tls.Config{GetCertificate: r.GetCertificate}}
- server := &Server{Route: r, Server: s, DataFile: fname}
- server.Load()
- Register(server)
- return server, server.Restore()
-}
-
-// Save routes to persistent file
-func (s Server) Save() error {
- if s.DataFile == "" {
- return nil
- }
- fd, err := os.Create(s.DataFile)
- if err != nil {
- return err
- }
- defer fd.Close()
- return json.NewEncoder(fd).Encode(s.Route)
-}
-
-// Load routes from persistent file
-func (s *Server) Load() error {
- if s.DataFile == "" {
- return nil
- }
- fd, err := os.Open(s.DataFile)
- if err != nil {
- return err
+ server := &Server{Route: r, Server: s, DataFile: dataFile}
+ if dataFile != "" {
+ server.Load(dataFile)
}
- defer fd.Close()
- return json.NewDecoder(fd).Decode(&s.Route)
+ RegisterRPC(server)
+ return server, server.Update()
}
-// Restore and update routes from in-memory state
-func (s *Server) Restore() error {
+// Update routes from in-memory state
+func (s *Server) Update() error {
mux := http.NewServeMux()
for k, v := range s.Route {
if v.Cert != nil && v.Key != nil {