mpm_winnt.h revision e978097e0bf2ae161b6f9dde40eaf089bf046c89
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak/* Copyright 1999-2005 The Apache Software Foundation or its licensors, as
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * applicable.
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak *
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * Licensed under the Apache License, Version 2.0 (the "License");
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * you may not use this file except in compliance with the License.
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * You may obtain a copy of the License at
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak *
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * http://www.apache.org/licenses/LICENSE-2.0
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak *
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * Unless required by applicable law or agreed to in writing, software
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * distributed under the License is distributed on an "AS IS" BASIS,
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * See the License for the specific language governing permissions and
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * limitations under the License.
27e52281f1522522b170cafc76b08b58aa70ccaand */
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#ifndef APACHE_MPM_WINNT_H
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#define APACHE_MPM_WINNT_H
4b5981e276e93df97c34e4da05ca5cf8bbd937dand
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#include "ap_listen.h"
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
befb6758d5618c60f29b19f9a7eb75ab993511dcjim/* From service.c: */
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung#define SERVICE_APACHE_RESTART 128
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem#ifndef AP_DEFAULT_SERVICE_NAME
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem#define AP_DEFAULT_SERVICE_NAME "Apache2"
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#endif
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#define SERVICECONFIG9X "Software\\Microsoft\\Windows\\CurrentVersion\\RunServices"
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#define SERVICECONFIG "System\\CurrentControlSet\\Services\\%s"
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#define SERVICEPARAMS "System\\CurrentControlSet\\Services\\%s\\Parameters"
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakapr_status_t mpm_service_set_name(apr_pool_t *p, const char **display_name,
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak const char *set_name);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakapr_status_t mpm_merge_service_args(apr_pool_t *p, apr_array_header_t *args,
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak int fixed_args);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakapr_status_t mpm_service_to_start(const char **display_name, apr_pool_t *p);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakapr_status_t mpm_service_started(void);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakapr_status_t mpm_service_install(apr_pool_t *ptemp, int argc,
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak char const* const* argv, int reconfig);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakapr_status_t mpm_service_uninstall(void);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakapr_status_t mpm_service_start(apr_pool_t *ptemp, int argc,
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak char const* const* argv);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakvoid mpm_signal_service(apr_pool_t *ptemp, int signal);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakvoid mpm_service_stopping(void);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakvoid mpm_start_console_handler(void);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakvoid mpm_start_child_console_handler(void);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak/* From nt_eventlog.c: */
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakvoid mpm_nt_eventlog_stderr_open(char *display_name, apr_pool_t *p);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakvoid mpm_nt_eventlog_stderr_flush(void);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak/* From winnt.c: */
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakextern int use_acceptex;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakextern int winnt_mpm_state;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakextern OSVERSIONINFO osver;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakextern void clean_child_exit(int);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakvoid setup_signal_names(char *prefix);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniaktypedef enum {
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak SIGNAL_PARENT_SHUTDOWN,
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak SIGNAL_PARENT_RESTART,
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak SIGNAL_PARENT_RESTART_GRACEFUL
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak} ap_signal_parent_e;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakAP_DECLARE(void) ap_signal_parent(ap_signal_parent_e type);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak/*
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * The Windoes MPM uses a queue of completion contexts that it passes
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * between the accept threads and the worker threads. Declare the
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * functions to access the queue and the structures passed on the
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * queue in the header file to enable modules to access them
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak * if necessary. The queue resides in the MPM.
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak */
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#ifdef CONTAINING_RECORD
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#undef CONTAINING_RECORD
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#endif
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#define CONTAINING_RECORD(address, type, field) ((type *)( \
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak (PCHAR)(address) - \
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak (PCHAR)(&((type *)0)->field)))
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#if APR_HAVE_IPV6
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#define PADDED_ADDR_SIZE (sizeof(SOCKADDR_IN6)+16)
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#else
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#define PADDED_ADDR_SIZE (sizeof(SOCKADDR_IN)+16)
5ae30adbe59946de742ab0cd6be3b7457471a698takashi#endif
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniaktypedef struct CompContext {
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak struct CompContext *next;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak OVERLAPPED Overlapped;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak apr_socket_t *sock;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak SOCKET accept_socket;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak char buff[2*PADDED_ADDR_SIZE];
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak struct sockaddr *sa_server;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak int sa_server_len;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak struct sockaddr *sa_client;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak int sa_client_len;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak apr_pool_t *ptrans;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak apr_bucket_alloc_t *ba;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak short socket_family;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak} COMP_CONTEXT, *PCOMP_CONTEXT;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniaktypedef enum {
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak IOCP_CONNECTION_ACCEPTED = 1,
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak IOCP_WAIT_FOR_RECEIVE = 2,
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak IOCP_WAIT_FOR_TRANSMITFILE = 3,
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak IOCP_SHUTDOWN = 4
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak} io_state_e;
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakPCOMP_CONTEXT mpm_get_completion_context(void);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakvoid mpm_recycle_completion_context(PCOMP_CONTEXT pCompContext);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakapr_status_t mpm_post_completion_context(PCOMP_CONTEXT pCompContext, io_state_e state);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniakvoid hold_console_open_on_error(void);
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak#endif /* APACHE_MPM_WINNT_H */
5652dbe450e4fcfdf36d4cfb42d7f2345ded29a4maczniak