/****************************************************************************
 *
 *  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.
 *
 */

#include "str.h"

#define RTSP_TRANSPORTHDR_OTHER        0x00 
#define RTSP_TRANSPORTHDR_CLIENTPORT   0x01 
#define RTSP_TRANSPORTHDR_SERVERPORT   0x02 
#define RTSP_TRANSPORTHDR_SOURCE       0x04
#define RTSP_TRANSPORTHDR_INTERLEAVED  0x08 


class CRtspTransportHdrField
{
public:

    int type;
    CString strField;
};

typedef TDoubleList<CRtspTransportHdrField> CRtspTransportHdrFieldList;

class CSingleTransportHdr
{
private:
    CSingleTransportHdr( void );

public:
    CSingleTransportHdr( const CString& strValue );

    void    GetServerBasePort( UINT16* pBasePort, int* nPorts );
    void    GetClientBasePort( UINT16* pBasePort, int* nPorts );
    void    SetServerBasePort( UINT16 basePort );
    void    SetClientBasePort( UINT16 basePort );

    void    SetSourceAddr( const CInetAddr& addrSource );

    bool    IsInterleaved( void );
    CPCHAR  GetHdrString( void );

protected:
    CString     m_strHdr;
    int         m_nServerPorts;
    int         m_nClientPorts;
    UINT16      m_serverBasePort;
    UINT16      m_clientBasePort;
    CInetAddr   m_addrSource;
    bool        m_bInterleaved;

    CRtspTransportHdrFieldList m_listFields;

    void Parse( const CString& strValue );
};

typedef TDoubleList<CSingleTransportHdr*> CTransportHdrList;

class CRequestTransportHdr
{
private:
    CRequestTransportHdr( void );

public:
    CRequestTransportHdr( const CString& strValue );
    ~CRequestTransportHdr( void );

    void GetBasePort( UINT16* pBasePort, int* nPorts );
    void SetPort( UINT16 basePort );

    bool IsInterleaved( void );
    CPCHAR GetHdrString( void );

protected:
    CString m_strHdr;
    CTransportHdrList m_listTransports;

    // if one or more of the transports is not interleaved, this value is set to
    // false, since we need to create udp sockets.
    bool m_bIsInterleaved;

    void Parse( void );
};


syntax highlighted by Code2HTML, v. 0.9.1