mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-12-23 13:41:37 +00:00
0afd9ac0bb
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 <ekt@morphbits.io>
36 lines
945 B
Go
36 lines
945 B
Go
package rpcsrv
|
|
|
|
import (
|
|
"github.com/nspcc-dev/neo-go/pkg/neorpc"
|
|
)
|
|
|
|
// abstractResult is an interface which represents either single JSON-RPC 2.0 response
|
|
// or batch JSON-RPC 2.0 response.
|
|
type abstractResult interface {
|
|
RunForErrors(f func(jsonErr *neorpc.Error))
|
|
}
|
|
|
|
// abstract represents abstract JSON-RPC 2.0 response. It is used as a server-side response
|
|
// representation.
|
|
type abstract struct {
|
|
neorpc.Header
|
|
Error *neorpc.Error `json:"error,omitempty"`
|
|
Result any `json:"result,omitempty"`
|
|
}
|
|
|
|
// RunForErrors implements abstractResult interface.
|
|
func (a abstract) RunForErrors(f func(jsonErr *neorpc.Error)) {
|
|
if a.Error != nil {
|
|
f(a.Error)
|
|
}
|
|
}
|
|
|
|
// abstractBatch represents abstract JSON-RPC 2.0 batch-response.
|
|
type abstractBatch []abstract
|
|
|
|
// RunForErrors implements abstractResult interface.
|
|
func (ab abstractBatch) RunForErrors(f func(jsonErr *neorpc.Error)) {
|
|
for _, a := range ab {
|
|
a.RunForErrors(f)
|
|
}
|
|
}
|