aboutsummaryrefslogtreecommitdiffstats
path: root/node/api.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-02-05 21:08:48 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-02-05 22:53:47 +0800
commit7486904b92449c5955bb682f4ff98752906912b8 (patch)
tree87d1119581754ba411396c0c698fdab4bd65b253 /node/api.go
parenta13bc9d7a1bc96fab93ace40045c0f0fea4da836 (diff)
downloadgo-tangerine-7486904b92449c5955bb682f4ff98752906912b8.tar
go-tangerine-7486904b92449c5955bb682f4ff98752906912b8.tar.gz
go-tangerine-7486904b92449c5955bb682f4ff98752906912b8.tar.bz2
go-tangerine-7486904b92449c5955bb682f4ff98752906912b8.tar.lz
go-tangerine-7486904b92449c5955bb682f4ff98752906912b8.tar.xz
go-tangerine-7486904b92449c5955bb682f4ff98752906912b8.tar.zst
go-tangerine-7486904b92449c5955bb682f4ff98752906912b8.zip
cmd, node, rpc: move websockets into node, break singleton
Diffstat (limited to 'node/api.go')
-rw-r--r--node/api.go49
1 files changed, 16 insertions, 33 deletions
diff --git a/node/api.go b/node/api.go
index 1b185c6f1..879b33816 100644
--- a/node/api.go
+++ b/node/api.go
@@ -25,9 +25,7 @@ import (
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/p2p/discover"
- "github.com/ethereum/go-ethereum/rpc"
"github.com/rcrowley/go-metrics"
- "gopkg.in/fatih/set.v0"
)
// PrivateAdminAPI is the collection of administrative API methods exposed only
@@ -86,44 +84,29 @@ func (api *PrivateAdminAPI) StopRPC() (bool, error) {
}
// StartWS starts the websocket RPC API server.
-func (api *PrivateAdminAPI) StartWS(address string, port int, cors string, apis string) (bool, error) {
- var offeredAPIs []rpc.API
- if len(apis) > 0 {
- namespaces := set.New()
- for _, a := range strings.Split(apis, ",") {
- namespaces.Add(strings.TrimSpace(a))
- }
- for _, api := range api.node.APIs() {
- if namespaces.Has(api.Namespace) {
- offeredAPIs = append(offeredAPIs, api)
- }
- }
- } else {
- // use by default all public API's
- for _, api := range api.node.APIs() {
- if api.Public {
- offeredAPIs = append(offeredAPIs, api)
- }
- }
- }
+func (api *PrivateAdminAPI) StartWS(host string, port int, cors string, apis string) (bool, error) {
+ api.node.lock.Lock()
+ defer api.node.lock.Unlock()
- if address == "" {
- address = "127.0.0.1"
+ if api.node.wsHandler != nil {
+ return false, fmt.Errorf("WebSocker RPC already running on %s", api.node.wsEndpoint)
}
- if port == 0 {
- port = 8546
+ if err := api.node.startWS(fmt.Sprintf("%s:%d", host, port), api.node.rpcAPIs, strings.Split(apis, ","), cors); err != nil {
+ return false, err
}
-
- corsDomains := strings.Split(cors, " ")
-
- err := rpc.StartWS(address, port, corsDomains, offeredAPIs)
- return err == nil, err
+ return true, nil
}
// StopRPC terminates an already running websocket RPC API endpoint.
func (api *PrivateAdminAPI) StopWS() (bool, error) {
- err := rpc.StopWS()
- return err == nil, err
+ api.node.lock.Lock()
+ defer api.node.lock.Unlock()
+
+ if api.node.wsHandler == nil {
+ return false, fmt.Errorf("WebSocket RPC not running")
+ }
+ api.node.stopWS()
+ return true, nil
}
// PublicAdminAPI is the collection of administrative API methods exposed over