您的位置:首页 > 其它

源码 GetServerVariable

2007-05-25 20:41 309 查看

源码 GetServerVariable

来源(www.asm32.net)

From: http://www.asm32.net/article_disp.asp?ID=1892

下载源文件: i1892_001GetServerVariable.rar

Sambar ISAPI "GetServerVariable.dll"

GetServerVariable.c

#include <windows.h>
#include <httpext.h>
#include <string.h>
#include <stdio.h>

//#include <stdarg.h>

/*
** Globals
*/
UINT A_nVariableNameA_Count = 38;
CHAR * A_szVariableNameA[38]={"ALL_HTTP", "ALL_RAW", "APPL_MD_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_PORT",
"SERVER_PORT_SECURE", "SERVER_PROTOCOL", "SERVER_SOFTWARE",
"URL"};

UINT A_nVariableNameB_Count = 6;
CHAR * A_szVariableNameB[6]={ "HTTP_ACCEPT_LANGUAGE", "HTTP_CONNECTION", "HTTP_HOST",
"HTTP_REFERER", "HTTP_USER_AGENT", "HTTP_ACCEPT_ENCODING" };

CHAR * A_szWeekday[7] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
CHAR * A_szNow[6] = {"夜里好", "早上好", "上午好", "中午好", "下午好", "晚上好"};

char szAppTitle[] = "Sambar ISAPI /"GetServerVariable.dll/"";
char szResponseHeader_Format[] = "Content-Type: text/html/r/n/r/n"
"<html>/r/n"
"<meta http-equiv=/"Content-Type/""
" content=/"text/html; charset=gb2312/">/r/n"
"<head><title>%s</title></head>/r/n"
"<body>/r/n"
"<h1>%s</h1>/r/n"
"<hr>/r/n"
"<P>Begin ...</P>/r/n/r/n";
CHAR szPageEnd[] = "/r/n<P>Done.</p>/r/n/r/n</BODY>/r/n</HTML>/r/n";

CHAR szResponseHeader[256] = {0};
UINT nResponseHeader_Len = 0;

void PA_GetDateTime(LPTSTR m_szDateBuff);
void PA_InitializeDLL();
void PA_WriteClient(EXTENSION_CONTROL_BLOCK *pECB, LPCTSTR m_strInfo);

BOOL WINAPI DllMain(IN HINSTANCE hinstDll, IN DWORD dwReason, IN LPVOID lpvContext){
// Note that appropriate initialization and termination code
// would usually be written within the switch statement below. But because
// this example is very simple, no initialization and termination code is needed.

switch(dwReason) {
case DLL_PROCESS_ATTACH :
PA_InitializeDLL();
break;
case DLL_PROCESS_DETACH :
break;
}

return TRUE;
}

/*
** GetExtensionVersion
**
** ISAPI/Win32 API method to ensure compatibility with the Server.
*/
BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer) {
pVer->dwExtensionVersion = MAKELONG(HSE_VERSION_MINOR, HSE_VERSION_MAJOR);

lstrcpyn(pVer->lpszExtensionDesc, "Sambar Server ISAPI Search extension.",
HSE_MAX_EXT_DLL_NAME_LEN);

return TRUE;
}

