// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package http

// HTTP status codes, defined in RFC 2616.
const (
	StatusContinue = 100;
	StatusSwitchingProtocols = 101;

	StatusOK = 200;
	StatusCreated = 201;
	StatusAccepted = 202;
	StatusNonAuthoritativeInfo = 203;
	StatusNoContent = 204;
	StatusResetContent = 205;
	StatusPartialContent = 206;

	StatusMultipleChoices = 300;
	StatusMovedPermanently = 301;
	StatusFound = 302;
	StatusSeeOther = 303;
	StatusNotModified = 304;
	StatusUseProxy = 305;
	StatusTemporaryRedirect = 307;

	StatusBadRequest = 400;
	StatusUnauthorized = 401;
	StatusPaymentRequired = 402;
	StatusForbidden = 403;
	StatusNotFound = 404;
	StatusMethodNotAllowed = 405;
	StatusNotAcceptable = 406;
	StatusProxyAuthRequired = 407;
	StatusRequestTimeout = 408;
	StatusConflict = 409;
	StatusGone = 410;
	StatusLengthRequired = 411;
	StatusPreconditionFailed = 412;
	StatusRequestEntityTooLarge = 413;
	StatusRequestURITooLong = 414;
	StatusUnsupportedMediaType = 415;
	StatusRequestedRangeNotSatisfiable = 416;
	StatusExpectationFailed = 417;

	StatusInternalServerError = 500;
	StatusNotImplemented = 501;
	StatusBadGateway = 502;
	StatusServiceUnavailable = 503;
	StatusGatewayTimeout = 504;
	StatusHTTPVersionNotSupported = 505;
)

var statusText = map[int]string {
	StatusContinue:			"Continue",
	StatusSwitchingProtocols:	"Switching Protocols",

	StatusOK:			"OK",
	StatusCreated:			"Created",
	StatusAccepted:			"Accepted",
	StatusNonAuthoritativeInfo:	"Non-Authoritative Information",
	StatusNoContent:		"No Content",
	StatusResetContent:		"Reset Content",
	StatusPartialContent:		"Partial Content",

	StatusMultipleChoices:		"Multiple Choices",
	StatusMovedPermanently:		"Moved Permanently",
	StatusFound:			"Found",
	StatusSeeOther:			"See Other",
	StatusNotModified:		"Not Modified",
	StatusUseProxy:			"Use Proxy",
	StatusTemporaryRedirect:	"Temporary Redirect",

	StatusBadRequest:		"Bad Request",
	StatusUnauthorized:		"Unauthorized",
	StatusPaymentRequired:		"Payment Required",
	StatusForbidden:		"Forbidden",
	StatusNotFound:			"Not Found",
	StatusMethodNotAllowed:		"Method Not Allowed",
	StatusNotAcceptable:		"Not Acceptable",
	StatusProxyAuthRequired:	"Proxy Authentication Required",
	StatusRequestTimeout:		"Request Timeout",
	StatusConflict:			"Conflict",
	StatusGone:			"Gone",
	StatusLengthRequired:		"Length Required",
	StatusPreconditionFailed:	"Precondition Failed",
	StatusRequestEntityTooLarge:	"Request Entity Too Large",
	StatusRequestURITooLong:	"Request URI Too Long",
	StatusUnsupportedMediaType:	"Unsupported Media Type",
	StatusRequestedRangeNotSatisfiable:	"Requested Range Not Satisfiable",
	StatusExpectationFailed:	"Expectation Failed",

	StatusInternalServerError:	"Internal Server Error",
	StatusNotImplemented:		"Not Implemented",
	StatusBadGateway:		"Bad Gateway",
	StatusServiceUnavailable:	"Service Unavailable",
	StatusGatewayTimeout:		"Gateway Timeout",
	StatusHTTPVersionNotSupported:	"HTTP Version Not Supported",
}

