/*
 *
 * @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:       RTSPProtocol.h

    Contains:   A grouping of static utilities that abstract keyword strings
                in the RTSP protocol. This should be maintained as new versions
                of the RTSP protoocl appear & as the server evolves to take
                advantage of new RTSP features.

    

*/


#ifndef __RTSPPROTOCOL_H__
#define __RTSPPROTOCOL_H__

#include "QTSSRTSPProtocol.h"
#include "StrPtrLen.h"

class RTSPProtocol
{
    public:

        //METHODS
        
        //  Method enumerated type definition in QTSS_RTSPProtocol.h
            
        //The lookup function. Very simple
        static UInt32   GetMethod(const StrPtrLen &inMethodStr);
        
        static StrPtrLen&   GetMethodString(QTSS_RTSPMethod inMethod)
            { return sMethods[inMethod]; }
        
        //HEADERS

        //  Header enumerated type definitions in QTSS_RTSPProtocol.h
        
        //The lookup function. Very simple
        static UInt32 GetRequestHeader(const StrPtrLen& inHeaderStr);
        
        //The lookup function. Very simple.
        static StrPtrLen& GetHeaderString(UInt32 inHeader)
            { return sHeaders[inHeader]; }
        
        
        //STATUS CODES

        //returns name of this error
        static StrPtrLen&       GetStatusCodeString(QTSS_RTSPStatusCode inStat)
            { return sStatusCodeStrings[inStat]; }
        //returns error number for this error
        static SInt32           GetStatusCode(QTSS_RTSPStatusCode inStat)
            { return sStatusCodes[inStat]; }
        //returns error number as a string
        static StrPtrLen&       GetStatusCodeAsString(QTSS_RTSPStatusCode inStat)
            { return sStatusCodeAsStrings[inStat]; }
        
        // VERSIONS
        enum RTSPVersion
        {
            k10Version = 0,
            kIllegalVersion = 1
        };
        
        // NAMES OF THINGS
        static StrPtrLen&       GetRetransmitProtocolName() { return sRetrProtName; }
        
        //accepts strings that look like "RTSP/1.0" etc...
        static RTSPVersion      GetVersion(StrPtrLen &versionStr);
        static StrPtrLen&       GetVersionString(RTSPVersion version)
            { return sVersionString[version]; }
        
    private:

        //for other lookups
        static StrPtrLen            sMethods[];
        static StrPtrLen            sHeaders[];
        static StrPtrLen            sStatusCodeStrings[];
        static StrPtrLen            sStatusCodeAsStrings[];
        static SInt32               sStatusCodes[];
        static StrPtrLen            sVersionString[];
        
        static StrPtrLen            sRetrProtName;

};
#endif // __RTSPPROTOCOL_H__
