/****************************************************************************
*
* Copyright (C) 2000-2001 RealNetworks, Inc. All rights reserved.
*
* This program is free software. It may be distributed under the terms
* in the file LICENSE, found in the top level of the source distribution.
*
*/
#ifndef _RTSPMSG_H
#define _RTSPMSG_H
#include "types.h"
#include "str.h"
#include "tlist.h"
// These must correspond with s_pVerbs indices
enum RtspVerb {
VERB_NONE,
VERB_ANNOUNCE,
VERB_DESCRIBE,
VERB_GETPARAM,
VERB_OPTIONS,
VERB_PAUSE,
VERB_PLAY,
VERB_RECORD,
VERB_REDIRECT,
VERB_SETUP,
VERB_SETPARAM,
VERB_TEARDOWN,
// extensions here
VERB_LAST
};
enum RtspMsgType {
RTSP_TYPE_NONE,
RTSP_TYPE_REQUEST,
RTSP_TYPE_RESPONSE,
RTSP_TYPE_LAST
};
class CRtspHdr
{
private:
CRtspHdr( void );
public:
CRtspHdr( const CString& strKey );
CRtspHdr( const CString& strKey, const CString& strVal );
const CString& GetKey( void ) const;
const CString& GetVal( void ) const;
void SetVal( const CString& strVal );
protected:
CString m_strKey;
CString m_strVal;
};
typedef TDoubleList<CRtspHdr*> CRtspHdrList;
class CRtspMsg
{
private:
bool operator==( const CRtspMsg& other ) const;
bool operator!=( const CRtspMsg& other ) const;
public:
CRtspMsg( void );
CRtspMsg( const CRtspMsg& other );
virtual ~CRtspMsg( void );
const CRtspMsg& operator=( const CRtspMsg& other );
operator CPBYTE( void ) const;
BYTE operator[]( UINT nPos ) const;
virtual RtspMsgType GetType( void ) const;
// Total header length for key/val pairs (incl. ": " and CRLF)
// but NOT separator CRLF
size_t GetHdrLen( void ) const;
size_t GetBufLen( void ) const;
BYTE GetAt( UINT nPos ) const;
void SetAt( UINT nPos, BYTE by );
void GetRtspVer( UINT* puMajor, UINT* puMinor ) const;
void SetRtspVer( UINT uMajor, UINT uMinor );
size_t GetHdrCount( void ) const;
CString GetHdr( const CString& strKey ) const;
CRtspHdr* GetHdr( UINT nIndex ) const;
void SetHdr( const CString& strKey, const CString& strVal );
void SetHdr( const CRtspHdr& hdrNew );
PBYTE GetBuf( void ) const;
void SetBuf( CPBYTE buf, size_t nLen );
protected:
UINT32 m_nRtspVer; // RTSP version (hiword.loword)
UINT32 m_nSeq;
CRtspHdrList m_listHdrs;
size_t m_nBufLen;
PBYTE m_pbuf;
};
typedef TDoubleList<CRtspMsg*> CRtspMsgList;
class CRtspRequestMsg : public CRtspMsg
{
public:
CRtspRequestMsg( void );
CRtspRequestMsg( const CRtspRequestMsg& other );
virtual ~CRtspRequestMsg( void );
const CRtspRequestMsg& operator=( const CRtspRequestMsg& other );
virtual RtspMsgType GetType( void ) const;
RtspVerb GetVerb( void ) const;
CPCHAR GetVerbStr( void ) const;
void SetVerb( RtspVerb verb );
void SetVerb( CPCHAR szVerb );
CPCHAR GetUrl( void ) const;
void SetUrl( const CString& strUrl );
protected:
RtspVerb m_verb;
CString m_strUrl;
};
typedef TDoubleList<CRtspRequestMsg*> CRtspRequestMsgList;
class CRtspResponseMsg : public CRtspMsg
{
public:
CRtspResponseMsg( void );
CRtspResponseMsg( const CRtspResponseMsg& other );
virtual ~CRtspResponseMsg( void );
const CRtspResponseMsg& operator=( const CRtspResponseMsg& other );
virtual RtspMsgType GetType( void ) const;
UINT GetStatusCode( void ) const;
const CString& GetStatusMsg( void ) const;
void SetStatus( UINT nCode, CPCHAR szMsg = NULL );
protected:
UINT m_nCode;
CString m_strStatusMsg;
};
typedef TDoubleList<CRtspResponseMsg*> CRtspResponseMsgList;
#endif //ndef _RTSPMSG_H
syntax highlighted by Code2HTML, v. 0.9.1