MCPcopy Create free account
hub / github.com/CPChain/chain / readRequest

Method readRequest

api/rpc/server.go:377–445  ·  view source on GitHub ↗

readRequest requests the next (batch) request from the codec. It will return the collection of requests, an indication if the request was a batch, the invalid request identifier and an error when the request could not be read/parsed.

(codec ServerCodec)

Source from the content-addressed store, hash-verified

375// of requests, an indication if the request was a batch, the invalid request identifier and an
376// error when the request could not be read/parsed.
377func (s *Server) readRequest(codec ServerCodec) ([]*serverRequest, bool, Error) {
378 reqs, batch, err := codec.ReadRequestHeaders()
379 if err != nil {
380 return nil, batch, err
381 }
382
383 requests := make([]*serverRequest, len(reqs))
384
385 // verify requests
386 for i, r := range reqs {
387 var ok bool
388 var svc *service
389
390 if r.err != nil {
391 requests[i] = &serverRequest{id: r.id, err: r.err}
392 continue
393 }
394
395 if r.isPubSub && strings.HasSuffix(r.method, unsubscribeMethodSuffix) {
396 requests[i] = &serverRequest{id: r.id, isUnsubscribe: true}
397 argTypes := []reflect.Type{reflect.TypeOf("")} // expect subscription id as first arg
398 if args, err := codec.ParseRequestArguments(argTypes, r.params); err == nil {
399 requests[i].args = args
400 } else {
401 requests[i].err = &invalidParamsError{err.Error()}
402 }
403 continue
404 }
405
406 if svc, ok = s.services[r.service]; !ok { // rpc method isn't available
407 requests[i] = &serverRequest{id: r.id, err: &methodNotFoundError{r.service, r.method}}
408 continue
409 }
410
411 if r.isPubSub { // eth_subscribe, r.method contains the subscription method name
412 if callb, ok := svc.subscriptions[r.method]; ok {
413 requests[i] = &serverRequest{id: r.id, svcname: svc.name, callb: callb}
414 if r.params != nil && len(callb.argTypes) > 0 {
415 argTypes := []reflect.Type{reflect.TypeOf("")}
416 argTypes = append(argTypes, callb.argTypes...)
417 if args, err := codec.ParseRequestArguments(argTypes, r.params); err == nil {
418 requests[i].args = args[1:] // first one is service.method name which isn't an actual argument
419 } else {
420 requests[i].err = &invalidParamsError{err.Error()}
421 }
422 }
423 } else {
424 requests[i] = &serverRequest{id: r.id, err: &methodNotFoundError{r.service, r.method}}
425 }
426 continue
427 }
428
429 if callb, ok := svc.callbacks[r.method]; ok { // lookup RPC method
430 requests[i] = &serverRequest{id: r.id, svcname: svc.name, callb: callb}
431 if r.params != nil && len(callb.argTypes) > 0 {
432 if args, err := codec.ParseRequestArguments(callb.argTypes, r.params); err == nil {
433 requests[i].args = args
434 } else {

Callers 1

serveRequestMethod · 0.95

Calls 3

ReadRequestHeadersMethod · 0.65
ParseRequestArgumentsMethod · 0.65
ErrorMethod · 0.65

Tested by

no test coverage detected