/*!
 * Copyright (c) 2015-2018, NADAL Jean-Baptiste. All rights reserved.
 *
 * 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
 *
 * @Author:  NADAL Jean-Baptiste
 * @Date: 22/06/2017
 */

/*------------------------------- INCLUDES ----------------------------------*/

#include "http-reason.h"

/*!  ----------------------------------------------------------------------------
 *  @fn HttpReason
 *
 *  @brief constructor of the http reason.
 */
HttpReason::HttpReason(void)
{
}

/*!  ----------------------------------------------------------------------------
 *  @fn get
 *
 *  @brief return as string the reazson from the http code.
 */
std::string HttpReason::get(uint16_t a_code)
{
	switch (a_code)
	{
	// --- 100
	case 100:
		return "Continue";
	case 101:
		return "Switching Protocols";
	case 102:
		return "Processing";
	// --- 200
	case 200:
		return "OK";
	case 201:
		return "Created";
	case 202:
		return "Accepted";
	case 203:
		return "Non-Authoritative Information";
	case 204:
		return "No Content";
	case 205:
		return "Reset Content";
	case 206:
		return "Partial Content";
	case 207:
		return "Multi-Status";
	// --- 300
	case 300:
		return "Multiple Choices";
	case 301:
		return "Moved Permanently";
	case 302:
		return "Moved Temporarily";
	case 303:
		return "See Other";
	case 304:
		return "Not Modified";
	case 305:
		return "Use Proxy";
	case 307:
		return "Temporary Redirect";
	case 308:
		return "Permanent Redirect";
	case 310:
		return "Too many Redirects";
	// --- 400
	case 400:
		return "Bad Request";
	case 401:
		return "Unauthorized";
	case 402:
		return "Payment Required";
	case 403:
		return "Forbidden";
	case 404:
		return "Not Found";
	case 405:
		return "Method Not Allowed";
	case 406:
		return "Not Acceptable";
	case 407:
		return "Proxy Authentication Required";
	case 408:
		return "Request Time-out";
	case 409:
		return "Conflict";
	case 410:
		return "Gone";
	case 411:
		return "Length Required";
	case 412:
		return "Precondition Failed";
	case 413:
		return "Request Entity Too Large";
	case 414:
		return "Request-URI Too Long";
	case 415:
		return "Unsupported Media Type";
	case 416:
		return "Requested range unsatisfiable";
	case 417:
		return "Expectation failed";
	case 418:
		return "I’m a teapot";
	case 421:
		return "Bad mapping / Misdirected Request";
	case 422:
		return "Unprocessable entity";
	case 423:
		return "Locked";
	case 424:
		return "Method failure";
	case 425:
		return "Unordered Collection";
	case 426:
		return "Upgrade Required";
	case 449:
		return "Retry With";
	case 450:
		return "Blocked by Windows Parental Controls";
	case 451:
		return "Unavailable For Legal Reasons";
	case 456:
		return "Unrecoverable Error";
	// --- 500
	case 500:
		return "Internal Server Error";
	case 501:
		return "Not Implemented";
	case 502:
		return "Bad Gateway";
	case 503:
		return "Service Unavailable";
	case 504:
		return "Gateway Time-out";
	case 505:
		return "HTTP Version not supported";
	case 506:
		return "Variant Also Negotiates";
	case 507:
		return "Insufficient storage";
	case 509:
		return "Bandwidth Limit Exceeded";
	case 510:
		return "Not extended";
	case 511:
		return "Network authentication required";
	}
	return "Unknown";
}
