added net API

This commit is contained in:
Bas van Kervel 2015-06-08 14:50:11 +02:00 committed by Bas van Kervel
parent 4b9b633dfe
commit d2a87f6f72
9 changed files with 141 additions and 11 deletions

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

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

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

@ -90,4 +90,4 @@ func (args *MakeDAGArgs) UnmarshalJSON(b []byte) (err error) {
}
return nil
}
}

@ -71,4 +71,4 @@ web3.extend({
})
]
});
`
`

81
rpc/api/net.go Normal file

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

44
rpc/api/net_js.go Normal file

@ -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)
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 ""

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