aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-03-27 22:15:22 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-03-27 22:15:22 +0200
commit13ce0d0853fc888cf465742ed2e134e9bc5be77a (patch)
tree2a1e48e4820c14b62478e7bb1eb336f90ddbc43f
parentd21557ca8920525494670ab59474dd0c3a3517ad (diff)
Clenup RPC
-rw-r--r--cmd/goxyctl/main.go16
-rw-r--r--rpc.go43
-rw-r--r--server.go2
-rw-r--r--server_test.go8
4 files changed, 45 insertions, 24 deletions
diff --git a/cmd/goxyctl/main.go b/cmd/goxyctl/main.go
index 1057fd4..d68eafa 100644
--- a/cmd/goxyctl/main.go
+++ b/cmd/goxyctl/main.go
@@ -4,7 +4,6 @@ import (
"flag"
"io/ioutil"
"log"
- "net/rpc"
"dim13.org/goxy"
)
@@ -34,22 +33,15 @@ func loadCert(certFile, keyFile string) ([]byte, []byte) {
}
func send(server string, e goxy.Entry, del bool) error {
- client, err := rpc.DialHTTP("tcp", server)
- if err != nil {
- return err
- }
- defer client.Close()
-
switch {
case e.ServerName != "" && e.Upstream != "":
log.Println("Add", e)
- return client.Call("GoXY.Add", e, nil)
+ return goxy.Add(e, server)
case e.ServerName != "" && del:
- log.Println("Del", e)
- return client.Call("GoXY.Del", e, nil)
+ log.Println("Del", e.ServerName)
+ return goxy.Del(e.ServerName, server)
default:
- var r goxy.Route
- err = client.Call("GoXY.List", struct{}{}, &r)
+ r, err := goxy.List(server)
if err != nil {
return err
}
diff --git a/rpc.go b/rpc.go
index bf7b36d..e7a6a20 100644
--- a/rpc.go
+++ b/rpc.go
@@ -14,7 +14,7 @@ func Register(s *Server) {
rpc.HandleHTTP()
}
-// Add adds a new route
+// Add adds a new route (server)
func (s *GoXY) Add(e Entry, _ *struct{}) error {
log.Println("Add route", e)
defer s.Server.Save()
@@ -22,16 +22,49 @@ func (s *GoXY) Add(e Entry, _ *struct{}) error {
return s.Server.Restore()
}
-// Del removes a route
-func (s *GoXY) Del(e Entry, _ *struct{}) error {
- log.Println("Del route", e)
+// Add new entry (client)
+func Add(e Entry, server string) error {
+ client, err := rpc.DialHTTP("tcp", server)
+ if err != nil {
+ return err
+ }
+ defer client.Close()
+ return client.Call("GoXY.Add", e, nil)
+}
+
+// Del removes a route (server)
+func (s *GoXY) Del(serverName string, _ *struct{}) error {
+ log.Println("Del route", serverName)
defer s.Server.Save()
- delete(s.Server.Route, e.ServerName)
+ delete(s.Server.Route, serverName)
return s.Server.Restore()
}
+// Del removes a route (client)
+func Del(serverName string, server string) error {
+ client, err := rpc.DialHTTP("tcp", server)
+ if err != nil {
+ return err
+ }
+ defer client.Close()
+ return client.Call("GoXY.Del", serverName, nil)
+}
+
// List routes
func (s GoXY) List(_ struct{}, r *Route) error {
*r = s.Server.Route
return nil
}
+
+func List(server string) (Route, error) {
+ client, err := rpc.DialHTTP("tcp", server)
+ if err != nil {
+ return nil, err
+ }
+ defer client.Close()
+ var r Route
+ if err := client.Call("GoXY.List", struct{}{}, &r); err != nil {
+ return nil, err
+ }
+ return r, nil
+}
diff --git a/server.go b/server.go
index 6f66942..5225ffc 100644
--- a/server.go
+++ b/server.go
@@ -9,9 +9,9 @@ import (
)
type Server struct {
+ Data string
Route
http.Server
- Data string
}
func NewServer(fname string) (*Server, error) {
diff --git a/server_test.go b/server_test.go
index f3ad3d8..8ef9a5a 100644
--- a/server_test.go
+++ b/server_test.go
@@ -22,13 +22,9 @@ func TestNewServer(t *testing.T) {
t.Error(err)
}
- errc := make(chan error, 2)
- go func() { errc <- server.ListenAndServe() }()
- go func() { errc <- http.ListenAndServe(":http-alt", nil) }()
- select {
- case err := <-errc:
+ err = server.Start()
+ if err != nil {
t.Error(err)
- default:
}
client, err := rpc.DialHTTP("tcp", ":http-alt")