Diff for /parser3/src/targets/cgi/pa_sapi_info.h between versions 1.9 and 1.18

version 1.9, 2020/11/12 16:16:01 version 1.18, 2024/09/11 21:07:36
Line 9 Line 9
 /// IIS refuses to read bigger chunks  /// IIS refuses to read bigger chunks
 const size_t READ_POST_CHUNK_SIZE=0x400*0x400; // 1M  const size_t READ_POST_CHUNK_SIZE=0x400*0x400; // 1M
   
   // for signal handlers and cgi console detection
   static Request *request=0;
   
   
 class SAPI_Info : public PA_Allocated {  class SAPI_Info : public PA_Allocated {
 public:  public:
         int http_response_code;          int http_response_code;
Line 22  public: Line 26  public:
                         return 0;                          return 0;
         }          }
   
         virtual bool set_env(const char* name, const char* value) {          virtual bool set_env(const char*, const char*) {
                 return false;                  return false;
         }          }
   
Line 69  public: Line 73  public:
   
         virtual void add_header_attribute(const char* dont_store_key, const char* dont_store_value) {          virtual void add_header_attribute(const char* dont_store_key, const char* dont_store_value) {
                 SAPI_Info::add_header_attribute(dont_store_key, dont_store_value);                  SAPI_Info::add_header_attribute(dont_store_key, dont_store_value);
 //              if(!request || !request->console.was_used())                  if(!request || !request->console.was_used())
                         printf("%s: %s\n", capitalize(dont_store_key), dont_store_value);                          printf("%s: %s\n", capitalize(dont_store_key), dont_store_value);
         }          }
   
Line 91  class SAPI_Info_HTTPD : public SAPI_Info Line 95  class SAPI_Info_HTTPD : public SAPI_Info
 public:  public:
   
         HTTPD_Connection &connection;          HTTPD_Connection &connection;
         String output;          String::Body output;
         HashStringString env;          HashStringString env;
   
         SAPI_Info_HTTPD(HTTPD_Connection &aconnection) : connection(aconnection) {}          SAPI_Info_HTTPD(HTTPD_Connection &aconnection) : connection(aconnection) {}
   
         void populate_env() {          void populate_env() {
                 String::Body host("localhost");                  String::Body host("localhost");
                 for(Array_iterator<HTTP_Headers::Header> i(connection.headers()); i.has_next(); ){                  for(Array_iterator<HTTP_Headers::Header> i(connection.headers()); i; ){
                         HTTP_Headers::Header header=i.next();                          HTTP_Headers::Header header=i.next();
                         String name("HTTP_");                          String name("HTTP_");
                         name << replace_char(header.name.cstrm(), '-', '_');                          name << replace_char(header.name.cstrm(), '-', '_');
Line 118  public: Line 122  public:
                 env.put("QUERY_STRING", connection.query());                  env.put("QUERY_STRING", connection.query());
   
                 env.put("SERVER_NAME", host);                  env.put("SERVER_NAME", host);
                   env.put("SERVER_PORT", HTTPD_Server::port);
                 env.put("REMOTE_ADDR", connection.remote_addr);                  env.put("REMOTE_ADDR", connection.remote_addr);
   
         }          }
   
         virtual char* get_env(const char* name) {          virtual char* get_env(const char* name) {
                 String::Body value = env.get(name);                  String::Body request_value = env.get(name);
                 return !value ? NULL : value.cstrm();                  if(!request_value.is_empty())
                           return request_value.cstrm();
                   if(char *server_value=getenv(name))
                           return pa_strdup(server_value);
                   return NULL;
         }          }
   
         virtual bool set_env(const char* name, const char* value) {          virtual bool set_env(const char* name, const char* value) {
Line 157  public: Line 166  public:
                         output << capitalize(dont_store_key) << ": " << pa_strdup(dont_store_value) << "\r\n";                          output << capitalize(dont_store_key) << ": " << pa_strdup(dont_store_value) << "\r\n";
         }          }
   
           void clear_response_headers() {
                   http_response_code=200;
                   output.clear();
           }
   
         static const char *exception_http_status(const char *type) {          static const char *exception_http_status(const char *type) {
                 struct Lookup {                  struct Lookup {
                         const char *code;                          const char *code;
                         const char *type;                          const char *type;
                 } static lookup[] = {                  } static lookup[] = {
                           {  "",  "httpd.write"},
                         {"400", "httpd.request"},                          {"400", "httpd.request"},
                         {"400", "http.response"},                          {"400", "http.response"},
                         {"404", "file.missing"},                          {"404", "file.missing"},
                         {"408", "httpd.timeout"},                          {"408", "httpd.timeout"},
                           {"408", "httpd.read"},
                         {"501", "httpd.method"},                          {"501", "httpd.method"},
                         { NULL, ""}                          { NULL, ""}
                 };                  };
Line 182  public: Line 198  public:
                         const char *message;                          const char *message;
                 } static lookup[] = {                  } static lookup[] = {
                         {200, "OK"},                          {200, "OK"},
                           {204, "No Content"},
                         {206, "Partial Content"},                          {206, "Partial Content"},
                         {301, "Moved Permanently"},                          {301, "Moved Permanently"},
                         {302, "Found"},                          {302, "Found"},
Line 191  public: Line 208  public:
                         {403, "Forbidden"},                          {403, "Forbidden"},
                         {404, "Not Found"},                          {404, "Not Found"},
                         {408, "Request Timeout"},                          {408, "Request Timeout"},
                           {416, "Range Not Satisfiable"},
                         {500, "Internal Server Error"},                          {500, "Internal Server Error"},
                         {501, "Not Implemented"},                          {501, "Not Implemented"},
                         {502, "Bad Gateway"},                          {502, "Bad Gateway"},
Line 206  public: Line 224  public:
   
         virtual void send_header() {          virtual void send_header() {
                 String result("HTTP/1.0 ");                  String result("HTTP/1.0 ");
                 result << String::Body::Format(http_response_code) << " " << status_message(http_response_code) << "\r\n" << output << "\r\n";                  result << pa_uitoa(http_response_code) << " " << status_message(http_response_code) << "\r\n" << output << "\r\n";
                 send_body(result.cstr(), result.length());                  send_body(result.cstr(), result.length());
         }          }
   

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


E-mail: