private function runCmd(DriverInterface $driver, $cmd, array $args, Response $response)
    {
        $data = null;
        try {
            if ($driver->isAllowedCommand($cmd)) {
                $data = call_user_func_array(
                    array($driver, $cmd),
                    $this->getArgs($args, $cmd, $response, $driver->getDriverId())
                );
            } else {
                $this->error(sprintf('command "%s" not allowed', $cmd));
            }
        } catch (Exception $e) {
            $this->error($e->getMessage());
        }

        return $data instanceof HttpResponse ? $data : $response;
    }