function routeVeeam(clientIP, request, response, log) {
    // Attach the apiMethod method to the request, so it can used by monitoring in the server
    // eslint-disable-next-line no-param-reassign
    request.apiMethod = 'routeVeeam';
    _normalizeVeeamRequest(request);

    log.debug('routing request', {
        method: 'routeVeeam',
        url: request.url,
        clientIP,
        resourceType: request.resourceType,
        subResource: request.subResource,
    });

    // Rewrite action to LIST for list-objects
    const requestMethod = request.method === 'GET' && !request.objectKey ? 'LIST' : request.method;
    const { error, method } = checkUnsupportedRoutes(requestMethod, request.query, request.headers);

    if (error) {
        log.error('error validating route or uri params', { error });
        return responseXMLBody(error, '', response, log);
    }
    const bucketOrKeyError = checkBucketAndKey(
        request.bucketName, request.objectKey, request.query, requestMethod, log);

    if (bucketOrKeyError) {
        log.error('error with bucket or key value',
            { error: bucketOrKeyError });
        return routesUtils.responseXMLBody(bucketOrKeyError, null, response, log);
    }
    return authorizationMiddleware(request, response, requestMethod, log, method);
}
Router for the Veeam custom files
@param {string} clientIP - client IP address
@param {object} request - request object
@param {object} response - response object
@param {object} log - requets logger
@returns {undefined}