]> granicus.if.org Git - apache/blobdiff - server/mpm/winnt/mpm_winnt.h
Update the copyright year in all .c, .h and .xml files
[apache] / server / mpm / winnt / mpm_winnt.h
index 41929e308fc4effb49cb92f3ba63fb1a4bd1619d..a577a8b1353f552b885f317e6c2d62e33e1bc6d5 100644 (file)
@@ -1,59 +1,25 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
+/* Copyright 1999-2006 The Apache Software Foundation or its licensors, as
+ * applicable.
  *
- * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
- * reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself,
- *    if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" must
- *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- *    nor may "Apache" appear in their name, without prior written
- *    permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file  mpm_winnt.h
+ * @brief WinNT MPM specific 
  *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
+ * @addtogroup APACHE_MPM_WINNT
+ * @{
  */
 
 #ifndef APACHE_MPM_WINNT_H
 
 #include "ap_listen.h"
 
-/* From registry.c: */
-
-apr_status_t ap_registry_create_key(const char *key);
-apr_status_t ap_registry_delete_key(const char *key);
-
-apr_status_t ap_registry_store_value(const char *key, const char *name, 
-                                    const char *value);
-apr_status_t ap_registry_get_value(apr_pool_t *p, const char *key, 
-                                  const char *name, char **ppValue);
-apr_status_t ap_registry_store_array(apr_pool_t *p, const char *key, 
-                                    const char *name, int nelts, 
-                                    char const* const* elts);
-apr_status_t ap_registry_get_array(apr_pool_t *p, const char *key, 
-                                  const char *name, 
-                                  apr_array_header_t **parray);
-apr_status_t ap_registry_delete_value(const char *key, const char *name);
-
-
 /* From service.c: */
 
 #define SERVICE_APACHE_RESTART 128
@@ -96,10 +44,10 @@ apr_status_t mpm_service_set_name(apr_pool_t *p, const char **display_name,
 apr_status_t mpm_merge_service_args(apr_pool_t *p, apr_array_header_t *args, 
                                    int fixed_args);
 
-apr_status_t mpm_service_to_start(const char **display_name);
+apr_status_t mpm_service_to_start(const char **display_name, apr_pool_t *p);
 apr_status_t mpm_service_started(void);
 apr_status_t mpm_service_install(apr_pool_t *ptemp, int argc, 
-                                char const* const* argv);
+                                char const* const* argv, int reconfig);
 apr_status_t mpm_service_uninstall(void);
 
 apr_status_t mpm_service_start(apr_pool_t *ptemp, int argc, 
@@ -112,50 +60,71 @@ void mpm_service_stopping(void);
 void mpm_start_console_handler(void);
 void mpm_start_child_console_handler(void);
 
+/* From nt_eventlog.c: */
+
+void mpm_nt_eventlog_stderr_open(char *display_name, apr_pool_t *p);
+void mpm_nt_eventlog_stderr_flush(void);
+
 /* From winnt.c: */
 
+extern int use_acceptex;
+extern int winnt_mpm_state;
 extern OSVERSIONINFO osver;
 extern void clean_child_exit(int);
 
-AP_DECLARE(void) ap_start_shutdown(void);
-AP_DECLARE(void) ap_start_restart(int gracefully);
-
 void setup_signal_names(char *prefix);
-void signal_parent(int type);
-
 
-/* This code is stolen from the apr_private.h and misc/win32/misc.c
- * Please see those sources for detailed documentation.
- */
 typedef enum {
-    DLL_WINBASEAPI = 0,    // kernel32 From WinBase.h
-    DLL_WINADVAPI = 1,     // advapi32 From WinBase.h
-    DLL_WINSOCKAPI = 2,    // mswsock  From WinSock.h
-    DLL_WINSOCK2API = 3,   // ws2_32   From WinSock2.h
-    DLL_defined = 4        // must define as last idx_ + 1
-} ap_dlltoken_e;
-
-FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char *fnName, int ordinal);
-
-#define AP_DECLARE_LATE_DLL_FUNC(lib, rettype, calltype, fn, ord, args, names) \
-    typedef rettype (calltype *ap_winapi_fpt_##fn) args; \
-    static ap_winapi_fpt_##fn ap_winapi_pfn_##fn = NULL; \
-    __inline rettype ap_winapi_##fn args \
-    {   if (!ap_winapi_pfn_##fn) \
-            ap_winapi_pfn_##fn = (ap_winapi_fpt_##fn) ap_load_dll_func(lib, #fn, ord); \
-        return (*(ap_winapi_pfn_##fn)) names; }; \
-
-/* WinNT kernel only */
-AP_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, BOOL, WINAPI, CancelIo, 0, (
-    IN HANDLE hFile),
-    (hFile));
-#define CancelIo ap_winapi_CancelIo
-
-/* Win9x kernel only */
-AP_DECLARE_LATE_DLL_FUNC(DLL_WINBASEAPI, DWORD, WINAPI, RegisterServiceProcess, 0, (
-    DWORD dwProcessId,
-    DWORD dwType),
-    (dwProcessId, dwType));
-#define RegisterServiceProcess ap_winapi_RegisterServiceProcess
+    SIGNAL_PARENT_SHUTDOWN,
+    SIGNAL_PARENT_RESTART,
+    SIGNAL_PARENT_RESTART_GRACEFUL
+} ap_signal_parent_e;
+AP_DECLARE(void) ap_signal_parent(ap_signal_parent_e type);
+
+/*
+ * The Windoes MPM uses a queue of completion contexts that it passes
+ * between the accept threads and the worker threads. Declare the
+ * functions to access the queue and the structures passed on the
+ * queue in the header file to enable modules to access them
+ * if necessary. The queue resides in the MPM.
+ */
+#ifdef CONTAINING_RECORD
+#undef CONTAINING_RECORD
+#endif
+#define CONTAINING_RECORD(address, type, field) ((type *)( \
+                                                  (PCHAR)(address) - \
+                                                  (PCHAR)(&((type *)0)->field)))
+#if APR_HAVE_IPV6
+#define PADDED_ADDR_SIZE (sizeof(SOCKADDR_IN6)+16)
+#else
+#define PADDED_ADDR_SIZE (sizeof(SOCKADDR_IN)+16)
+#endif
 
+typedef struct CompContext {
+    struct CompContext *next;
+    OVERLAPPED Overlapped;
+    apr_socket_t *sock;
+    SOCKET accept_socket;
+    char buff[2*PADDED_ADDR_SIZE];
+    struct sockaddr *sa_server;
+    int sa_server_len;
+    struct sockaddr *sa_client;
+    int sa_client_len;
+    apr_pool_t *ptrans;
+    apr_bucket_alloc_t *ba;
+    short socket_family;
+} COMP_CONTEXT, *PCOMP_CONTEXT;
+
+typedef enum {
+    IOCP_CONNECTION_ACCEPTED = 1,
+    IOCP_WAIT_FOR_RECEIVE = 2,
+    IOCP_WAIT_FOR_TRANSMITFILE = 3,
+    IOCP_SHUTDOWN = 4
+} io_state_e;
+
+PCOMP_CONTEXT mpm_get_completion_context(void);
+void          mpm_recycle_completion_context(PCOMP_CONTEXT pCompContext);
+apr_status_t  mpm_post_completion_context(PCOMP_CONTEXT pCompContext, io_state_e state);
+void hold_console_open_on_error(void);
 #endif /* APACHE_MPM_WINNT_H */
+/** @} */