449 lines
16 KiB
C++
449 lines
16 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows NT **/
|
|
/** Copyright(c) Microsoft Corp., 1993 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
w3cons.hxx
|
|
|
|
This file contains the global constant definitions for the
|
|
W3 Service.
|
|
|
|
|
|
FILE HISTORY:
|
|
KeithMo 07-Mar-1993 Created.
|
|
|
|
*/
|
|
|
|
|
|
#ifndef _W3CONS_H_
|
|
#define _W3CONS_H_
|
|
|
|
# include "strconst.h"
|
|
|
|
#define W3_MODULE_NAME "w3svc.dll"
|
|
#define W3_ADVERTISE_NAME_SUFFIX "_HTTP"
|
|
#define W3_ADVERTISE_SECURE_NAME_SUFFIX "_HTTPS"
|
|
#define MAX_W3_COMPUTER_NAME_LENGTH 25
|
|
#define MAX_W3_ADVERTISE_NAME_LENGTH (MAX_W3_COMPUTER_NAME_LENGTH + sizeof(W3_ADVERTISE_NAME_SUFFIX))
|
|
#define MAX_W3_ADVERTISE_SECURE_NAME_LENGTH (MAX_W3_COMPUTER_NAME_LENGTH + sizeof(W3_ADVERTISE_SECURE_NAME_SUFFIX))
|
|
|
|
#define W3_TEMP_PREFIX "WWW"
|
|
|
|
//
|
|
// HTTP server response string IDs
|
|
//
|
|
// Commented out codes are not used
|
|
//
|
|
|
|
#define IDS_HTRESP_OK (ID_HTTP_ERROR_BASE+200)
|
|
#define IDS_HTRESP_CREATED (ID_HTTP_ERROR_BASE+201)
|
|
//#define IDS_HTRESP_ACCEPTED (ID_HTTP_ERROR_BASE+202)
|
|
//#define IDS_HTRESP_PARTIAL (ID_HTTP_ERROR_BASE+203)
|
|
#define IDS_HTRESP_NO_CONTENT (ID_HTTP_ERROR_BASE+204)
|
|
|
|
//#define IDS_HTRESP_MULTIPLE_CHOICE (ID_HTTP_ERROR_BASE+300)
|
|
#define IDS_HTRESP_MOVED (ID_HTTP_ERROR_BASE+301)
|
|
#define IDS_HTRESP_REDIRECT (ID_HTTP_ERROR_BASE+302)
|
|
#define IDS_HTRESP_REDIRECT_METHOD (ID_HTTP_ERROR_BASE+303)
|
|
#define IDS_HTRESP_NOT_MODIFIED (ID_HTTP_ERROR_BASE+304)
|
|
|
|
#define IDS_HTRESP_BAD_REQUEST (ID_HTTP_ERROR_BASE+400)
|
|
#define IDS_HTRESP_DENIED (ID_HTTP_ERROR_BASE+401)
|
|
//#define IDS_HTRESP_PAYMENT_REQ (ID_HTTP_ERROR_BASE+402)
|
|
#define IDS_HTRESP_FORBIDDEN (ID_HTTP_ERROR_BASE+403)
|
|
#define IDS_HTRESP_NOT_FOUND (ID_HTTP_ERROR_BASE+404)
|
|
#define IDS_HTRESP_METHOD_NOT_ALLOWED (ID_HTTP_ERROR_BASE+405)
|
|
#define IDS_HTRESP_NONE_ACCEPTABLE (ID_HTTP_ERROR_BASE+406)
|
|
#define IDS_HTRESP_PROXY_AUTH_REQ (ID_HTTP_ERROR_BASE+407)
|
|
//#define IDS_HTRESP_REQUEST_TIMEOUT (ID_HTTP_ERROR_BASE+408)
|
|
//#define IDS_HTRESP_CONFLICT (ID_HTTP_ERROR_BASE+409)
|
|
//#define IDS_HTRESP_GONE (ID_HTTP_ERROR_BASE+410)
|
|
#define IDS_HTRESP_LENGTH_REQUIRED (ID_HTTP_ERROR_BASE+411)
|
|
#define IDS_HTRESP_PRECOND_FAILED (ID_HTTP_ERROR_BASE+412)
|
|
#define IDS_HTRESP_URL_TOO_LONG (ID_HTTP_ERROR_BASE+414)
|
|
#define IDS_HTRESP_RANGE_NOT_SATISFIABLE (ID_HTTP_ERROR_BASE+416)
|
|
|
|
#define IDS_HTRESP_SERVER_ERROR (ID_HTTP_ERROR_BASE+500)
|
|
#define IDS_HTRESP_NOT_SUPPORTED (ID_HTTP_ERROR_BASE+501)
|
|
#define IDS_HTRESP_BAD_GATEWAY (ID_HTTP_ERROR_BASE+502)
|
|
#define IDS_HTRESP_SERVICE_UNAVAIL (ID_HTTP_ERROR_BASE+503)
|
|
#define IDS_HTRESP_GATEWAY_TIMEOUT (ID_HTTP_ERROR_BASE+504)
|
|
|
|
//
|
|
// Directory browsing strings
|
|
//
|
|
|
|
#define IDS_DIRBROW_TOPARENT (STR_RES_ID_BASE+2000)
|
|
#define IDS_DIRBROW_DIRECTORY (STR_RES_ID_BASE+2001)
|
|
|
|
//
|
|
// Mini HTML URL Moved document
|
|
//
|
|
|
|
#define IDS_URL_MOVED (STR_RES_ID_BASE+2100)
|
|
#define IDS_SITE_ACCESS_DENIED (STR_RES_ID_BASE+2101)
|
|
#define IDS_BAD_CGI_APP (STR_RES_ID_BASE+2102)
|
|
#define IDS_CGI_APP_TIMEOUT (STR_RES_ID_BASE+2103)
|
|
|
|
//
|
|
// Various error messages
|
|
//
|
|
|
|
#define IDS_TOO_MANY_USERS (STR_RES_ID_BASE+2122)
|
|
#define IDS_OUT_OF_LICENSES (STR_RES_ID_BASE+2123)
|
|
#define IDS_READ_ACCESS_DENIED (STR_RES_ID_BASE+2124)
|
|
#define IDS_EXECUTE_ACCESS_DENIED (STR_RES_ID_BASE+2125)
|
|
#define IDS_SSL_REQUIRED (STR_RES_ID_BASE+2126)
|
|
#define IDS_WRITE_ACCESS_DENIED (STR_RES_ID_BASE+2127)
|
|
#define IDS_PUT_RANGE_UNSUPPORTED (STR_RES_ID_BASE+2128)
|
|
#define IDS_CERT_REQUIRED (STR_RES_ID_BASE+2129)
|
|
#define IDS_ADDR_REJECT (STR_RES_ID_BASE+2130)
|
|
#define IDS_SSL128_REQUIRED (STR_RES_ID_BASE+2131)
|
|
#define IDS_INVALID_CNFG (STR_RES_ID_BASE+2132)
|
|
#define IDS_PWD_CHANGE (STR_RES_ID_BASE+2133)
|
|
#define IDS_MAPPER_DENY_ACCESS (STR_RES_ID_BASE+2134)
|
|
#define IDS_ERROR_FOOTER (STR_RES_ID_BASE+2135)
|
|
#define IDS_URL_TOO_LONG (STR_RES_ID_BASE+2136)
|
|
#define IDS_CANNOT_DETERMINE_LENGTH (STR_RES_ID_BASE+2137)
|
|
#define IDS_UNSUPPORTED_CONTENT_TYPE (STR_RES_ID_BASE+2138)
|
|
#if defined(CAL_ENABLED)
|
|
#define IDS_CAL_EXCEEDED (STR_RES_ID_BASE+2139)
|
|
#endif
|
|
#define IDS_HOST_REQUIRED (STR_RES_ID_BASE+2140)
|
|
#define IDS_METHOD_NOT_SUPPORTED (STR_RES_ID_BASE+2141)
|
|
|
|
//
|
|
// Next few are metadata config errors. These need to be consecutive
|
|
// and corresponding with the error types in metacach.hxx
|
|
//
|
|
#define IDS_METADATA_CONFIG_ERROR (STR_RES_ID_BASE+2142)
|
|
#define IDS_METADATA_CONFIG_TYPE_ERROR (STR_RES_ID_BASE+2142)
|
|
#define IDS_METADATA_CONFIG_VALUE_ERROR (STR_RES_ID_BASE+2143)
|
|
#define IDS_METADATA_CONFIG_WIN32_ERROR (STR_RES_ID_BASE+2144)
|
|
|
|
#define IDS_LENGTH_REQUIRED (STR_RES_ID_BASE+2145)
|
|
#define IDS_CERT_REVOKED (STR_RES_ID_BASE+2146)
|
|
|
|
#define IDS_WAM_FAILTOLOAD_ERROR (STR_RES_ID_BASE+2147)
|
|
#define IDS_WAM_FAILTOLOADONW95_ERROR (STR_RES_ID_BASE+2148)
|
|
#define IDS_WAM_NOMORERECOVERY_ERROR (STR_RES_ID_BASE+2149)
|
|
|
|
#define IDS_PUT_CONTENTION (STR_RES_ID_BASE+2150)
|
|
|
|
#define IDS_DIR_LIST_DENIED (STR_RES_ID_BASE+2151)
|
|
|
|
//
|
|
// CPU Logging Strings for UI
|
|
//
|
|
|
|
#define IDS_CPU_LOGGING_NAME_EVENT (STR_RES_ID_BASE+2152)
|
|
#define IDS_CPU_LOGGING_NAME_ACTIVE_PROCS (STR_RES_ID_BASE+2153)
|
|
#define IDS_CPU_LOGGING_NAME_KERNEL_TIME (STR_RES_ID_BASE+2154)
|
|
#define IDS_CPU_LOGGING_NAME_PAGE_FAULTS (STR_RES_ID_BASE+2155)
|
|
#define IDS_CPU_LOGGING_NAME_PROC_TYPE (STR_RES_ID_BASE+2156)
|
|
#define IDS_CPU_LOGGING_NAME_TERMINATED_PROCS (STR_RES_ID_BASE+2157)
|
|
#define IDS_CPU_LOGGING_NAME_TOTAL_PROCS (STR_RES_ID_BASE+2158)
|
|
#define IDS_CPU_LOGGING_NAME_USER_TIME (STR_RES_ID_BASE+2159)
|
|
|
|
#define IDS_SITE_RESOURCE_BLOCKED (STR_RES_ID_BASE+2160)
|
|
|
|
#define IDS_CPU_LOGGING_NAME (STR_RES_ID_BASE+2161)
|
|
|
|
|
|
#define IDS_CERT_BAD (STR_RES_ID_BASE+2162)
|
|
#define IDS_CERT_TIME_INVALID (STR_RES_ID_BASE+2163)
|
|
#define IDS_SITE_NOT_FOUND (STR_RES_ID_BASE+2164)
|
|
|
|
#ifndef RC_INVOKED
|
|
|
|
|
|
//
|
|
// Version string for this server
|
|
//
|
|
|
|
#define MSW3_VERSION_STR_IIS "Microsoft-IIS/5.1"
|
|
#define MSW3_VERSION_STR_W95 "Microsoft-IIS/5.1"
|
|
#define MSW3_VERSION_STR_NTW "Microsoft-IIS/5.1"
|
|
|
|
//
|
|
// Set to the largest of the three
|
|
//
|
|
|
|
#define MSW3_VERSION_STR_MAX MSW3_VERSION_STR_W95
|
|
|
|
//
|
|
// Creates the version string
|
|
//
|
|
|
|
#define MAKE_VERSION_STRING( _s ) ("Server: " ##_s "\r\n")
|
|
|
|
//
|
|
// MIME version we say we support
|
|
//
|
|
|
|
#define W3_MIME_VERSION_STR "MIME-version: 1.0"
|
|
|
|
//
|
|
// The IANA reserved SSL Port
|
|
//
|
|
|
|
#define HTTP_SSL_PORT 443
|
|
|
|
|
|
//
|
|
// STR_CONST is defined to expand the parameter (constant string)
|
|
// in an efficient manner for STR::Append() and STR::Copy()
|
|
//
|
|
// Both Append() and Copy do efficient copies (without strlen()
|
|
// when given the size of string. Let us give the size as well.
|
|
//
|
|
// Eg: strResp.Append( STR_CONST( "MyHeader: My Value\r\n"));
|
|
//
|
|
# define STR_CONST( constSTR) constSTR, (sizeof(constSTR) - 1)
|
|
|
|
//
|
|
// Append a literal string to a pointer and update pointer
|
|
//
|
|
|
|
#define APPEND_STRING(a,b) \
|
|
{memcpy(a,b,sizeof(b)); a += sizeof(b)-sizeof(CHAR);}
|
|
|
|
//
|
|
// Append a string to a pointer and update pointer
|
|
//
|
|
|
|
#define APPEND_STRING_VAR(a,b) \
|
|
{DWORD cb; cb = strlen(b); memcpy(a,b,cb+sizeof(CHAR)); a += cb;}
|
|
|
|
//
|
|
// Append the server version string
|
|
//
|
|
|
|
#define APPEND_VER_STR(_s) { \
|
|
CopyMemory((_s),szServerVersion,cbServerVersionString+1); \
|
|
(_s) += cbServerVersionString; \
|
|
}
|
|
|
|
//
|
|
// Appends a "<Header> <value> <Trailer>" to the current tail pointer
|
|
//
|
|
|
|
#define APPEND_STR_HEADER( pszTail, Header, Str, Trailer ) \
|
|
{ DWORD cb = (Str).QueryCB(); \
|
|
\
|
|
APPEND_STRING( (pszTail), (Header) ); \
|
|
memcpy( (pszTail), (Str).QueryStr(), cb + 1 );\
|
|
(pszTail) += cb; \
|
|
APPEND_STRING( (pszTail), (Trailer) );\
|
|
}
|
|
|
|
#define APPEND_PSZ_HEADER( pszTail, Header, psz, Trailer ) \
|
|
{ DWORD cb = strlen( psz ); \
|
|
\
|
|
APPEND_STRING( (pszTail), (Header) ); \
|
|
memcpy( (pszTail), (psz), cb + 1 ); \
|
|
(pszTail) += cb; \
|
|
APPEND_STRING( (pszTail), (Trailer) );\
|
|
}
|
|
|
|
//
|
|
// Appends a "<Header> <#> <Trailer>" to the current tail pointer
|
|
//
|
|
|
|
#define APPEND_NUMERIC_HEADER( pszTail, Header, Num, Trailer ) \
|
|
{ \
|
|
DWORD __cb; \
|
|
CHAR __ach[32]; \
|
|
\
|
|
APPEND_STRING( (pszTail), (Header) ); \
|
|
_ultoa( (Num), __ach, 10 ); \
|
|
__cb = strlen( __ach ); \
|
|
CopyMemory( (pszTail), __ach, __cb+1 );\
|
|
(pszTail) += __cb; \
|
|
APPEND_STRING( (pszTail), (Trailer) );\
|
|
}
|
|
|
|
//
|
|
// Appends a "<Header> <#> <Trailer>" to the current tail pointer
|
|
//
|
|
|
|
#define APPEND_NUMERIC_HEADER_TAILVAR( pszTail, Header, Num, Trailer ) \
|
|
{ \
|
|
DWORD __cb; \
|
|
CHAR __ach[32]; \
|
|
\
|
|
APPEND_STRING( (pszTail), (Header) ); \
|
|
_ultoa( (Num), __ach, 10 ); \
|
|
__cb = strlen( __ach ); \
|
|
CopyMemory( (pszTail), __ach, __cb+1 );\
|
|
(pszTail) += __cb; \
|
|
APPEND_STRING_VAR( (pszTail), (Trailer) );\
|
|
}
|
|
|
|
//
|
|
// Global locking functions
|
|
//
|
|
|
|
#define LockGlobals() EnterCriticalSection( &csGlobalLock )
|
|
#define UnlockGlobals() LeaveCriticalSection( &csGlobalLock )
|
|
|
|
//
|
|
// Job Object Defines
|
|
//
|
|
|
|
#define NO_W3_CPU_CGI_LIMIT 0
|
|
#define NO_W3_CPU_LIMIT 0
|
|
|
|
//
|
|
// defaults
|
|
//
|
|
|
|
#ifdef _NO_TRACING_
|
|
#define DEFAULT_DEBUG_FLAGS 0 //0xc0001008
|
|
#else
|
|
#ifndef DEFAULT_TRACE_FLAGS
|
|
#define DEFAULT_TRACE_FLAGS 0 //0xc0001008
|
|
#endif
|
|
#endif
|
|
|
|
#define DEFAULT_LOAD_FILE "default.htm"
|
|
#define DEFAULT_DIRECTORY_IMAGE "/images/dir.gif"
|
|
#define DEFAULT_W3_REALM ""
|
|
#define DEFAULT_W3_ACCESS_DENIED_MSG ""
|
|
#define DEFAULT_DIR_BROWSE_CONTROL (DIRBROW_SHOW_DATE | \
|
|
DIRBROW_SHOW_TIME | \
|
|
DIRBROW_SHOW_SIZE | \
|
|
DIRBROW_SHOW_EXTENSION | \
|
|
DIRBROW_ENABLED | \
|
|
DIRBROW_LOADDEFAULT)
|
|
#define DEFAULT_SCRIPT_TIMEOUT (15 * 60)
|
|
#define DEFAULT_GLOBAL_EXPIRE NO_GLOBAL_EXPIRE
|
|
#define DEFAULT_W3_ALLOW_GUEST TRUE
|
|
#define DEFAULT_W3_LOG_ERRORS TRUE
|
|
#define DEFAULT_W3_LOG_SUCCESS TRUE
|
|
#define DEFAULT_W3_UPLOAD_READ_AHEAD (48 * 1024) // 48k
|
|
#define DEFAULT_W3_USE_POOL_THREAD_FOR_CGI TRUE
|
|
#define DEFAULT_W3_ALLOW_KEEP_ALIVES TRUE
|
|
#define DEFAULT_W3_USE_HOST_NAME FALSE
|
|
#define DEFAULT_W3_ACCEPT_BYTE_RANGES TRUE
|
|
#define DEFAULT_W3_NET_LOGON_WKS MD_NETLOGON_WKS_NONE
|
|
#define DEFAULT_W3_ADV_NOT_PWD_EXP_IN_DAYS 14 // advance notification days
|
|
#define DEFAULT_W3_ADV_CACHE_TTL (10*60) // in seconds
|
|
#define DEFAULT_SEND_11 1
|
|
#define DEFAULT_USE_ANDRECV 0
|
|
#define DEFAULT_PUT_TIMEOUT 30
|
|
#define DEFAULT_W3_ALLOW_PATH_INFO_FOR_SCRIPT_MAPPINGS FALSE
|
|
#define DEFAULT_W3_PROCESS_NTCR_IF_LOGGED_ON TRUE
|
|
#define DEFAULT_W3_CAL_MODE MD_CAL_MODE_HTTPERR
|
|
|
|
//
|
|
// Job Object Defaults
|
|
//
|
|
|
|
#define DEFAULT_W3_CPU_RESET_INTERVAL (60 * 24)
|
|
#define DEFAULT_W3_CPU_QUERY_INTERVAL 60
|
|
#define DEFAULT_W3_CPU_CGI_LIMIT NO_W3_CPU_CGI_LIMIT
|
|
#define DEFAULT_W3_CPU_LOGGING_OPTIONS MD_CPU_ENABLE_ALL_PROC_LOGGING
|
|
|
|
#define DEFAULT_W3_CPU_LOGGING_MASK MD_CPU_ENABLE_EVENT | \
|
|
MD_CPU_ENABLE_PROC_TYPE | \
|
|
MD_CPU_ENABLE_USER_TIME | \
|
|
MD_CPU_ENABLE_KERNEL_TIME | \
|
|
MD_CPU_ENABLE_PAGE_FAULTS | \
|
|
MD_CPU_ENABLE_TOTAL_PROCS | \
|
|
MD_CPU_ENABLE_ACTIVE_PROCS | \
|
|
MD_CPU_ENABLE_TERMINATED_PROCS
|
|
|
|
|
|
|
|
#define DEFAULT_W3_CPU_LIMIT_EVENTLOG NO_W3_CPU_LIMIT
|
|
#define DEFAULT_W3_CPU_LIMIT_PRIORITY NO_W3_CPU_LIMIT
|
|
#define DEFAULT_W3_CPU_LIMIT_PROCSTOP NO_W3_CPU_LIMIT
|
|
#define DEFAULT_W3_CPU_LIMIT_PAUSE NO_W3_CPU_LIMIT
|
|
|
|
//
|
|
// Job Object Logging Metabase Paths
|
|
//
|
|
|
|
#define W3_CPU_LOG_PATH "CPU Accounting/"
|
|
#define W3_CPU_LOG_EVENT_PATH "Event"
|
|
#define W3_CPU_LOG_ACTIVE_PROCS_PATH "Active Processes"
|
|
#define W3_CPU_LOG_KERNEL_TIME_PATH "Kernel Time"
|
|
#define W3_CPU_LOG_PAGE_FAULT_PATH "Page Faults"
|
|
#define W3_CPU_LOG_PROCESS_TYPE_PATH "Process Type"
|
|
#define W3_CPU_LOG_TERMINATED_PROCS_PATH "Terminated Processes"
|
|
#define W3_CPU_LOG_TOTAL_PROCS_PATH "Total Processes"
|
|
#define W3_CPU_LOG_USER_TIME_PATH "User Time"
|
|
|
|
#define W3_CPU_LOG_PATH_W L"CPU Accounting/"
|
|
#define W3_CPU_LOG_EVENT_PATH_W L"Event"
|
|
#define W3_CPU_LOG_ACTIVE_PROCS_PATH_W L"Active Processes"
|
|
#define W3_CPU_LOG_KERNEL_TIME_PATH_W L"Kernel Time"
|
|
#define W3_CPU_LOG_PAGE_FAULT_PATH_W L"Page Faults"
|
|
#define W3_CPU_LOG_PROCESS_TYPE_PATH_W L"Process Type"
|
|
#define W3_CPU_LOG_TERMINATED_PROCS_PATH_W L"Terminated Processes"
|
|
#define W3_CPU_LOG_TOTAL_PROCS_PATH_W L"Total Processes"
|
|
#define W3_CPU_LOG_USER_TIME_PATH_W L"User Time"
|
|
|
|
#define MIN_W3_CAL_VC_PER_CONNECT 1
|
|
#define MAX_W3_CAL_VC_PER_CONNECT 8
|
|
#define MIN_CAL_RESERVE_TIMEOUT 1
|
|
#define MAX_CAL_RESERVE_TIMEOUT (((DWORD)-1)/1000)
|
|
|
|
//
|
|
// This is the maximum we allow the global expires value to be set to. This
|
|
// 10 years in seconds
|
|
//
|
|
|
|
#define MAX_GLOBAL_EXPIRE 0x12cc0300
|
|
|
|
//
|
|
// default connection timeout for w3svc
|
|
//
|
|
|
|
#define W3_DEF_CONNECTION_TIMEOUT 420
|
|
|
|
//
|
|
// Max header name length we'll deal with
|
|
//
|
|
|
|
#define MAX_HEADER_LENGTH 255
|
|
|
|
|
|
//
|
|
// They key where the license information is stored
|
|
//
|
|
|
|
#define W3_LICENSE_KEY ("System\\CurrentControlSet\\Services\\LicenseInfo\\" W3_SERVICE_NAME_A)
|
|
|
|
//
|
|
// Downlevel client support constants
|
|
//
|
|
|
|
#define DLC_DEFAULT_COOKIE_NAME "PseudoHost"
|
|
#define W3_DLC_SUPPORT "DLCSupport"
|
|
#define W3_DLC_MENU_STRING "DLCMenuString"
|
|
#define W3_DLC_HOSTNAME_STRING "DLCHostNameString"
|
|
#define W3_DLC_COOKIE_MENU_DOCUMENT_STRING "DLCCookieMenuDocumentString"
|
|
#define W3_DLC_MUNGE_MENU_DOCUMENT_STRING "DLCMungeMenuDocumentString"
|
|
#define W3_DLC_COOKIE_NAME_STRING "DLCCookieNameString"
|
|
|
|
//
|
|
// Max client request buffer size
|
|
//
|
|
|
|
#define W3_DEFAULT_MAX_CLIENT_REQUEST_BUFFER ( 128*1024 )
|
|
#define W3_MAX_CLIENT_REQUEST_BUFFER_STRING "MaxClientRequestBuffer"
|
|
|
|
|
|
//
|
|
// Toggle for retrieving stack backtraces when appropriate
|
|
//
|
|
|
|
#define W3_GET_BACKTRACES "GetBackTraces"
|
|
|
|
#endif // !RC_INVOKED
|
|
#endif // _W3CONS_H_
|
|
|