/*++ Copyright (c) 1997 Microsoft Corporation Module Name: DumpVars.cpp Abstract: ISAPI Extension sample to dump server variables --*/ #define WIN32_LEAN_AND_MEAN #include #include DWORD WINAPI HttpExtensionProc( IN EXTENSION_CONTROL_BLOCK * pECB ) /*++ Purpose: Use WriteClient() function to dump the value of each server variable in the table. Arguments: pECB - pointer to the extenstion control block Returns: HSE_STATUS_SUCCESS --*/ { char * aszServerVariables[] = {"APPL_MD_PATH", "APPL_PHYSICAL_PATH", "AUTH_PASSWORD", "AUTH_TYPE", "AUTH_USER", "CERT_COOKIE", "CERT_FLAGS", "CERT_ISSUER", "CERT_KEYSIZE", "CERT_SECRETKEYSIZE", "CERT_SERIALNUMBER", "CERT_SERVER_ISSUER", "CERT_SERVER_SUBJECT", "CERT_SUBJECT", "CONTENT_LENGTH", "CONTENT_TYPE", "HTTP_ACCEPT", "HTTPS", "HTTPS_KEYSIZE", "HTTPS_SECRETKEYSIZE", "HTTPS_SERVER_ISSUER", "HTTPS_SERVER_SUBJECT", "INSTANCE_ID", "INSTANCE_META_PATH", "PATH_INFO", "PATH_TRANSLATED", "QUERY_STRING", "REMOTE_ADDR", "REMOTE_HOST", "REMOTE_USER", "REQUEST_METHOD", "SCRIPT_NAME", "SERVER_NAME", "SERVER_PORT", "SERVER_PORT_SECURE", "SERVER_PROTOCOL", "SERVER_SOFTWARE", "URL"}; char szOutput[2048], szValue[1024]; DWORD dwBuffSize, dwNumVars, dwError, x; HSE_SEND_HEADER_EX_INFO HeaderExInfo; // // Send headers to the client // HeaderExInfo.pszStatus = "200 OK"; HeaderExInfo.pszHeader = "Content-type: text/html\r\n\r\n"; HeaderExInfo.cchStatus = strlen( HeaderExInfo.pszStatus ); HeaderExInfo.cchHeader = strlen( HeaderExInfo.pszHeader ); HeaderExInfo.fKeepConn = FALSE; pECB->ServerSupportFunction( pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX, &HeaderExInfo, NULL, NULL ); // // Begin sending back HTML to the client // strcpy( szOutput, "\r\n

Server Variable Dump

\r\n
\r\n" ); dwBuffSize = strlen( szOutput ); pECB->WriteClient( pECB->ConnID, szOutput, &dwBuffSize, 0 ); dwNumVars = ( sizeof aszServerVariables )/( sizeof aszServerVariables[0] ); // // Get the server variables and send them // for ( x = 0; x < dwNumVars; x++ ) { dwBuffSize = 1024; szValue[0] = '\0'; if ( !pECB->GetServerVariable( pECB->ConnID, aszServerVariables[x], szValue, &dwBuffSize ) ) { // // Analyze the problem and report result to user // switch (dwError = GetLastError( )) { case ERROR_INVALID_PARAMETER: strcpy( szValue, "ERROR_INVALID_PARAMETER" ); break; case ERROR_INVALID_INDEX: strcpy( szValue, "ERROR_INVALID_INDEX" ); break; case ERROR_INSUFFICIENT_BUFFER: wsprintf( szValue, "ERROR_INSUFFICIENT_BUFFER - %d bytes required.", dwBuffSize ); break; case ERROR_MORE_DATA: strcpy( szValue, "ERROR_MORE_DATA" ); break; case ERROR_NO_DATA: strcpy( szValue, "ERROR_NO_DATA" ); break; default: wsprintf( szValue, "*** Error %d occured retrieving server variable ***", dwError ); } } // // Dump server variable name and value // wsprintf( szOutput, "%s: %s
\r\n", aszServerVariables[x], szValue ); dwBuffSize = strlen( szOutput ); // // Send the line to client // pECB->WriteClient( pECB->ConnID, szOutput, &dwBuffSize, 0 ); } // // End HTML page // strcpy( szOutput, "\r\n\r\n\r\n" ); dwBuffSize = strlen( szOutput ); pECB->WriteClient( pECB->ConnID, szOutput, &dwBuffSize, 0 ); return HSE_STATUS_SUCCESS; } BOOL WINAPI GetExtensionVersion( OUT HSE_VERSION_INFO * pVer ) /*++ Purpose: This is required ISAPI Extension DLL entry point. Arguments: pVer - poins to extension version info structure Returns: always returns TRUE --*/ { pVer->dwExtensionVersion = MAKELONG( HSE_VERSION_MINOR, HSE_VERSION_MAJOR ); lstrcpyn( pVer->lpszExtensionDesc, "DumpVars ISAPI Sample", HSE_MAX_EXT_DLL_NAME_LEN ); return TRUE; } BOOL WINAPI TerminateExtension( IN DWORD dwFlags ) /*++ Routine Description: This function is called when the WWW service is shutdown Arguments: dwFlags - HSE_TERM_ADVISORY_UNLOAD or HSE_TERM_MUST_UNLOAD Return Value: TRUE if extension is ready to be unloaded, FALSE otherwise --*/ { return TRUE; }