diff --git a/rpc/json.go b/rpc/json.go index 2e7fd599e2..27483e3a33 100644 --- a/rpc/json.go +++ b/rpc/json.go @@ -163,22 +163,25 @@ func parseRequest(incomingMsg json.RawMessage) ([]rpcRequest, bool, Error) { return nil, false, &invalidMessageError{err.Error()} } - // subscribe are special, they will always use `subscribeMethod` as first param in the payload - if strings.HasSuffix(in.Method, subscribeMethodSuffix) { - reqs := []rpcRequest{{id: &in.Id, isPubSub: true}} - if len(in.Payload) > 0 { - // first param must be subscription name - var subscribeMethod [1]string - if err := json.Unmarshal(in.Payload, &subscribeMethod); err != nil { - log.Debug(fmt.Sprintf("Unable to parse subscription method: %v\n", err)) - return nil, false, &invalidRequestError{"Unable to parse subscription request"} - } + // shh_subscribe should not be handled in a special way + if !strings.HasPrefix(in.Method, "shh_") { + // subscribe are special, they will always use `subscribeMethod` as first param in the payload + if strings.HasSuffix(in.Method, subscribeMethodSuffix) { + reqs := []rpcRequest{{id: &in.Id, isPubSub: true}} + if len(in.Payload) > 0 { + // first param must be subscription name + var subscribeMethod [1]string + if err := json.Unmarshal(in.Payload, &subscribeMethod); err != nil { + log.Debug(fmt.Sprintf("Unable to parse subscription method: %v\n", err)) + return nil, false, &invalidRequestError{"Unable to parse subscription request"} + } - reqs[0].service, reqs[0].method = strings.TrimSuffix(in.Method, subscribeMethodSuffix), subscribeMethod[0] - reqs[0].params = in.Payload - return reqs, false, nil + reqs[0].service, reqs[0].method = strings.TrimSuffix(in.Method, subscribeMethodSuffix), subscribeMethod[0] + reqs[0].params = in.Payload + return reqs, false, nil + } + return nil, false, &invalidRequestError{"Unable to parse subscription request"} } - return nil, false, &invalidRequestError{"Unable to parse subscription request"} } if strings.HasSuffix(in.Method, unsubscribeMethodSuffix) {