diff --git a/api/actions.go b/api/actions.go new file mode 100644 index 0000000..8363d68 --- /dev/null +++ b/api/actions.go @@ -0,0 +1,139 @@ +package api + +// Action - API Call ID numbers +type Action uint16 + +const ( + Null Action = 0 + ID Action = 1 + Dropoff Action = 2 + Pickup Action = 3 + CID Action = 16 + GetContact Action = 17 + GetContacts Action = 18 + AddContact Action = 19 + DeleteContact Action = 20 + GetChannel Action = 21 + GetChannels Action = 22 + AddChannel Action = 23 + DeleteChannel Action = 24 + GetProfile Action = 25 + GetProfiles Action = 26 + AddProfile Action = 27 + DeleteProfile Action = 28 + LoadProfile Action = 29 + GetPeer Action = 30 + GetPeers Action = 31 + AddPeer Action = 32 + DeletePeer Action = 33 + Send Action = 34 + SendChannel Action = 35 +) + +/* +// ActionToUint16 - returns the integer code for a string action name +func ActionToUint16(action string) uint16 { + switch action { + case "ID": + return ID + case "Dropoff": + return Dropoff + case "Pickup": + return Pickup + case "CID": + return CID + case "GetContact": + return GetContact + case "GetContacts": + return GetContacts + case "AddContact": + return AddContact + case "DeleteContact": + return DeleteContact + case "GetChannel": + return GetChannel + case "GetChannels": + return GetChannels + case "AddChannel": + return AddChannel + case "DeleteChannel": + return DeleteChannel + case "GetProfile": + return GetProfile + case "GetProfiles": + return GetProfiles + case "AddProfile": + return AddProfile + case "DeleteProfile": + return DeleteProfile + case "LoadProfile": + return LoadProfile + case "GetPeer": + return GetPeer + case "GetPeers": + return GetPeers + case "AddPeer": + return AddPeer + case "DeletePeer": + return DeletePeer + case "Send": + return Send + case "SendChannel": + return SendChannel + } + return Null +} + +// ActionFromUint16 - returns the string name for an integer action code +func ActionFromUint16(action uint16) string { + switch action { + case ID: + return "ID" + case Dropoff: + return "Dropoff" + case Pickup: + return "Pickup" + case CID: + return "CID" + case GetContact: + return "GetContact" + case GetContacts: + return "GetContacts" + case AddContact: + return "AddContact" + case DeleteContact: + return "DeleteContact" + case GetChannel: + return "GetChannel" + case GetChannels: + return "GetChannels" + case AddChannel: + return "AddChannel" + case DeleteChannel: + return "DeleteChannel" + case GetProfile: + return "GetProfile" + case GetProfiles: + return "GetProfiles" + case AddProfile: + return "AddProfile" + case DeleteProfile: + return "DeleteProfile" + case LoadProfile: + return "LoadProfile" + case GetPeer: + return "GetPeer" + case GetPeers: + return "GetPeers" + case AddPeer: + return "AddPeer" + case DeletePeer: + return "DeletePeer" + case Send: + return "Send" + case SendChannel: + return "SendChannel" + } + return "" +} +*/ diff --git a/api/remoting.go b/api/remoting.go index c2d6bcb..6671a20 100644 --- a/api/remoting.go +++ b/api/remoting.go @@ -13,34 +13,6 @@ import ( "github.com/awgh/bencrypt/rsa" ) -// API Call ID numbers -const ( - APINull = 0 - APIID = 1 - APIDropoff = 2 - APIPickup = 3 - APICID = 16 - APIGetContact = 17 - APIGetContacts = 18 - APIAddContact = 19 - APIDeleteContact = 20 - APIGetChannel = 21 - APIGetChannels = 22 - APIAddChannel = 23 - APIDeleteChannel = 24 - APIGetProfile = 25 - APIGetProfiles = 26 - APIAddProfile = 27 - APIDeleteProfile = 28 - APILoadProfile = 29 - APIGetPeer = 30 - APIGetPeers = 31 - APIAddPeer = 32 - APIDeletePeer = 33 - APISend = 34 - APISendChannel = 35 -) - // API Parameter Data types const ( APITypeInvalid byte = 0x0 @@ -70,7 +42,7 @@ const ( // RemoteCall : defines a Remote Procedure Call type RemoteCall struct { - Action string + Action Action Args []interface{} } @@ -86,112 +58,6 @@ func (r *RemoteResponse) IsNil() bool { return r.Value == nil } // IsErr - is this response an error? func (r *RemoteResponse) IsErr() bool { return r.Error != "" } -// ActionToUint16 - returns the integer code for a string action name -func ActionToUint16(action string) uint16 { - switch action { - case "ID": - return APIID - case "Dropoff": - return APIDropoff - case "Pickup": - return APIPickup - case "CID": - return APICID - case "GetContact": - return APIGetContact - case "GetContacts": - return APIGetContacts - case "AddContact": - return APIAddContact - case "DeleteContact": - return APIDeleteContact - case "GetChannel": - return APIGetChannel - case "GetChannels": - return APIGetChannels - case "AddChannel": - return APIAddChannel - case "DeleteChannel": - return APIDeleteChannel - case "GetProfile": - return APIGetProfile - case "GetProfiles": - return APIGetProfiles - case "AddProfile": - return APIAddProfile - case "DeleteProfile": - return APIDeleteProfile - case "LoadProfile": - return APILoadProfile - case "GetPeer": - return APIGetPeer - case "GetPeers": - return APIGetPeers - case "AddPeer": - return APIAddPeer - case "DeletePeer": - return APIDeletePeer - case "Send": - return APISend - case "SendChannel": - return APISendChannel - } - return APINull -} - -// ActionFromUint16 - returns the string name for an integer action code -func ActionFromUint16(action uint16) string { - switch action { - case APIID: - return "ID" - case APIDropoff: - return "Dropoff" - case APIPickup: - return "Pickup" - case APICID: - return "CID" - case APIGetContact: - return "GetContact" - case APIGetContacts: - return "GetContacts" - case APIAddContact: - return "AddContact" - case APIDeleteContact: - return "DeleteContact" - case APIGetChannel: - return "GetChannel" - case APIGetChannels: - return "GetChannels" - case APIAddChannel: - return "AddChannel" - case APIDeleteChannel: - return "DeleteChannel" - case APIGetProfile: - return "GetProfile" - case APIGetProfiles: - return "GetProfiles" - case APIAddProfile: - return "AddProfile" - case APIDeleteProfile: - return "DeleteProfile" - case APILoadProfile: - return "LoadProfile" - case APIGetPeer: - return "GetPeer" - case APIGetPeers: - return "GetPeers" - case APIAddPeer: - return "AddPeer" - case APIDeletePeer: - return "DeletePeer" - case APISend: - return "Send" - case APISendChannel: - return "SendChannel" - } - return "" -} - // ArgsToBytes - converts an interface array to a byte array func ArgsToBytes(args []interface{}) []byte { b := bytes.NewBuffer([]byte{}) @@ -219,7 +85,7 @@ func RemoteCallToBytes(call *RemoteCall) *[]byte { b := bytes.NewBuffer([]byte{}) w := bufio.NewWriter(b) // Action - bytes [0-1] uint16 - binary.Write(w, binary.BigEndian, ActionToUint16(call.Action)) + binary.Write(w, binary.BigEndian, call.Action) // Args - everything else binary.Write(w, binary.BigEndian, ArgsToBytes(call.Args)) w.Flush() @@ -234,7 +100,7 @@ func RemoteCallFromBytes(input *[]byte) (*RemoteCall, error) { } call := new(RemoteCall) action := binary.BigEndian.Uint16((*input)[:2]) - call.Action = ActionFromUint16(action) + call.Action = Action(action) args, err := ArgsFromBytes((*input)[2:]) if err != nil { return nil, err diff --git a/api/remoting_test.go b/api/remoting_test.go index 63a9fe5..5f76f7e 100644 --- a/api/remoting_test.go +++ b/api/remoting_test.go @@ -26,7 +26,7 @@ func Test_ArgsRoundTrip_1(t *testing.T) { func Test_RoundTrip_1(t *testing.T) { var call RemoteCall - call.Action = ActionFromUint16(APIID) + call.Action = ID b := RemoteCallToBytes(&call) recall, err := RemoteCallFromBytes(b) if err != nil { @@ -39,7 +39,7 @@ func Test_RoundTrip_1(t *testing.T) { func Test_RoundTrip_2(t *testing.T) { var call RemoteCall - call.Action = ActionFromUint16(APIAddProfile) + call.Action = AddProfile var x uint64 x = 1234 y := "abcd1234" diff --git a/api/transport.go b/api/transport.go index 34b4284..9ab31b8 100644 --- a/api/transport.go +++ b/api/transport.go @@ -4,7 +4,7 @@ package api type Transport interface { Listen(listen string, adminMode bool) Name() string - RPC(host string, method string, args ...interface{}) (interface{}, error) + RPC(host string, method Action, args ...interface{}) (interface{}, error) Stop() MarshalJSON() (b []byte, e error) diff --git a/go.sum b/go.sum index af5d034..e2ebcdd 100644 --- a/go.sum +++ b/go.sum @@ -88,8 +88,6 @@ github.com/templexxx/xorsimd v0.4.1/go.mod h1:W+ffZz8jJMH2SXwuKu9WhygqBMbFnp14G2 github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= github.com/tjfoc/gmsm v1.4.0 h1:8nbaiZG+iVdh+fXVw0DZoZZa7a4TGm3Qab+xdrdzj8s= github.com/tjfoc/gmsm v1.4.0/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= -github.com/upper/db/v4 v4.0.2 h1:tx15rM0T74LFjkoFM99EN1S/7Qn0N4hReR/Bqvg8jiM= -github.com/upper/db/v4 v4.0.2/go.mod h1:irV6ipP9Ss3FBPDeVeHisLK4SnDqosjnyK0zO629alU= github.com/upper/db/v4 v4.1.0 h1:mtVXgrPLTBuloykr9VjgQyAD4V4nAbDdXDdyd9MJcus= github.com/upper/db/v4 v4.1.0/go.mod h1:irV6ipP9Ss3FBPDeVeHisLK4SnDqosjnyK0zO629alU= github.com/xtaci/kcp-go/v5 v5.6.1 h1:Pwn0aoeNSPF9dTS7IgiPXn0HEtaIlVb6y5UKWPsx8bI= @@ -121,7 +119,6 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -161,8 +158,6 @@ golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201218084310-7d0127a74742/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad h1:MCsdmFSdEd4UEa5TKS5JztCRHK/WtvNei1edOj5RSRo= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78 h1:nVuTkr9L6Bq62qpUqKo/RnZCFfzDBL0bYo6w9OJUqZY= golang.org/x/sys v0.0.0-20210113181707-4bcb84eeeb78/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -178,14 +173,11 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200425043458-8463f397d07c/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200808161706-5bf02b21f123 h1:4JSJPND/+4555t1HfXYF4UEqDqiSKCgeV0+hbA8hMs4= golang.org/x/tools v0.0.0-20200808161706-5bf02b21f123/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20210104081019-d8d6ddbec6ee h1:5xKxdl/RhlelmSPaxyVeq5PYSmJ4H14yeQT58qP1F6o= golang.org/x/tools v0.0.0-20210104081019-d8d6ddbec6ee/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -236,8 +228,6 @@ modernc.org/mathutil v1.2.1 h1:PSIN4RdyeB6MbFsNLSkFCzDjnEVEMS3H/hFHcJtAJ9g= modernc.org/mathutil v1.2.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/ql v1.3.1 h1:gAXr1jn9w/WObUo12A1I5xMx/A8SrbRRBNzoBtCraPI= modernc.org/ql v1.3.1/go.mod h1:0su3LZVtXgxr5HnJc3DWIj4tb8Zx08BjZAzs//CUT6o= -modernc.org/ql v1.3.2-0.20201221110958-fea8432768cf h1:SFJBwgNzIfxsdGs9Y+iKOVziUDaavSUF77vPExLHpQ0= -modernc.org/ql v1.3.2-0.20201221110958-fea8432768cf/go.mod h1:0su3LZVtXgxr5HnJc3DWIj4tb8Zx08BjZAzs//CUT6o= modernc.org/sortutil v1.1.0 h1:oP3U4uM+NT/qBQcbg/K2iqAX0Nx7B1b6YZtq3Gk/PjM= modernc.org/sortutil v1.1.0/go.mod h1:ZyL98OQHJgH9IEfN71VsamvJgrtRX9Dj2gX+vH86L1k= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= diff --git a/nodes/rpc.go b/nodes/rpc.go index 02e99a3..dc18e6c 100644 --- a/nodes/rpc.go +++ b/nodes/rpc.go @@ -2,6 +2,7 @@ package nodes import ( "errors" + "fmt" "strconv" "github.com/awgh/bencrypt/bc" @@ -12,7 +13,7 @@ import ( func PublicRPC(transport api.Transport, node api.Node, call api.RemoteCall) (interface{}, error) { switch call.Action { - case "ID": + case api.ID: var i bc.PubKey i, err := node.ID() if err != nil { @@ -22,7 +23,7 @@ func PublicRPC(transport api.Transport, node api.Node, call api.RemoteCall) (int } return i, nil - case "Pickup": + case api.Pickup: if len(call.Args) < 2 { return nil, errors.New("Invalid argument count") } @@ -48,7 +49,7 @@ func PublicRPC(transport api.Transport, node api.Node, call api.RemoteCall) (int } return b, err - case "Dropoff": + case api.Dropoff: if len(call.Args) < 1 { return nil, errors.New("Invalid argument count") } @@ -59,7 +60,7 @@ func PublicRPC(transport api.Transport, node api.Node, call api.RemoteCall) (int return nil, node.Dropoff(bundle) default: - return nil, errors.New("No such method: " + call.Action) + return nil, fmt.Errorf("No such method: %d", call.Action) } } @@ -67,14 +68,14 @@ func PublicRPC(transport api.Transport, node api.Node, call api.RemoteCall) (int func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (interface{}, error) { switch call.Action { - case "CID": + case api.CID: b, err := node.CID() if err != nil { return nil, err } return b, nil - case "GetContact": + case api.GetContact: if len(call.Args) < 1 { return nil, errors.New("Invalid argument count") } @@ -89,14 +90,14 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, nil - case "GetContacts": + case api.GetContacts: if peers, err := node.GetContacts(); err != nil { return nil, err } else { return peers, nil } - case "AddContact": + case api.AddContact: if len(call.Args) < 2 { return nil, errors.New("Invalid argument count") } @@ -110,7 +111,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, node.AddContact(contactName, contactB64Key) - case "DeleteContact": + case api.DeleteContact: if len(call.Args) < 1 { return nil, errors.New("Invalid argument count") } @@ -120,7 +121,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, node.DeleteContact(contactName) - case "GetChannel": + case api.GetChannel: if len(call.Args) < 1 { return nil, errors.New("Invalid argument count") } @@ -135,14 +136,14 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, nil - case "GetChannels": + case api.GetChannels: if chans, err := node.GetChannels(); err != nil { return nil, err } else { return chans, nil } - case "AddChannel": + case api.AddChannel: if len(call.Args) < 2 { return nil, errors.New("Invalid argument count") } @@ -156,7 +157,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, node.AddChannel(channelName, channelB64Key) - case "DeleteChannel": + case api.DeleteChannel: if len(call.Args) < 1 { return nil, errors.New("Invalid argument count") } @@ -166,7 +167,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, node.DeleteChannel(channelName) - case "GetProfile": + case api.GetProfile: if len(call.Args) < 1 { return nil, errors.New("Invalid argument count") } @@ -181,14 +182,14 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, nil - case "GetProfiles": + case api.GetProfiles: if profiles, err := node.GetProfiles(); err != nil { return nil, err } else { return profiles, nil } - case "AddProfile": + case api.AddProfile: if len(call.Args) < 2 { return nil, errors.New("Invalid argument count") } @@ -206,7 +207,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, node.AddProfile(profileName, enabled) - case "DeleteProfile": + case api.DeleteProfile: if len(call.Args) < 1 { return nil, errors.New("Invalid argument count") } @@ -216,7 +217,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, node.DeleteProfile(profileName) - case "LoadProfile": + case api.LoadProfile: if len(call.Args) < 1 { return nil, errors.New("Invalid argument count") } @@ -231,7 +232,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, nil - case "GetPeer": + case api.GetPeer: if len(call.Args) < 1 { return nil, errors.New("Invalid argument count") } @@ -246,7 +247,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, nil - case "GetPeers": + case api.GetPeers: var group = "" if len(call.Args) > 1 { return nil, errors.New("Invalid argument count") @@ -264,7 +265,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte return peers, nil } - case "AddPeer": + case api.AddPeer: if len(call.Args) < 3 { return nil, errors.New("Invalid argument count") } @@ -293,7 +294,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, node.AddPeer(peerName, enabled, peerURI) - case "DeletePeer": + case api.DeletePeer: if len(call.Args) < 1 { return nil, errors.New("Invalid argument count") } @@ -303,7 +304,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, node.DeletePeer(peerName) - case "Send": + case api.Send: if len(call.Args) < 2 { return nil, errors.New("Invalid argument count") } @@ -324,7 +325,7 @@ func AdminRPC(transport api.Transport, node api.Node, call api.RemoteCall) (inte } return nil, node.Send(destName, msg) - case "SendChannel": + case api.SendChannel: if len(call.Args) < 2 { return nil, errors.New("Invalid argument count") } diff --git a/policy/common.go b/policy/common.go index b145384..accea25 100644 --- a/policy/common.go +++ b/policy/common.go @@ -36,7 +36,7 @@ func PollServer(transport api.Transport, node api.Node, host string, pubsrv bc.P peer, _ := readPeerTable(host) if peer.RoutingPub == nil { - rpubkey, err := transport.RPC(host, "ID") + rpubkey, err := transport.RPC(host, api.ID) if err != nil { events.Error(node, err.Error()) return false, err @@ -58,7 +58,7 @@ func PollServer(transport api.Transport, node api.Node, host string, pubsrv bc.P events.Debug(node, "pollServer Pickup Local result len: ", len(toRemote.Data)) // Pickup Remote - toLocalRaw, err := transport.RPC(host, "Pickup", pubsrv, peer.LastPollRemote) + toLocalRaw, err := transport.RPC(host, api.Pickup, pubsrv, peer.LastPollRemote) if err != nil { events.Error(node, "remote pickup error: "+err.Error()) return false, err @@ -76,7 +76,7 @@ func PollServer(transport api.Transport, node api.Node, host string, pubsrv bc.P } // Dropoff Remote if len(toRemote.Data) > 0 { - if _, err := transport.RPC(host, "Dropoff", toRemote); err != nil { + if _, err := transport.RPC(host, api.Dropoff, toRemote); err != nil { events.Error(node, "remote dropoff error: "+err.Error()) return false, err } diff --git a/ratnet/main_test.go b/ratnet/main_test.go index 90d83e7..5a94bf9 100644 --- a/ratnet/main_test.go +++ b/ratnet/main_test.go @@ -175,13 +175,13 @@ func Test_server_ID_1(ot *testing.T) { defer server1.Destroy(t) var err error var r1, r2 interface{} - if r1, err = server1.Public.RPC("localhost:30001", "ID"); err != nil { + if r1, err = server1.Public.RPC("localhost:30001", api.ID); err != nil { t.Fatal(err.Error()) } else { t.Logf("%+v\n", r1) } // should work on both interfaces - if r2, err = server1.Admin.RPC("localhost:30101", "ID"); err != nil { + if r2, err = server1.Admin.RPC("localhost:30101", api.ID); err != nil { t.Error(err.Error()) } else { t.Logf("%+v\n", r2) @@ -206,12 +206,12 @@ func Test_server_CID_1(ot *testing.T) { server1 := initNode(1, nodeType, transportType, false) defer server1.Destroy(t) // should not work on public interface - _, err := server1.Public.RPC("localhost:30001", "CID") + _, err := server1.Public.RPC("localhost:30001", api.CID) if err == nil { t.Fatal(errors.New("CID was accessible on Public network interface")) } - _, err = server1.Admin.RPC("localhost:30101", "CID") + _, err = server1.Admin.RPC("localhost:30101", api.CID) if err != nil { t.Fatal(err.Error()) } @@ -226,7 +226,7 @@ func Test_server_AddContact_1(ot *testing.T) { server2 := initNode(2, nodeType, transportType, false) defer server2.Destroy(t) - p1, err := server2.Admin.RPC("localhost:30202", "CID") + p1, err := server2.Admin.RPC("localhost:30202", api.CID) if err != nil { t.Fatal(err.Error()) } @@ -236,12 +236,12 @@ func Test_server_AddContact_1(ot *testing.T) { t.Log("Trying AddContact on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "AddContact", "destname1", r1.ToB64()); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.AddContact, "destname1", r1.ToB64()); erra == nil { t.Fatal(errors.New("AddContact was accessible on Public network interface")) } t.Log("Trying AddContact on Admin interface") - _, errb := server1.Admin.RPC("localhost:30101", "AddContact", "destname1", r1.ToB64()) + _, errb := server1.Admin.RPC("localhost:30101", api.AddContact, "destname1", r1.ToB64()) if errb != nil { t.Fatal(errb.Error()) } @@ -263,25 +263,25 @@ func Test_server_GetContact_1(ot *testing.T) { t.Log("Trying GetContact on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "GetContact", "destname1"); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.GetContact, "destname1"); erra == nil { t.Fatal(errors.New("GetContact was accessible on Public network interface")) } t.Log("Trying GetContacts on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "GetContacts"); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.GetContacts); erra == nil { t.Fatal(errors.New("GetContacts was accessible on Public network interface")) } t.Log("Trying GetContact on Admin interface") - contact, err := server1.Admin.RPC("localhost:30101", "GetContact", "destname1") + contact, err := server1.Admin.RPC("localhost:30101", api.GetContact, "destname1") if err != nil { t.Fatal(err.Error()) } t.Logf("Got Contact: %+v\n", contact) t.Log("Trying GetContacts on Admin interface") - contactsRaw, err := server1.Admin.RPC("localhost:30101", "GetContacts") + contactsRaw, err := server1.Admin.RPC("localhost:30101", api.GetContacts) if err != nil { t.Fatal(err.Error()) } @@ -303,13 +303,13 @@ func Test_server_AddChannel_1(ot *testing.T) { t.Log("Trying AddChannel on Public interface") // should not work on public interface - _, err := server1.Public.RPC("localhost:30001", "AddChannel", "channel1", chankey) + _, err := server1.Public.RPC("localhost:30001", api.AddChannel, "channel1", chankey) if err == nil { t.Fatal(errors.New("AddChannel was accessible on Public network interface")) } t.Log("Trying AddChannel on Admin interface") - _, err = server1.Admin.RPC("localhost:30101", "AddChannel", "channel1", chankey) + _, err = server1.Admin.RPC("localhost:30101", api.AddChannel, "channel1", chankey) if err != nil { t.Fatal(err.Error()) } @@ -324,18 +324,18 @@ func Test_server_GetChannel_1(ot *testing.T) { server1.Node.AddChannel("channel1", pubprivkeyb64Ecc) t.Log("Trying GetChannel on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "GetChannel", "channel1"); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.GetChannel, "channel1"); erra == nil { t.Fatal(errors.New("GetChannel was accessible on Public network interface")) } t.Log("Trying GetChannels on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "GetChannels"); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.GetChannels); erra == nil { t.Fatal(errors.New("GetChannels was accessible on Public network interface")) } t.Log("Trying GetChannel on Admin interface") - channel, err := server1.Admin.RPC("localhost:30101", "GetChannel", "channel1") + channel, err := server1.Admin.RPC("localhost:30101", api.GetChannel, "channel1") if err != nil { t.Fatal(err.Error()) } @@ -345,7 +345,7 @@ func Test_server_GetChannel_1(ot *testing.T) { } t.Log("Trying GetChannels on Admin interface") - channelsRaw, err := server1.Admin.RPC("localhost:30101", "GetChannels") + channelsRaw, err := server1.Admin.RPC("localhost:30101", api.GetChannels) if err != nil { t.Fatal(err.Error()) } @@ -364,12 +364,12 @@ func Test_server_AddProfile_1(ot *testing.T) { defer server1.Destroy(t) t.Log("Trying AddProfile on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "AddProfile", "profile1", "false"); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.AddProfile, "profile1", "false"); erra == nil { t.Fatal(errors.New("AddProfile was accessible on Public network interface")) } t.Log("Trying AddProfile on Admin interface") - _, errb := server1.Admin.RPC("localhost:30101", "AddProfile", "profile1", "false") + _, errb := server1.Admin.RPC("localhost:30101", api.AddProfile, "profile1", "false") if errb != nil { t.Fatal(errb.Error()) } @@ -391,18 +391,18 @@ func Test_server_GetProfile_1(ot *testing.T) { t.Log("Trying GetProfile on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "GetProfile", "profile1"); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.GetProfile, "profile1"); erra == nil { t.Fatal(errors.New("GetProfile was accessible on Public network interface")) } t.Log("Trying GetProfiles on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "GetProfiles"); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.GetProfiles); erra == nil { t.Fatal(errors.New("GetProfiles was accessible on Public network interface")) } t.Log("Trying GetProfile on Admin interface") - profile, err := server1.Admin.RPC("localhost:30101", "GetProfile", "profile1") + profile, err := server1.Admin.RPC("localhost:30101", api.GetProfile, "profile1") if err != nil { t.Fatal(err.Error()) } @@ -412,7 +412,7 @@ func Test_server_GetProfile_1(ot *testing.T) { } t.Log("Trying GetProfiles on Admin interface") - profilesRaw, err := server1.Admin.RPC("localhost:30101", "GetProfiles") + profilesRaw, err := server1.Admin.RPC("localhost:30101", api.GetProfiles) if err != nil { t.Fatal(err.Error()) } @@ -431,24 +431,24 @@ func Test_server_AddPeer_1(ot *testing.T) { defer server1.Destroy(t) t.Log("Trying AddPeer on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "AddPeer", "peer1", "false", "https://1.2.3.4:443"); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.AddPeer, "peer1", "false", "https://1.2.3.4:443"); erra == nil { t.Fatal(errors.New("AddPeer was accessible on Public network interface")) } t.Log("Trying AddPeer on Admin interface") - _, errb := server1.Admin.RPC("localhost:30101", "AddPeer", "peer1", "false", "https://1.2.3.4:443") + _, errb := server1.Admin.RPC("localhost:30101", api.AddPeer, "peer1", "false", "https://1.2.3.4:443") if errb != nil { t.Fatal(errb.Error()) } t.Log("Trying AddPeer on Admin interface with a group name") - _, errc := server1.Admin.RPC("localhost:30101", "AddPeer", "peer2", "false", "https://2.3.4.5:123", "groupnametest") + _, errc := server1.Admin.RPC("localhost:30101", api.AddPeer, "peer2", "false", "https://2.3.4.5:123", "groupnametest") if errc != nil { t.Fatal(errc.Error()) } t.Log("Trying AddPeer on Admin interface with a group name that already exists") - _, errd := server1.Admin.RPC("localhost:30101", "AddPeer", "peer3", "false", "https://3.4.5.6:234", "groupnametest") + _, errd := server1.Admin.RPC("localhost:30101", api.AddPeer, "peer3", "false", "https://3.4.5.6:234", "groupnametest") if errd != nil { t.Fatal(errd.Error()) } @@ -466,18 +466,18 @@ func Test_server_GetPeer_1(ot *testing.T) { t.Log("Trying GetPeer on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "GetPeer", "peer1"); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.GetPeer, "peer1"); erra == nil { t.Fatal(errors.New("GetPeer was accessible on Public network interface")) } t.Log("Trying GetPeers on Public interface") // should not work on public interface - if _, erra := server1.Public.RPC("localhost:30001", "GetPeers"); erra == nil { + if _, erra := server1.Public.RPC("localhost:30001", api.GetPeers); erra == nil { t.Fatal(errors.New("GetPeers was accessible on Public network interface")) } t.Log("Trying GetPeer on Admin interface") - peer, err := server1.Admin.RPC("localhost:30101", "GetPeer", "peer1") + peer, err := server1.Admin.RPC("localhost:30101", api.GetPeer, "peer1") if err != nil { t.Fatal(err.Error()) } @@ -487,7 +487,7 @@ func Test_server_GetPeer_1(ot *testing.T) { } t.Log("Trying GetPeers on Admin interface") - peersRaw, err := server1.Admin.RPC("localhost:30101", "GetPeers") + peersRaw, err := server1.Admin.RPC("localhost:30101", api.GetPeers) if err != nil { t.Fatal(err.Error()) } @@ -498,7 +498,7 @@ func Test_server_GetPeer_1(ot *testing.T) { } t.Log("Trying GetPeers on Admin interface with a group that has no peers") - groupedPeers, err := server1.Admin.RPC("localhost:30101", "GetPeers", "not-a-group") + groupedPeers, err := server1.Admin.RPC("localhost:30101", api.GetPeers, "not-a-group") if err != nil { t.Fatal(err.Error()) } @@ -510,7 +510,7 @@ func Test_server_GetPeer_1(ot *testing.T) { } t.Log("Trying GetPeers on Admin interface with a group that has peers") - peers2, err := server1.Admin.RPC("localhost:30101", "GetPeers", "groupnametest") + peers2, err := server1.Admin.RPC("localhost:30101", api.GetPeers, "groupnametest") if err != nil { t.Fatal(err.Error()) } @@ -530,12 +530,12 @@ func Test_server_Send_1(ot *testing.T) { defer server1.Destroy(t) server1.Node.AddContact("destname1", pubkeyb64Ecc) // should not work on public interface - _, err := server1.Public.RPC("localhost:30001", "Send", "destname1", []byte(testMessage1)) + _, err := server1.Public.RPC("localhost:30001", api.Send, "destname1", []byte(testMessage1)) if err == nil { t.Fatal(errors.New("Send was accessible on Public network interface")) } - _, err = server1.Admin.RPC("localhost:30101", "Send", "destname1", []byte(testMessage1)) + _, err = server1.Admin.RPC("localhost:30101", api.Send, "destname1", []byte(testMessage1)) if err != nil { t.Fatal(err.Error()) } @@ -549,12 +549,12 @@ func Test_server_SendChannel_1(ot *testing.T) { defer server1.Destroy(t) server1.Node.AddChannel("channel1", pubprivkeyb64Ecc) // should not work on public interface - _, err := server1.Public.RPC("localhost:30001", "SendChannel", "channel1", []byte(testMessage2)) + _, err := server1.Public.RPC("localhost:30001", api.SendChannel, "channel1", []byte(testMessage2)) if err == nil { t.Fatal(errors.New("SendChannel was accessible on Public network interface")) } - _, err = server1.Admin.RPC("localhost:30101", "SendChannel", "channel1", []byte(testMessage2)) + _, err = server1.Admin.RPC("localhost:30101", api.SendChannel, "channel1", []byte(testMessage2)) if err != nil { t.Fatal(err.Error()) } @@ -579,21 +579,21 @@ func Test_server_PickupDropoff_1(ot *testing.T) { server1.Node.SendChannel("channel1", []byte(testMessage2)) t.Log("Trying AddChannel on server2 Admin interface") - _, err := server2.Admin.RPC("localhost:30202", "AddChannel", "channel1", pubprivkeyb64Ecc) + _, err := server2.Admin.RPC("localhost:30202", api.AddChannel, "channel1", pubprivkeyb64Ecc) if err != nil { t.Fatal(err.Error()) } - pubsrv, err := server1.Public.RPC("localhost:30002", "ID") + pubsrv, err := server1.Public.RPC("localhost:30002", api.ID) if err != nil { t.Fatal("XXX:" + err.Error()) } - bundle, err := server1.Public.RPC("localhost:30001", "Pickup", pubsrv, int64(31536000)) // 31536000 seconds in a year + bundle, err := server1.Public.RPC("localhost:30001", api.Pickup, pubsrv, int64(31536000)) // 31536000 seconds in a year if err != nil { t.Fatal("YYY:" + err.Error()) } - _, err = server1.Public.RPC("localhost:30002", "Dropoff", bundle) + _, err = server1.Public.RPC("localhost:30002", api.Dropoff, bundle) if err != nil { t.Fatal("ZZZ:" + err.Error()) } @@ -618,22 +618,22 @@ func Test_server_PickupDropoff_2(ot *testing.T) { server1.Node.SendChannel("channel1", []byte(testMessage2)) t.Log("Trying AddChannel on server2 Admin interface") - _, err := server2.Admin.RPC("localhost:30202", "AddChannel", "channel1", pubprivkeyb64Ecc) + _, err := server2.Admin.RPC("localhost:30202", api.AddChannel, "channel1", pubprivkeyb64Ecc) if err != nil { t.Fatal(err.Error()) } - pubsrv, err := server1.Public.RPC("localhost:30002", "ID") + pubsrv, err := server1.Public.RPC("localhost:30002", api.ID) if err != nil { t.Fatal("XXX:" + err.Error()) } time.Sleep(1 * time.Second) - bundle, err := server1.Public.RPC("localhost:30001", "Pickup", pubsrv, int64(31536000), "channel1") // 31536000 seconds in a year + bundle, err := server1.Public.RPC("localhost:30001", api.Pickup, pubsrv, int64(31536000), "channel1") // 31536000 seconds in a year if err != nil { t.Fatal("YYY:" + err.Error()) } - _, err = server1.Public.RPC("localhost:30002", "Dropoff", bundle) + _, err = server1.Public.RPC("localhost:30002", api.Dropoff, bundle) if err != nil { t.Fatal("ZZZ:" + err.Error()) } diff --git a/transports/https/https.go b/transports/https/https.go index 3b74e70..ae35abd 100644 --- a/transports/https/https.go +++ b/transports/https/https.go @@ -166,8 +166,8 @@ func (h *Module) handleResponse(w http.ResponseWriter, r *http.Request, node api } // RPC : client interface -func (h *Module) RPC(host string, method string, args ...interface{}) (interface{}, error) { - events.Info(h.node, fmt.Sprintf("\n***\n***RPC %s on %s called with: %+v\n***\n", method, host, args)) +func (h *Module) RPC(host string, method api.Action, args ...interface{}) (interface{}, error) { + events.Info(h.node, fmt.Sprintf("\n***\n***RPC %d on %s called with: %+v\n***\n", method, host, args)) var a api.RemoteCall a.Action = method diff --git a/transports/tls/tls.go b/transports/tls/tls.go index 9b7d4cb..bf812eb 100644 --- a/transports/tls/tls.go +++ b/transports/tls/tls.go @@ -182,9 +182,9 @@ func (h *Module) handleConnection(conn net.Conn, node api.Node, adminMode bool) } // RPC : client interface -func (h *Module) RPC(host string, method string, args ...interface{}) (interface{}, error) { +func (h *Module) RPC(host string, method api.Action, args ...interface{}) (interface{}, error) { - events.Info(h.node, fmt.Sprintf("\n***\n***RPC %s on %s called with: %+v\n***\n", method, host, args)) + events.Info(h.node, fmt.Sprintf("\n***\n***RPC %d on %s called with: %+v\n***\n", method, host, args)) conn, ok := cachedSessions[host] if !ok { diff --git a/transports/udp/udp.go b/transports/udp/udp.go index 198214a..6516873 100644 --- a/transports/udp/udp.go +++ b/transports/udp/udp.go @@ -147,9 +147,9 @@ func (m *Module) Listen(listen string, adminMode bool) { } // RPC : transmit data via UDP -func (m *Module) RPC(host string, method string, args ...interface{}) (interface{}, error) { +func (m *Module) RPC(host string, method api.Action, args ...interface{}) (interface{}, error) { - events.Info(m.node, fmt.Sprintf("\n***\n***RPC %s on %s called with: %+v\n***\n", method, host, args)) + events.Info(m.node, fmt.Sprintf("\n***\n***RPC %d on %s called with: %+v\n***\n", method, host, args)) conn, ok := cachedSessions[host] if !ok {