diff options
author | Felix Lange <fjl@twurst.com> | 2015-03-10 06:00:27 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2015-03-10 06:08:46 +0800 |
commit | a11f1d6a7ec2eaa1a348776072c49019368a5ef3 (patch) | |
tree | cd2d7e9c3ade2ea02462436a908ca1caf9c06de3 /rpc | |
parent | 73d1ebe244644c2d74a1c0c38a3b339e72140886 (diff) | |
download | dexon-a11f1d6a7ec2eaa1a348776072c49019368a5ef3.tar.gz dexon-a11f1d6a7ec2eaa1a348776072c49019368a5ef3.tar.zst dexon-a11f1d6a7ec2eaa1a348776072c49019368a5ef3.zip |
rpc: add dataDir parameter and JSON-RPC handler
Diffstat (limited to 'rpc')
-rw-r--r-- | rpc/api.go | 5 | ||||
-rw-r--r-- | rpc/http.go | 42 |
2 files changed, 45 insertions, 2 deletions
diff --git a/rpc/api.go b/rpc/api.go index 9c792dd61..c3aa7186b 100644 --- a/rpc/api.go +++ b/rpc/api.go @@ -11,6 +11,7 @@ package rpc import ( "fmt" "math/big" + "path" "strings" "sync" "time" @@ -55,8 +56,8 @@ type EthereumApi struct { defaultBlockAge int64 } -func NewEthereumApi(eth *xeth.XEth) *EthereumApi { - db, _ := ethdb.NewLDBDatabase("dapps") +func NewEthereumApi(eth *xeth.XEth, dataDir string) *EthereumApi { + db, _ := ethdb.NewLDBDatabase(path.Join(dataDir, "dapps")) api := &EthereumApi{ eth: eth, mux: eth.Backend().EventMux(), diff --git a/rpc/http.go b/rpc/http.go new file mode 100644 index 000000000..44e2ad6ab --- /dev/null +++ b/rpc/http.go @@ -0,0 +1,42 @@ +package rpc + +import ( + "net/http" + + "github.com/ethereum/go-ethereum/logger" + "github.com/ethereum/go-ethereum/xeth" +) + +var rpchttplogger = logger.NewLogger("RPC-HTTP") + +// JSONRPC returns a handler that implements the Ethereum JSON-RPC API. +func JSONRPC(pipe *xeth.XEth, dataDir string) http.Handler { + var json JsonWrapper + const jsonrpcver = "2.0" + api := NewEthereumApi(pipe, dataDir) + + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", "*") + + rpchttplogger.DebugDetailln("Handling request") + + reqParsed, reqerr := json.ParseRequestBody(req) + if reqerr != nil { + jsonerr := &RpcErrorObject{-32700, "Error: Could not parse request"} + json.Send(w, &RpcErrorResponse{JsonRpc: jsonrpcver, ID: nil, Error: jsonerr}) + return + } + + var response interface{} + reserr := api.GetRequestReply(&reqParsed, &response) + if reserr != nil { + rpchttplogger.Warnln(reserr) + jsonerr := &RpcErrorObject{-32603, reserr.Error()} + json.Send(w, &RpcErrorResponse{JsonRpc: jsonrpcver, ID: reqParsed.ID, Error: jsonerr}) + return + } + + rpchttplogger.DebugDetailf("Generated response: %T %s", response, response) + json.Send(w, &RpcSuccessResponse{JsonRpc: jsonrpcver, ID: reqParsed.ID, Result: response}) + }) +} |