#ifndef __DCL_HTTP_SERVER_EXTENSION_H__ #define __DCL_HTTP_SERVER_EXTENSION_H__ 20050509 #ifndef __DCL_CONFIG_H__ #include <dcl/_Config.h> #endif /* RFC 2616/5.1.1 */ enum HTTP_REQUEST_METHOD { HTTP_METHOD_UNKNOWN = 0, HTTP_METHOD_OPTIONS = 1, HTTP_METHOD_GET = 3, HTTP_METHOD_HEAD = 4, HTTP_METHOD_POST = 5, HTTP_METHOD_PUT = 6, HTTP_METHOD_DELETE = 7, HTTP_METHOD_TRACE = 8, HTTP_METHOD_CONNECT = 9 }; enum HTTP_RESPONSE_STATUS_CODE { HTTP_STATUS_CONTINUE = 100, HTTP_STATUS_SWITCHING_PROTOCOLS = 101, HTTP_STATUS_OK = 200, HTTP_STATUS_CREATED = 201, HTTP_STATUS_ACCEPTED = 202, HTTP_STATUS_NON_AUTHORITIVE = 203, HTTP_STATUS_NO_CONTENT = 204, HTTP_STATUS_RESET_CONTENT = 205, HTTP_STATUS_PARTIAL_CONTENT = 206, HTTP_STATUS_MULTIPLE_CHOICES = 300, HTTP_STATUS_MOVED_PERMANENTLY = 301, HTTP_STATUS_FOUND = 302, HTTP_STATUS_SEE_OTHER = 303, HTTP_STATUS_NOT_MODIFIED = 304, HTTP_STATUS_USE_PROXY = 305, HTTP_STATUS_TEMPORARY_REDIRECT = 307, HTTP_STATUS_BAD_REQUEST = 400, HTTP_STATUS_UNAUTHORIZED = 401, HTTP_STATUS_PAYMENT_REQUIRED = 402, HTTP_STATUS_FORBIDDEN = 403, HTTP_STATUS_NOT_FOUND = 404, HTTP_STATUS_METHOD_NOT_ALLOWED = 405, HTTP_STATUS_NOT_ACCEPTABLE = 406, HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED = 407, HTTP_STATUS_REQUEST_TIME_OUT = 408, HTTP_STATUS_CONFLICT = 409, HTTP_STATUS_GONE = 410, HTTP_STATUS_LENGTH_REQUIRED = 411, HTTP_STATUS_PRECONDITION_FAILED = 412, HTTP_STATUS_REQUEST_ENTITY_TOO_LARGE = 413, HTTP_STATUS_REQUEST_URI_TOO_LARGE = 414, HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE = 415, HTTP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE = 416, HTTP_STATUS_EXPECTATION_FAILED = 417, HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, HTTP_STATUS_NOT_IMPLEMENTED = 501, HTTP_STATUS_BAD_GATEWAY = 502, HTTP_STATUS_SERVICE_UNAVAILABLE = 503, HTTP_STATUS_GATEWAY_TIME_OUT = 504, HTTP_STATUS_VERSION_NOT_SUPPORTED = 505 }; typedef struct _DCL_HTTP_CONN DCL_HTTP_CONN; typedef DCL_HTTP_CONN* DCL_HTTP_HCONN; typedef struct _DCL_HTTP_SERVER_API DCL_HTTP_SERVER_API; typedef struct _DCL_HTTP_SERVLET_CONTEXT DCL_HTTP_SERVLET_CONTEXT; typedef struct _DCL_HTTP_SERVLET DCL_HTTP_SERVLET; /* callback functions */ /* for DCL_HTTP_SERVER_API */ typedef BOOL (* DCLHttpWriteClient)( DCL_HTTP_HCONN hConn, /* (IN) */ const void* pvBuffer, /* (IN) */ UINT32* pnLength /* (IN, OUT) */ ); typedef BOOL (* DCLHttpReadClient)( DCL_HTTP_HCONN hConn, /* (IN) */ void* pvBuffer, /* (OUT) */ UINT32* pnLength /* (IN, OUT) */ ); typedef BOOL (* DCLHttpSendResponseHeader)( DCL_HTTP_HCONN hConn, /* (IN) */ UINT32 uStatusCode,/* (IN) */ const char* pszHeader, /* (IN) */ UINT32 uLength /* (IN) number of bytes in header */ ); typedef BOOL (* DCLHttpGetRequestHeader)( DCL_HTTP_HCONN hConn, /* (IN) */ const char* pszName, /* (IN) NULL => all */ char* pchBuffer, /* (OUT) */ UINT32* pnLength /* (IN, OUT) */ ); typedef BOOL (* DCLHttpGetCgiVariable)( DCL_HTTP_HCONN hConn, /* (IN) */ const char* pszVarName, /* (IN) NULL => all vars */ void* pvBuffer, /* (OUT) */ UINT32* pnLength /* (IN, OUT) */ ); typedef void (* DCLHttpWriteStream)( void* hStream, /* (IN) */ const void* pvData, /* (IN) */ UINT32 uLength /* (IN) */ ); typedef void (* DCLHttpServerControl)( DCL_HTTP_HCONN hConn, /* (IN) */ const char* psControl, UINT32 uLength, DCLHttpWriteStream pfnWriteResult, void* hResultOutputStream ); /* for DCL_HTTP_SERVLET */ typedef BOOL (* DCLHttpServletInitialize)( const char* pszModuleName, /* Module FileName */ const DCL_HTTP_SERVER_API* pSAPI, void* hErrorReport ); typedef BOOL (* DCLHttpServletCleanup)( void* hErrorReport ); typedef BOOL (* DCLHttpServletService)( const DCL_HTTP_SERVLET_CONTEXT* pContext, void* hErrorReport ); struct _DCL_HTTP_CONN { void* pv; }; struct _DCL_HTTP_SERVER_API { UINT32 uSize; /* (IN) size of this structure */ UINT32 uVersion; /* (IN) version info of this spec */ DCLHttpWriteClient pfnWriteClient; DCLHttpReadClient pfnReadClient; DCLHttpSendResponseHeader pfnSendResponseHeader; DCLHttpGetRequestHeader pfnGetRequestHeader; DCLHttpGetCgiVariable pfnGetCgiVariable; DCLHttpWriteStream pfnReportError; DCLHttpServerControl pfnServerControl; }; struct _DCL_HTTP_SERVLET_CONTEXT { UINT32 uSize; /* (IN) size of this structure */ UINT32 uVersion; /* (IN) version info of this spec */ DCL_HTTP_HCONN hConn; /* (IN) */ const char* pszRemoteAddr; /* (IN) REMOTE_ADDR */ UINT32 uRemotePort; /* (IN) REMOTE_PORT */ UINT32 uRequestMethod; /* (IN) RFC 2616/5.1.1 HTTP_REQUEST_METHOD */ const char* pszRequestMethod; /* (IN) REQUEST_METHOD */ const char* pszPath; /* (IN) URI's abs_path */ const char* pszQueryString; /* (IN) QUERY_STRING */ const char* pszContentType; /* (IN) CONTENT_TYPE */ UINT32 uContentLength; /* (IN) CONTENT_LENGTH */ const char* pszScriptFileName; /* (IN) SCRIPT_FILE_NAME, PATH_TRANSLATED */ const void* pvScriptData; UINT32 uScriptLength; }; struct _DCL_HTTP_SERVLET { /* DCL common members */ UINT32 uSize; /* (OUT) size of this structure */ UINT32 uDCLVersion; /* (OUT) DCL_VERSION, non DCL(0) */ const char* pszBuildTimeStamp; /* (OUT) __TIMESTAMP__ */ UINT32 uBuildFlag; /* (OUT) release(0), debug(1) */ UINT32 uModuleType; /* (OUT) DCL_HTTP_SERVLET_MODULE */ const char* pszDescription; /* (OUT) module description */ /* private members */ UINT32 uVersion; /* (OUT) version info of this spec */ /* DCL_HTTP_SERVER_VERSION */ DCLHttpServletInitialize pfnInitialize; DCLHttpServletCleanup pfnCleanup; DCLHttpServletService pfnHttpService; }; #endif /* __DCL_HTTP_SERVER_EXTENSION_H__ */