From 0afd9ac0bb0b799ff8ef3a172fcf8eccb3872a5e Mon Sep 17 00:00:00 2001 From: Ekaterina Pavlova Date: Wed, 6 Nov 2024 16:26:30 +0300 Subject: [PATCH] rpcsrv: align default error code with C# implementation We had 400, 405 and 500 in getHTTPCodeForError, but none is explicitly set in C#. 1. **405 code** (unknown method, `neorpc.MethodNotFoundCode`). The resulting HTTP code returned by C# server is 200 OK: ``` anna@kiwi:~/Documents/GitProjects/bane-labs/go-ethereum$ curl -v -d '{ "jsonrpc": "2.0", "id": 1, "method": "unknown-method", "params": [] }' http://seed1t5.neo.org:20332 | json_pp % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 34.133.235.69:20332... * Connected to seed1t5.neo.org (34.133.235.69) port 20332 (#0) 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0> POST / HTTP/1.1 > Host: seed1t5.neo.org:20332 > User-Agent: curl/7.81.0 > Accept: */* > Content-Length: 71 > Content-Type: application/x-www-form-urlencoded > } [71 bytes data] * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Content-Type: application/json < Date: Tue, 12 Nov 2024 13:45:51 GMT < Server: Kestrel < Transfer-Encoding: chunked < { [461 bytes data] 100 520 0 449 100 71 729 115 --:--:-- --:--:-- --:--:-- 844 * Connection #0 to host seed1t5.neo.org left intact { "error" : { "code" : -32601, "data" : " at Neo.Plugins.Result.True_Or(Boolean result, RpcError err)\n at Neo.Plugins.RpcServer.ProcessRequestAsync (HttpContext context, JObject request)", "message" : "Method not found - The method 'unknown-method' doesn't exists. - at Neo.Plugins.Result.True_Or(Boolean result, RpcError err)\n at Neo.Plugins.RpcServer.ProcessRequestAsync (HttpContext context, JObject request)" }, "id" : 1, "jsonrpc" : "2.0" } ``` 2. **400 code** (malformed request, `neorpc.BadRequestCode`). The resulting HTTP code returned by C# server is 200 OK: ``` anna@kiwi:~/Documents/GitProjects/bane-labs/go-ethereum$ curl -v -d '{ "jsonrpc": "2.0", "id": 1, "method": "getapplicationlog", "params": ["] }' http://seed1t5.neo.org:20332 | json_pp % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 34.133.235.69:20332... 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to seed1t5.neo.org (34.133.235.69) port 20332 (#0) > POST / HTTP/1.1 > Host: seed1t5.neo.org:20332 > User-Agent: curl/7.81.0 > Accept: */* > Content-Length: 75 > Content-Type: application/x-www-form-urlencoded > } [75 bytes data] * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Content-Type: application/json < Date: Tue, 12 Nov 2024 13:50:12 GMT < Server: Kestrel < Transfer-Encoding: chunked < { [86 bytes data] 100 150 0 75 100 75 84 84 --:--:-- --:--:-- --:--:-- 169 * Connection #0 to host seed1t5.neo.org left intact { "error" : { "code" : -32700, "message" : "Bad request" }, "id" : null, "jsonrpc" : "2.0" } ``` 3. **500 code** (internal server error, `neorpc .InternalServerErrorCode`). It's difficult to reproduce this error on real network for C# server, but the resulting code is expected to be the same, 200 OK. Close #3586 Signed-off-by: Ekaterina Pavlova --- pkg/services/rpcsrv/error.go | 17 ----------------- pkg/services/rpcsrv/server.go | 6 ------ 2 files changed, 23 deletions(-) diff --git a/pkg/services/rpcsrv/error.go b/pkg/services/rpcsrv/error.go index 68188ae83..a37bc3823 100644 --- a/pkg/services/rpcsrv/error.go +++ b/pkg/services/rpcsrv/error.go @@ -1,8 +1,6 @@ package rpcsrv import ( - "net/http" - "github.com/nspcc-dev/neo-go/pkg/neorpc" ) @@ -36,18 +34,3 @@ func (ab abstractBatch) RunForErrors(f func(jsonErr *neorpc.Error)) { a.RunForErrors(f) } } - -func getHTTPCodeForError(respErr *neorpc.Error) int { - var httpCode int - switch respErr.Code { - case neorpc.BadRequestCode: - httpCode = http.StatusBadRequest - case neorpc.MethodNotFoundCode: - httpCode = http.StatusMethodNotAllowed - case neorpc.InternalServerErrorCode: - httpCode = http.StatusInternalServerError - default: - httpCode = http.StatusUnprocessableEntity - } - return httpCode -} diff --git a/pkg/services/rpcsrv/server.go b/pkg/services/rpcsrv/server.go index ecd8b42b7..b6d0949a6 100644 --- a/pkg/services/rpcsrv/server.go +++ b/pkg/services/rpcsrv/server.go @@ -3100,12 +3100,6 @@ func (s *Server) writeHTTPServerResponse(r *params.Request, w http.ResponseWrite if s.config.EnableCORSWorkaround { setCORSOriginHeaders(w.Header()) } - if r.In != nil { - resp := resp.(abstract) - if resp.Error != nil { - w.WriteHeader(getHTTPCodeForError(resp.Error)) - } - } encoder := json.NewEncoder(w) err := encoder.Encode(resp)