Very rough first start, not even everything added
This commit is contained in:
commit
af3619d4fa
88 changed files with 24251 additions and 0 deletions
137
HTTPUtilitiesLib/HTTPRequest.h
Normal file
137
HTTPUtilitiesLib/HTTPRequest.h
Normal file
|
@ -0,0 +1,137 @@
|
|||
/*
|
||||
*
|
||||
* @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 __HTTPREQUEST_H__
|
||||
#define __HTTPREQUEST_H__
|
||||
|
||||
#include "HTTPProtocol.h"
|
||||
#include "StrPtrLen.h"
|
||||
#include "StringParser.h"
|
||||
#include "ResizeableStringFormatter.h"
|
||||
#include "OSHeaders.h"
|
||||
#include "QTSS.h"
|
||||
|
||||
class HTTPRequest
|
||||
{
|
||||
public:
|
||||
// Constructor
|
||||
HTTPRequest(StrPtrLen* serverHeader, StrPtrLen* requestPtr);
|
||||
|
||||
// This cosntructor is used when the request has been parsed and thrown away
|
||||
// and the response has to be created
|
||||
HTTPRequest(StrPtrLen* serverHeader);
|
||||
|
||||
// Destructor
|
||||
virtual ~HTTPRequest();
|
||||
|
||||
// Should be called before accessing anything in the request header
|
||||
// Calls ParseRequestLine and ParseHeaders
|
||||
QTSS_Error Parse();
|
||||
|
||||
// Basic access methods for the HTTP method, the absolute request URI,
|
||||
// the host name from URI, the relative request URI, the request file path,
|
||||
// the HTTP version, the Status code, the keep-alive tag.
|
||||
HTTPMethod GetMethod(){ return fMethod; }
|
||||
StrPtrLen* GetRequestLine(){ return &fRequestLine; }
|
||||
StrPtrLen* GetRequestAbsoluteURI(){ return &fAbsoluteURI; }
|
||||
StrPtrLen* GetSchemefromAbsoluteURI(){ return &fAbsoluteURIScheme; }
|
||||
StrPtrLen* GetHostfromAbsoluteURI(){ return &fHostHeader; }
|
||||
StrPtrLen* GetRequestRelativeURI(){ return &fRelativeURI; }
|
||||
char* GetRequestPath(){ return fRequestPath; }
|
||||
HTTPVersion GetVersion(){ return fVersion; }
|
||||
HTTPStatusCode GetStatusCode(){ return fStatusCode; }
|
||||
Bool16 IsRequestKeepAlive(){ return fRequestKeepAlive; }
|
||||
|
||||
// If header field exists in the request, it will be found in the dictionary
|
||||
// and the value returned. Otherwise, NULL is returned.
|
||||
StrPtrLen* GetHeaderValue(HTTPHeader inHeader);
|
||||
|
||||
// Creates a header with the corresponding version and status code
|
||||
void CreateResponseHeader(HTTPVersion version, HTTPStatusCode statusCode);
|
||||
|
||||
// To append response header fields as appropriate
|
||||
void AppendResponseHeader(HTTPHeader inHeader, StrPtrLen* inValue);
|
||||
void AppendDateAndExpiresFields();
|
||||
void AppendDateField();
|
||||
void AppendConnectionCloseHeader();
|
||||
void AppendConnectionKeepAliveHeader();
|
||||
void AppendContentLengthHeader(UInt64 length_64bit);
|
||||
void AppendContentLengthHeader(UInt32 length_32bit);
|
||||
|
||||
// Returns the completed response header by appending CRLF to the end of the header
|
||||
// fields buffer
|
||||
StrPtrLen* GetCompleteResponseHeader();
|
||||
|
||||
// Parse if-modified-since header
|
||||
time_t ParseIfModSinceHeader();
|
||||
|
||||
private:
|
||||
enum { kMinHeaderSizeInBytes = 512 };
|
||||
|
||||
// Gets the method, version and calls ParseURI
|
||||
QTSS_Error ParseRequestLine(StringParser* parser);
|
||||
// Parses the URI to get absolute and relative URIs, the host name and the file path
|
||||
QTSS_Error ParseURI(StringParser* parser);
|
||||
// Parses the headers and adds them into a dictionary
|
||||
// Also calls SetKeepAlive with the Connection header field's value if it exists
|
||||
QTSS_Error ParseHeaders(StringParser* parser);
|
||||
|
||||
// Sets fRequestKeepAlive
|
||||
void SetKeepAlive(StrPtrLen* keepAliveValue);
|
||||
// Used in initialize and CreateResponseHeader
|
||||
void PutStatusLine(StringFormatter* putStream, HTTPStatusCode status, HTTPVersion version);
|
||||
//For writing into the premade headers
|
||||
StrPtrLen* GetServerHeader(){ return &fSvrHeader; }
|
||||
|
||||
// Complete request and response headers
|
||||
StrPtrLen fRequestHeader;
|
||||
ResizeableStringFormatter* fResponseFormatter;
|
||||
StrPtrLen* fResponseHeader;
|
||||
|
||||
// Private members
|
||||
HTTPMethod fMethod;
|
||||
HTTPVersion fVersion;
|
||||
|
||||
StrPtrLen fRequestLine;
|
||||
|
||||
// For the URI (fAbsoluteURI and fRelativeURI are the same if the URI is of the form "/path")
|
||||
StrPtrLen fAbsoluteURI; // If it is of the form "http://foo.bar.com/path"
|
||||
StrPtrLen fRelativeURI; // If it is of the form "/path"
|
||||
|
||||
// If it is an absolute URI, these fields will be filled in
|
||||
// "http://foo.bar.com/path" => fAbsoluteURIScheme = "http", fHostHeader = "foo.bar.com",
|
||||
// fRequestPath = "path"
|
||||
StrPtrLen fAbsoluteURIScheme;
|
||||
StrPtrLen fHostHeader; // If the full url is given in the request line
|
||||
char* fRequestPath; // Also contains the query string
|
||||
|
||||
HTTPStatusCode fStatusCode;
|
||||
Bool16 fRequestKeepAlive; // Keep-alive information in the client request
|
||||
StrPtrLen fFieldValues[httpNumHeaders]; // Array of header field values parsed from the request
|
||||
StrPtrLen fSvrHeader; // Server header set up at initialization
|
||||
static StrPtrLen sColonSpace;
|
||||
static UInt8 sURLStopConditions[];
|
||||
};
|
||||
|
||||
#endif // __HTTPREQUEST_H__
|
Loading…
Add table
Add a link
Reference in a new issue