aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rpc/api/api.go9
-rw-r--r--rpc/api/mergedapi.go4
-rw-r--r--rpc/api/miner.go4
-rw-r--r--rpc/api/miner_args.go2
-rw-r--r--rpc/api/miner_js.go2
-rw-r--r--rpc/api/net.go81
-rw-r--r--rpc/api/net_js.go44
-rw-r--r--rpc/api/utils.go4
-rw-r--r--rpc/api/web3.go2
9 files changed, 141 insertions, 11 deletions
diff --git a/rpc/api/api.go b/rpc/api/api.go
index 7b3774b4e..e4f0e7446 100644
--- a/rpc/api/api.go
+++ b/rpc/api/api.go
@@ -4,12 +4,13 @@ import "github.com/ethereum/go-ethereum/rpc/shared"
const (
// List with all API's which are offered over the IPC interface by default
- DefaultIpcApis = "eth,web3,miner"
+ DefaultIpcApis = "eth,miner,net,web3"
- EthApiName = "eth"
+ EthApiName = "eth"
MergedApiName = "merged"
- MinerApiName = "miner"
- Web3ApiName = "web3"
+ MinerApiName = "miner"
+ NetApiName = "net"
+ Web3ApiName = "web3"
)
// Ethereum RPC API interface
diff --git a/rpc/api/mergedapi.go b/rpc/api/mergedapi.go
index 7784661d7..88c301aae 100644
--- a/rpc/api/mergedapi.go
+++ b/rpc/api/mergedapi.go
@@ -4,7 +4,7 @@ import "github.com/ethereum/go-ethereum/rpc/shared"
// combines multiple API's
type mergedApi struct {
- apis []string
+ apis []string
methods map[string]EthereumApi
}
@@ -48,7 +48,7 @@ func (self *mergedApi) Name() string {
}
func (self *mergedApi) handle(req *shared.Request) (interface{}, error) {
- if req.Method == "support_apis" { // provided API's
+ if req.Method == "support_apis" { // provided API's
return self.apis, nil
}
diff --git a/rpc/api/miner.go b/rpc/api/miner.go
index 0e2ccf503..b22c4b7ad 100644
--- a/rpc/api/miner.go
+++ b/rpc/api/miner.go
@@ -13,7 +13,7 @@ const (
)
var (
-// mapping between methods and handlers
+ // mapping between methods and handlers
MinerMapping = map[string]minerhandler{
"miner_hashrate": (*miner).Hashrate,
"miner_makeDAG": (*miner).MakeDAG,
@@ -140,4 +140,4 @@ func (self *miner) MakeDAG(req *shared.Request) (interface{}, error) {
return true, nil
}
return false, err
-} \ No newline at end of file
+}
diff --git a/rpc/api/miner_args.go b/rpc/api/miner_args.go
index 8b9114940..6b3d16d48 100644
--- a/rpc/api/miner_args.go
+++ b/rpc/api/miner_args.go
@@ -90,4 +90,4 @@ func (args *MakeDAGArgs) UnmarshalJSON(b []byte) (err error) {
}
return nil
-} \ No newline at end of file
+}
diff --git a/rpc/api/miner_js.go b/rpc/api/miner_js.go
index 40fa3bc3d..f1c64c5e8 100644
--- a/rpc/api/miner_js.go
+++ b/rpc/api/miner_js.go
@@ -71,4 +71,4 @@ web3.extend({
})
]
});
-` \ No newline at end of file
+`
diff --git a/rpc/api/net.go b/rpc/api/net.go
new file mode 100644
index 000000000..6799d68f6
--- /dev/null
+++ b/rpc/api/net.go
@@ -0,0 +1,81 @@
+package api
+
+import (
+ "github.com/ethereum/go-ethereum/eth"
+ "github.com/ethereum/go-ethereum/rpc/codec"
+ "github.com/ethereum/go-ethereum/rpc/shared"
+ "github.com/ethereum/go-ethereum/xeth"
+)
+
+var (
+ // mapping between methods and handlers
+ netMapping = map[string]nethandler{
+ "net_id": (*net).NetworkVersion,
+ "net_peerCount": (*net).PeerCount,
+ "net_listening": (*net).IsListening,
+ "net_peers": (*net).Peers,
+ }
+)
+
+// net callback handler
+type nethandler func(*net, *shared.Request) (interface{}, error)
+
+// net api provider
+type net struct {
+ xeth *xeth.XEth
+ ethereum *eth.Ethereum
+ methods map[string]nethandler
+ codec codec.ApiCoder
+}
+
+// create a new net api instance
+func NewNetApi(xeth *xeth.XEth, eth *eth.Ethereum, coder codec.Codec) *net {
+ return &net{
+ xeth: xeth,
+ ethereum: eth,
+ methods: netMapping,
+ codec: coder.New(nil),
+ }
+}
+
+// collection with supported methods
+func (self *net) Methods() []string {
+ methods := make([]string, len(self.methods))
+ i := 0
+ for k := range self.methods {
+ methods[i] = k
+ i++
+ }
+ return methods
+}
+
+// Execute given request
+func (self *net) Execute(req *shared.Request) (interface{}, error) {
+ if callback, ok := self.methods[req.Method]; ok {
+ return callback(self, req)
+ }
+
+ return nil, shared.NewNotImplementedError(req.Method)
+}
+
+func (self *net) Name() string {
+ return NetApiName
+}
+
+// Network version
+func (self *net) NetworkVersion(req *shared.Request) (interface{}, error) {
+ return self.xeth.NetworkVersion(), nil
+}
+
+// Number of connected peers
+func (self *net) PeerCount(req *shared.Request) (interface{}, error) {
+ return self.xeth.PeerCount(), nil
+}
+
+func (self *net) IsListening(req *shared.Request) (interface{}, error) {
+ return self.xeth.IsListening(), nil
+}
+
+func (self *net) Peers(req *shared.Request) (interface{}, error) {
+ return self.ethereum.PeersInfo(), nil
+}
diff --git a/rpc/api/net_js.go b/rpc/api/net_js.go
new file mode 100644
index 000000000..6ba0624d8
--- /dev/null
+++ b/rpc/api/net_js.go
@@ -0,0 +1,44 @@
+package api
+
+const Net_JS = `
+web3.extend({
+ property: 'network',
+ methods:
+ [
+ new web3.extend.Method({
+ name: 'id',
+ call: 'net_id',
+ params: 0,
+ inputFormatter: [],
+ outputFormatter: web3.extend.formatters.formatOutputString
+ }),
+ new web3.extend.Method({
+ name: 'getPeerCount',
+ call: 'net_peerCount',
+ params: 0,
+ inputFormatter: [],
+ outputFormatter: web3.extend.formatters.formatOutputString
+ }),
+ new web3.extend.Method({
+ name: 'peers',
+ call: 'net_peers',
+ params: 0,
+ inputFormatter: [],
+ outputFormatter: function(obj) { return obj; }
+ })
+ ],
+ properties:
+ [
+ new web3.extend.Property({
+ name: 'listening',
+ getter: 'net_listening',
+ outputFormatter: web3.extend.formatters.formatOutputBool
+ }),
+ new web3.extend.Property({
+ name: 'peerCount',
+ getter: 'net_peerCount',
+ outputFormatter: web3.extend.utils.toDecimal
+ })
+ ]
+});
+`
diff --git a/rpc/api/utils.go b/rpc/api/utils.go
index 488eb1ec6..173a880d4 100644
--- a/rpc/api/utils.go
+++ b/rpc/api/utils.go
@@ -25,6 +25,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.
apis[i] = NewEthApi(xeth, codec)
case MinerApiName:
apis[i] = NewMinerApi(eth, codec)
+ case NetApiName:
+ apis[i] = NewNetApi(xeth, eth, codec)
case Web3ApiName:
apis[i] = NewWeb3(xeth, codec)
default:
@@ -39,6 +41,8 @@ func Javascript(name string) string {
switch strings.ToLower(strings.TrimSpace(name)) {
case MinerApiName:
return Miner_JS
+ case NetApiName:
+ return Net_JS
}
return ""
diff --git a/rpc/api/web3.go b/rpc/api/web3.go
index 4c51c4a97..c46457ce6 100644
--- a/rpc/api/web3.go
+++ b/rpc/api/web3.go
@@ -13,7 +13,7 @@ const (
)
var (
-// mapping between methods and handlers
+ // mapping between methods and handlers
Web3Mapping = map[string]web3handler{
"web3_sha3": (*web3).Sha3,
"web3_clientVersion": (*web3).ClientVersion,