Merge pull request #300 from tgerring/jsonrpc

Allow RPC ID to be string or null
pull/313/head
Taylor Gerring 10 years ago
commit ef6c7bd726
  1. 2
      rpc/http/server.go
  2. 6
      rpc/message.go
  3. 2
      rpc/util.go
  4. 5
      rpc/ws/server.go

@ -102,7 +102,7 @@ func (s *RpcHttpServer) apiHandler(api *rpc.EthereumApi) http.Handler {
if reserr != nil { if reserr != nil {
rpchttplogger.Warnln(reserr) rpchttplogger.Warnln(reserr)
jsonerr := &rpc.RpcErrorObject{-32603, reserr.Error()} jsonerr := &rpc.RpcErrorObject{-32603, reserr.Error()}
JSON.Send(w, &rpc.RpcErrorResponse{JsonRpc: jsonrpcver, ID: &reqParsed.ID, Error: jsonerr}) JSON.Send(w, &rpc.RpcErrorResponse{JsonRpc: jsonrpcver, ID: reqParsed.ID, Error: jsonerr})
return return
} }

@ -34,20 +34,20 @@ const (
) )
type RpcRequest struct { type RpcRequest struct {
ID interface{} `json:"id"`
JsonRpc string `json:"jsonrpc"` JsonRpc string `json:"jsonrpc"`
ID int `json:"id"`
Method string `json:"method"` Method string `json:"method"`
Params []json.RawMessage `json:"params"` Params []json.RawMessage `json:"params"`
} }
type RpcSuccessResponse struct { type RpcSuccessResponse struct {
ID int `json:"id"` ID interface{} `json:"id"`
JsonRpc string `json:"jsonrpc"` JsonRpc string `json:"jsonrpc"`
Result interface{} `json:"result"` Result interface{} `json:"result"`
} }
type RpcErrorResponse struct { type RpcErrorResponse struct {
ID *int `json:"id"` ID interface{} `json:"id"`
JsonRpc string `json:"jsonrpc"` JsonRpc string `json:"jsonrpc"`
Error *RpcErrorObject `json:"error"` Error *RpcErrorObject `json:"error"`
} }

@ -47,7 +47,6 @@ func (self JsonWrapper) ParseRequestBody(req *http.Request) (RpcRequest, error)
// Convert JSON to native types // Convert JSON to native types
d := json.NewDecoder(req.Body) d := json.NewDecoder(req.Body)
// d.UseNumber()
defer req.Body.Close() defer req.Body.Close()
err := d.Decode(&reqParsed) err := d.Decode(&reqParsed)
@ -55,6 +54,7 @@ func (self JsonWrapper) ParseRequestBody(req *http.Request) (RpcRequest, error)
rpclogger.Errorln("Error decoding JSON: ", err) rpclogger.Errorln("Error decoding JSON: ", err)
return reqParsed, err return reqParsed, err
} }
rpclogger.DebugDetailf("Parsed request: %s", reqParsed) rpclogger.DebugDetailf("Parsed request: %s", reqParsed)
return reqParsed, nil return reqParsed, nil

@ -94,9 +94,10 @@ func sockHandler(api *rpc.EthereumApi) websocket.Handler {
var jsonrpcver string = "2.0" var jsonrpcver string = "2.0"
fn := func(conn *websocket.Conn) { fn := func(conn *websocket.Conn) {
for { for {
wslogger.Debugln("Handling request") wslogger.Debugln("Handling connection")
var reqParsed rpc.RpcRequest var reqParsed rpc.RpcRequest
// reqParsed, reqerr := JSON.ParseRequestBody(conn.Request())
if err := websocket.JSON.Receive(conn, &reqParsed); err != nil { if err := websocket.JSON.Receive(conn, &reqParsed); err != nil {
jsonerr := &rpc.RpcErrorObject{-32700, rpc.ErrorParseRequest} jsonerr := &rpc.RpcErrorObject{-32700, rpc.ErrorParseRequest}
JSON.Send(conn, &rpc.RpcErrorResponse{JsonRpc: jsonrpcver, ID: nil, Error: jsonerr}) JSON.Send(conn, &rpc.RpcErrorResponse{JsonRpc: jsonrpcver, ID: nil, Error: jsonerr})
@ -108,7 +109,7 @@ func sockHandler(api *rpc.EthereumApi) websocket.Handler {
if reserr != nil { if reserr != nil {
wslogger.Warnln(reserr) wslogger.Warnln(reserr)
jsonerr := &rpc.RpcErrorObject{-32603, reserr.Error()} jsonerr := &rpc.RpcErrorObject{-32603, reserr.Error()}
JSON.Send(conn, &rpc.RpcErrorResponse{JsonRpc: jsonrpcver, ID: &reqParsed.ID, Error: jsonerr}) JSON.Send(conn, &rpc.RpcErrorResponse{JsonRpc: jsonrpcver, ID: reqParsed.ID, Error: jsonerr})
continue continue
} }

Loading…
Cancel
Save