C++程序  |  161行  |  3.5 KB

/*
     This file is part of libmicrohttpd
     Copyright (C) 2007, 2011 Christian Grothoff

     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
     License as published by the Free Software Foundation; either
     version 2.1 of the License, or (at your option) any later version.

     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.  See the GNU
     Lesser General Public License for more details.

     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

*/

/**
 * @file reason_phrase.c
 * @brief  Tables of the string response phrases
 * @author Elliot Glaysher
 * @author Christian Grothoff (minor code clean up)
 */
#include "platform.h"
#include "reason_phrase.h"

#ifndef NULL
#define NULL (void*)0
#endif

static const char *invalid_hundred[] = { NULL };

static const char *const one_hundred[] = {
  "Continue",
  "Switching Protocols",
  "Processing"
};

static const char *const two_hundred[] = {
  "OK",
  "Created",
  "Accepted",
  "Non-Authoritative Information",
  "No Content",
  "Reset Content",
  "Partial Content",
  "Multi Status"
};

static const char *const three_hundred[] = {
  "Multiple Choices",
  "Moved Permanently",
  "Moved Temporarily",
  "See Other",
  "Not Modified",
  "Use Proxy",
  "Switch Proxy",
  "Temporary Redirect"
};

static const char *const four_hundred[] = {
  "Bad Request",
  "Unauthorized",
  "Payment Required",
  "Forbidden",
  "Not Found",
  "Method Not Allowed",
  "Not Acceptable",
  "Proxy Authentication Required",
  "Request Time-out",
  "Conflict",
  "Gone",
  "Length Required",
  "Precondition Failed",
  "Request Entity Too Large",
  "Request-URI Too Large",
  "Unsupported Media Type",
  "Requested Range Not Satisfiable",
  "Expectation Failed",
  "Unknown",
  "Unknown",
  "Unknown", /* 420 */
  "Unknown",
  "Unprocessable Entity",
  "Locked",
  "Failed Dependency",
  "Unordered Collection",
  "Upgrade Required",
  "Unknown",
  "Unknown",
  "Unknown",
  "Unknown", /* 430 */
  "Unknown",
  "Unknown",
  "Unknown",
  "Unknown",
  "Unknown", /* 435 */
  "Unknown",
  "Unknown",
  "Unknown",
  "Unknown",
  "Unknown", /* 440 */
  "Unknown",
  "Unknown",
  "Unknown",
  "No Response",
  "Unknown", /* 445 */
  "Unknown",
  "Unknown",
  "Unknown",
  "Retry With",
  "Blocked by Windows Parental Controls", /* 450 */
  "Unavailable For Legal Reasons"
};

static const char *const five_hundred[] = {
  "Internal Server Error",
  "Not Implemented",
  "Bad Gateway",
  "Service Unavailable",
  "Gateway Time-out",
  "HTTP Version not supported",
  "Variant Also Negotiates",
  "Insufficient Storage",
  "Unknown",
  "Bandwidth Limit Exceeded",
  "Not Extended"
};


struct MHD_Reason_Block
{
  unsigned int max;
  const char *const*data;
};

#define BLOCK(m) { (sizeof(m) / sizeof(char*)), m }

static const struct MHD_Reason_Block reasons[] = {
  BLOCK (invalid_hundred),
  BLOCK (one_hundred),
  BLOCK (two_hundred),
  BLOCK (three_hundred),
  BLOCK (four_hundred),
  BLOCK (five_hundred),
};


const char *
MHD_get_reason_phrase_for (unsigned int code)
{
  if ( (code >= 100) &&
       (code < 600) &&
       (reasons[code / 100].max > (code % 100)) )
    return reasons[code / 100].data[code % 100];
  return "Unknown";
}