EXTENSION_CONTROL_BLOCK ±¸Á¶Ã¼´Â ´ÙÀ½°ú °°Àº ÇüÅÂ:
typedef struct _EXTENSION_CONTROL_BLOCK {
DWORD cbSize; //IN
DWORD dwVersion //IN
HCONN ConnID; //IN
DWORD dwHttpStatusCode; //OUT
CHAR lpszLogData[HSE_LOG_BUFFER_LEN]; //OUT
LPSTR lpszMethod; //IN
LPSTR lpszQueryString; //IN
LPSTR lpszPathInfo; //IN
LPSTR lpszPathTranslated; //IN
DWORD cbTotalBytes; //IN
DWORD cbAvailable; //IN
LPBYTE lpbData; //IN
LPSTR lpszContentType; //IN
BOOL ( WINAPI * GetServerVariable )
( HCONN hConn,
LPSTR lpszVariableName,
LPVOID lpvBuffer,
LPDWORD lpdwSize );
BOOL ( WINAPI * WriteClient )
( HCONN ConnID,
LPVOID Buffer,
LPDWORD lpdwBytes,
DWORD dwReserved );
BOOL ( WINAPI * ReadClient )
( HCONN ConnID,
LPVOID lpvBuffer,
LPDWORD lpdwSize );
BOOL ( WINAPI * ServerSupportFunction )
( HCONN hConn,
DWORD dwHSERRequest,
LPVOID lpvBuffer,
LPDWORD lpdwSize,
LPDWORD lpdwDataType );
} EXTENSION_CONTROL_BLOCK, *LPEXTENSION_CONTROL_BLOCK;
EXTENSION_CONTROL_BLOCK ÅëÇØ ISA¿Í Åë½Å ÇÏ´Â ¼¹ö¡£
¹Û¿¡ ¼ À§ÀÇ¿¡ ´ë ÇÑ ÂüÁ¶ ȸ¿ø È®Àå (IN) ¶Ç´Â È®Àå (¹Û)¿¡¼ ¸Þ½ÃÁö¿¡ Àû¿ë µÇ´ÂÁö ¿©ºÎ¸¦ ³ªÅ¸³À´Ï´Ù.
ȸ¿ø
EXTENSION_CONTROL_BLOCK ±¸Á¶Ã¼¿¡´Â ´ÙÀ½ Çʵ尡 Æ÷ÇÔ µÇ¾î ÀÖ½À´Ï´Ù.:
cbSize
ÀÌ ±¸Á¶Ã¼ÀÇ Å©±â¡£
dwVersion
¹öÀü Á¤º¸¸¦ ofnbsp; HTTP_FILTER_REVISION. HIWORD ´Â ÁÖ ¹öÀü ¹øÈ£°¡ °í LOWORD ´Â ºÎ ¹öÀü ¹øÈ£(&N)¡£
ConnID
nbsp;HTTP ¼¹ö¿¡ ÀÇÇØ ÇÒ´ç µÈ °íÀ¯ ¹øÈ£ÀÔ´Ï´Ù. ¼öÁ¤ÇÒ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù(&N).
dwHttpStatusCode
¿äûÀÌ ¿Ï·á µÇ ¸é ÇöÀç Æ®·£Àè¼ÇÀÇ »óÅÂÀÔ´Ï´Ù. ´ÙÀ½ Áß Çϳª°¡ µÉ ¼ö ÀÖ½À´Ï´Ù.:
lpszLogData
HSE_LOG_BUFFER_LENÅ©±âÀÇ ¹öÆÛÀÔ´Ï´Ù. ÇöÀç Æ®·£Àè¼ÇÀÌ ISA¿¡ null Á¾·á ·Î±× Á¤º¸ ¹®ÀÚ¿À» Æ÷ÇÔ µÇ¾î ÀÖ½À´Ï´Ù. ÀÌ ·Î±× Á¤º¸´Â HTTP ¼¹ö ·Î±×¿¡ ÀÔ·Â µË´Ï´Ù. °ü¸® ¸ñÀûÀ» À§ÇØ ¸Å¿ì À¯¿ë HTTP ¼¹ö¿Í ISA Æ®·£Àè¼ÇÀÌ ´ÜÀÏ ·Î±× ÆÄÀÏÀ» À¯Áö¡£
lpszMethod
¸Þ¼µå´Â ¿äû µÇ¾ú´ÙÀÔ´Ï´Ù. À̰ÍÀº CGI º¯¼ö REQUEST_METHOD ¿¡ ÇØ´ç¡£
lpszQueryString
nbsp;Null·Î ³¡³ª´Â ¹®ÀÚ¿ Äõ¸® Á¤º¸¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù. À̰ÍÀº CGI º¯¼ö QUERY_STRING ¿¡ ÇØ´ç(&N)¡£
lpszPathInfo
Null·Î ³¡³ª´Â ¹®ÀÚ¿ Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ ÁÖ¾îÁø Ãß°¡ °æ·Î Á¤º¸¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù. À̰ÍÀº CGI º¯¼ö PATH_INFO °°½À´Ï´Ù.
lpszPathTranslated
Null·Î ³¡³ª´Â ¹®ÀÚ¿ º¯È¯ µÈ °æ·Î Æ÷ÇÔ ÇÕ´Ï´Ù. À̰ÍÀº CGI º¯¼ö PATH_TRANSLATED °°½À´Ï´Ù.
cbTotalBytes
Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¹ÞÀº ¹ÙÀÌÆ®ÀÇ ÃÑ ¼öÀÔ´Ï´Ù. À̰ÍÀº CGI º¯¼ö CONTENT_LENGTH°°½À´Ï´Ù. ÀÌ °ªÀÌ 0xffffffff À̸é´Â °æ¿ì 4gb ÀÌ»óÀÇ »ç¿ë °¡´ÉÇÑ data.nbsp; ´õ ¸¹Àº µ¥ÀÌÅͰ¡ ¹Ýȯ µÉ ¶§±îÁö CHttpServerContext::ReadClient ¸¦ È£Ãâ ÇØ¾ßÀÌ °æ¿ì(&N)¡£
cbAvailable
»ç¿ëÇÒ ¼ö ÀÖ´Â (ÃÑ cbTotalBytes)ÀÇ ¹ÛÀ¸·Î lpbData°¡ °¡¸®Å°´Â ¹öÆÛÀÇ ¹ÙÀÌÆ® ¼öÀÔ´Ï´Ù. CbTotalBytes ´Â cbAvailable º¯¼ö lpbData Ŭ¶óÀÌ¾ðÆ®¿¡¼ Àü¼ÛÇÑ ¸ðµç µ¥ÀÌÅ͸¦ Æ÷ÇÔ ÇÏ´Â ¹öÆÛ¿¡ °¡¸®Åµ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é cbTotalBytes ÃÑ ¹ÞÀº µ¥ÀÌÅÍÀÇ ¹ÙÀÌÆ® ¼ö°¡ Æ÷ÇÔ µË´Ï´Ù. ISA CHttpServerContext::ReadClient Äݹé ÇÔ¼ö¸¦ »ç¿ë ÇÏ ¿© µ¥ÀÌÅÍ ( cbAvailable¿ÀÇÁ¼Â¿¡¼ ½ÃÀÛ)ÀÇ ³ª¸ÓÁö¸¦ ÀÐÀÌ Çʿ䰡 ´ÙÀ½¡£
lpbData
Ŭ¶óÀÌ¾ðÆ®¿¡¼ º¸³½ µ¥ÀÌÅÍ Å©±â cbAvailable ÀÇ ¹öÆÛ¸¦ Æ÷ÀÎÆ®¡£
lpszContentType
Ŭ¶óÀÌ¾ðÆ®¿¡¼ º¸³½ µ¥ÀÌÅÍÀÇ ÄÜÅÙÃ÷ Çü½ÄÀ» Æ÷ÇÔ µÈ null·Î ³¡³ª´Â ¹®ÀÚ¿. À̰ÍÀº CGI º¯¼ö CONTENT_TYPE °°½À´Ï´Ù.
GetServerVariable
ÀÌ ÇÔ¼ö´Â (¸¦ Æ÷ÇÔ ÇÏ ¿© CGI º¯¼ö) Á¤º¸ °ü·Ã HTTP ¿¬°á, ¶Ç´Â ¼¹ö ÀÚü¸¦ ¹öÆÛ¿¡ º¹»ç ÇÕ´Ï´Ù. ´ÙÀ½ ¸Å°³ º¯¼ö¸¦ »ç¿ë ÇÏ´Â GetServerVariable:
| º¯¼ö À̸§ | ¼³¸í |
| ALL_HTTP | ¸ðµç HTTP Çì´õ¸¦ À§ÀÇ º¯¼ö Áß Çϳª¿¡ ÀÌ¹Ì ±¸¹® ºÐ¼® ÇÏÁö Çß´Ù. ÀÌ·¯ÇÑ º¯¼ö´Â Æû HTTP_lt; ¸Ó¸®±Û Çʵå À̸§ & gt¡£ |
| AUTH_PASS | ÇØ´ç REMOTE_USER Çϴ Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ Á¦°ø µÈ ¾ÏÈ£¸¦ °Ë»ö ÇÕ´Ï´Ù. Null·Î ³¡³ª´Â ¹®ÀÚ¿ °Í¡£ |
| AUTH_TYPE | ÀÎÁõ used.nbsp;ÀÇ À¯ÇüÀ» Æ÷ÇÔ ¿¹¸¦ µé¾î, ±âº» ÀÎÁõÀ» »ç¿ë ÇÏ´Â °æ¿ì ¹®ÀÚ¿ "Basic" µÉ °ÍÀÔ´Ï´Ù. Windows NT 縰Áö ÀÀ´ä¿¡ ´ë ÇÑ "NTLM" °ÍÀÔ´Ï´Ù. ´Ù¸¥ ÀÎÁõ ±¸¼ºÇ¥´Â ´Ù¸¥ ¹®ÀÚ¿À» °¡Áú °Í ÀÌ´Ù. »õ ÀÎÁõ Çü½ÄÀ» ÀÎÅÍ³Ý ¼¹ö¿¡ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù, ¶§¹®¿¡ ¸ðµç °¡´ÉÇÑ ¹®ÀÚ¿ ¸ñ·ÏÀ» ¼ö ¾ø±â. ´ÙÀ½ ÀÎÁõ ¾øÀ½ »ç¿ë ¹®ÀÚ¿ÀÌ ºñ¾î ÀÖ´Â °æ¿ì(&N)¡£ |
| CONTENT_LENGTH | ½ºÅ©¸³Æ®¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡¼ ¹ÞÀ» ±â´ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÖ´Â ¹ÙÀÌÆ® ¼ö¡£ |
| CONTENT_TYPE | ÄÜÅÙÃ÷ Çü½ÄÀÇ POST ¿äû º»¹®¿¡¼ Á¦°ø ÇÏ´Â Á¤º¸¡£ |
| GATEWAY_INTERFACE | ÀÌ ¼¹ö°¡ µû¸£´Â CGI »ç¾çÀÇ °³Á¤. ÇöÀç ¹öÀüÀº CGI/1.1¡£ |
| HTTP_ACCEPT | Ưº° ÇÑ °æ¿ì HTTP Çì´õÀÔ´Ï´Ù. Àû¿ëÀÇ °ª: ±¸ºÐ ÇÏ ¿© ¿¬°á Çʵ尡 ",". ¿¹¸¦ µé¾î, ´ÙÀ½ ÁÙÀº HTTP Çì´õÀÇ ÀϺÎ
±×¶§ HTTP_ACCEPT º¯¼ö °ªÀ» °¡Áú °Í ÀÌ´Ù:
|
| PATH_INFO | Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ ÁÖ¾îÁø Ãß°¡ °æ·Î Á¤º¸ÀÔ´Ï´Ù. ÀÌ ±¸¼º URLÀÇ ÈÄÇà ºÎºÐ ½ºÅ©¸³Æ® À̸§À» ÈÄ ÇÏÁö¸¸ Àü¿¡ Äõ¸® ¹®ÀÚ¿ (ÀÖ´Â °æ¿ì)¡£ |
| PATH_TRANSLATED | À̰ÍÀº PATH_INFO, ÇÏÁö¸¸ µð·ºÅ͸® »ç¾çÀ¸·Î È®Àå °¡»ó °æ·Î À̸§ÀÇ °ª¡£ |
| ºÎ°¡Àû | ? ÀÌ ½ºÅ©¸³Æ®¸¦ ÂüÁ¶ ÇÏ´Â URL¿¡ ´ÙÀ½°ú °°ÀÌ Á¤º¸¡£ |
| REMOTE_ADDR | Ŭ¶óÀ̾ðÆ®ÀÇ IP ÁÖ¼Ò¡£ |
| REMOTE_HOST | Ŭ¶óÀ̾ðÆ®ÀÇ È£½ºÆ® À̸§¡£ |
| REMOTE_USER | ÀÌ Å¬¶óÀÌ¾ðÆ®¿¡¼ Á¦°ø ÇÏ °í ¼¹ö¿¡ ÀÇÇØ ÀÎÁõ µÈ »ç¿ëÀÚ¸¦ Æ÷ÇÔ¡£ |
| REQUEST_METHOD | HTTP ¿äû ¸Þ¼µå¡£ |
| SCRIPT_NAME | ½ÇÇà ÁßÀÎ ½ºÅ©¸³Æ® ÇÁ·Î±×·¥ÀÇ À̸§¡£ |
| SERVER_NAME | ¼¹öÀÇ È£½ºÆ® À̸§ (¶Ç´Â IP ÁÖ¼Ò)·Î ÀÚ±â ÂüÁ¶ Url¿¡ ³ªÅ¸³³´Ï´Ù. |
| SERVER_PORT | ¿äûÀ» ¹ÞÀº TCP/IP Æ÷Æ®¡£ |
| SERVER_PROTOCOL | À̸§°úÀÌ ¿äû¿¡ °üÇÑ Á¤º¸ °Ë»ö ÇÁ·ÎÅäÄÝÀÇ ¹öÀüÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î HTTP/1.0¡£ |
| SERVER_SOFTWARE | À̸§ ¹× CGI ÇÁ·Î±×·¥ÀÌ ½ÇÇà µÇ´Â À¥ ¼¹ö ¹öÀü¡£ |
WriteClient
ÁöÁ¤ µÈ ¹öÆÛ¿¡¼ Ŭ¶óÀÌ¾ðÆ®¿¡ Á¤º¸¸¦ º¸³À´Ï´Ù. WriteClient Àº ´ÙÀ½ ¸Å°³ º¯¼ö:
ReadClient
È£ÃâÀÚ°¡ Á¦°øÇÑ ¹öÆÛ¿¡ À¥ Ŭ¶óÀ̾ðÆ®ÀÇ HTTP ¿äû º»¹®¿¡¼ Á¤º¸¸¦ ÀнÀ´Ï´Ù. ReadClient Àº ´ÙÀ½ ¸Å°³ º¯¼ö:
ServerSupportFunction
HTTP ¼¹ö ±¸Çö¿¡ °ü·Ã µÈ ±â´É »Ó¸¸ ¾Æ´Ï¶ó ¸î °¡Áö ¹ü¿ë ÇÔ¼ö¸¦ ¿ìÁÖ °úÇÐ ¿¬±¸¼Ò¸¦ Á¦°ø ÇÕ´Ï´Ù. ServerSupportFunction Àº ´ÙÀ½ ¸Å°³ º¯¼ö:
ÄÚ¸àÆ®
Extensionsnbsp;¿Í ÆÄÀÏÀ» ½Äº° ÇÏ´Â ¼¹ö.EXE¿Í.CGI (Common Gateway Interface) ½ÇÇàÀ¸·Î ÀüÅõ. ¶ÇÇÑ, ¼¹ö ½Äº° ÆÄÀÏ DLL È®Àå¸íÀ» °¡Áø ½ÇÇà ½ºÅ©¸³Æ®(&N)¡£
¼¹ö DLLÀ» ·Îµå ÇÏ´Â °æ¿ì¿¡ DLL ÁøÀÔÁ¡ thenbsp;ÀÇ ¹öÀü ¹øÈ£¸¦ CHttpServer::GetExtensionVersion ¿¡¼ È£Ãâ HTTP_FILTER_REVISION ISA ±â¹ÝÀ¸·Î ¹× ¼¹ö °ü¸®ÀÚ¿¡ ´ë ÇÑ ÂªÀº ÅØ½ºÆ® ¼³¸í. ¸ðµç Ŭ¶óÀÌ¾ðÆ® ¿äû¿¡ ´ë ÇÑ CHttpServer::HttpExtensionProc ÁøÀÔÁ¡ÀÌ È£Ã⠵˴ϴÙ. È®Àå º¯È¯µÈ °æ·Î, ¸Þ¼µå À̸§, °æ·Î Á¤º¸, Äõ¸® ¹®ÀÚ¿ µî ÀϹÝÀûÀ¸·Î ÇÊ¿äÇÑ Á¤º¸¸¦ ¼ö½Å(&N)¡£
Âü°í Ç׸ñnbsp;CHttpServerContext::ReadClient, CHttpServer::GetExtensionVersion, CHttpServer::HttpExtensionProc(&N)