aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rpc/api.go12
-rw-r--r--rpc/args.go56
-rw-r--r--rpc/args_test.go40
3 files changed, 107 insertions, 1 deletions
diff --git a/rpc/api.go b/rpc/api.go
index 8bbe80bd8..90e5dcf37 100644
--- a/rpc/api.go
+++ b/rpc/api.go
@@ -381,6 +381,12 @@ func (p *EthereumApi) NewWhisperFilter(args *WhisperFilterArgs, reply *interface
return nil
}
+func (p *EthereumApi) UninstallWhisperFilter(id int, reply *interface{}) error {
+ delete(p.messages, id)
+ *reply = true
+ return nil
+}
+
func (self *EthereumApi) MessagesChanged(id int, reply *interface{}) error {
self.messagesMut.Lock()
defer self.messagesMut.Unlock()
@@ -733,7 +739,11 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
}
return p.NewWhisperFilter(args, reply)
case "shh_uninstallFilter":
- return errNotImplemented
+ args := new(FilterIdArgs)
+ if err := json.Unmarshal(req.Params, &args); err != nil {
+ return err
+ }
+ return p.UninstallWhisperFilter(args.Id, reply)
case "shh_getFilterChanges":
args := new(FilterIdArgs)
if err := json.Unmarshal(req.Params, &args); err != nil {
diff --git a/rpc/args.go b/rpc/args.go
index d4d807060..2e4e2c7a9 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -227,11 +227,67 @@ type BlockNumIndexArgs struct {
Index int64
}
+func (args *BlockNumIndexArgs) UnmarshalJSON(b []byte) (err error) {
+ var obj []interface{}
+ r := bytes.NewReader(b)
+ if err := json.NewDecoder(r).Decode(&obj); err != nil {
+ return errDecodeArgs
+ }
+
+ if len(obj) < 1 {
+ return errArguments
+ }
+
+ arg0, ok := obj[0].(string)
+ if !ok {
+ return errDecodeArgs
+ }
+ args.BlockNumber = ethutil.Big(arg0).Int64()
+
+ if len(obj) > 1 {
+ arg1, ok := obj[1].(string)
+ if !ok {
+ return errDecodeArgs
+ }
+ args.Index = ethutil.Big(arg1).Int64()
+ }
+
+ return nil
+}
+
type HashIndexArgs struct {
BlockHash string
Index int64
}
+func (args *HashIndexArgs) UnmarshalJSON(b []byte) (err error) {
+ var obj []interface{}
+ r := bytes.NewReader(b)
+ if err := json.NewDecoder(r).Decode(&obj); err != nil {
+ return errDecodeArgs
+ }
+
+ if len(obj) < 1 {
+ return errArguments
+ }
+
+ arg0, ok := obj[0].(string)
+ if !ok {
+ return errDecodeArgs
+ }
+ args.BlockHash = arg0
+
+ if len(obj) > 1 {
+ arg1, ok := obj[1].(string)
+ if !ok {
+ return errDecodeArgs
+ }
+ args.Index = ethutil.Big(arg1).Int64()
+ }
+
+ return nil
+}
+
type Sha3Args struct {
Data string
}
diff --git a/rpc/args_test.go b/rpc/args_test.go
index 027624500..6650d8d61 100644
--- a/rpc/args_test.go
+++ b/rpc/args_test.go
@@ -432,3 +432,43 @@ func TestWhisperIdentityArgs(t *testing.T) {
t.Errorf("Identity shoud be %#v but is %#v", expected.Identity, args.Identity)
}
}
+
+func TestBlockNumIndexArgs(t *testing.T) {
+ input := `["0x29a", "0x0"]`
+ expected := new(BlockNumIndexArgs)
+ expected.BlockNumber = 666
+ expected.Index = 0
+
+ args := new(BlockNumIndexArgs)
+ if err := json.Unmarshal([]byte(input), &args); err != nil {
+ t.Error(err)
+ }
+
+ if expected.BlockNumber != args.BlockNumber {
+ t.Errorf("BlockNumber shoud be %#v but is %#v", expected.BlockNumber, args.BlockNumber)
+ }
+
+ if expected.Index != args.Index {
+ t.Errorf("Index shoud be %#v but is %#v", expected.Index, args.Index)
+ }
+}
+
+func TestHashIndexArgs(t *testing.T) {
+ input := `["0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b", "0x1"]`
+ expected := new(HashIndexArgs)
+ expected.BlockHash = "0xc6ef2fc5426d6ad6fd9e2a26abeab0aa2411b7ab17f30a99d3cb96aed1d1055b"
+ expected.Index = 1
+
+ args := new(HashIndexArgs)
+ if err := json.Unmarshal([]byte(input), &args); err != nil {
+ t.Error(err)
+ }
+
+ if expected.BlockHash != args.BlockHash {
+ t.Errorf("BlockHash shoud be %#v but is %#v", expected.BlockHash, args.BlockHash)
+ }
+
+ if expected.Index != args.Index {
+ t.Errorf("Index shoud be %#v but is %#v", expected.Index, args.Index)
+ }
+}