/*
** HttpExtensionProc
**
** Called in response to the client request.
*/
DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pECB) {

CHAR szDateTimeBuffer[128] = {0};
CHAR buffer[2048];
int buflen=0;
UINT i=0;

if (!pECB->ServerSupportFunction(pECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER,
"200 OK", &nResponseHeader_Len, (LPDWORD)szResponseHeader))
{
pECB->dwHttpStatusCode = 500;
return HSE_STATUS_ERROR;
}

PA_GetDateTime(szDateTimeBuffer);
sprintf(buffer, "<p><strong>welcome:</strong> %s<br>/r/n", szDateTimeBuffer);
PA_WriteClient(pECB, buffer);

PA_WriteClient(pECB, "<p>The GetServerVariable function retrieves information about a connection or about the IIS itself.</p>/r/n/r/n");

PA_WriteClient(pECB, "<table border=/"1/" style=/"BORDER-COLLAPSE: collapse/" "
"width=/"100%/" cellspacing=/"0/" cellpadding=/"5/" borderColor=/"#006699/""
" class=/"ArticleText/">/r/n");
PA_WriteClient(pECB, " <tr>/r/n");
PA_WriteClient(pECB, " <th align=/"left/" width=/"200/">ServerVariableName</th>/r/n");
PA_WriteClient(pECB, " <th align=/"left/">ServerVariableValue</th>/r/n");
PA_WriteClient(pECB, " </tr>/r/n");
for(i=0; i<A_nVariableNameA_Count; i++){
PA_WriteClient(pECB, " <tr>/r/n");

wsprintf(buffer, " <td>%s</td>/r/n", A_szVariableNameA[i]);
PA_WriteClient(pECB, buffer);

PA_WriteClient(pECB, " <td>");
buflen = sizeof(buffer);
memset(buffer, 0, buflen);
pECB->GetServerVariable(pECB->ConnID, A_szVariableNameA[i], buffer, &buflen);
PA_WriteClient(pECB, buffer);
PA_WriteClient(pECB, "</td>/r/n");

PA_WriteClient(pECB, " </tr>/r/n");
}

PA_WriteClient(pECB, " <tr>/r/n");
PA_WriteClient(pECB, " <td>-</td>/r/n");
PA_WriteClient(pECB, " <td>-</td>/r/n");
PA_WriteClient(pECB, " </tr>/r/n");
for(i=0; i<A_nVariableNameB_Count; i++){
PA_WriteClient(pECB, " <tr>/r/n");

wsprintf(buffer, " <td>%s</td>/r/n", A_szVariableNameB[i]);
PA_WriteClient(pECB, buffer);

PA_WriteClient(pECB, " <td>");
buflen = sizeof(buffer);
memset(buffer, 0, buflen);
pECB->GetServerVariable(pECB->ConnID, A_szVariableNameB[i], buffer, &buflen);
PA_WriteClient(pECB, buffer);
PA_WriteClient(pECB, "</td>/r/n");

PA_WriteClient(pECB, " </tr>/r/n");
}
PA_WriteClient(pECB, "</table>/r/n");

PA_WriteClient(pECB, szPageEnd);

pECB->dwHttpStatusCode = 200;

return HSE_STATUS_SUCCESS;
}

void PA_WriteClient(EXTENSION_CONTROL_BLOCK *pECB, LPCTSTR m_strInfo){
DWORD m_dwInfoLen = strlen(m_strInfo);
pECB->WriteClient(pECB->ConnID, (LPVOID)m_strInfo, &m_dwInfoLen, 0);
}

void PA_InitializeDLL(){
wsprintf(szResponseHeader, szResponseHeader_Format, szAppTitle, szAppTitle);
nResponseHeader_Len = strlen(szResponseHeader);
}

void PA_GetDateTime(LPTSTR m_szDateBuff){
SYSTEMTIME m_tmSystemTime;
char * m_szNow;
int m_nHour =0;

GetLocalTime(&m_tmSystemTime);
m_nHour = m_tmSystemTime.wHour;
if( m_nHour>=0 && m_nHour<4 ) m_szNow = A_szNow[0];
if( m_nHour>=4 && m_nHour<9 ) m_szNow = A_szNow[1];
if( m_nHour>=9 && m_nHour<12 ) m_szNow = A_szNow[2];
if( m_nHour>=12 && m_nHour<14 ) m_szNow = A_szNow[3];
if( m_nHour>=14 && m_nHour<18 ) m_szNow = A_szNow[4];
if( m_nHour>=18 && m_nHour<24 ) m_szNow = A_szNow[5];

// "2005-05-02 12:27:30 星期三 下午好";
sprintf(m_szDateBuff,
"%04d年%02d月%02d日 %02d:%02d:%02d %s %s",
m_tmSystemTime.wYear,
m_tmSystemTime.wMonth,
m_tmSystemTime.wDay,
m_tmSystemTime.wHour,
m_tmSystemTime.wMinute,
m_tmSystemTime.wSecond,
A_szWeekday[m_tmSystemTime.wDayOfWeek],
m_szNow);
}

