aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-01-30 20:47:18 +0800
committerobscuren <geffobscura@gmail.com>2015-01-30 20:47:18 +0800
commitaf927ffdaf0c2c31047d22ab4a3163a4ef9d2342 (patch)
tree5269be68210713e977635069cdcb52bbf36396e3
parentc03d403437c20584bcbf3cf3fa9d79ac7a0a8ca7 (diff)
downloadgo-tangerine-af927ffdaf0c2c31047d22ab4a3163a4ef9d2342.tar.gz
go-tangerine-af927ffdaf0c2c31047d22ab4a3163a4ef9d2342.tar.zst
go-tangerine-af927ffdaf0c2c31047d22ab4a3163a4ef9d2342.zip
Added whisper messages
* have identity & get messages
-rw-r--r--cmd/mist/assets/examples/whisper.html22
-rw-r--r--rpc/message.go16
-rw-r--r--rpc/packages.go26
3 files changed, 59 insertions, 5 deletions
diff --git a/cmd/mist/assets/examples/whisper.html b/cmd/mist/assets/examples/whisper.html
index 51d7004de..6a7143eef 100644
--- a/cmd/mist/assets/examples/whisper.html
+++ b/cmd/mist/assets/examples/whisper.html
@@ -13,9 +13,19 @@
<table width="100%" id="table">
<tr>
+ <td>Count</td>
+ <td id="count"></td>
+ </tr>
+
+ <tr>
<td>ID</td>
<td id="id"></td>
</tr>
+
+ <tr>
+ <td>Has identity</td>
+ <td id="known"></td>
+ </tr>
</table>
</body>
@@ -27,13 +37,21 @@
var id = shh.newIdentity();
document.querySelector("#id").innerHTML = id;
+ document.querySelector("#known").innerHTML = shh.haveIdentity(id);
- shh.watch({topics: ["test"]}).arrived(function(message) {
+ var watch = shh.watch({topics: ["test"]})
+ watch.arrived(function(message) {
document.querySelector("#table").innerHTML += "<tr><td colspan='2'>"+JSON.stringify(message)+"</td></tr>";
});
function test() {
- shh.post({topics: ["test"], payload: web3.fromAscii("test it")})
+ shh.post({topics: ["test"], payload: web3.fromAscii("test it")});
+ count();
+
+ }
+
+ function count() {
+ document.querySelector("#count").innerHTML = watch.messages().length;
}
</script>
diff --git a/rpc/message.go b/rpc/message.go
index 919302921..26fac9d37 100644
--- a/rpc/message.go
+++ b/rpc/message.go
@@ -287,7 +287,7 @@ func (req *RpcRequest) ToWhisperFilterArgs() (*xeth.Options, error) {
return &args, nil
}
-func (req *RpcRequest) ToWhisperChangedArgs() (int, error) {
+func (req *RpcRequest) ToWhisperIdArgs() (int, error) {
if len(req.Params) < 1 {
return 0, NewErrorResponse(ErrorArguments)
}
@@ -314,3 +314,17 @@ func (req *RpcRequest) ToWhisperPostArgs() (*WhisperMessageArgs, error) {
rpclogger.DebugDetailf("%T %v", args, args)
return &args, nil
}
+
+func (req *RpcRequest) ToWhisperHasIdentityArgs() (string, error) {
+ if len(req.Params) < 1 {
+ return "", NewErrorResponse(ErrorArguments)
+ }
+
+ var args string
+ err := json.Unmarshal(req.Params[0], &args)
+ if err != nil {
+ return "", err
+ }
+ rpclogger.DebugDetailf("%T %v", args, args)
+ return args, nil
+}
diff --git a/rpc/packages.go b/rpc/packages.go
index 8344d6a46..06de5ca38 100644
--- a/rpc/packages.go
+++ b/rpc/packages.go
@@ -299,6 +299,16 @@ func (p *EthereumApi) WhisperPost(args *WhisperMessageArgs, reply *interface{})
return nil
}
+func (p *EthereumApi) HasWhisperIdentity(args string, reply *interface{}) error {
+ *reply = p.xeth.Whisper().HasIdentity(args)
+ return nil
+}
+
+func (p *EthereumApi) WhisperMessages(id int, reply *interface{}) error {
+ *reply = p.xeth.Whisper().Messages(id)
+ return nil
+}
+
func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error {
// Spec at https://github.com/ethereum/wiki/wiki/Generic-ON-RPC
rpclogger.DebugDetailf("%T %s", req.Params, req.Params)
@@ -405,7 +415,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
}
return p.NewWhisperFilter(args, reply)
case "shh_changed":
- args, err := req.ToWhisperChangedArgs()
+ args, err := req.ToWhisperIdArgs()
if err != nil {
return err
}
@@ -413,9 +423,21 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
case "shh_post":
args, err := req.ToWhisperPostArgs()
if err != nil {
- return nil
+ return err
}
return p.WhisperPost(args, reply)
+ case "shh_haveIdentity":
+ args, err := req.ToWhisperHasIdentityArgs()
+ if err != nil {
+ return err
+ }
+ return p.HasWhisperIdentity(args, reply)
+ case "shh_getMessages":
+ args, err := req.ToWhisperIdArgs()
+ if err != nil {
+ return err
+ }
+ return p.WhisperMessages(args, reply)
default:
return NewErrorResponse(fmt.Sprintf("%v %s", ErrorNotImplemented, req.Method))
}