Diff for /parser3/src/targets/isapi/parser3isapi.C between versions 1.18 and 1.35

version 1.18, 2001/03/24 19:12:22 version 1.35, 2001/06/28 07:44:17
Line 1 Line 1
   /** @file
           Parser: IIS extension.
   
           Copyright (c) 2000,2001 ArtLebedev Group (http://www.artlebedev.com)
   
           Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
   */
   static const char *RCSId="$Id$"; 
   
 #ifndef _MSC_VER  #ifndef _MSC_VER
 #       error compile ISAPI module with MSVC [no urge for now to make it autoconf-ed (PAF)]  #       error compile ISAPI module with MSVC [no urge for now to make it autoconf-ed (PAF)]
 #endif  #endif
Line 12 Line 21
 #include "pa_request.h"  #include "pa_request.h"
 #include "pa_version.h"  #include "pa_version.h"
 #include "pool_storage.h"  #include "pool_storage.h"
   #include "pa_socks.h"
   
 #define MAX_STATUS_LENGTH sizeof("xxxx LONGEST STATUS DESCRIPTION")  #define MAX_STATUS_LENGTH sizeof("xxxx LONGEST STATUS DESCRIPTION")
   
Line 28  struct SAPI_func_context { Line 38  struct SAPI_func_context {
         DWORD http_response_code;          DWORD http_response_code;
 };  };
   
   // goes to 'cs-uri-query' log file field. webmaster: switch it ON[default OFF].
   void SAPI::log(Pool& pool, const char *fmt, ...) {
           SAPI_func_context& ctx=*static_cast<SAPI_func_context *>(pool.context());
           
           va_list args;
           va_start(args,fmt);
           char buf[MAX_STRING];
           const char *prefix="PARSER_ERROR:";
           strcpy(buf, prefix);
           DWORD size=vsnprintf(buf+strlen(prefix), MAX_STRING-strlen(prefix), fmt, args);
           
           ctx.lpECB->ServerSupportFunction(ctx.lpECB->ConnID, 
                   HSE_APPEND_LOG_PARAMETER, buf, &size, 0);
   }
   
 const char *SAPI::get_env(Pool& pool, const char *name) {  const char *SAPI::get_env(Pool& pool, const char *name) {
         SAPI_func_context& ctx=*static_cast<SAPI_func_context *>(pool.context());          SAPI_func_context& ctx=*static_cast<SAPI_func_context *>(pool.context());
   
Line 51  const char *SAPI::get_env(Pool& pool, co Line 76  const char *SAPI::get_env(Pool& pool, co
         return 0;          return 0;
 }  }
   
 uint SAPI::read_post(Pool& pool, char *buf, uint max_bytes) {  size_t SAPI::read_post(Pool& pool, char *buf, size_t max_bytes) {
         SAPI_func_context& ctx=*static_cast<SAPI_func_context *>(pool.context());          SAPI_func_context& ctx=*static_cast<SAPI_func_context *>(pool.context());
   
         DWORD read_from_buf=0;          DWORD read_from_buf=0;
Line 93  void SAPI::add_header_attribute(Pool& po Line 118  void SAPI::add_header_attribute(Pool& po
                 ctx.header->APPEND_CONST(key);                  ctx.header->APPEND_CONST(key);
                 ctx.header->APPEND_CONST(": ");                  ctx.header->APPEND_CONST(": ");
                 ctx.header->APPEND_CONST(value);                  ctx.header->APPEND_CONST(value);
                 ctx.header->APPEND_CONST("\n");                  ctx.header->APPEND_CONST("\r\n");
         }          }
 }  }
   
Line 102  void SAPI::send_header(Pool& pool) { Line 127  void SAPI::send_header(Pool& pool) {
         SAPI_func_context& ctx=*static_cast<SAPI_func_context *>(pool.context());          SAPI_func_context& ctx=*static_cast<SAPI_func_context *>(pool.context());
   
         ctx.header->APPEND_CONST(          ctx.header->APPEND_CONST(
                 "expires: Fri, 23 Mar 2001 09:32:23 GMT\n"                  "expires: Fri, 23 Mar 2001 09:32:23 GMT\r\n"
                 "\n");                  "\r\n");
         HSE_SEND_HEADER_EX_INFO header_info;          HSE_SEND_HEADER_EX_INFO header_info;
   
         char status_buf[MAX_STATUS_LENGTH];          char status_buf[MAX_STATUS_LENGTH];
Line 134  void SAPI::send_header(Pool& pool) { Line 159  void SAPI::send_header(Pool& pool) {
                 HSE_REQ_SEND_RESPONSE_HEADER_EX, &header_info, NULL, NULL);                  HSE_REQ_SEND_RESPONSE_HEADER_EX, &header_info, NULL, NULL);
 }  }
   
 void SAPI::send_body(Pool& pool, const char *buf, size_t size) {  void SAPI::send_body(Pool& pool, const void *buf, size_t size) {
         SAPI_func_context& ctx=*static_cast<SAPI_func_context *>(pool.context());          SAPI_func_context& ctx=*static_cast<SAPI_func_context *>(pool.context());
   
         DWORD num_bytes=size;          DWORD num_bytes=size;
         ctx.lpECB->WriteClient(ctx.lpECB->ConnID,           ctx.lpECB->WriteClient(ctx.lpECB->ConnID, 
                 const_cast<char *>(buf), &num_bytes, HSE_IO_SYNC);                  const_cast<void *>(buf), &num_bytes, HSE_IO_SYNC);
 }  
   
 // goes to 'cs-uri-query' log file field. webmaster: switch it ON[default OFF].  
 void SAPI::log(Pool& pool, const char *fmt, ...) {  
         SAPI_func_context& ctx=*static_cast<SAPI_func_context *>(pool.context());  
           
         va_list args;  
         va_start(args,fmt);  
         char buf[MAX_STRING];  
         const char *prefix="PARSER_ERROR:";  
         strcpy(buf, prefix);  
         DWORD size=vsnprintf(buf+strlen(prefix), MAX_STRING-strlen(prefix), fmt, args);  
           
         ctx.lpECB->ServerSupportFunction(ctx.lpECB->ConnID,   
                 HSE_APPEND_LOG_PARAMETER, buf, &size, 0);  
 }  }
   
 //   // 
Line 167  static bool parser_init() { Line 177  static bool parser_init() {
   
         static Pool pool(0); // global pool          static Pool pool(0); // global pool
         PTRY {          PTRY {
                   // init socks
                   init_socks(pool);
   
                   // init global classes
                   init_methoded_array(pool);
                 // init global variables                  // init global variables
                 pa_globals_init(pool);                  pa_globals_init(pool);
                                   
Line 250  DWORD WINAPI HttpExtensionProc(LPEXTENSI Line 265  DWORD WINAPI HttpExtensionProc(LPEXTENSI
                 request_info.content_type=lpECB->lpszContentType;                  request_info.content_type=lpECB->lpszContentType;
                 request_info.content_length=lpECB->cbTotalBytes;                  request_info.content_length=lpECB->cbTotalBytes;
                 request_info.cookie=SAPI::get_env(pool, "HTTP_COOKIE");                  request_info.cookie=SAPI::get_env(pool, "HTTP_COOKIE");
                   request_info.user_agent=SAPI::get_env(pool, "HTTP_USER_AGENT");
   
                                   
                 // prepare to process request                  // prepare to process request
                 Request request(pool,                  Request request(pool,
                         request_info,                          request_info,
                         String::UL_HTML_TYPO                          String::UL_USER_HTML
                         );                          );
   
                 // some root-controlled location                  // some root-controlled location
Line 273  DWORD WINAPI HttpExtensionProc(LPEXTENSI Line 290  DWORD WINAPI HttpExtensionProc(LPEXTENSI
         } PCATCH(e) { // global problem          } PCATCH(e) { // global problem
                 // don't allocate anything on pool here:                  // don't allocate anything on pool here:
                 //   possible pool' exception not catch-ed now                  //   possible pool' exception not catch-ed now
                 //   and there could be out-of-memory exception                          //   and there could be out-of-memory exception
                 const char *body=e.comment();                  const char *body=e.comment();
                 // log it                  // log it
                 SAPI::log(pool, "exception in request exception handler: %s", body);                  SAPI::log(pool, "exception in request exception handler: %s", body);
Line 284  DWORD WINAPI HttpExtensionProc(LPEXTENSI Line 301  DWORD WINAPI HttpExtensionProc(LPEXTENSI
                 // prepare header // not using SAPI func wich allocates on pool                  // prepare header // not using SAPI func wich allocates on pool
                 char header_buf[MAX_STRING];                  char header_buf[MAX_STRING];
                 int header_len=snprintf(header_buf, MAX_STRING,                  int header_len=snprintf(header_buf, MAX_STRING,
                         "content-type: text/plain\n"                          "content-type: text/plain\r\n"
                         "content-length: %ul\n"                          "content-length: %lu\r\n"
                         "expires: Fri, 23 Mar 2001 09:32:23 GMT\n"                          "expires: Fri, 23 Mar 2001 09:32:23 GMT\r\n"
                         "\n",                          "\r\n",
                         content_length);                          content_length);
   
                 HSE_SEND_HEADER_EX_INFO header_info;                  HSE_SEND_HEADER_EX_INFO header_info;

Removed from v.1.18  
changed lines
  Added in v.1.35


E-mail: