/****************************************************************************
 * 
 *
 *  Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
 *  
 *  http://www.real.com/devzone
 *
 *  This program contains proprietary 
 *  information of Progressive Networks, Inc, and is licensed
 *  subject to restrictions on use and distribution.
 *
 *
 *  RealMedia Architecture AutoConfiguration interfaces
 *
 */

#ifndef _RMAACONF_H_
#define _RMAACONF_H_

/*
 * Forward declarations of some interfaces defined here-in.
 */
typedef _INTERFACE	IRMAAutoConfig			IRMAAutoConfig;
typedef _INTERFACE  	IRMAAutoConfigResponse		IRMAAutoConfigResponse;

#define RMA_TRANSPORT_MULTICAST     0
#define RMA_TRANSPORT_UDP	    1
#define RMA_TRANSPORT_TCP	    2
#define RMA_TRANSPORT_HTTP	    3

/****************************************************************************
 * 
 *  Interface:
 *
 *	IRMAAutoConfig
 *
 *  Purpose:
 *	This interface allows the auto-configuration of the protocol used by
 *	the client core.
 *
 *  IID_IRMAAutoConfig:
 *
 *	{00002700-0901-11d1-8B06-00A024406D59}
 *
 */
DEFINE_GUID(IID_IRMAAutoConfig, 0x00002700, 0x901, 0x11d1, 0x8b, 0x6, 
				0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);

#undef  INTERFACE
#define INTERFACE   IRMAAutoConfig

DECLARE_INTERFACE_(IRMAAutoConfig, IUnknown)
{
    /*
     *	IUnknown methods
     */
    STDMETHOD(QueryInterface)	(THIS_
				REFIID riid,
				void** ppvObj) PURE;

    STDMETHOD_(ULONG32,AddRef)	(THIS) PURE;

    STDMETHOD_(ULONG32,Release)	(THIS) PURE;

    /*
     *	IRMAAutoConfig methods
     */
    /************************************************************************
     *	Method:
     *	    IRMAAutoConfig::Init
     *	Purpose:
     *      Shutdown the configuration process.
     *
     */
    STDMETHOD(Init)			(THIS_
					IRMAAutoConfigResponse* pResponse,
					const char* pPNAURL,
					const char* pRTSPURL) PURE;

    /************************************************************************
     *	Method:
     *	    IRMAAutoConfig::Close
     *	Purpose:
     *      Shutdown the configuration process.
     *
     */
    STDMETHOD(Close)			(THIS) PURE;

    /************************************************************************
     *	Method:
     *	    IRMAAutoConfig::Abort
     *	Purpose:
     *      Abort the configuration process.
     *
     */
    STDMETHOD(Abort)			(THIS) PURE;

    /************************************************************************
     *	Method:
     *	    IRMAAutoConfig::DoAutoConfig
     *	Purpose:
     *      Start the auto-configuration Process.
     *
     */
    STDMETHOD(DoAutoConfig)		(THIS) PURE;
};


/****************************************************************************
 * 
 *  Interface:
 *
 *	IRMAAutoConfigResponse
 *
 *  Purpose:
 *	Response interface for IRMAAutoConfig.
 *
 *  IID_IRMAAutoConfig:
 *
 *	{00002701-0901-11d1-8B06-00A024406D59}
 * 
 */
DEFINE_GUID(IID_IRMAAutoConfigResponse, 0x00002701, 0x901, 0x11d1, 0x8b, 
				0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);

#undef  INTERFACE
#define INTERFACE   IRMAAutoConfigResponse

DECLARE_INTERFACE_(IRMAAutoConfigResponse, IUnknown)
{
    /*
     *	IUnknown methods
     */
    STDMETHOD(QueryInterface)	(THIS_
				REFIID riid,
				void** ppvObj) PURE;

    STDMETHOD_(ULONG32,AddRef)	(THIS) PURE;

    STDMETHOD_(ULONG32,Release)	(THIS) PURE;

    /*
     *	IRMAAutoConfigResponse methods
     */
    /************************************************************************
     *	Method:
     *	    IRMAAutoConfigResponse::OnBegin
     *	Purpose:
     *      Notification for start of auto-configure process
     *
     */
    STDMETHOD(OnBegin)			(THIS) PURE;

    /************************************************************************
     *	Method:
     *	    IRMAAutoConfigResponse::OnProgress
     *	Purpose:
     *      Notification for progress of auto-configure process
     *
     */
    STDMETHOD(OnProgress)	    (THIS_
				    UINT32	ulProgress,
				    UINT32	ulProtocolID,
				    const char* pProtocolDescription) PURE;

    /************************************************************************
     *	Method:
     *	    IRMAAutoConfigResponse::OnComplete
     *	Purpose:
     *      Notification for completion of auto-configure process
     *
     */
    STDMETHOD(OnComplete)		(THIS_
					PN_RESULT   PNAResult,
					UINT32	    ulPNAProtocolID,
					PN_RESULT   RTSPResult,
					UINT32	    ulRTSPProtocolID) PURE;
};


#endif /* _RMAACONF_H_ */
