<-
Apache > HTTP Server > Documentation > Version 2.0 > Developer Documentation

Преобразование Модулей от Apacheа 1.3 к Apacheу 2.0

это - первая попытка письма уроков, которые я узнал, пробуя преобразовать mod_mmap_static модуль к Apacheу 2.0. Это ни в коем случае не категорическим и вероятно даже не будет правильно до некоторой степени, но это - начало.

top

The easier changes ...

Cleanup Routines

они теперь должны иметь тип apr_status_t и возвращение ценность того типа. Обычно ценность возвращения будет APR_SUCCESS если нет некоторая потребность сигнализировать ошибку в уборке. Знайте, что даже при том, что Вы сигнализируете ошибку не, весь кодекс все же проверяет и действует на ошибку.

Initialisation Routines

они должны теперь быть переименованы, чтобы лучше иметь значение, где они сидят в полном процессе. Таким образом название получает мелочь от mmap_init к mmap_post_config . аргументы прошли, подверглись радикальной перемене и теперь похожий

Data Types

много типов данных было перемещено в APR . это означает, что некоторые имели изменение названия, типа один показанный выше. Следующее - краткий список некоторых из изменений, которые Вам, вероятно, придется сделать.

top

The messier changes...

Register Hooks

новая архитектура использует ряд крюков, чтобы предусмотреть запрос ваших функций. Они Вы будете должны добавить к вашему модулю посредством новой функции, static void register_hooks(void) . функция является действительно разумно прямой, как только Вы понимаете какой потребности быть сделанными. Каждая функция, которая нуждается в заходе в некоторую стадию в обработке запроса, должна быть зарегистрирована, тренеры не делают. Есть множество фаз, где функции могут быть добавлены, и для каждого Вы можете определить с высокой степенью контроля относительный заказ, что функция будет призвана.

это - кодекс, который был добавлен к mod_mmap_static :

static void register_hooks(void) { static const char * const aszPre[]={ "http_core.c",NULL }; ap_hook_post_config(mmap_post_config,NULL,NULL,HOOK_MIDDLE); ap_hook_translate_name(mmap_static_xlat,aszPre,NULL,HOOK_LAST); };

это регистрирует 2 функции, которые нужно назвать, один в post_config стадия (фактически каждый модуль будет нуждаться в этом), и один для translate_name фаза. отметьте, что, в то время как есть различная функция, называет формат каждого, идентично. Так, что является форматом?

ap_hook_ phase_name ( function_name , predecessors , successors , position );

есть 3 определенные положения крюка...

чтобы определять положение, Вы используете положение и затем изменяете это с предшественниками и преемниками. Каждый из модификаторов может быть списком функций, которые нужно назвать, или прежде, чем функцией управляют (предшественники) или после того, как функция бежала (преемники).

в mod_mmap_static случай я не заботился о post_config стадия, но mmap_static_xlat должен назвать после того, как основной модуль сделал, это - перевод названия, следовательно использование aszPre, чтобы определить модификатор к положению HOOK_LAST .

Module Definition

есть теперь много меньше стадий, чтобы волноваться о, создавая ваше определение модуля. Старый defintion был похож

module MODULE_VAR_EXPORT

module_name

_module = { STANDARD_MODULE_STUFF, /* initializer */ /* dir config creater */ /* dir merger --- default is to override */ /* server config */ /* merge server config */ /* command handlers */ /* handlers */ /* filename translation */ /* check_user_id */ /* check auth */ /* check access */ /* type_checker */ /* fixups */ /* logger */ /* header parser */ /* child_init */ /* child_exit */ /* post read-request */ };

новая структура намного более проста...

module MODULE_VAR_EXPORT

module_name

_module = { STANDARD20_MODULE_STUFF, /* create per-directory config structures */ /* merge per-directory config structures */ /* create per-server config structures */ /* merge per-server config structures */ /* command handlers */ /* handlers */ /* register hooks */ };

некоторые из них читают непосредственно поперек, некоторые не делают. Я буду пробовать подвести итог того, что должно быть сделано ниже.

стадии, которые читали непосредственно поперек:

/* dir config creater */
/* create per-directory config structures */
/* server config */
/* create per-server config structures */
/* dir merger */
/* merge per-directory config structures */
/* merge server config */
/* merge per-server config structures */
/* command table */
/* command apr_table_t */
/* handlers */
/* handlers */

остаток от старых функций должен быть зарегистрирован как крюки. Есть следующие стадии крюка, определенные пока...

ap_hook_post_config
это - то, где старое _init рутины зарегистрированы
ap_hook_http_method
восстановить http метод от запроса. (наследство)
ap_hook_open_logs
открыть любые указанные регистрации
ap_hook_auth_checker
проверить, требует ли ресурс разрешения
ap_hook_access_checker
проверить для определенных для модуля ограничений
ap_hook_check_user_id
проверить пользователя-id и пароль
ap_hook_default_port
восстановить порт по умолчанию для сервера
ap_hook_pre_connection
сделать любую установку, требуемую как раз перед обработкой, но после принятия
ap_hook_process_connection
бежать правильным протоколом
ap_hook_child_init
звонить, как только ребенок начат
ap_hook_create_request
??
ap_hook_fixups
длитесь шанс изменить вещи перед производством содержания
ap_hook_handler
произвести содержание
ap_hook_header_parser
позволяет взгляду модулей на удары головой, не используемые большинством модулей, потому что они используют post_read_request для этого
ap_hook_insert_filter
вставить фильтры в цепь фильтра
ap_hook_log_transaction
регистрировать информацию о запросе
ap_hook_optional_fn_retrieve
восстановить любые функции, зарегистрированные как дополнительные
ap_hook_post_read_request
названный после чтения запроса, перед любой другой фазой
ap_hook_quick_handler
названный перед любой обработкой запроса, используемой модулями тайника.
ap_hook_translate_name
перевести ТУРОВ на имя файла
ap_hook_type_checker
определить и/или установить тип доктора