Artifact dcfd30a46b353b59b479e087779f233f8d8612dd
- File        
src/win32/httpext.d
- 
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
The problem was __gshared. Replacing it with TLS fixed the issue. Remaining problem is that "hack.d"'s CloseHandle hack is not working anymore. (user: kinaba) [annotate]
 
- 
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
/***********************************************************************\
*                               httpext.d                               *
*                                                                       *
*                       Windows API header module                       *
*                                                                       *
*                 Translated from MinGW Windows headers                 *
*                                                                       *
*                       Placed into public domain                       *
\***********************************************************************/
module win32.httpext;
/* Comment from MinGW
       httpext.h - Header for ISAPI extensions.
       This file is part of a free library for the Win32 API.
       This library is distributed in the hope that it will be useful,
       but WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
private import win32.windows;
enum {
    HSE_VERSION_MAJOR               = 2,
    HSE_VERSION_MINOR               = 0,
    HSE_LOG_BUFFER_LEN              = 80,
    HSE_MAX_EXT_DLL_NAME_LEN        = 256,
    HSE_STATUS_SUCCESS              = 1,
    HSE_STATUS_SUCCESS_AND_KEEP_CONN,
    HSE_STATUS_PENDING,
    HSE_STATUS_ERROR,
    HSE_REQ_BASE                    = 0,
    HSE_REQ_SEND_URL_REDIRECT_RESP,
    HSE_REQ_SEND_URL,
    HSE_REQ_SEND_RESPONSE_HEADER,
    HSE_REQ_DONE_WITH_SESSION,
    HSE_REQ_SEND_RESPONSE_HEADER_EX = 1016,
    HSE_REQ_END_RESERVED            = 1000,
    HSE_TERM_ADVISORY_UNLOAD        = 0x00000001,
    HSE_TERM_MUST_UNLOAD,
    HSE_IO_SYNC                     = 0x00000001,
    HSE_IO_ASYNC,
    HSE_IO_DISCONNECT_AFTER_SEND    = 0x00000004,
    HSE_IO_SEND_HEADERS             = 0x00000008
}
mixin DECLARE_HANDLE!("HCONN");
struct HSE_VERSION_INFO {
	DWORD dwExtensionVersion;
	CHAR[HSE_MAX_EXT_DLL_NAME_LEN] lpszExtensionDesc;
}
alias HSE_VERSION_INFO* LPHSE_VERSION_INFO;
struct EXTENSION_CONTROL_BLOCK {
	DWORD  cbSize = EXTENSION_CONTROL_BLOCK.sizeof;
	DWORD  dwVersion;
	HCONN  ConnID;
	DWORD  dwHttpStatusCode;
	CHAR[HSE_LOG_BUFFER_LEN] lpszLogData;
	LPSTR  lpszMethod;
	LPSTR  lpszQueryString;
	LPSTR  lpszPathInfo;
	LPSTR  lpszPathTranslated;
	DWORD  cbTotalBytes;
	DWORD  cbAvailable;
	LPBYTE lpbData;
	LPSTR  lpszContentType;
	extern(Pascal) BOOL function(HCONN, LPSTR, LPVOID, LPDWORD)
	  GetServerVariable;
	extern(Pascal) BOOL function(HCONN, LPVOID, LPDWORD, DWORD) WriteClient;
	extern(Pascal) BOOL function(HCONN, LPVOID, LPDWORD) ReadClient;
	extern(Pascal) BOOL function(HCONN, DWORD, LPVOID, LPDWORD, LPDWORD)
	  ServerSupportFunction;
}
alias EXTENSION_CONTROL_BLOCK* LPEXTENSION_CONTROL_BLOCK;
extern (Pascal) {
	alias BOOL function(HSE_VERSION_INFO*) PFN_GETEXTENSIONVERSION;
	alias DWORD function(EXTENSION_CONTROL_BLOCK*) PFN_HTTPEXTENSIONPROC;
	alias BOOL function(DWORD) PFN_TERMINATEEXTENSION;
	alias VOID function(EXTENSION_CONTROL_BLOCK*, PVOID, DWORD, DWORD) PFN_HSE_IO_COMPLETION;
}
struct HSE_TF_INFO {
	PFN_HSE_IO_COMPLETION pfnHseIO;
	PVOID  pContext;
	HANDLE hFile;
	LPCSTR pszStatusCode;
	DWORD  BytesToWrite;
	DWORD  Offset;
	PVOID  pHead;
	DWORD  HeadLength;
	PVOID  pTail;
	DWORD  TailLength;
	DWORD  dwFlags;
}
alias HSE_TF_INFO* LPHSE_TF_INFO;
struct HSE_SEND_HEADER_EX_INFO {
	LPCSTR pszStatus;
	LPCSTR pszHeader;
	DWORD  cchStatus;
	DWORD  cchHeader;
	BOOL   fKeepConn;
}
alias HSE_SEND_HEADER_EX_INFO* LPHSE_SEND_HEADER_EX_INF;
extern (Pascal) {
	BOOL GetExtensionVersion(HSE_VERSION_INFO*);
	DWORD HttpExtensionProc(EXTENSION_CONTROL_BLOCK*);
	BOOL TerminateExtension(DWORD);
}