From dc3fb69dce674069479313837a5612045303c418 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 25 Aug 2015 12:23:25 +0200 Subject: [PATCH] Merge pull request #1710 from bas-vk/useragent user agent messages were dumped in some cases (cherry picked from commit a219159e7e18ccaa52c9c493a19a11e6b7bab3dd) --- rpc/comms/ipc.go | 12 ++++-------- rpc/comms/ipc_unix.go | 23 ++++++++++++++++++++++- rpc/comms/ipc_windows.go | 23 ++++++++++++++++++++++- rpc/jeth.go | 10 ---------- 4 files changed, 48 insertions(+), 20 deletions(-) diff --git a/rpc/comms/ipc.go b/rpc/comms/ipc.go index d897bf3137..3de659b65c 100644 --- a/rpc/comms/ipc.go +++ b/rpc/comms/ipc.go @@ -42,16 +42,12 @@ func (self *ipcClient) Close() { self.coder.Close() } -func (self *ipcClient) Send(req interface{}) error { +func (self *ipcClient) Send(msg interface{}) error { var err error - if r, ok := req.(*shared.Request); ok { - if err = self.coder.WriteResponse(r); err != nil { - if err = self.reconnect(); err == nil { - err = self.coder.WriteResponse(r) - } + if err = self.coder.WriteResponse(msg); err != nil { + if err = self.reconnect(); err == nil { + err = self.coder.WriteResponse(msg) } - - return err } return err } diff --git a/rpc/comms/ipc_unix.go b/rpc/comms/ipc_unix.go index 24aefa5f34..9d90da0719 100644 --- a/rpc/comms/ipc_unix.go +++ b/rpc/comms/ipc_unix.go @@ -26,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" + "github.com/ethereum/go-ethereum/rpc/useragent" ) func newIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { @@ -34,7 +35,18 @@ func newIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { return nil, err } - return &ipcClient{cfg.Endpoint, c, codec, codec.New(c)}, nil + coder := codec.New(c) + msg := shared.Request{ + Id: 0, + Method: useragent.EnableUserAgentMethod, + Jsonrpc: shared.JsonRpcVersion, + Params: []byte("[]"), + } + + coder.WriteResponse(msg) + coder.Recv() + + return &ipcClient{cfg.Endpoint, c, codec, coder}, nil } func (self *ipcClient) reconnect() error { @@ -42,6 +54,15 @@ func (self *ipcClient) reconnect() error { c, err := net.DialUnix("unix", nil, &net.UnixAddr{self.endpoint, "unix"}) if err == nil { self.coder = self.codec.New(c) + + msg := shared.Request{ + Id: 0, + Method: useragent.EnableUserAgentMethod, + Jsonrpc: shared.JsonRpcVersion, + Params: []byte("[]"), + } + self.coder.WriteResponse(msg) + self.coder.Recv() } return err diff --git a/rpc/comms/ipc_windows.go b/rpc/comms/ipc_windows.go index b2fe2b29db..47edd9e5bc 100644 --- a/rpc/comms/ipc_windows.go +++ b/rpc/comms/ipc_windows.go @@ -32,6 +32,7 @@ import ( "github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/rpc/shared" + "github.com/ethereum/go-ethereum/rpc/useragent" ) var ( @@ -656,13 +657,33 @@ func newIpcClient(cfg IpcConfig, codec codec.Codec) (*ipcClient, error) { return nil, err } - return &ipcClient{cfg.Endpoint, c, codec, codec.New(c)}, nil + coder := codec.New(c) + msg := shared.Request{ + Id: 0, + Method: useragent.EnableUserAgentMethod, + Jsonrpc: shared.JsonRpcVersion, + Params: []byte("[]"), + } + + coder.WriteResponse(msg) + coder.Recv() + + return &ipcClient{cfg.Endpoint, c, codec, coder}, nil } func (self *ipcClient) reconnect() error { c, err := Dial(self.endpoint) if err == nil { self.coder = self.codec.New(c) + + req := shared.Request{ + Id: 0, + Method: useragent.EnableUserAgentMethod, + Jsonrpc: shared.JsonRpcVersion, + Params: []byte("[]"), + } + self.coder.WriteResponse(req) + self.coder.Recv() } return err } diff --git a/rpc/jeth.go b/rpc/jeth.go index 158bfb64cb..757f6b7eb5 100644 --- a/rpc/jeth.go +++ b/rpc/jeth.go @@ -40,16 +40,6 @@ type Jeth struct { } func NewJeth(ethApi shared.EthereumApi, re *jsre.JSRE, client comms.EthereumClient, fe xeth.Frontend) *Jeth { - // enable the jeth as the user agent - req := shared.Request{ - Id: 0, - Method: useragent.EnableUserAgentMethod, - Jsonrpc: shared.JsonRpcVersion, - Params: []byte("[]"), - } - client.Send(&req) - client.Recv() - return &Jeth{ethApi, re, client, fe} }