Darwin-Streaming-Server/HTTPUtilitiesLib/HTTPProtocol.h

204 lines
7.5 KiB
C++

/*
*
* @APPLE_LICENSE_HEADER_START@
*
* Copyright (c) 1999-2008 Apple Inc. All Rights Reserved.
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*
*/
#ifndef __HTTPPROTOCOL_H__
#define __HTTPPROTOCOL_H__
#include "OSHeaders.h"
#include "StrPtrLen.h"
// Versions
enum
{
http09version = 0,
http10Version = 1,
http11Version = 2,
httpNumVersions = 3,
httpIllegalVersion = 3
};
typedef UInt32 HTTPVersion;
// Methods
enum
{
httpGetMethod = 0,
httpHeadMethod = 1,
httpPostMethod = 2,
httpOptionsMethod = 3,
httpPutMethod = 4,
httpDeleteMethod = 5,
httpTraceMethod = 6,
httpConnectMethod = 7,
httpNumMethods = 8,
httpIllegalMethod = 8
};
typedef UInt32 HTTPMethod;
// Headers
enum
{
// VIP headers
httpConnectionHeader = 0, // general header
httpDateHeader = 1, // general header
httpAuthorizationHeader = 2, // request header
httpIfModifiedSinceHeader = 3, // request header
httpServerHeader = 4, // response header
httpWWWAuthenticateHeader = 5, // response header
httpExpiresHeader = 6, // entity header
httpLastModifiedHeader = 7, // entity header
httpNumVIPHeaders = 8,
//Other general http headers
httpCacheControlHeader = 8,
httpPragmaHeader = 9,
httpTrailerHeader = 10,
httpTransferEncodingHeader = 11,
httpUpgradeHeader = 12,
httpViaHeader = 13,
httpWarningHeader = 14,
// Other request headers
httpAcceptHeader = 15,
httpAcceptCharsetHeader = 16,
httpAcceptEncodingHeader = 17,
httpAcceptLanguageHeader = 18,
httpExpectHeader = 19,
httpFromHeader = 20,
httpHostHeader = 21,
httpIfMatchHeader = 22,
httpIfNoneMatchHeader = 23,
httpIfRangeHeader = 24,
httpIfUnmodifiedSinceHeader = 25,
httpMaxForwardsHeader = 26,
httpProxyAuthorizationHeader = 27,
httpRangeHeader = 28,
httpRefererHeader = 29,
httpTEHeader = 30,
httpUserAgentHeader = 31,
// Other response headers
httpAcceptRangesHeader = 32,
httpAgeHeader = 33,
httpETagHeader = 34,
httpLocationHeader = 35,
httpProxyAuthenticateHeader = 36,
httpRetryAfterHeader = 37,
httpVaryHeader = 38,
// Other entity headers
httpAllowHeader = 39,
httpContentEncodingHeader = 40,
httpContentLanguageHeader = 41,
httpContentLengthHeader = 42,
httpContentLocationHeader = 43,
httpContentMD5Header = 44,
httpContentRangeHeader = 45,
httpContentTypeHeader = 46,
// QTSS Specific headers
// Add headers that are not part of the HTTP spec here
// Make sure and up the number of headers and httpIllegalHeader number
httpSessionCookieHeader = 47, // Used for HTTP tunnelling
httpServerIPAddressHeader = 48,
httpNumHeaders = 49,
httpIllegalHeader = 49
};
typedef UInt32 HTTPHeader;
// Status codes
enum
{
httpContinue = 0, //100
httpSwitchingProtocols = 1, //101
httpOK = 2, //200
httpCreated = 3, //201
httpAccepted = 4, //202
httpNonAuthoritativeInformation = 5, //203
httpNoContent = 6, //204
httpResetContent = 7, //205
httpPartialContent = 8, //206
httpMultipleChoices = 9, //300
httpMovedPermanently = 10, //301
httpFound = 11, //302
httpSeeOther = 12, //303
httpNotModified = 13, //304
httpUseProxy = 14, //305
httpTemporaryRedirect = 15, //307
httpBadRequest = 16, //400
httpUnAuthorized = 17, //401
httpPaymentRequired = 18, //402
httpForbidden = 19, //403
httpNotFound = 20, //404
httpMethodNotAllowed = 21, //405
httpNotAcceptable = 22, //406
httpProxyAuthenticationRequired = 23, //407
httpRequestTimeout = 24, //408
httpConflict = 25, //409
httpGone = 26, //410
httpLengthRequired = 27, //411
httpPreconditionFailed = 28, //412
httpRequestEntityTooLarge = 29, //413
httpRequestURITooLarge = 30, //414
httpUnsupportedMediaType = 31, //415
httpRequestRangeNotSatisfiable = 32, //416
httpExpectationFailed = 33, //417
httpInternalServerError = 34, //500
httpNotImplemented = 35, //501
httpBadGateway = 36, //502
httpServiceUnavailable = 37, //503
httpGatewayTimeout = 38, //504
httpHTTPVersionNotSupported = 39, //505
httpNumStatusCodes = 40
};
typedef UInt32 HTTPStatusCode;
class HTTPProtocol
{
public:
// Methods
static HTTPMethod GetMethod(const StrPtrLen* inMethodStr);
static StrPtrLen* GetMethodString(HTTPMethod inMethod) { return &sMethods[inMethod]; }
// Headers
static HTTPHeader GetHeader(const StrPtrLen* inHeaderStr);
static StrPtrLen* GetHeaderString(HTTPHeader inHeader) { return &sHeaders[inHeader]; }
// Status codes
static StrPtrLen* GetStatusCodeString(HTTPStatusCode inStat) { return &sStatusCodeStrings[inStat]; }
static SInt32 GetStatusCode(HTTPStatusCode inStat) { return sStatusCodes[inStat]; }
static StrPtrLen* GetStatusCodeAsString(HTTPStatusCode inStat) { return &sStatusCodeAsStrings[inStat]; }
// Versions
static HTTPVersion GetVersion(StrPtrLen* versionStr);
static StrPtrLen* GetVersionString(HTTPVersion version) { return &sVersionStrings[version]; }
private:
static StrPtrLen sMethods[];
static StrPtrLen sHeaders[];
static StrPtrLen sStatusCodeStrings[];
static StrPtrLen sStatusCodeAsStrings[];
static SInt32 sStatusCodes[];
static StrPtrLen sVersionStrings[];
};
#endif // __HTTPPROTOCOL_H__