diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/nginx.c | 83 | ||||
-rw-r--r-- | src/core/nginx.h | 3 | ||||
-rw-r--r-- | src/core/ngx_connection.c | 2 | ||||
-rw-r--r-- | src/core/ngx_cycle.c | 4 | ||||
-rw-r--r-- | src/event/modules/ngx_iocp_module.c | 2 | ||||
-rw-r--r-- | src/http/modules/ngx_http_gzip_filter.c | 2 | ||||
-rw-r--r-- | src/http/ngx_http_core_module.c | 5 | ||||
-rw-r--r-- | src/http/ngx_http_log_handler.c | 3 | ||||
-rw-r--r-- | src/os/win32/ngx_process_cycle.c | 18 | ||||
-rw-r--r-- | src/os/win32/ngx_socket.h | 56 | ||||
-rw-r--r-- | src/os/win32/ngx_win32_config.h | 15 | ||||
-rw-r--r-- | src/os/win32/ngx_win32_init.c | 35 | ||||
-rw-r--r-- | src/os/win32/ngx_wsarecv.c | 2 |
13 files changed, 158 insertions, 72 deletions
diff --git a/src/core/nginx.c b/src/core/nginx.c index ef4ceca81..5515b906e 100644 --- a/src/core/nginx.c +++ b/src/core/nginx.c @@ -35,7 +35,7 @@ static int ngx_worker_thread_cycle(void *data); #endif -static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle, char **envp); +static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle); static ngx_int_t ngx_getopt(ngx_master_ctx_t *ctx, ngx_cycle_t *cycle); static ngx_int_t ngx_core_module_init(ngx_cycle_t *cycle); static char *ngx_set_user(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); @@ -112,7 +112,7 @@ ngx_int_t ngx_reopen; ngx_int_t ngx_change_binary; -int main(int argc, char *const *argv, char **envp) +int main(int argc, char *const *argv) { ngx_int_t i; ngx_log_t *log; @@ -145,6 +145,10 @@ int main(int argc, char *const *argv, char **envp) init_cycle.log = log; ngx_cycle = &init_cycle; +#if 0 + /* STUB */ log->log_level = NGX_LOG_DEBUG_ALL; +#endif + ngx_memzero(&ctx, sizeof(ngx_master_ctx_t)); ctx.argc = argc; ctx.argv = argv; @@ -172,7 +176,7 @@ int main(int argc, char *const *argv, char **envp) return 1; } - if (ngx_add_inherited_sockets(&init_cycle, envp) == NGX_ERROR) { + if (ngx_add_inherited_sockets(&init_cycle) == NGX_ERROR) { return 1; } @@ -256,49 +260,48 @@ int main(int argc, char *const *argv, char **envp) } -static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle, char **envp) +static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle) { - char *p, *v; + char *p, *v, *inherited; ngx_socket_t s; ngx_listening_t *ls; - for ( /* void */ ; *envp; envp++) { - if (ngx_strncmp(*envp, NGINX_VAR, NGINX_VAR_LEN) != 0) { - continue; - } + inherited = getenv(NGINX_VAR); + + if (inherited == NULL) { + return NGX_OK; + } - ngx_log_error(NGX_LOG_INFO, cycle->log, 0, - "using inherited sockets from \"%s\"", *envp); - - ngx_init_array(cycle->listening, cycle->pool, - 10, sizeof(ngx_listening_t), NGX_ERROR); - - for (p = *envp + NGINX_VAR_LEN, v = p; *p; p++) { - if (*p == ':' || *p == ';') { - s = ngx_atoi(v, p - v); - if (s == NGX_ERROR) { - ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, - "invalid socket number \"%s\" " - "in NGINX enviroment variable, " - "ignoring the rest of the variable", v); - break; - } - v = p + 1; - - if (!(ls = ngx_push_array(&cycle->listening))) { - return NGX_ERROR; - } - - ls->fd = s; + ngx_log_error(NGX_LOG_INFO, cycle->log, 0, + "using inherited sockets from \"%s\"", inherited); + + ngx_init_array(cycle->listening, cycle->pool, + 10, sizeof(ngx_listening_t), NGX_ERROR); + + for (p = inherited, v = p; *p; p++) { + if (*p == ':' || *p == ';') { + s = ngx_atoi(v, p - v); + if (s == NGX_ERROR) { + ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, + "invalid socket number \"%s\" in " + NGINX_VAR " enviroment variable, " + "ignoring the rest of the variable", v); + break; } - } - ngx_inherited = 1; + v = p + 1; + + if (!(ls = ngx_push_array(&cycle->listening))) { + return NGX_ERROR; + } - return ngx_set_inherited_sockets(cycle); + ls->fd = s; + } } - return NGX_OK; + ngx_inherited = 1; + + return ngx_set_inherited_sockets(cycle); } @@ -314,17 +317,19 @@ ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv) ctx.name = "new binary process"; ctx.argv = argv; - var = ngx_alloc(NGINX_VAR_LEN - + cycle->listening.nelts * (NGX_INT32_LEN + 1) + 1, + var = ngx_alloc(sizeof(NGINX_VAR) + + cycle->listening.nelts * (NGX_INT32_LEN + 1) + 2, cycle->log); - p = ngx_cpymem(var, NGINX_VAR, NGINX_VAR_LEN); + p = ngx_cpymem(var, NGINX_VAR "=", sizeof(NGINX_VAR)); ls = cycle->listening.elts; for (i = 0; i < cycle->listening.nelts; i++) { p += ngx_snprintf(p, NGX_INT32_LEN + 2, "%u;", ls[i].fd); } + ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0, "inherited: %s", var); + env[0] = var; env[1] = NULL; ctx.envp = (char *const *) &env; diff --git a/src/core/nginx.h b/src/core/nginx.h index 6680de165..870368807 100644 --- a/src/core/nginx.h +++ b/src/core/nginx.h @@ -8,8 +8,7 @@ #define NGINX_NEW_PID_EXT ".newbin" #define NGINX_NEW_PID NGINX_PID NGINX_NEW_PID_EXT -#define NGINX_VAR "NGINX=" -#define NGINX_VAR_LEN (sizeof(NGINX_VAR) - 1) +#define NGINX_VAR "NGINX" extern ngx_module_t ngx_core_module; diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c index 8a858735e..54fd0f9f1 100644 --- a/src/core/ngx_connection.c +++ b/src/core/ngx_connection.c @@ -78,7 +78,7 @@ ngx_int_t ngx_open_listening_sockets(ngx_cycle_t *cycle) /* TODO: tries configurable */ - for (tries = 10; tries; tries--) { + for (tries = /* STUB */ 1; tries; tries--) { failed = 0; /* for each listening socket */ diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c index 3827c0d4e..7fcc67908 100644 --- a/src/core/ngx_cycle.c +++ b/src/core/ngx_cycle.c @@ -227,9 +227,13 @@ ngx_cycle_t *ngx_init_cycle(ngx_cycle_t *old_cycle) } #if (WIN32) +#if 0 /* TODO: TEST */ +fprintf(stderr, "BEFORE\n"); CloseHandle(GetStdHandle(STD_ERROR_HANDLE)); SetStdHandle(STD_ERROR_HANDLE, cycle->log->file->fd); +fprintf(stderr, "AFTER\n"); +#endif #else if (dup2(cycle->log->file->fd, STDERR_FILENO) == NGX_ERROR) { ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, diff --git a/src/event/modules/ngx_iocp_module.c b/src/event/modules/ngx_iocp_module.c index e0a042c9c..2056fd6dd 100644 --- a/src/event/modules/ngx_iocp_module.c +++ b/src/event/modules/ngx_iocp_module.c @@ -245,7 +245,7 @@ static ngx_int_t ngx_iocp_process_events(ngx_log_t *log) ev->available = bytes; ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, - "iocp event handler: %08x" PTR_FMT, ev->event_handler); + "iocp event handler: " PTR_FMT, ev->event_handler); ev->event_handler(ev); } diff --git a/src/http/modules/ngx_http_gzip_filter.c b/src/http/modules/ngx_http_gzip_filter.c index 9cf377e33..b68ca31b5 100644 --- a/src/http/modules/ngx_http_gzip_filter.c +++ b/src/http/modules/ngx_http_gzip_filter.c @@ -549,9 +549,9 @@ static void *ngx_http_gzip_filter_alloc(void *opaque, u_int items, u_int size) static void ngx_http_gzip_filter_free(void *opaque, void *address) { +#if 0 ngx_http_gzip_ctx_t *ctx = opaque; -#if 0 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ctx->request->connection->log, 0, "gzip free: %X", address); #endif diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index 20c7a5594..e717a6ac7 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -844,13 +844,16 @@ static char *ngx_location_block(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy) { char *rv; ngx_int_t m; - ngx_str_t *value, err; + ngx_str_t *value; ngx_http_module_t *module; ngx_conf_t pvcf; ngx_http_conf_ctx_t *ctx, *pvctx; ngx_http_core_srv_conf_t *cscf; ngx_http_core_loc_conf_t *clcf, **clcfp; +#if (HAVE_PCRE) + ngx_str_t err; char errstr[NGX_MAX_CONF_ERRSTR]; +#endif if (!(ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_conf_ctx_t)))) { return NGX_CONF_ERROR; diff --git a/src/http/ngx_http_log_handler.c b/src/http/ngx_http_log_handler.c index b34bd1bf2..f2ac5a33b 100644 --- a/src/http/ngx_http_log_handler.c +++ b/src/http/ngx_http_log_handler.c @@ -95,9 +95,6 @@ ngx_module_t ngx_http_log_module = { static ngx_str_t http_access_log = ngx_string("access.log"); -static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; - static ngx_str_t ngx_http_combined_fmt = ngx_string("%addr - - [%time] \"%request\" %status %apache_length " "\"%{Referer}i\" \"%{User-Agent}i\""); diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c index 8ffef52dc..7b26d6b35 100644 --- a/src/os/win32/ngx_process_cycle.c +++ b/src/os/win32/ngx_process_cycle.c @@ -25,4 +25,22 @@ sig_atomic_t ngx_change_binary; void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx) { + ngx_int_t i; + + ngx_init_temp_number(); + + for (i = 0; ngx_modules[i]; i++) { + if (ngx_modules[i]->init_process) { + if (ngx_modules[i]->init_process(cycle) == NGX_ERROR) { + /* fatal */ + exit(2); + } + } + } + + for ( ;; ) { + ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle"); + + ngx_process_events(cycle->log); + } } diff --git a/src/os/win32/ngx_socket.h b/src/os/win32/ngx_socket.h index 86231030f..ec519c31c 100644 --- a/src/os/win32/ngx_socket.h +++ b/src/os/win32/ngx_socket.h @@ -35,6 +35,62 @@ int ngx_blocking(ngx_socket_t s); #define ngx_close_socket_n "closesocket()" +#ifndef WSAID_ACCEPTEX + +typedef BOOL (PASCAL FAR * LPFN_ACCEPTEX)( + IN SOCKET sListenSocket, + IN SOCKET sAcceptSocket, + IN PVOID lpOutputBuffer, + IN DWORD dwReceiveDataLength, + IN DWORD dwLocalAddressLength, + IN DWORD dwRemoteAddressLength, + OUT LPDWORD lpdwBytesReceived, + IN LPOVERLAPPED lpOverlapped + ); + +#define WSAID_ACCEPTEX \ + {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}} + +#endif + + +#ifndef WSAID_GETACCEPTEXSOCKADDRS + +typedef VOID (PASCAL FAR * LPFN_GETACCEPTEXSOCKADDRS)( + IN PVOID lpOutputBuffer, + IN DWORD dwReceiveDataLength, + IN DWORD dwLocalAddressLength, + IN DWORD dwRemoteAddressLength, + OUT struct sockaddr **LocalSockaddr, + OUT LPINT LocalSockaddrLength, + OUT struct sockaddr **RemoteSockaddr, + OUT LPINT RemoteSockaddrLength + ); + +#define WSAID_GETACCEPTEXSOCKADDRS \ + {0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}} + +#endif + + +#ifndef LPFN_TRANSMITFILE + +typedef BOOL (PASCAL FAR * LPFN_TRANSMITFILE)( + IN SOCKET hSocket, + IN HANDLE hFile, + IN DWORD nNumberOfBytesToWrite, + IN DWORD nNumberOfBytesPerSend, + IN LPOVERLAPPED lpOverlapped, + IN LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, + IN DWORD dwReserved + ); + +#define WSAID_TRANSMITFILE \ + {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}} + +#endif + + extern LPFN_ACCEPTEX acceptex; extern LPFN_GETACCEPTEXSOCKADDRS getacceptexsockaddrs; extern LPFN_TRANSMITFILE transmitfile; diff --git a/src/os/win32/ngx_win32_config.h b/src/os/win32/ngx_win32_config.h index b1d7d5781..38cca91e5 100644 --- a/src/os/win32/ngx_win32_config.h +++ b/src/os/win32/ngx_win32_config.h @@ -7,13 +7,9 @@ #define STRICT #define WIN32_LEAN_AND_MEAN -#ifdef __WATCOMC__ -#pragma disable_message(107) -#endif - /* * we need to include windows.h explicity before winsock2.h because - * warning 4201 is enabled in windows.h + * the warning 4201 is enabled in windows.h */ #include <windows.h> @@ -35,19 +31,16 @@ #pragma warning(disable:4100) /* STUB */ +#if 0 #pragma warning(disable:4127) #endif +#endif #ifdef __WATCOMC__ -#pragma enable_message(107) -#if 0 -/* Symbol 'ngx_rbtree_min' has been defined, but not referenced */ +/* disable "Symbol 'ngx_rbtree_min' has been defined, but not referenced" */ #pragma disable_message(202) #endif -/* No prototype found for 'stricmp' */ -#pragma disable_message(301) -#endif #include <ngx_auto_config.h> diff --git a/src/os/win32/ngx_win32_init.c b/src/os/win32/ngx_win32_init.c index aaeca21b8..c4ffc1121 100644 --- a/src/os/win32/ngx_win32_init.c +++ b/src/os/win32/ngx_win32_init.c @@ -17,6 +17,13 @@ ngx_os_io_t ngx_os_io = { }; +typedef struct { + WORD wServicePackMinor; + WORD wSuiteMask; + BYTE wProductType; +} ngx_osviex_stub_t; + + /* Should these pointers be per protocol ? */ LPFN_ACCEPTEX acceptex; LPFN_GETACCEPTEXSOCKADDRS getacceptexsockaddrs; @@ -29,11 +36,12 @@ static GUID tf_guid = WSAID_TRANSMITFILE; int ngx_os_init(ngx_log_t *log) { - u_int osviex; - DWORD bytes; - SOCKET s; - WSADATA wsd; - OSVERSIONINFOEX osvi; + u_int osviex; + DWORD bytes; + SOCKET s; + WSADATA wsd; + OSVERSIONINFOEX osvi; + ngx_osviex_stub_t *osviex_stub; /* get Windows version */ @@ -75,17 +83,16 @@ int ngx_os_init(ngx_log_t *log) ngx_win32_version += osvi.wServicePackMajor * 10 + osvi.wServicePackMinor; - ngx_log_error(NGX_LOG_INFO, log, 0, - "OS: %u build:%u, \"%s\", suite:%x, type:%u", - ngx_win32_version, osvi.dwBuildNumber, osvi.szCSDVersion, - osvi.wReserved[0], osvi.wReserved[1]); + /* + * the MSVC 6.0 SP2 defines wSuiteMask and wProductType + * as WORD wReserved[2] + */ + osviex_stub = (ngx_osviex_stub_t *) &osvi.wServicePackMinor; -#if 0 ngx_log_error(NGX_LOG_INFO, log, 0, "OS: %u build:%u, \"%s\", suite:%x, type:%u", ngx_win32_version, osvi.dwBuildNumber, osvi.szCSDVersion, - osvi.wSuiteMask, osvi.wProductType); -#endif + osviex_stub->wSuiteMask, osviex_stub->wProductType); } else { if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { @@ -123,6 +130,10 @@ int ngx_os_init(ngx_log_t *log) return NGX_ERROR; } + if (ngx_win32_version < NGX_WIN_NT) { + return NGX_OK; + } + /* get AcceptEx(), GetAcceptExSockAddrs() and TransmitFile() addresses */ s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP, 0); diff --git a/src/os/win32/ngx_wsarecv.c b/src/os/win32/ngx_wsarecv.c index 2de1110c0..040adc4da 100644 --- a/src/os/win32/ngx_wsarecv.c +++ b/src/os/win32/ngx_wsarecv.c @@ -64,7 +64,7 @@ ssize_t ngx_overlapped_wsarecv(ngx_connection_t *c, char *buf, size_t size) rev = c->read; if (!rev->ready) { - ngx_log_error(NGX_LOG_ALERT, rev->log, 0, "second wsa post"); + ngx_log_error(NGX_LOG_ALERT, c->log, 0, "second wsa post"); return NGX_AGAIN; } |