From 5c6540452ac49db3defdfa1e141b4acf8eaaaad7 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Thu, 14 May 2015 12:39:57 -0500 Subject: [PATCH] Omit replies for notification requests When Id is missing, the client does not want a response --- rpc/http.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/rpc/http.go b/rpc/http.go index c5bb10c80c..9220c730c5 100644 --- a/rpc/http.go +++ b/rpc/http.go @@ -87,7 +87,9 @@ func JSONRPC(pipe *xeth.XEth) http.Handler { var reqSingle RpcRequest if err := json.Unmarshal(body, &reqSingle); err == nil { response := RpcResponse(api, &reqSingle) - send(w, &response) + if reqSingle.Id != nil { + send(w, &response) + } return } @@ -96,11 +98,28 @@ func JSONRPC(pipe *xeth.XEth) http.Handler { if err := json.Unmarshal(body, &reqBatch); err == nil { // Build response batch resBatch := make([]*interface{}, len(reqBatch)) + resCount := 0 + for i, request := range reqBatch { response := RpcResponse(api, &request) - resBatch[i] = response + // this leaves nil entries in the response batch for later removal + if request.Id != nil { + resBatch[i] = response + resCount = resCount + 1 + } } - send(w, resBatch) + + // make response omitting nil entries + respBatchComp := make([]*interface{}, resCount) + resCount = resCount - 1 + for _, v := range resBatch { + if v != nil { + respBatchComp[resCount] = v + resCount = resCount - 1 + } + } + + send(w, respBatchComp) return }