// readRequest reads a single request from a connection. func (s *Server) readRequest(codec rpc.ServerCodec, authHook func(proto.Message, bool) error) ( req rpc.Request, m method, args proto.Message, err error) { if err = codec.ReadRequestHeader(&req); err != nil { return } s.mu.RLock() var ok bool m, ok = s.methods[req.ServiceMethod] s.mu.RUnlock() // If we found the method, construct a request protobuf and parse into it. // If not, consume and discard the input by passing nil to ReadRequestBody. if ok { args = reflect.New(m.reqType.Elem()).Interface().(proto.Message) } if err = codec.ReadRequestBody(args); err != nil { return } if args == nil { return } err = authHook(args, m.public) return }
// readRequest reads a single request from a connection. func (s *Server) readRequest(codec rpc.ServerCodec, authHook func(proto.Message, bool) error) (rpc.Request, method, proto.Message, error) { var req rpc.Request if err := codec.ReadRequestHeader(&req); err != nil { return req, method{}, nil, err } s.mu.RLock() m, ok := s.methods[req.ServiceMethod] s.mu.RUnlock() // If we found the method, construct a request protobuf, parse into // it, and authenticate it. if ok { args := reflect.New(m.reqType.Elem()).Interface().(proto.Message) if err := codec.ReadRequestBody(args); err != nil { return req, m, args, err } return req, m, args, authHook(args, m.public) } // If not, consume and discard the input by passing nil to ReadRequestBody. return req, m, nil, codec.ReadRequestBody(nil) }