/* * * @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__