code: func (h *handler) handleCallMsg(ctx *callProc, msg *jsonrpcMessage) *jsonrpcMessage {
  	start := time.Now()
  	switch {
  	case msg.isNotification():
  		h.handleCall(ctx, msg)
  		h.log.Debug("Served "+msg.Method, "t", time.Since(start))
  		return nil
  	case msg.isCall():
  		resp := h.handleCall(ctx, msg)
  		if resp.Error != nil {
  			h.log.Warn("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start), "err", resp.Error.Message)
  		} else {
  			h.log.Debug("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start))
  		}
  		return resp
  	case msg.hasValidID():
  		return msg.errorResponse(&invalidRequestError{"invalid request"})
  	default:
  		return errorMessage(&invalidRequestError{"invalid request"})
  	}
  }
docs: // handleCallMsg executes a call message and returns the answer.