Home | History | Annotate | Download | only in microhttpd
      1 /*
      2      This file is part of libmicrohttpd
      3      Copyright (C) 2007, 2011 Christian Grothoff
      4 
      5      This library is free software; you can redistribute it and/or
      6      modify it under the terms of the GNU Lesser General Public
      7      License as published by the Free Software Foundation; either
      8      version 2.1 of the License, or (at your option) any later version.
      9 
     10      This library is distributed in the hope that it will be useful,
     11      but WITHOUT ANY WARRANTY; without even the implied warranty of
     12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13      Lesser General Public License for more details.
     14 
     15      You should have received a copy of the GNU Lesser General Public
     16      License along with this library; if not, write to the Free Software
     17      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
     18 
     19 */
     20 
     21 /**
     22  * @file reason_phrase.c
     23  * @brief  Tables of the string response phrases
     24  * @author Elliot Glaysher
     25  * @author Christian Grothoff (minor code clean up)
     26  */
     27 #include "platform.h"
     28 #include "reason_phrase.h"
     29 
     30 #ifndef NULL
     31 #define NULL (void*)0
     32 #endif
     33 
     34 static const char *invalid_hundred[] = { NULL };
     35 
     36 static const char *const one_hundred[] = {
     37   "Continue",
     38   "Switching Protocols",
     39   "Processing"
     40 };
     41 
     42 static const char *const two_hundred[] = {
     43   "OK",
     44   "Created",
     45   "Accepted",
     46   "Non-Authoritative Information",
     47   "No Content",
     48   "Reset Content",
     49   "Partial Content",
     50   "Multi Status"
     51 };
     52 
     53 static const char *const three_hundred[] = {
     54   "Multiple Choices",
     55   "Moved Permanently",
     56   "Moved Temporarily",
     57   "See Other",
     58   "Not Modified",
     59   "Use Proxy",
     60   "Switch Proxy",
     61   "Temporary Redirect"
     62 };
     63 
     64 static const char *const four_hundred[] = {
     65   "Bad Request",
     66   "Unauthorized",
     67   "Payment Required",
     68   "Forbidden",
     69   "Not Found",
     70   "Method Not Allowed",
     71   "Not Acceptable",
     72   "Proxy Authentication Required",
     73   "Request Time-out",
     74   "Conflict",
     75   "Gone",
     76   "Length Required",
     77   "Precondition Failed",
     78   "Request Entity Too Large",
     79   "Request-URI Too Large",
     80   "Unsupported Media Type",
     81   "Requested Range Not Satisfiable",
     82   "Expectation Failed",
     83   "Unknown",
     84   "Unknown",
     85   "Unknown", /* 420 */
     86   "Unknown",
     87   "Unprocessable Entity",
     88   "Locked",
     89   "Failed Dependency",
     90   "Unordered Collection",
     91   "Upgrade Required",
     92   "Unknown",
     93   "Unknown",
     94   "Unknown",
     95   "Unknown", /* 430 */
     96   "Unknown",
     97   "Unknown",
     98   "Unknown",
     99   "Unknown",
    100   "Unknown", /* 435 */
    101   "Unknown",
    102   "Unknown",
    103   "Unknown",
    104   "Unknown",
    105   "Unknown", /* 440 */
    106   "Unknown",
    107   "Unknown",
    108   "Unknown",
    109   "No Response",
    110   "Unknown", /* 445 */
    111   "Unknown",
    112   "Unknown",
    113   "Unknown",
    114   "Retry With",
    115   "Blocked by Windows Parental Controls", /* 450 */
    116   "Unavailable For Legal Reasons"
    117 };
    118 
    119 static const char *const five_hundred[] = {
    120   "Internal Server Error",
    121   "Not Implemented",
    122   "Bad Gateway",
    123   "Service Unavailable",
    124   "Gateway Time-out",
    125   "HTTP Version not supported",
    126   "Variant Also Negotiates",
    127   "Insufficient Storage",
    128   "Unknown",
    129   "Bandwidth Limit Exceeded",
    130   "Not Extended"
    131 };
    132 
    133 
    134 struct MHD_Reason_Block
    135 {
    136   unsigned int max;
    137   const char *const*data;
    138 };
    139 
    140 #define BLOCK(m) { (sizeof(m) / sizeof(char*)), m }
    141 
    142 static const struct MHD_Reason_Block reasons[] = {
    143   BLOCK (invalid_hundred),
    144   BLOCK (one_hundred),
    145   BLOCK (two_hundred),
    146   BLOCK (three_hundred),
    147   BLOCK (four_hundred),
    148   BLOCK (five_hundred),
    149 };
    150 
    151 
    152 const char *
    153 MHD_get_reason_phrase_for (unsigned int code)
    154 {
    155   if ( (code >= 100) &&
    156        (code < 600) &&
    157        (reasons[code / 100].max > (code % 100)) )
    158     return reasons[code / 100].data[code % 100];
    159   return "Unknown";
    160 }
    161