Darwin-Streaming-Server/Server.tproj/RTSPRequest.h
Darren VanBuren 849723c9cf Add even more of the source
This should be about everything needed to build so far?
2017-03-07 17:14:16 -08:00

128 lines
4.9 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@
*
*/
/*
File: RTSPRequest.h
Contains: This class encapsulates a single RTSP request. It stores the meta data
associated with a request, and provides an interface (through its base
class) for modules to access request information
It divides the request into a series of states.
State 1: At first, when the object is constructed or right after
its Reset function is called, it is in an uninitialized state.
State 2: Parse() parses an RTSP header. Once this function returns,
most of the request-related query functions have been setup.
(unless an error occurs)
State 3: GetHandler() uses the request information to create the
proper request Handler object for this request. After that,
it is the Handler object's responsibilty to process the
request and send a response to the client.
*/
#ifndef __RTSPREQUEST_H__
#define __RTSPREQUEST_H__
#include "RTSPRequestInterface.h"
#include "RTSPRequestStream.h"
#include "RTSPResponseStream.h"
#include "RTSPSessionInterface.h"
#include "StringParser.h"
#include "QTSSRTSPProtocol.h"
//HTTPRequest class definition
class RTSPRequest : public RTSPRequestInterface
{
public:
//CONSTRUCTOR / DESTRUCTOR
//these do very little. Just initialize / delete some member data.
//
//Arguments: session: the session this request is on (massive cyclical dependency)
RTSPRequest(RTSPSessionInterface* session)
: RTSPRequestInterface(session) {}
virtual ~RTSPRequest() {}
//Parses the request. Returns an error handler if there was an error encountered
//in parsing.
QTSS_Error Parse();
QTSS_Error ParseAuthHeader(void);
// called by ParseAuthHeader
QTSS_Error ParseBasicHeader(StringParser *inParsedAuthLinePtr);
// called by ParseAuthHeader
QTSS_Error ParseDigestHeader(StringParser *inParsedAuthLinePtr);
void SetupAuthLocalPath(void);
QTSS_Error SendBasicChallenge(void);
QTSS_Error SendDigestChallenge(UInt32 qop, StrPtrLen *nonce, StrPtrLen* opaque);
QTSS_Error SendForbiddenResponse(void);
private:
//PARSING
enum { kRealmBuffSize = 512, kAuthNameAndPasswordBuffSize = 128, kAuthChallengeHeaderBufSize = 512};
//Parsing the URI line (first line of request
QTSS_Error ParseFirstLine(StringParser &parser);
//Utility functions called by above
QTSS_Error ParseURI(StringParser &parser);
//Parsing the rest of the headers
//This assumes that the parser is at the beginning of the headers. It will parse
//the headers, fill out the data & HTTPParameters object.
//
//Returns: A handler object signifying that a fatal syntax error has occurred
QTSS_Error ParseHeaders(StringParser& parser);
//Functions to parse the contents of particuarly complicated headers (as a convienence
//for modules)
void ParseRangeHeader();
void ParseTransportHeader();
void ParseIfModSinceHeader();
void ParseAddrSubHeader(StrPtrLen* inSubHeader, StrPtrLen* inHeaderName, UInt32* outAddr);
void ParseRetransmitHeader();
void ParseContentLengthHeader();
void ParseSpeedHeader();
void ParsePrebufferHeader();
void ParseTransportOptionsHeader();
void ParseSessionHeader();
void ParseClientPortSubHeader(StrPtrLen* inClientPortSubHeader);
void ParseTimeToLiveSubHeader(StrPtrLen* inTimeToLiveSubHeader);
void ParseModeSubHeader(StrPtrLen* inModeSubHeader);
Bool16 ParseNetworkModeSubHeader(StrPtrLen* inSubHeader);
void ParseDynamicRateHeader();
void ParseRandomDataSizeHeader();
void ParseBandwidthHeader();
static UInt8 sURLStopConditions[];
};
#endif // __RTSPREQUEST_H__