added net API

pull/1239/head
Bas van Kervel 10 years ago committed by Bas van Kervel
parent 4b9b633dfe
commit d2a87f6f72
  1. 3
      rpc/api/api.go
  2. 81
      rpc/api/net.go
  3. 44
      rpc/api/net_js.go
  4. 4
      rpc/api/utils.go

@ -4,11 +4,12 @@ import "github.com/ethereum/go-ethereum/rpc/shared"
const ( const (
// List with all API's which are offered over the IPC interface by default // 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" MergedApiName = "merged"
MinerApiName = "miner" MinerApiName = "miner"
NetApiName = "net"
Web3ApiName = "web3" Web3ApiName = "web3"
) )

@ -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
}

@ -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
})
]
});
`

@ -25,6 +25,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.
apis[i] = NewEthApi(xeth, codec) apis[i] = NewEthApi(xeth, codec)
case MinerApiName: case MinerApiName:
apis[i] = NewMinerApi(eth, codec) apis[i] = NewMinerApi(eth, codec)
case NetApiName:
apis[i] = NewNetApi(xeth, eth, codec)
case Web3ApiName: case Web3ApiName:
apis[i] = NewWeb3(xeth, codec) apis[i] = NewWeb3(xeth, codec)
default: default:
@ -39,6 +41,8 @@ func Javascript(name string) string {
switch strings.ToLower(strings.TrimSpace(name)) { switch strings.ToLower(strings.TrimSpace(name)) {
case MinerApiName: case MinerApiName:
return Miner_JS return Miner_JS
case NetApiName:
return Net_JS
} }
return "" return ""

Loading…
Cancel
Save