Roxen.git / server / base_server / configuration.pike

version» Context lines:

Roxen.git/server/base_server/configuration.pike:647:   }      private void sort_modules()   {    sorted_module_types = map(sorted_modules, module_sort_key);    sort(sorted_module_types, sorted_modules);    sorted_module_types = map(sorted_module_types, `&, MODULE_TYPE_MASK);    invalidate_cache();   }    + // Generic lookup function for the various module caches. + private array(function|RoxenModule) low_module_lookup(int module_type_mask, +  string|void symbol) + { +  array(RoxenModule) modules = +  reverse(filter(sorted_modules, +  map(sorted_module_types, `&, module_type_mask))); +  if (!symbol) return modules; +  return modules[symbol] - ({ 0 }); + } +    void unregister_urls()   {    foreach( registered_urls + failed_urls, string url )    roxen.unregister_url(url, this_object());    registered_urls = ({});   }      private void safe_stop_module (RoxenModule mod, string desc)   {    if (mixed err = catch (mod && mod->stop &&
Roxen.git/server/base_server/configuration.pike:740:      array (RoxenModule) get_providers(string provides)   //! Returns an array with all provider modules that provides "provides".   {    // This cache is cleared in the invalidate_cache() call.    if(!sizeof(provider_module_cache))    {    provider_module_cache[0] = 0; // Initialization sentinel.    int prev_pri = -1;    array(RoxenModule) modules = ({}); -  foreach(reverse(filter(sorted_modules, -  map(sorted_module_types, `&, MODULE_PROVIDER))), -  RoxenModule me) { +  foreach(low_module_lookup(MODULE_PROVIDER), RoxenModule me) {    if (!me->query_provides) continue;    int pri = me->query("_priority");    if (pri != prev_pri) {    sort(modules->module_identifier(), modules);    foreach(modules, RoxenModule p) {    mixed provs = p->query_provides();    if (stringp(provs)) {    provs = (< provs >);    } else if (arrayp(provs)) {    provs = mkmultiset(provs);
Roxen.git/server/base_server/configuration.pike:831:    return ret;    }    }    }   }      array(function) file_extension_modules(string ext)   {    if (!sizeof(file_extension_module_cache)) {    file_extension_module_cache[0] = 0; // Initialization sentinel. -  foreach(reverse(filter(sorted_modules, map(sorted_module_types, `&, -  MODULE_FILE_EXTENSION))), -  RoxenModule me) { +  foreach(low_module_lookup(MODULE_FILE_EXTENSION), RoxenModule me) {    if (!me->handle_file_extension) continue;    array(string) arr = me->query_file_extensions();    foreach(arr, string e) {    file_extension_module_cache[e] += ({ me->handle_file_extension });    }    }    }    return file_extension_module_cache[ext];   }      array(function) url_modules()   {    if(!url_module_cache)    { -  url_module_cache=({ }); -  foreach(reverse(filter(sorted_modules, map(sorted_module_types, `&, -  MODULE_URL))), -  RoxenModule me) { -  if (me->remap_url) -  url_module_cache += ({ me->remap_url }); +  url_module_cache = low_module_lookup(MODULE_URL, "remap_url");    } -  } +     return url_module_cache;   }      protected mapping api_module_cache = ([]);   mapping api_functions(void|RequestID id)   {    return api_module_cache+([]);   }      array (function) logger_modules()   {    if(!logger_module_cache)    { -  logger_module_cache=({ }); -  foreach(reverse(filter(sorted_modules, map(sorted_module_types, `&, -  MODULE_LOGGER))), -  RoxenModule me) { -  if(me->log) -  logger_module_cache += ({ me->log }); +  logger_module_cache = low_module_lookup(MODULE_LOGGER, "log");    } -  } +     return logger_module_cache;   }      array (function) last_modules()   {    if(!last_module_cache)    { -  int i; -  last_module_cache=({ }); -  foreach(reverse(filter(sorted_modules, map(sorted_module_types, `&, -  MODULE_LAST))), -  RoxenModule me) { -  if(me->last_resort) -  last_module_cache += ({ me->last_resort }); +  last_module_cache = low_module_lookup(MODULE_LAST, "last_resort");    } -  } +     return last_module_cache;   }      protected mixed strip_fork_information(RequestID id)   {    if (uname()->sysname == "Darwin") {    // Look for Mac OS X special filenames that are used access files in    // magic ways:    //    // foo.txt/..namedfork/data (same as foo.txt)
Roxen.git/server/base_server/configuration.pike:941: Inside #if defined(__NT__)
   if (   #ifdef __NT__    1 ||   #endif    uname()->sysname == "Darwin") {    first_module_cache= ({    strip_fork_information, // Always first!    });    }    -  foreach(reverse(filter(sorted_modules, map(sorted_module_types, `&, -  MODULE_FIRST))), -  RoxenModule me) { -  if(me->first_try) -  first_module_cache += ({ me->first_try }); +  first_module_cache += low_module_lookup(MODULE_FIRST, "first_try");    } -  } +        return first_module_cache;   }      void set_userdb_module_cache( array to )   // Used by the config_filesystem.pike module to enforce the usage of   // the config userdb module, for now.   {    userdb_module_cache = to;   }      array(UserDB) user_databases()   {    if( userdb_module_cache )    return userdb_module_cache; -  return userdb_module_cache = -  reverse(filter(sorted_modules, -  map(sorted_module_types, `&, MODULE_USERDB))); +  return userdb_module_cache = low_module_lookup(MODULE_USERDB);   }      array(AuthModule) auth_modules()   {    if( auth_module_cache )    return auth_module_cache; -  return auth_module_cache = -  reverse(filter(sorted_modules, -  map(sorted_module_types, `&, MODULE_AUTH))); +  return auth_module_cache = low_module_lookup(MODULE_AUTH);   }      array location_modules()   //! Return an array of all location modules the request should be   //! mapped through, by order of priority.   {    if(!location_module_cache)    {    array new_location_module_cache=({ });    int prev_pri = -1;    array level_find_files = ({});    array(string) level_locations = ({}); -  foreach(reverse(filter(sorted_modules, -  map(sorted_module_types, `&, MODULE_LOCATION))), -  RoxenModule me) { +  foreach(low_module_lookup(MODULE_LOCATION), RoxenModule me) {    int pri = me->query("_priority");    if (pri != prev_pri) {    sort(level_locations, level_find_files);    foreach(level_locations; int i; string path) {    new_location_module_cache += ({ ({ path, level_find_files[i] }) });    }    level_locations = ({});    level_find_files = ({});    }    prev_pri = pri;
Roxen.git/server/base_server/configuration.pike:1019:    }    location_module_cache = new_location_module_cache;    }    return location_module_cache;   }      array(function) filter_modules()   {    if(!filter_module_cache)    { -  foreach(reverse(filter(sorted_modules, -  map(sorted_module_types, `&, MODULE_FILTER))), -  RoxenModule me) { -  if (me->filter) { -  filter_module_cache += ({ me->filter }); +  filter_module_cache = low_module_lookup(MODULE_FILTER, "filter");    } -  } -  } +     return filter_module_cache;   }      void end_logger()   {    if (mixed err = catch {    if (roxen.LogFile logger =    log_function && function_object (log_function)) {    logger->close();    destruct (logger);