/* This file is part of go-ethereum go-ethereum is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. go-ethereum is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with go-ethereum. If not, see . */ package rpc import ( "bytes" "encoding/json" "errors" "fmt" "github.com/ethereum/go-ethereum/xeth" ) var ( errArguments = errors.New("Error: Insufficient arguments") errNotImplemented = errors.New("Error: Method not implemented") errUnknown = errors.New("Error: Unknown error") errDecodeArgs = errors.New("Error: Could not decode arguments") ) type RpcRequest struct { ID interface{} `json:"id"` JsonRpc string `json:"jsonrpc"` Method string `json:"method"` Params []json.RawMessage `json:"params"` } type RpcSuccessResponse struct { ID interface{} `json:"id"` JsonRpc string `json:"jsonrpc"` Result interface{} `json:"result"` } type RpcErrorResponse struct { ID interface{} `json:"id"` JsonRpc string `json:"jsonrpc"` Error *RpcErrorObject `json:"error"` } type RpcErrorObject struct { Code int `json:"code"` Message string `json:"message"` // Data interface{} `json:"data"` } func NewErrorWithMessage(err error, msg string) error { return fmt.Errorf("%s: %s", err.Error(), msg) } func (req *RpcRequest) ToSha3Args() (*Sha3Args, error) { if len(req.Params) < 1 { return nil, errArguments } args := new(Sha3Args) r := bytes.NewReader(req.Params[0]) if err := json.NewDecoder(r).Decode(args); err != nil { return nil, errDecodeArgs } return args, nil } func (req *RpcRequest) ToGetBlockArgs() (*GetBlockArgs, error) { if len(req.Params) < 1 { return nil, errArguments } args := new(GetBlockArgs) r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { return nil, errDecodeArgs } return args, nil } func (req *RpcRequest) ToNewTxArgs() (*NewTxArgs, error) { if len(req.Params) < 1 { return nil, errArguments } args := new(NewTxArgs) r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) } return args, nil } func (req *RpcRequest) ToPushTxArgs() (*PushTxArgs, error) { if len(req.Params) < 1 { return nil, errArguments } args := new(PushTxArgs) r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { return nil, errDecodeArgs } return args, nil } func (req *RpcRequest) ToGetStateArgs() (*GetStateArgs, error) { if len(req.Params) < 1 { return nil, errArguments } args := new(GetStateArgs) // TODO need to pass both arguments r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { return nil, errDecodeArgs } return args, nil } func (req *RpcRequest) ToStorageAtArgs() (*GetStorageArgs, error) { if len(req.Params) < 1 { return nil, errArguments } args := new(GetStorageArgs) r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { return nil, errDecodeArgs } return args, nil } func (req *RpcRequest) ToGetTxCountArgs() (*GetTxCountArgs, error) { if len(req.Params) < 1 { return nil, errArguments } args := new(GetTxCountArgs) r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { return nil, errDecodeArgs } return args, nil } func (req *RpcRequest) ToGetBalanceArgs() (*GetBalanceArgs, error) { if len(req.Params) < 1 { return nil, errArguments } args := new(GetBalanceArgs) r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { return nil, errDecodeArgs } return args, nil } func (req *RpcRequest) ToGetCodeAtArgs() (*GetCodeAtArgs, error) { if len(req.Params) < 1 { return nil, errArguments } args := new(GetCodeAtArgs) r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { return nil, errDecodeArgs } return args, nil } func (req *RpcRequest) ToBoolArgs() (bool, error) { if len(req.Params) < 1 { return false, errArguments } var args bool err := json.Unmarshal(req.Params[0], &args) if err != nil { return false, errDecodeArgs } return args, nil } func (req *RpcRequest) ToIntArgs() (int, error) { if len(req.Params) < 1 { return 0, errArguments } var args int if err := json.Unmarshal(req.Params[0], &args); err != nil { return 0, errArguments } return args, nil } func (req *RpcRequest) ToCompileArgs() (string, error) { if len(req.Params) < 1 { return "", errArguments } var args string err := json.Unmarshal(req.Params[0], &args) if err != nil { return "", errDecodeArgs } return args, nil } func (req *RpcRequest) ToFilterArgs() (*FilterOptions, error) { if len(req.Params) < 1 { return nil, errArguments } args := new(FilterOptions) r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { return nil, errDecodeArgs } return args, nil } func (req *RpcRequest) ToFilterStringArgs() (string, error) { if len(req.Params) < 1 { return "", errArguments } var args string err := json.Unmarshal(req.Params[0], &args) if err != nil { return "", errDecodeArgs } return args, nil } func (req *RpcRequest) ToUninstallFilterArgs() (int, error) { if len(req.Params) < 1 { return 0, errArguments } var args int err := json.Unmarshal(req.Params[0], &args) if err != nil { return 0, errDecodeArgs } return args, nil } func (req *RpcRequest) ToFilterChangedArgs() (int, error) { if len(req.Params) < 1 { return 0, errArguments } var id int r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(&id) if err != nil { return 0, errDecodeArgs } return id, nil } func (req *RpcRequest) ToDbPutArgs() (*DbArgs, error) { if len(req.Params) < 3 { return nil, errArguments } var args DbArgs err := json.Unmarshal(req.Params[0], &args.Database) if err != nil { return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) } err = json.Unmarshal(req.Params[1], &args.Key) if err != nil { return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) } err = json.Unmarshal(req.Params[2], &args.Value) if err != nil { return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) } return &args, nil } func (req *RpcRequest) ToDbGetArgs() (*DbArgs, error) { if len(req.Params) < 2 { return nil, errArguments } var args DbArgs err := json.Unmarshal(req.Params[0], &args.Database) if err != nil { return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) } err = json.Unmarshal(req.Params[1], &args.Key) if err != nil { return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) } return &args, nil } func (req *RpcRequest) ToWhisperFilterArgs() (*xeth.Options, error) { if len(req.Params) < 1 { return nil, errArguments } var args xeth.Options err := json.Unmarshal(req.Params[0], &args) if err != nil { return nil, NewErrorWithMessage(errDecodeArgs, err.Error()) } return &args, nil } func (req *RpcRequest) ToIdArgs() (int, error) { if len(req.Params) < 1 { return 0, errArguments } var id int err := json.Unmarshal(req.Params[0], &id) if err != nil { return 0, errDecodeArgs } return id, nil } func (req *RpcRequest) ToWhisperPostArgs() (*WhisperMessageArgs, error) { if len(req.Params) < 1 { return nil, errArguments } var args WhisperMessageArgs err := json.Unmarshal(req.Params[0], &args) if err != nil { return nil, err } return &args, nil } func (req *RpcRequest) ToWhisperHasIdentityArgs() (string, error) { if len(req.Params) < 1 { return "", errArguments } var args string err := json.Unmarshal(req.Params[0], &args) if err != nil { return "", err } return args, nil } func (req *RpcRequest) ToRegisterArgs() (string, error) { if len(req.Params) < 1 { return "", errArguments } var args string err := json.Unmarshal(req.Params[0], &args) if err != nil { return "", err } return args, nil } func (req *RpcRequest) ToWatchTxArgs() (string, error) { if len(req.Params) < 1 { return "", errArguments } var args string err := json.Unmarshal(req.Params[0], &args) if err != nil { return "", err } return args, nil } SDIR}/ from dependencies, categories m, n, o, and p.mat2016-04-011-8/+8 * Cleanup plistantoine2014-11-231-1/+0 * After STAGE support commit, stage paths get coded. Fix it.alexey2014-07-112-37/+40 * * Update to 0.39alexey2014-06-303-11/+15 * Add NO_STAGE all over the place in preparation for the staging support (cat: ...bapt2013-09-211-0/+1 * - convert to the new perl5 frameworkaz2013-09-151-2/+1 * Convert to new options frameworkbapt2013-06-041-14/+11 * The vast majority of pkg-descr files had the following format when theydougb2011-10-241-3/+0 * - remove MD5ohauer2011-07-031-1/+0 * - Update to 0.37wen2010-11-022-4/+4 * - Add OPTIONSamdmi32009-08-082-18/+22 * - Update to 0.36miwi2008-09-302-7/+8 * * Use gsed for muttalias module.obraun2008-07-261-1/+6 * - Remove unneeded dependency from gtk12/gtk20 [1]miwi2008-04-201-1/+1 * Update to 0.35.1.obraun2007-09-232-4/+4 * Fix up after bsd.perl.mk import.linimon2007-09-101-6/+6 * Upgrade to 0.34.obraun2006-11-132-4/+4 * Upgrade to 0.33.obraun2006-11-022-4/+4