GetServerVariable.def

; GetServerVariable.def : Declares the module parameters for the DLL.

LIBRARY "GetServerVariable"
DESCRIPTION 'GetServerVariable Windows Dynamic Link Library'

EXPORTS
GetExtensionVersion
HttpExtensionProc
; Explicit exports can go here
GetServerVariable.dsp

# Microsoft Developer Studio Project File - Name="GetServerVariable" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **

# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102

CFG=GetServerVariable - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "GetServerVariable.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "GetServerVariable.mak" CFG="GetServerVariable - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "GetServerVariable - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "GetServerVariable - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE

# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe

!IF "$(CFG)" == "GetServerVariable - Win32 Release"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GETSERVERVARIABLE_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GETSERVERVARIABLE_EXPORTS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x804 /d "NDEBUG"
# ADD RSC /l 0x804 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"GetServerVariable.dll"

!ELSEIF "$(CFG)" == "GetServerVariable - Win32 Debug"

# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GETSERVERVARIABLE_EXPORTS" /YX /FD /GZ /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GETSERVERVARIABLE_EXPORTS" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x804 /d "_DEBUG"
# ADD RSC /l 0x804 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept

!ENDIF

# Begin Target

# Name "GetServerVariable - Win32 Release"
# Name "GetServerVariable - Win32 Debug"
# Begin Group "Source Files"

# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File

SOURCE=./GetServerVariable.c
# End Source File
# End Group
# Begin Group "Header Files"

# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File

SOURCE=./GetServerVariable.def
# End Source File
# End Group
# Begin Group "Resource Files"

# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project
运行结果:

Sambar ISAPI "GetServerVariable.dll"

Begin ...

welcome: 2006年08月24日 06:03:07 星期四 早上好

The GetServerVariable function retrieves information about a connection or about the IIS itself.

ServerVariableNameServerVariableValue
ALL_HTTPHTTP_ACCEPT:*/* HTTP_ACCEPT_LANGUAGE:zh-cn HTTP_CONNECTION:Keep-Alive HTTP_HOST:localhost HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) HTTP_ACCEPT_ENCODING:gzip, deflate
ALL_RAWAccept: */* Accept-Language: zh-cn Connection: Keep-Alive Host: localhost User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Accept-Encoding: gzip, deflate
APPL_MD_PATH/LM/W3SVC/1/ROOT/virtualdir
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_LENGTH0
CONTENT_TYPE
HTTP_ACCEPT*/*
HTTPSoff
HTTPS_KEYSIZE
HTTPS_SECRETKEYSIZE
HTTPS_SERVER_ISSUER
HTTPS_SERVER_SUBJECT
INSTANCE_ID1
INSTANCE_META_PATH/LM/W3SVC/1
PATH_INFO
PATH_TRANSLATEDg:/inetpub/wwwroot
QUERY_STRING
REMOTE_ADDR127.0.0.1
REMOTE_HOST127.0.0.1
REMOTE_USER
REQUEST_METHODGET
SCRIPT_NAME/virtualdir/isapi/SDK_ISAPI_RELEASE/GetServerVariable.dll
SERVER_PORT80
SERVER_PORT_SECURE0
SERVER_PROTOCOLHTTP/1.1
SERVER_SOFTWAREMicrosoft-IIS/5.0
URL/virtualdir/isapi/SDK_ISAPI_RELEASE/GetServerVariable.dll
--
HTTP_ACCEPT_LANGUAGEzh-cn
HTTP_CONNECTIONKeep-Alive
HTTP_HOSTlocalhost
HTTP_REFERER
HTTP_USER_AGENTMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
HTTP_ACCEPT_ENCODINGgzip, deflate
Done.

Link: http://www.asm32.net/article_disp.asp?ID=1892
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: