Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/mpc-hc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCasimir666 <casimir666@users.sourceforge.net>2006-06-25 00:30:43 +0400
committerCasimir666 <casimir666@users.sourceforge.net>2006-06-25 00:30:43 +0400
commiteebfbbfc59746249c15ddc3de54caaae8a5d8ca7 (patch)
tree35d201f305ded0abee549282583e2226eb8f28bf /include/realmedia
parent49e6ef9fd5ee627996aeb71e08e6014e75beeec4 (diff)
git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@11 10f7b99b-c216-0410-bff0-8a66a9350fd8
Diffstat (limited to 'include/realmedia')
-rw-r--r--include/realmedia/pnbastsd.h163
-rw-r--r--include/realmedia/pncom.h715
-rw-r--r--include/realmedia/pnresult.h362
-rw-r--r--include/realmedia/pntypes.h492
-rw-r--r--include/realmedia/pnwintyp.h278
-rw-r--r--include/realmedia/pxresult.h9
-rw-r--r--include/realmedia/rmaaconf.h181
-rw-r--r--include/realmedia/rmaallow.h272
-rw-r--r--include/realmedia/rmaasm.h285
-rw-r--r--include/realmedia/rmaausvc.h1261
-rw-r--r--include/realmedia/rmaauth.h342
-rw-r--r--include/realmedia/rmaauthn.h716
-rw-r--r--include/realmedia/rmacfg.h166
-rw-r--r--include/realmedia/rmaclsnk.h191
-rw-r--r--include/realmedia/rmacmenu.h215
-rw-r--r--include/realmedia/rmacomm.h568
-rw-r--r--include/realmedia/rmacore.h844
-rw-r--r--include/realmedia/rmadb.h1304
-rw-r--r--include/realmedia/rmadtcvt.h533
-rw-r--r--include/realmedia/rmaencod.h240
-rw-r--r--include/realmedia/rmaengin.h1500
-rw-r--r--include/realmedia/rmaerror.h276
-rw-r--r--include/realmedia/rmaevent.h90
-rw-r--r--include/realmedia/rmafiles.h1583
-rw-r--r--include/realmedia/rmaformt.h518
-rw-r--r--include/realmedia/rmagroup.h391
-rw-r--r--include/realmedia/rmahyper.h85
-rw-r--r--include/realmedia/rmaiids.h1094
-rw-r--r--include/realmedia/rmalvpix.h385
-rw-r--r--include/realmedia/rmalvtxt.h324
-rw-r--r--include/realmedia/rmamon.h1105
-rw-r--r--include/realmedia/rmapckts.h449
-rw-r--r--include/realmedia/rmapends.h83
-rw-r--r--include/realmedia/rmaphook.h302
-rw-r--r--include/realmedia/rmaplgns.h152
-rw-r--r--include/realmedia/rmaplugn.h696
-rw-r--r--include/realmedia/rmappv.h394
-rw-r--r--include/realmedia/rmaprefs.h284
-rw-r--r--include/realmedia/rmapsink.h147
-rw-r--r--include/realmedia/rmarendr.h247
-rw-r--r--include/realmedia/rmasite2.h185
-rw-r--r--include/realmedia/rmaslta.h191
-rw-r--r--include/realmedia/rmasrc.h254
-rw-r--r--include/realmedia/rmaupgrd.h178
-rw-r--r--include/realmedia/rmavalue.h381
-rw-r--r--include/realmedia/rmavsrc.h185
-rw-r--r--include/realmedia/rmavsurf.h216
-rw-r--r--include/realmedia/rmawin.h811
-rw-r--r--include/realmedia/rmaxmltg.h146
49 files changed, 21789 insertions, 0 deletions
diff --git a/include/realmedia/pnbastsd.h b/include/realmedia/pnbastsd.h
new file mode 100644
index 000000000..b4f02c23d
--- /dev/null
+++ b/include/realmedia/pnbastsd.h
@@ -0,0 +1,163 @@
+/****************************************************************************
+ *
+ * $Id: pnbastsd.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
+ *
+ * http://www.real.com/devzone
+ *
+ * This file is a replacement for the basetsd.h file from VC++ 6.0.
+ * This will automatically be included by pntypes.h when using VC++
+ * 6.0 or greater. This file correctly defines the basic sized types
+ * so they don't conflict with the G2 SDK.
+ *
+ */
+
+#if !(defined(_MSC_VER) && (_MSC_VER > 1100))
+#error pnbastsd.h is only intended for use with Microsoft VC++ 6.0 or higher
+#endif
+
+#ifndef _BASETSD_H_
+#define _BASETSD_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The following types were defined in pntypes.h and so are intentionally
+ * not included in this file. They are left here for documentation purposes.
+ */
+#if 0
+typedef int LONG32;
+typedef int INT32;
+typedef unsigned int ULONG32;
+typedef unsigned int UINT32;
+#endif
+
+/*
+ * The following types are 32 bits wide and unsigned.
+ */
+typedef unsigned int *PULONG32;
+typedef unsigned int DWORD32, *PDWORD32;
+typedef unsigned int *PUINT32;
+
+/*
+ * INT_PTR is the same size as a pointer. Its size changes with pointer
+ * size (32 bit or 64 bit). HALF_PTR is half the size of a pointer.
+ */
+#ifdef _WIN64
+
+typedef __int64 INT_PTR, *PINT_PTR;
+typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
+
+#define MAXINT_PTR (0x7fffffffffffffffI64)
+#define MININT_PTR (0x8000000000000000I64)
+#define MAXUINT_PTR (0xffffffffffffffffUI64)
+
+typedef unsigned int UHALF_PTR, *PUHALF_PTR;
+typedef int HALF_PTR, *PHALF_PTR;
+
+#define MAXUHALF_PTR (0xffffffffUL)
+#define MAXHALF_PTR (0x7fffffffL)
+#define MINHALF_PTR (0x80000000L)
+
+#pragma warning(disable:4311) /* type cast truncation */
+
+#if !defined(__midl)
+__inline
+unsigned long
+HandleToUlong(
+ void *h
+ )
+{
+ return((unsigned long) h );
+}
+
+__inline
+unsigned long
+PtrToUlong(
+ void *p
+ )
+{
+ return((unsigned long) p );
+}
+
+__inline
+unsigned short
+PtrToUshort(
+ void *p
+ )
+{
+ return((unsigned short) p );
+}
+
+__inline
+long
+PtrToLong(
+ void *p
+ )
+{
+ return((long) p );
+}
+
+__inline
+short
+PtrToShort(
+ void *p
+ )
+{
+ return((short) p );
+}
+#endif
+#pragma warning(3:4311) /* type cast truncation */
+
+#else
+
+
+typedef long INT_PTR, *PINT_PTR;
+typedef unsigned long UINT_PTR, *PUINT_PTR;
+
+#define MAXINT_PTR (0x7fffffffL)
+#define MININT_PTR (0x80000000L)
+#define MAXUINT_PTR (0xffffffffUL)
+
+typedef unsigned short UHALF_PTR, *PUHALF_PTR;
+typedef short HALF_PTR, *PHALF_PTR;
+
+#define MAXUHALF_PTR 0xffff
+#define MAXHALF_PTR 0x7fff
+#define MINHALF_PTR 0x8000
+
+#define HandleToUlong( h ) ((ULONG) (h) )
+#define PtrToUlong( p ) ((ULONG) (p) )
+#define PtrToLong( p ) ((LONG) (p) )
+#define PtrToUshort( p ) ((unsigned short) (p) )
+#define PtrToShort( p ) ((short) (p) )
+
+#endif
+
+/*
+ * Basic SIZE_T support.
+ */
+typedef UINT_PTR SIZE_T, *PSIZE_T;
+typedef INT_PTR SSIZE_T, *PSSIZE_T;
+
+/*
+ * These types are 64 bits wide and signed.
+ */
+typedef __int64 LONG64, *PLONG64;
+typedef __int64 INT64, *PINT64;
+
+/*
+ * These types are 64 bits wide and unsigned.
+ */
+typedef unsigned __int64 ULONG64, *PULONG64;
+typedef unsigned __int64 DWORD64, *PDWORD64;
+typedef unsigned __int64 UINT64, *PUINT64;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BASETSD_H_ */
diff --git a/include/realmedia/pncom.h b/include/realmedia/pncom.h
new file mode 100644
index 000000000..6e89ecc46
--- /dev/null
+++ b/include/realmedia/pncom.h
@@ -0,0 +1,715 @@
+/****************************************************************************
+ *
+ * $Id: pncom.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ *
+ * Component Object Model defines, and macros
+ *
+ * This file defines items required for COM interfaces in RealMedia and
+ * Progressive Networks SDKs.
+ *
+ *
+ */
+
+#ifndef _PNCOM_H_
+#define _PNCOM_H_
+
+#include "pntypes.h" /* Needed for most type definitions */
+#include "string.h"
+
+// have to use the double expansion to get the prescan level
+
+#define STATCONCAT1(w,x,y,z) STATCONCAT2(w,x,y,z)
+#define STATCONCAT2(w,x,y,z) w##x##y##z
+
+#ifdef _STATICALLY_LINKED
+#ifndef _PLUGINNAME
+#define ENTRYPOINT(func) STATCONCAT1(entrypoint_error_symbol_should_not_be_needed,_PLUGINNAME,_,func)
+#else /* _PLUGINNAME */
+#define ENTRYPOINT(func) STATCONCAT1(entrypoint_for_,_PLUGINNAME,_,func)
+#endif
+#else /* _STATICALLY_LINKED */
+#define ENTRYPOINT(func) func
+#endif
+
+/*
+ * We include objbase.h when building for windows so that pncom.h can
+ * easily be used in any windows code.
+ */
+#ifdef _WIN32
+#include <objbase.h>
+#endif /* _WIN32 */
+
+#include "pnresult.h"
+
+/*
+ * REF:
+ * Use this for reference parameters, so that C users can
+ * use the interface as well.
+ */
+#if defined(__cplusplus)
+#define REF(type) type&
+#else
+#define REF(type) const type * const
+#endif
+
+/*
+ * CONSTMETHOD:
+ * Use this for constant methods in an interface
+ * Compiles away under C
+ */
+#if !defined( CONSTMETHOD )
+
+#if defined(__cplusplus)
+#define CONSTMETHOD const
+#else
+#define CONSTMETHOD
+#endif
+
+#endif
+/*
+ * CALL:
+ *
+ * Used by C users to easily call a function through an interface
+ *
+ * EXAMPLE:
+ *
+ * pIFooObject->CALL(IFoo,DoSomething)(bar);
+ *
+ */
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define CALL(iface, func) iface##Vtbl->func
+#endif
+
+
+#define _INTERFACE struct
+
+/*
+ * If useing windows.h or the windows implementation of COM
+ * these defines are not needed.
+ */
+#if !defined( _OBJBASE_H_ )
+
+#ifdef _WIN16
+typedef unsigned int MMRESULT;
+#define FAR _far
+#else
+#define FAR
+#endif /* WIN16 */
+#define PASCAL _pascal
+#define CDECL _cdecl
+
+/*
+ * EXTERN_C
+ */
+#ifndef EXTERN_C
+#ifdef __cplusplus
+#define EXTERN_C extern "C"
+#else
+#define EXTERN_C extern
+#endif
+#endif
+
+#ifdef OLDERRORCODES
+#ifndef MAKE_HRESULT
+#define MAKE_HRESULT(sev,fac,code) ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))))
+#endif /*MAKE_HRESULT*/
+#endif /* OLDERRORCODES */
+
+/*
+ * STDMETHODCALLTYPE
+ */
+#ifndef STDMETHODCALLTYPE
+#if defined(_WIN32) || defined(_MPPC_)
+#ifdef _MPPC_
+#define STDMETHODCALLTYPE __cdecl
+#else
+#define STDMETHODCALLTYPE __stdcall
+#endif
+#elif defined(_WIN16)
+#define STDMETHODCALLTYPE __export FAR CDECL
+#else
+#define STDMETHODCALLTYPE
+#endif
+#endif
+
+/*
+ * STDMETHODVCALLTYPE
+ */
+#ifndef STDMETHODVCALLTYPE
+#if defined(_WINDOWS) || defined(_MPPC_)
+#define STDMETHODVCALLTYPE __cdecl
+#else
+#define STDMETHODVCALLTYPE
+#endif
+#endif
+
+/*
+ * STDAPICALLTYPE
+ */
+#ifndef STDAPICALLTYPE
+#if defined(_WIN32) || defined(_MPPC_)
+#define STDAPICALLTYPE __stdcall
+#elif defined(_WIN16)
+#define STDAPICALLTYPE __export FAR PASCAL
+#else
+#define STDAPICALLTYPE
+#endif
+#endif
+
+/*
+ * STDAPIVCALLTYPE
+ */
+#ifndef STDAPIVCALLTYPE
+#if defined(_WINDOWS) || defined(_MPPC_)
+#define STDAPIVCALLTYPE __cdecl
+#else
+#define STDAPIVCALLTYPE
+#endif
+#endif
+
+/*
+ * Standard API defines:
+ *
+ * NOTE: the 'V' versions allow Variable Argument lists.
+ *
+ * STDAPI
+ * STDAPI_(type)
+ * STDAPIV
+ * STDAPIV_(type)
+ */
+#ifndef STDAPI
+#define STDAPI EXTERN_C PN_RESULT STDAPICALLTYPE
+#endif
+#ifndef STDAPI_
+#define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
+#endif
+#ifndef STDAPIV
+#define STDAPIV EXTERN_C PN_RESULT STDAPIVCALLTYPE
+#endif
+#ifndef STDAPIV_
+#define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
+#endif
+
+
+/*
+ * Standard Interface Method defines:
+ *
+ * NOTE: the 'V' versions allow Variable Argument lists.
+ *
+ * STDMETHODIMP
+ * STDMETHODIMP_(type)
+ * STDMETHODIMPV
+ * STDMETHODIMPV_(type)
+ */
+#ifndef STDMETHODIMP
+#define STDMETHODIMP PN_RESULT STDMETHODCALLTYPE
+#endif
+#ifndef STDMETHODIMP_
+#define STDMETHODIMP_(type) type STDMETHODCALLTYPE
+#endif
+#ifndef STDMETHODIMPV
+#define STDMETHODIMPV PN_RESULT STDMETHODVCALLTYPE
+#endif
+#ifndef STDMETHODIMPV_
+#define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
+#endif
+
+
+/*
+ *
+ * Interface Declaration
+ *
+ * These are macros for declaring interfaces. They exist so that
+ * a single definition of the interface is simulataneously a proper
+ * declaration of the interface structures (C++ abstract classes)
+ * for both C and C++.
+ *
+ * DECLARE_INTERFACE(iface) is used to declare an interface that does
+ * not derive from a base interface.
+ * DECLARE_INTERFACE_(iface, baseiface) is used to declare an interface
+ * that does derive from a base interface.
+ *
+ * By default if the source file has a .c extension the C version of
+ * the interface declaratations will be expanded; if it has a .cpp
+ * extension the C++ version will be expanded. if you want to force
+ * the C version expansion even though the source file has a .cpp
+ * extension, then define the macro "CINTERFACE".
+ * eg. cl -DCINTERFACE file.cpp
+ *
+ * Example Interface declaration:
+ *
+ * #undef INTERFACE
+ * #define INTERFACE IClassFactory
+ *
+ * DECLARE_INTERFACE_(IClassFactory, IUnknown)
+ * {
+ * // *** IUnknown methods
+ * STDMETHOD(QueryInterface) (THIS_
+ * REFIID riid,
+ * LPVOID FAR* ppvObj) PURE;
+ * STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ * STDMETHOD_(ULONG,Release) (THIS) PURE;
+ *
+ * // *** IClassFactory methods ***
+ * STDMETHOD(CreateInstance) (THIS_
+ * LPUNKNOWN pUnkOuter,
+ * REFIID riid,
+ * LPVOID FAR* ppvObject) PURE;
+ * };
+ *
+ * Example C++ expansion:
+ *
+ * struct FAR IClassFactory : public IUnknown
+ * {
+ * virtual PN_RESULT STDMETHODCALLTYPE QueryInterface(
+ * IID FAR& riid,
+ * LPVOID FAR* ppvObj) = 0;
+ * virtual PN_RESULT STDMETHODCALLTYPE AddRef(void) = 0;
+ * virtual PN_RESULT STDMETHODCALLTYPE Release(void) = 0;
+ * virtual PN_RESULT STDMETHODCALLTYPE CreateInstance(
+ * LPUNKNOWN pUnkOuter,
+ * IID FAR& riid,
+ * LPVOID FAR* ppvObject) = 0;
+ * };
+ *
+ * NOTE: Our documentation says '#define interface class' but we use
+ * 'struct' instead of 'class' to keep a lot of 'public:' lines
+ * out of the interfaces. The 'FAR' forces the 'this' pointers to
+ * be far, which is what we need.
+ *
+ * Example C expansion:
+ *
+ * typedef struct IClassFactory
+ * {
+ * const struct IClassFactoryVtbl FAR* lpVtbl;
+ * } IClassFactory;
+ *
+ * typedef struct IClassFactoryVtbl IClassFactoryVtbl;
+ *
+ * struct IClassFactoryVtbl
+ * {
+ * PN_RESULT (STDMETHODCALLTYPE * QueryInterface) (
+ * IClassFactory FAR* This,
+ * IID FAR* riid,
+ * LPVOID FAR* ppvObj) ;
+ * PN_RESULT (STDMETHODCALLTYPE * AddRef) (IClassFactory FAR* This) ;
+ * PN_RESULT (STDMETHODCALLTYPE * Release) (IClassFactory FAR* This) ;
+ * PN_RESULT (STDMETHODCALLTYPE * CreateInstance) (
+ * IClassFactory FAR* This,
+ * LPUNKNOWN pUnkOuter,
+ * IID FAR* riid,
+ * LPVOID FAR* ppvObject);
+ * PN_RESULT (STDMETHODCALLTYPE * LockServer) (
+ * IClassFactory FAR* This,
+ * BOOL fLock);
+ * };
+ *
+ */
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#define _INTERFACE struct
+#define STDMETHOD(method) virtual PN_RESULT STDMETHODCALLTYPE method
+#define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method
+#define PURE = 0
+#define THIS_
+#define THIS void
+
+#if defined(_WINDOWS) && defined(EXPORT_CLASSES)
+#define DECLARE_INTERFACE(iface) _INTERFACE PNEXPORT_CLASS iface
+#define DECLARE_INTERFACE_(iface, baseiface) _INTERFACE PNEXPORT_CLASS iface : public baseiface
+#else
+#define DECLARE_INTERFACE(iface) _INTERFACE iface
+#define DECLARE_INTERFACE_(iface, baseiface) _INTERFACE iface : public baseiface
+#endif // defined(_WINDOWS) && defined(EXPORT_CLASSES)
+
+#if !defined(BEGIN_INTERFACE)
+#if defined(_MPPC_) && \
+ ( (defined(_MSC_VER) || defined(__SC__) || defined(__MWERKS__)) && \
+ !defined(NO_NULL_VTABLE_ENTRY) )
+ #define BEGIN_INTERFACE virtual void a() {}
+ #define END_INTERFACE
+#else
+ #define BEGIN_INTERFACE
+ #define END_INTERFACE
+#endif
+#endif
+
+
+#else
+
+#define _INTERFACE struct
+
+#define STDMETHOD(method) PN_RESULT (STDMETHODCALLTYPE * method)
+#define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method)
+
+#if !defined(BEGIN_INTERFACE)
+#if defined(_MPPC_)
+ #define BEGIN_INTERFACE void *b;
+ #define END_INTERFACE
+#else
+ #define BEGIN_INTERFACE
+ #define END_INTERFACE
+#endif
+#endif
+
+
+#define PURE
+#define THIS_ INTERFACE FAR* This,
+#define THIS INTERFACE FAR* This
+#ifdef CONST_VTABLE
+#undef CONST_VTBL
+#define CONST_VTBL const
+#define DECLARE_INTERFACE(iface) typedef _INTERFACE iface { \
+ const struct iface##Vtbl FAR* lpVtbl; \
+ } iface; \
+ typedef const struct iface##Vtbl iface##Vtbl; \
+ const struct iface##Vtbl
+#else
+#undef CONST_VTBL
+#define CONST_VTBL
+#define DECLARE_INTERFACE(iface) typedef _INTERFACE iface { \
+ struct iface##Vtbl FAR* lpVtbl; \
+ } iface; \
+ typedef struct iface##Vtbl iface##Vtbl; \
+ struct iface##Vtbl
+#endif
+#define DECLARE_INTERFACE_(iface, baseiface) DECLARE_INTERFACE(iface)
+
+#endif
+
+/*
+ * COMMON TYPES
+ */
+
+#ifndef GUID_DEFINED
+#define GUID_DEFINED
+typedef struct _GUID
+ {
+ ULONG32 Data1;
+ UINT16 Data2;
+ UINT16 Data3;
+ UCHAR Data4[ 8 ];
+ } GUID;
+
+#endif
+
+#if !defined( __IID_DEFINED__ )
+#define __IID_DEFINED__
+typedef GUID IID;
+#define IID_NULL GUID_NULL
+typedef GUID CLSID;
+#define CLSID_NULL GUID_NULL
+
+#if defined(__cplusplus)
+#ifndef _REFGUID_DEFINED
+#define _REFGUID_DEFINED
+#define REFGUID const GUID &
+#endif
+
+#ifndef _REFIID_DEFINED
+#define _REFIID_DEFINED
+#define REFIID const IID &
+#endif
+
+#ifndef _REFCLSID_DEFINED
+#define _REFCLSID_DEFINED
+#define REFCLSID const CLSID &
+#endif
+
+#else
+#ifndef _REFGUID_DEFINED
+#define _REFGUID_DEFINED
+#define REFGUID const GUID * const
+#endif
+#ifndef _REFIID_DEFINED
+#define _REFIID_DEFINED
+#define REFIID const IID * const
+#endif
+#ifndef _REFCLSID_DEFINED
+#define _REFCLSID_DEFINED
+#define REFCLSID const CLSID * const
+#endif
+#endif
+#endif
+
+
+/*
+ *
+ * macros to define byte pattern for a GUID.
+ * Example: DEFINE_GUID(GUID_XXX, a, b, c, ...);
+ *
+ * Each dll/exe must initialize the GUIDs once. This is done in one of
+ * two ways. If you are not using precompiled headers for the file(s) which
+ * initializes the GUIDs, define INITGUID before including objbase.h. This
+ * is how OLE builds the initialized versions of the GUIDs which are included
+ * in ole2.lib. The GUIDs in ole2.lib are all defined in the same text
+ * segment GUID_TEXT.
+ *
+ * The alternative (which some versions of the compiler don't handle properly;
+ * they wind up with the initialized GUIDs in a data, not a text segment),
+ * is to use a precompiled version of objbase.h and then include initguid.h
+ * after objbase.h followed by one or more of the guid defintion files.
+ *
+ */
+
+#if !defined (INITGUID) || (defined (_STATICALLY_LINKED) && !defined(NCIHACK))
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID FAR name
+#else
+
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID name \
+ = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
+#endif
+
+#ifndef _VXWORKS
+#include <memory.h> /* for memcmp */
+#endif
+
+#ifdef __cplusplus
+inline BOOL IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
+{
+ return !memcmp(&rguid1, &rguid2, sizeof(GUID));
+}
+
+inline void SetGUID(GUID& rguid1, REFGUID rguid2)
+{
+ memcpy(&rguid1, &rguid2, sizeof(GUID));
+}
+#else
+#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
+#define SetGUID(rguid1, rguid2) (memcpy(rguid1, rguid2, sizeof(GUID)))
+#endif
+
+#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
+#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
+
+#define SetIID(riid1, riid2) SetGUID(riid1, riid2)
+#define SetCLSID(rclsid1, rclsid2) SetGUID(rclsid1, rclsid2)
+
+#ifdef __cplusplus
+
+/*
+ * Because GUID is defined elsewhere in WIN32 land, the operator == and !=
+ * are moved outside the class to global scope.
+ */
+
+inline BOOL operator==(const GUID& guidOne, const GUID& guidOther)
+{
+ return !memcmp(&guidOne,&guidOther,sizeof(GUID));
+}
+
+inline BOOL operator!=(const GUID& guidOne, const GUID& guidOther)
+{
+ return !(guidOne == guidOther);
+}
+
+#endif
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IUnknown
+ *
+ * Purpose:
+ *
+ * Base class of all interfaces. Defines life time management and
+ * support for dynamic cast.
+ *
+ * IID_IUnknown:
+ *
+ * {00000000-0000-0000-C000000000000046}
+ *
+ */
+DEFINE_GUID(IID_IUnknown, 0x00000000, 0x0000, 0x0000, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
+
+#undef INTERFACE
+#define INTERFACE IUnknown
+
+DECLARE_INTERFACE(IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IMalloc
+ *
+ * Purpose:
+ *
+ * Basic memory management interface.
+ *
+ * IID_IMalloc:
+ *
+ * {00000002-0000-0000-C000000000000046}
+ *
+ */
+DEFINE_GUID(IID_IMalloc, 00000002, 0x0000, 0x0000, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
+
+#undef INTERFACE
+#define INTERFACE IMalloc
+
+DECLARE_INTERFACE_(IMalloc, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IMalloc methods
+ */
+ STDMETHOD_(void*,Alloc) (THIS_
+ UINT32 /*IN*/ count) PURE;
+
+ STDMETHOD_(void*,Realloc) (THIS_
+ void* /*IN*/ pMem,
+ UINT32 /*IN*/ count) PURE;
+
+ STDMETHOD_(void,Free) (THIS_
+ void* /*IN*/ pMem) PURE;
+
+ STDMETHOD_(UINT32,GetSize) (THIS_
+ void* /*IN*/ pMem) PURE;
+
+ STDMETHOD_(BOOL,DidAlloc) (THIS_
+ void* /*IN*/ pMem) PURE;
+
+ STDMETHOD_(void,HeapMinimize) (THIS) PURE;
+};
+
+/*
+ *
+ * Synchronization: NOTE: These should be made thread safe or use built
+ * in synchronization support in an OS that supports it.
+ *
+ */
+#define InterlockedIncrement(plong) (++(*(plong)))
+#define InterlockedDecrement(plong) (--(*(plong)))
+
+#else /* else case of !defined( _OBJBASE_H_ ) && !defined( _COMPOBJ_H_ ) */
+
+
+/* Even in windows we want these GUID's defined... */
+
+#if !(defined(INITGUID) && defined(USE_IUNKNOWN_AND_IMALLOC_FROM_UUID_LIB))
+DEFINE_GUID(IID_IUnknown, 0x00000000, 0x0000, 0x0000, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
+
+DEFINE_GUID(IID_IMalloc, 00000002, 0x0000, 0x0000, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
+#endif
+
+#include <memory.h> /* for memcmp */
+
+#ifdef __cplusplus
+inline void SetGUID(REFGUID rguid1, REFGUID rguid2)
+{
+ memcpy((void*)&rguid1, (void*)&rguid2, sizeof(GUID));
+}
+#else
+#define SetGUID(rguid1, rguid2) (memcpy((void*)rguid1, (void*)rguid2, sizeof(GUID)))
+#endif
+#define SetIID(riid1, riid2) SetGUID(riid1, riid2)
+#define SetCLSID(rclsid1, rclsid2) SetGUID(rclsid1, rclsid2)
+
+#endif /* !defined( _OBJBASE_H_ ) && !defined( _COMPOBJ_H_ )*/
+
+#ifdef IsEqualIID
+#undef IsEqualIID
+#endif
+
+#ifdef IsEqualCLSID
+#undef IsEqualCLSID
+#endif
+
+#define IsEqualIID(riid1, riid2) RNIsEqualGUID(riid1, riid2)
+#define IsEqualCLSID(rclsid1, rclsid2) RNIsEqualGUID(rclsid1, rclsid2)
+
+#ifdef __cplusplus
+inline BOOL RNIsEqualGUID(REFGUID rguid1, REFGUID rguid2)
+{
+ return (((UINT32*) &rguid1)[0] == ((UINT32*) &rguid2)[0] &&
+ ((UINT32*) &rguid1)[1] == ((UINT32*) &rguid2)[1] &&
+ ((UINT32*) &rguid1)[2] == ((UINT32*) &rguid2)[2] &&
+ ((UINT32*) &rguid1)[3] == ((UINT32*) &rguid2)[3]);
+}
+#else
+#define RNIsEqualGUID(rguid1, rguid2) \
+ (((UINT32*) &rguid1)[0] == ((UINT32*) &rguid2)[0] && \
+ ((UINT32*) &rguid1)[1] == ((UINT32*) &rguid2)[1] && \
+ ((UINT32*) &rguid1)[2] == ((UINT32*) &rguid2)[2] && \
+ ((UINT32*) &rguid1)[3] == ((UINT32*) &rguid2)[3]);
+#endif
+
+/****************************************************************************
+ *
+ * Putting the following macro in the definition of your class will overload
+ * new and delete for that object. New will then take an IMalloc* from
+ * which to allocate memory from and store it in the begining of the
+ * memory which it will return. Delete will grab this IMalloc* from
+ * the beginning of the mem and use this pointer to deallocate the mem.
+ *
+ * Example useage:
+ * class A
+ * {
+ * public:
+ * A(int);
+ * ~A();
+ *
+ * IMALLOC_MEM
+ * };
+ *
+ * IMalloc* pMalloc;
+ * m_pContext->QueryInterface(IID_IMalloc, (void**)&pMalloc);
+ * A* p = new(pMalloc) A(0);
+ * pMalloc->Release();
+ * delete p;
+ */
+
+#define IMALLOC_MEM\
+ void* operator new(size_t size, IMalloc* pMalloc)\
+ {\
+ void* pMem = pMalloc->Alloc(size + sizeof(IMalloc*));\
+ *(IMalloc**)pMem = pMalloc;\
+ pMalloc->AddRef();\
+ return ((unsigned char*)pMem + sizeof(IMalloc*));\
+ }\
+\
+ void operator delete(void* pMem)\
+ {\
+ pMem = (unsigned char*)pMem - sizeof(IMalloc*);\
+ IMalloc* pMalloc = *(IMalloc**)pMem;\
+ pMalloc->Free(pMem);\
+ pMalloc->Release();\
+ }\
+
+#endif /* _PNCOM_H_ */
diff --git a/include/realmedia/pnresult.h b/include/realmedia/pnresult.h
new file mode 100644
index 000000000..d845cecff
--- /dev/null
+++ b/include/realmedia/pnresult.h
@@ -0,0 +1,362 @@
+/****************************************************************************
+ *
+ * $Id: pnresult.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ * This file contains the PN_RESULT type and it's associated result codes
+ */
+
+#ifndef _PNRESULT_H_
+#define _PNRESULT_H_
+
+/* Some files include this before pntypes.h. */
+#include "pntypes.h"
+
+typedef LONG32 PN_RESULT;
+
+#ifndef _WIN32
+ typedef PN_RESULT HRESULT;
+# define NOERROR 0
+# define FACILITY_ITF 4
+# define MAKE_HRESULT(sev,fac,code) \
+ ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | \
+ ((unsigned long)(code))) )
+# define SUCCEEDED(Status) (((unsigned long)(Status)>>31) == 0)
+# define FAILED(Status) (((unsigned long)(Status)>>31) != 0)
+#else
+# ifndef _HRESULT_DEFINED
+ typedef LONG32 HRESULT;
+# endif /* _HRESULT_DEFINED */
+# include <winerror.h>
+#endif /* _WIN32 */
+
+#define MAKE_PN_RESULT(sev,fac,code) MAKE_HRESULT(sev, FACILITY_ITF, \
+ ((fac << 6) | (code)))
+
+#define SS_GLO 0 /* General errors */
+#define SS_NET 1 /* Networking errors */
+#define SS_FIL 2 /* File errors */
+#define SS_PRT 3 /* Protocol Error */
+#define SS_AUD 4 /* Audio error */
+#define SS_INT 5 /* General internal errors */
+#define SS_USR 6 /* The user is broken. */
+#define SS_MSC 7 /* Miscellaneous */
+#define SS_DEC 8 /* Decoder errors */
+#define SS_ENC 9 /* Encoder errors */
+#define SS_REG 10 /* Registry (not Windows registry ;) errors */
+#define SS_PPV 11 /* Pay Per View errors */
+#define SS_RSC 12 /* Errors for PNXRES */
+#define SS_UPG 13 /* Auto-upgrade & Certificate Errors */
+#define SS_PLY 14 /* RealPlayer/Plus specific errors (USE ONLY IN /rpmisc/pub/rpresult.h) */
+#define SS_RMT 15 /* RMTools Errors */
+#define SS_CFG 16 /* AutoConfig Errors */
+#define SS_RPX 17 /* RealPix-related Errors */
+#define SS_XML 18 /* XML-related Errors */
+
+#define SS_DPR 63 /* Deprecated errors */
+
+#define PNR_NOTIMPL MAKE_HRESULT(1,0,0x4001)
+#define PNR_OUTOFMEMORY MAKE_HRESULT(1,7,0x000e)
+#define PNR_INVALID_PARAMETER MAKE_HRESULT(1,7,0x0057)
+#define PNR_NOINTERFACE MAKE_HRESULT(1,0,0x4002)
+#define PNR_POINTER MAKE_HRESULT(1,0,0x4003)
+#define PNR_HANDLE MAKE_HRESULT(1,7,0x0006)
+#define PNR_ABORT MAKE_HRESULT(1,0,0x4004)
+#define PNR_FAIL MAKE_HRESULT(1,0,0x4005)
+#define PNR_ACCESSDENIED MAKE_HRESULT(1,7,0x0005)
+#define PNR_IGNORE MAKE_HRESULT(1,0,0x0006)
+#define PNR_OK MAKE_HRESULT(0,0,0)
+
+
+#define PNR_INVALID_OPERATION MAKE_PN_RESULT(1,SS_GLO,4)
+#define PNR_INVALID_VERSION MAKE_PN_RESULT(1,SS_GLO,5)
+#define PNR_INVALID_REVISION MAKE_PN_RESULT(1,SS_GLO,6)
+#define PNR_NOT_INITIALIZED MAKE_PN_RESULT(1,SS_GLO,7)
+#define PNR_DOC_MISSING MAKE_PN_RESULT(1,SS_GLO,8)
+#define PNR_UNEXPECTED MAKE_PN_RESULT(1,SS_GLO,9)
+#define PNR_INCOMPLETE MAKE_PN_RESULT(1,SS_GLO,12)
+#define PNR_BUFFERTOOSMALL MAKE_PN_RESULT(1,SS_GLO,13)
+#define PNR_UNSUPPORTED_VIDEO MAKE_PN_RESULT(1,SS_GLO,14)
+#define PNR_UNSUPPORTED_AUDIO MAKE_PN_RESULT(1,SS_GLO,15)
+#define PNR_INVALID_BANDWIDTH MAKE_PN_RESULT(1,SS_GLO,16)
+/* PNR_NO_RENDERER and PNR_NO_FILEFORMAT old value is being deprecated
+#define PNR_NO_FILEFORMAT MAKE_PN_RESULT(1,SS_GLO,10)
+#define PNR_NO_RENDERER MAKE_PN_RESULT(1,SS_GLO,11)*/
+#define PNR_NO_RENDERER MAKE_PN_RESULT(1,SS_GLO,17)
+#define PNR_NO_FILEFORMAT MAKE_PN_RESULT(1,SS_GLO,17)
+#define PNR_MISSING_COMPONENTS MAKE_PN_RESULT(1,SS_GLO,17)
+#define PNR_ELEMENT_NOT_FOUND MAKE_PN_RESULT(0,SS_GLO,18)
+#define PNR_NOCLASS MAKE_PN_RESULT(0,SS_GLO,19)
+#define PNR_CLASS_NOAGGREGATION MAKE_PN_RESULT(0,SS_GLO,20)
+#define PNR_NOT_LICENSED MAKE_PN_RESULT(1,SS_GLO,21)
+#define PNR_NO_FILESYSTEM MAKE_PN_RESULT(1,SS_GLO,22)
+#define PNR_REQUEST_UPGRADE MAKE_PN_RESULT(1,SS_GLO,23)
+#define PNR_AWAITING_LICENSE MAKE_PN_RESULT(1,SS_GLO,24)
+
+#define PNR_BUFFERING MAKE_PN_RESULT(0,SS_NET,0)
+#define PNR_PAUSED MAKE_PN_RESULT(0,SS_NET,1)
+#define PNR_NO_DATA MAKE_PN_RESULT(0,SS_NET,2)
+#define PNR_STREAM_DONE MAKE_PN_RESULT(0,SS_NET,3)
+#define PNR_NET_SOCKET_INVALID MAKE_PN_RESULT(1,SS_NET,3)
+#define PNR_NET_CONNECT MAKE_PN_RESULT(1,SS_NET,4)
+#define PNR_BIND MAKE_PN_RESULT(1,SS_NET,5)
+#define PNR_SOCKET_CREATE MAKE_PN_RESULT(1,SS_NET,6)
+#define PNR_INVALID_HOST MAKE_PN_RESULT(1,SS_NET,7)
+#define PNR_NET_READ MAKE_PN_RESULT(1,SS_NET,8)
+#define PNR_NET_WRITE MAKE_PN_RESULT(1,SS_NET,9)
+#define PNR_NET_UDP MAKE_PN_RESULT(1,SS_NET,10)
+#define PNR_RETRY MAKE_PN_RESULT(1,SS_NET,11) /* XXX */
+#define PNR_SERVER_TIMEOUT MAKE_PN_RESULT(1,SS_NET,12)
+#define PNR_SERVER_DISCONNECTED MAKE_PN_RESULT(1,SS_NET,13)
+#define PNR_WOULD_BLOCK MAKE_PN_RESULT(1,SS_NET,14)
+#define PNR_GENERAL_NONET MAKE_PN_RESULT(1,SS_NET,15)
+#define PNR_BLOCK_CANCELED MAKE_PN_RESULT(1,SS_NET,16) /* XXX */
+#define PNR_MULTICAST_JOIN MAKE_PN_RESULT(1,SS_NET,17)
+#define PNR_GENERAL_MULTICAST MAKE_PN_RESULT(1,SS_NET,18)
+#define PNR_MULTICAST_UDP MAKE_PN_RESULT(1,SS_NET,19)
+#define PNR_AT_INTERRUPT MAKE_PN_RESULT(1,SS_NET,20)
+#define PNR_MSG_TOOLARGE MAKE_PN_RESULT(1,SS_NET,21)
+#define PNR_NET_TCP MAKE_PN_RESULT(1,SS_NET,22)
+#define PNR_TRY_AUTOCONFIG MAKE_PN_RESULT(1,SS_NET,23)
+#define PNR_NOTENOUGH_BANDWIDTH MAKE_PN_RESULT(1,SS_NET,24)
+#define PNR_HTTP_CONNECT MAKE_PN_RESULT(1,SS_NET,25)
+#define PNR_PORT_IN_USE MAKE_PN_RESULT(1,SS_NET,26)
+#define PNR_LOADTEST_NOT_SUPPORTED MAKE_PN_RESULT(1,SS_NET,27)
+
+#define PNR_AT_END MAKE_PN_RESULT(0,SS_FIL,0)
+#define PNR_INVALID_FILE MAKE_PN_RESULT(1,SS_FIL,1)
+#define PNR_INVALID_PATH MAKE_PN_RESULT(1,SS_FIL,2)
+#define PNR_RECORD MAKE_PN_RESULT(1,SS_FIL,3)
+#define PNR_RECORD_WRITE MAKE_PN_RESULT(1,SS_FIL,4)
+#define PNR_TEMP_FILE MAKE_PN_RESULT(1,SS_FIL,5)
+#define PNR_ALREADY_OPEN MAKE_PN_RESULT(1,SS_FIL,6)
+#define PNR_SEEK_PENDING MAKE_PN_RESULT(1,SS_FIL,7)
+#define PNR_CANCELLED MAKE_PN_RESULT(1,SS_FIL,8)
+#define PNR_FILE_NOT_FOUND MAKE_PN_RESULT(1,SS_FIL,9)
+#define PNR_WRITE_ERROR MAKE_PN_RESULT(1,SS_FIL,10)
+#define PNR_FILE_EXISTS MAKE_PN_RESULT(1,SS_FIL,11)
+#define PNR_FILE_NOT_OPEN MAKE_PN_RESULT(1,SS_FIL,12)
+#define PNR_ADVISE_PREFER_LINEAR MAKE_PN_RESULT(0,SS_FIL,13)
+#define PNR_PARSE_ERROR MAKE_PN_RESULT(1,SS_FIL,14)
+
+#define PNR_BAD_SERVER MAKE_PN_RESULT(1,SS_PRT,0)
+#define PNR_ADVANCED_SERVER MAKE_PN_RESULT(1,SS_PRT,1)
+#define PNR_OLD_SERVER MAKE_PN_RESULT(1,SS_PRT,2)
+#define PNR_REDIRECTION MAKE_PN_RESULT(0,SS_PRT,3) /* XXX */
+#define PNR_SERVER_ALERT MAKE_PN_RESULT(1,SS_PRT,4)
+#define PNR_PROXY MAKE_PN_RESULT(1,SS_PRT,5)
+#define PNR_PROXY_RESPONSE MAKE_PN_RESULT(1,SS_PRT,6)
+#define PNR_ADVANCED_PROXY MAKE_PN_RESULT(1,SS_PRT,7)
+#define PNR_OLD_PROXY MAKE_PN_RESULT(1,SS_PRT,8)
+#define PNR_INVALID_PROTOCOL MAKE_PN_RESULT(1,SS_PRT,9)
+#define PNR_INVALID_URL_OPTION MAKE_PN_RESULT(1,SS_PRT,10)
+#define PNR_INVALID_URL_HOST MAKE_PN_RESULT(1,SS_PRT,11)
+#define PNR_INVALID_URL_PATH MAKE_PN_RESULT(1,SS_PRT,12)
+#define PNR_HTTP_CONTENT_NOT_FOUND MAKE_PN_RESULT(1,SS_PRT,13)
+#define PNR_NOT_AUTHORIZED MAKE_PN_RESULT(1,SS_PRT,14)
+#define PNR_UNEXPECTED_MSG MAKE_PN_RESULT(1,SS_PRT,15)
+#define PNR_BAD_TRANSPORT MAKE_PN_RESULT(1,SS_PRT,16)
+#define PNR_NO_SESSION_ID MAKE_PN_RESULT(1,SS_PRT,17)
+#define PNR_PROXY_DNR MAKE_PN_RESULT(1,SS_PRT,18)
+#define PNR_PROXY_NET_CONNECT MAKE_PN_RESULT(1,SS_PRT,19)
+
+#define PNR_AUDIO_DRIVER MAKE_PN_RESULT(1,SS_AUD,0)
+#define PNR_LATE_PACKET MAKE_PN_RESULT(1,SS_AUD,1)
+#define PNR_OVERLAPPED_PACKET MAKE_PN_RESULT(1,SS_AUD,2)
+#define PNR_OUTOFORDER_PACKET MAKE_PN_RESULT(1,SS_AUD,3)
+#define PNR_NONCONTIGUOUS_PACKET MAKE_PN_RESULT(1,SS_AUD,4)
+
+#define PNR_OPEN_NOT_PROCESSED MAKE_PN_RESULT(1,SS_INT,0)
+
+#define PNR_EXPIRED MAKE_PN_RESULT(1,SS_USR,0)
+
+#define PNR_INVALID_INTERLEAVER MAKE_PN_RESULT(1,SS_DPR,0)
+#define PNR_BAD_FORMAT MAKE_PN_RESULT(1,SS_DPR,1)
+#define PNR_CHUNK_MISSING MAKE_PN_RESULT(1,SS_DPR,2)
+#define PNR_INVALID_STREAM MAKE_PN_RESULT(1,SS_DPR,3)
+#define PNR_DNR MAKE_PN_RESULT(1,SS_DPR,4)
+#define PNR_OPEN_DRIVER MAKE_PN_RESULT(1,SS_DPR,5)
+#define PNR_UPGRADE MAKE_PN_RESULT(1,SS_DPR,6)
+#define PNR_NOTIFICATION MAKE_PN_RESULT(1,SS_DPR,7)
+#define PNR_NOT_NOTIFIED MAKE_PN_RESULT(1,SS_DPR,8)
+#define PNR_STOPPED MAKE_PN_RESULT(1,SS_DPR,9)
+#define PNR_CLOSED MAKE_PN_RESULT(1,SS_DPR,10)
+#define PNR_INVALID_WAV_FILE MAKE_PN_RESULT(1,SS_DPR,11)
+#define PNR_NO_SEEK MAKE_PN_RESULT(1,SS_DPR,12)
+
+#define PNR_DEC_INITED MAKE_PN_RESULT(1,SS_DEC,0)
+#define PNR_DEC_NOT_FOUND MAKE_PN_RESULT(1,SS_DEC,1)
+#define PNR_DEC_INVALID MAKE_PN_RESULT(1,SS_DEC,2)
+#define PNR_DEC_TYPE_MISMATCH MAKE_PN_RESULT(1,SS_DEC,3)
+#define PNR_DEC_INIT_FAILED MAKE_PN_RESULT(1,SS_DEC,4)
+#define PNR_DEC_NOT_INITED MAKE_PN_RESULT(1,SS_DEC,5)
+#define PNR_DEC_DECOMPRESS MAKE_PN_RESULT(1,SS_DEC,6)
+#define PNR_OBSOLETE_VERSION MAKE_PN_RESULT(1,SS_DEC,7)
+
+#define PNR_ENC_FILE_TOO_SMALL MAKE_PN_RESULT(1,SS_ENC,0)
+#define PNR_ENC_UNKNOWN_FILE MAKE_PN_RESULT(1,SS_ENC,1)
+#define PNR_ENC_BAD_CHANNELS MAKE_PN_RESULT(1,SS_ENC,2)
+#define PNR_ENC_BAD_SAMPSIZE MAKE_PN_RESULT(1,SS_ENC,3)
+#define PNR_ENC_BAD_SAMPRATE MAKE_PN_RESULT(1,SS_ENC,4)
+#define PNR_ENC_INVALID MAKE_PN_RESULT(1,SS_ENC,5)
+#define PNR_ENC_NO_OUTPUT_FILE MAKE_PN_RESULT(1,SS_ENC,6)
+#define PNR_ENC_NO_INPUT_FILE MAKE_PN_RESULT(1,SS_ENC,7)
+#define PNR_ENC_NO_OUTPUT_PERMISSIONS MAKE_PN_RESULT(1,SS_ENC,8)
+#define PNR_ENC_BAD_FILETYPE MAKE_PN_RESULT(1,SS_ENC,9)
+#define PNR_ENC_INVALID_VIDEO MAKE_PN_RESULT(1,SS_ENC,10)
+#define PNR_ENC_INVALID_AUDIO MAKE_PN_RESULT(1,SS_ENC,11)
+#define PNR_ENC_NO_VIDEO_CAPTURE MAKE_PN_RESULT(1,SS_ENC,12)
+#define PNR_ENC_INVALID_VIDEO_CAPTURE MAKE_PN_RESULT(1,SS_ENC,13)
+#define PNR_ENC_NO_AUDIO_CAPTURE MAKE_PN_RESULT(1,SS_ENC,14)
+#define PNR_ENC_INVALID_AUDIO_CAPTURE MAKE_PN_RESULT(1,SS_ENC,15)
+#define PNR_ENC_TOO_SLOW_FOR_LIVE MAKE_PN_RESULT(1,SS_ENC,16)
+#define PNR_ENC_ENGINE_NOT_INITIALIZED MAKE_PN_RESULT(1,SS_ENC,17)
+#define PNR_ENC_CODEC_NOT_FOUND MAKE_PN_RESULT(1,SS_ENC,18)
+#define PNR_ENC_CODEC_NOT_INITIALIZED MAKE_PN_RESULT(1,SS_ENC,19)
+#define PNR_ENC_INVALID_INPUT_DIMENSIONS MAKE_PN_RESULT(1,SS_ENC,20)
+#define PNR_ENC_MESSAGE_IGNORED MAKE_PN_RESULT(1,SS_ENC,21)
+#define PNR_ENC_NO_SETTINGS MAKE_PN_RESULT(1,SS_ENC,22)
+#define PNR_ENC_NO_OUTPUT_TYPES MAKE_PN_RESULT(1,SS_ENC,23)
+#define PNR_ENC_IMPROPER_STATE MAKE_PN_RESULT(1,SS_ENC,24)
+#define PNR_ENC_INVALID_SERVER MAKE_PN_RESULT(1,SS_ENC,25)
+#define PNR_ENC_INVALID_TEMP_PATH MAKE_PN_RESULT(1,SS_ENC,26)
+#define PNR_ENC_MERGE_FAIL MAKE_PN_RESULT(1,SS_ENC,27)
+#define PNR_BIN_DATA_NOT_FOUND MAKE_PN_RESULT(0,SS_ENC,28)
+#define PNR_BIN_END_OF_DATA MAKE_PN_RESULT(0,SS_ENC,29)
+#define PNR_BIN_DATA_PURGED MAKE_PN_RESULT(1,SS_ENC,30)
+#define PNR_BIN_FULL MAKE_PN_RESULT(1,SS_ENC,31)
+#define PNR_BIN_OFFSET_PAST_END MAKE_PN_RESULT(1,SS_ENC,32)
+#define PNR_ENC_NO_ENCODED_DATA MAKE_PN_RESULT(1,SS_ENC,33)
+#define PNR_ENC_INVALID_DLL MAKE_PN_RESULT(1,SS_ENC,34)
+#define PNR_NOT_INDEXABLE MAKE_PN_RESULT(1,SS_ENC,35)
+#define PNR_ENC_NO_BROWSER MAKE_PN_RESULT(1,SS_ENC,36)
+#define PNR_ENC_NO_FILE_TO_SERVER MAKE_PN_RESULT(1,SS_ENC,37)
+#define PNR_ENC_INSUFFICIENT_DISK_SPACE MAKE_PN_RESULT(1,SS_ENC,38)
+
+#define PNR_RMT_USAGE_ERROR MAKE_PN_RESULT(1,SS_RMT,1)
+#define PNR_RMT_INVALID_ENDTIME MAKE_PN_RESULT(1,SS_RMT,2)
+#define PNR_RMT_MISSING_INPUT_FILE MAKE_PN_RESULT(1,SS_RMT,3)
+#define PNR_RMT_MISSING_OUTPUT_FILE MAKE_PN_RESULT(1,SS_RMT,4)
+#define PNR_RMT_INPUT_EQUALS_OUTPUT_FILE MAKE_PN_RESULT(1,SS_RMT,5)
+#define PNR_RMT_UNSUPPORTED_AUDIO_VERSION MAKE_PN_RESULT(1,SS_RMT,6)
+#define PNR_RMT_DIFFERENT_AUDIO MAKE_PN_RESULT(1,SS_RMT,7)
+#define PNR_RMT_DIFFERENT_VIDEO MAKE_PN_RESULT(1,SS_RMT,8)
+#define PNR_RMT_PASTE_MISSING_STREAM MAKE_PN_RESULT(1,SS_RMT,9)
+#define PNR_RMT_END_OF_STREAM MAKE_PN_RESULT(1,SS_RMT,10)
+#define PNR_RMT_IMAGE_MAP_PARSE_ERROR MAKE_PN_RESULT(1,SS_RMT,11)
+#define PNR_RMT_INVALID_IMAGEMAP_FILE MAKE_PN_RESULT(1,SS_RMT,12)
+#define PNR_RMT_EVENT_PARSE_ERROR MAKE_PN_RESULT(1,SS_RMT,13)
+#define PNR_RMT_INVALID_EVENT_FILE MAKE_PN_RESULT(1,SS_RMT,14)
+#define PNR_RMT_INVALID_OUTPUT_FILE MAKE_PN_RESULT(1,SS_RMT,15)
+#define PNR_RMT_INVALID_DURATION MAKE_PN_RESULT(1,SS_RMT,16)
+#define PNR_RMT_NO_DUMP_FILES MAKE_PN_RESULT(1,SS_RMT,17)
+#define PNR_RMT_NO_EVENT_DUMP_FILE MAKE_PN_RESULT(1,SS_RMT,18)
+#define PNR_RMT_NO_IMAP_DUMP_FILE MAKE_PN_RESULT(1,SS_RMT,19)
+#define PNR_RMT_NO_DATA MAKE_PN_RESULT(1,SS_RMT,20)
+#define PNR_RMT_EMPTY_STREAM MAKE_PN_RESULT(1,SS_RMT,21)
+#define PNR_RMT_READ_ONLY_FILE MAKE_PN_RESULT(1,SS_RMT,22)
+#define PNR_RMT_PASTE_MISSING_AUDIO_STREAM MAKE_PN_RESULT(1,SS_RMT,23)
+#define PNR_RMT_PASTE_MISSING_VIDEO_STREAM MAKE_PN_RESULT(1,SS_RMT,24)
+
+
+#define PNR_PROP_NOT_FOUND MAKE_PN_RESULT(1,SS_REG,1)
+#define PNR_PROP_NOT_COMPOSITE MAKE_PN_RESULT(1,SS_REG,2)
+#define PNR_PROP_DUPLICATE MAKE_PN_RESULT(1,SS_REG,3)
+#define PNR_PROP_TYPE_MISMATCH MAKE_PN_RESULT(1,SS_REG,4)
+#define PNR_PROP_ACTIVE MAKE_PN_RESULT(1,SS_REG,5)
+#define PNR_PROP_INACTIVE MAKE_PN_RESULT(1,SS_REG,6)
+
+#define PNR_COULDNOTINITCORE MAKE_PN_RESULT(1,SS_MSC,1)
+#define PNR_PERFECTPLAY_NOT_SUPPORTED MAKE_PN_RESULT(1,SS_MSC,2)
+#define PNR_NO_LIVE_PERFECTPLAY MAKE_PN_RESULT(1,SS_MSC,3)
+#define PNR_PERFECTPLAY_NOT_ALLOWED MAKE_PN_RESULT(1,SS_MSC,4)
+#define PNR_NO_CODECS MAKE_PN_RESULT(1,SS_MSC,5)
+#define PNR_SLOW_MACHINE MAKE_PN_RESULT(1,SS_MSC,6)
+#define PNR_FORCE_PERFECTPLAY MAKE_PN_RESULT(1,SS_MSC,7)
+#define PNR_INVALID_HTTP_PROXY_HOST MAKE_PN_RESULT(1,SS_MSC,8)
+#define PNR_INVALID_METAFILE MAKE_PN_RESULT(1,SS_MSC,9)
+#define PNR_BROWSER_LAUNCH MAKE_PN_RESULT(1,SS_MSC,10)
+#define PNR_VIEW_SOURCE_NOCLIP MAKE_PN_RESULT(1,SS_MSC,11)
+#define PNR_VIEW_SOURCE_DISSABLED MAKE_PN_RESULT(1,SS_MSC,12)
+
+#define PNR_RESOURCE_NOT_CACHED MAKE_PN_RESULT(1,SS_RSC,1)
+#define PNR_RESOURCE_NOT_FOUND MAKE_PN_RESULT(1,SS_RSC,2)
+#define PNR_RESOURCE_CLOSE_FILE_FIRST MAKE_PN_RESULT(1,SS_RSC,3)
+#define PNR_RESOURCE_NODATA MAKE_PN_RESULT(1,SS_RSC,4)
+#define PNR_RESOURCE_BADFILE MAKE_PN_RESULT(1,SS_RSC,5)
+#define PNR_RESOURCE_PARTIALCOPY MAKE_PN_RESULT(1,SS_RSC,6)
+
+#define PNR_PPV_NO_USER MAKE_PN_RESULT(1,SS_PPV,0)
+#define PNR_PPV_GUID_READ_ONLY MAKE_PN_RESULT(1,SS_PPV,1)
+#define PNR_PPV_GUID_COLLISION MAKE_PN_RESULT(1,SS_PPV,2)
+#define PNR_REGISTER_GUID_EXISTS MAKE_PN_RESULT(1,SS_PPV,3)
+#define PNR_PPV_AUTHORIZATION_FAILED MAKE_PN_RESULT(1,SS_PPV,4)
+#define PNR_PPV_OLD_PLAYER MAKE_PN_RESULT(1,SS_PPV,5)
+#define PNR_PPV_ACCOUNT_LOCKED MAKE_PN_RESULT(1,SS_PPV,6)
+// #define PNR_PPV_PROTOCOL_IGNORES MAKE_PN_RESULT(1,SS_PPV,7)
+#define PNR_PPV_DBACCESS_ERROR MAKE_PN_RESULT(1,SS_PPV,8)
+#define PNR_PPV_USER_ALREADY_EXISTS MAKE_PN_RESULT(1,SS_PPV,9)
+
+// auto-upgrade (RealUpdate) errors
+#define PNR_UPG_AUTH_FAILED MAKE_PN_RESULT(1,SS_UPG,0)
+#define PNR_UPG_CERT_AUTH_FAILED MAKE_PN_RESULT(1,SS_UPG,1)
+#define PNR_UPG_CERT_EXPIRED MAKE_PN_RESULT(1,SS_UPG,2)
+#define PNR_UPG_CERT_REVOKED MAKE_PN_RESULT(1,SS_UPG,3)
+#define PNR_UPG_RUP_BAD MAKE_PN_RESULT(1,SS_UPG,4)
+
+// auto-config errors
+#define PNR_AUTOCFG_SUCCESS MAKE_PN_RESULT(1,SS_CFG,0)
+#define PNR_AUTOCFG_FAILED MAKE_PN_RESULT(1,SS_CFG,1)
+#define PNR_AUTOCFG_ABORT MAKE_PN_RESULT(1,SS_CFG,2)
+
+#define PNR_FAILED PNR_FAIL
+
+#ifdef _WIN16
+/*typedef UINT MMRESULT;*/
+#else
+#ifdef _WIN32
+#define _HRESULT_TYPEDEF_(_sc) ((HRESULT)_sc)
+#ifdef _WINCE
+#undef E_NOTIMPL
+#undef E_OUTOFMEMORY
+#undef E_INVALIDARG
+#undef E_NOINTERFACE
+#undef E_POINTER
+#undef E_HANDLE
+#undef E_ABORT
+#undef E_FAIL
+#undef E_ACCESSDENIED
+#endif
+#define E_NOTIMPL _HRESULT_TYPEDEF_(0x80004001L)
+#define E_OUTOFMEMORY _HRESULT_TYPEDEF_(0x8007000EL)
+#define E_INVALIDARG _HRESULT_TYPEDEF_(0x80070057L)
+#define E_NOINTERFACE _HRESULT_TYPEDEF_(0x80004002L)
+#define E_POINTER _HRESULT_TYPEDEF_(0x80004003L)
+#define E_HANDLE _HRESULT_TYPEDEF_(0x80070006L)
+#define E_ABORT _HRESULT_TYPEDEF_(0x80004004L)
+#define E_FAIL _HRESULT_TYPEDEF_(0x80004005L)
+#define E_ACCESSDENIED _HRESULT_TYPEDEF_(0x80070005L)
+#else
+#define S_OK PNR_OK
+#define E_NOTIMPL PNR_NOTIMPL
+#define E_INVALIDARG PNR_INVALID_PARAMETER
+#define E_NOINTERFACE PNR_NOINTERFACE
+#define E_POINTER PNR_POINTER
+#define E_HANDLE PNR_HANDLE
+#define E_ABORT PNR_ABORT
+#define E_FAIL PNR_FAIL
+#define E_ACCESSDENIES PNR_ACCESSDENIED
+#endif /* _WIN32 */
+#endif /* _WIN16 */
+
+#define PN_STATUS_OK PNR_OK
+#define PN_STATUS_FAILED E_FAIL
+
+#endif /* _PNRESULT_H_ */
diff --git a/include/realmedia/pntypes.h b/include/realmedia/pntypes.h
new file mode 100644
index 000000000..5021f4e6c
--- /dev/null
+++ b/include/realmedia/pntypes.h
@@ -0,0 +1,492 @@
+/****************************************************************************
+ *
+ * $Id: pntypes.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ * This file defines data types that are too be used in all cross-platform
+ * Progressive Networks modules.
+ *
+ */
+
+#ifndef _PNTYPES_H_
+#define _PNTYPES_H_
+
+#if (defined(_MSC_VER) && (_MSC_VER > 1100) && defined(_BASETSD_H_))
+//#error For VC++ 6.0 or higher you must include pntypes.h before other windows header files.
+#endif
+
+#if defined _WINDOWS || defined _OSF1 || defined _ALPHA
+
+#ifndef RN_LITTLE_ENDIAN
+#define RN_LITTLE_ENDIAN 1
+#endif
+
+#ifndef RN_BIG_ENDIAN
+#define RN_BIG_ENDIAN 0
+#endif
+
+#else
+
+#ifndef RN_LITTLE_ENDIAN
+#define RN_LITTLE_ENDIAN 0
+#endif
+
+#ifndef RN_BIG_ENDIAN
+#define RN_BIG_ENDIAN 1
+#endif
+
+#endif /* !_WINDOWS || !_OSF1 || !_ALPHA */
+
+typedef signed char INT8; /* signed 8 bit value */
+typedef unsigned char UINT8; /* unsigned 8 bit value */
+typedef short int INT16; /* signed 16 bit value */
+typedef unsigned short int UINT16; /* unsigned 16 bit value */
+typedef signed int INT32; /* signed 32 bit value */
+typedef unsigned int UINT32; /* unsigned 32 bit value */
+typedef unsigned int UINT;
+
+#define __LONG_MAX__ 2147483647
+
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 1
+#endif
+
+#ifndef BOOL
+typedef int BOOL; /* signed int value (0 or 1) */
+#endif
+#endif /* _VXWORKS */
+
+#define ARE_BOOLS_EQUAL(a,b) (((a) && (b)) || (!(a) && !(b)))
+
+#ifndef PN_BITFIELD
+typedef unsigned char PN_BITFIELD;
+#endif
+
+#if defined __alpha__
+typedef long int INT64;
+#elif defined _WINDOWS
+typedef __int64 INT64;
+#else
+typedef long long INT64;
+#endif /* _WINDOWS */
+
+/*
+ * Added for ease of reading.
+ * Instead of using __MWERKS__ you can now use _MACINTOSH
+ */
+#ifdef __MWERKS__
+ #if __dest_os==__macos
+ #ifndef _MACINTOSH
+ #define _MACINTOSH 1
+
+ #ifdef powerc
+ #define _MACPPC
+ #else
+ #define _MAC68K
+ #endif
+
+ #endif
+ #endif
+#endif
+
+#if defined (_SCO_SV) && !defined (MAXPATHLEN)
+#include <limits.h>
+#define MAXPATHLEN _POSIX_PATH_MAX
+#define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+#ifdef _SCO_UW
+#include <stdio.h> //for sprintf
+#endif
+
+
+#ifdef __cplusplus
+extern "C" { /* Assume C declarations for C++ */
+#endif /* __cplusplus */
+
+#define LANGUAGE_CODE "EN"
+
+#ifdef _WIN16
+#define MAX_PATH 260
+#define PRODUCT_ID "play16"
+#define PLUS_PRODUCT_ID "plus16"
+#else
+#define PRODUCT_ID "play32"
+#define PLUS_PRODUCT_ID "plus32"
+#endif
+
+
+#define MAX_DISPLAY_NAME 256
+#define PN_INVALID_VALUE (ULONG32)0xffffffff
+
+#define PN_DELETE(x) ((x) ? (delete (x), (x) = 0) : 0)
+#define PN_VECTOR_DELETE(x) ((x) ? (delete [] (x), (x) = 0) : 0)
+#define PN_RELEASE(x) ((x) ? ((x)->Release(), (x) = 0) : 0)
+
+#define RA_FILE_MAGIC_NUMBER 0x2E7261FDL /* RealAudio File Identifier */
+#define RM_FILE_MAGIC_NUMBER 0x2E524D46L /* RealMedia File Identifier */
+#define RIFF_FILE_MAGIC_NUMBER 0x52494646L /* RIFF (AVI etc.) File Identifier */
+
+typedef INT32 LONG32; /* signed 32 bit value */
+typedef UINT32 ULONG32; /* unsigned 32 bit value */
+#ifndef _VXWORKS
+typedef UINT8 UCHAR; /* unsigned 8 bit value */
+#endif
+//typedef INT8 CHAR; /* signed 8 bit value */
+
+typedef UINT8 BYTE;
+typedef INT32 long32;
+typedef UINT32 u_long32;
+
+typedef INT8 Int8;
+typedef UINT8 u_Int8;
+typedef INT16 Int16;
+typedef UINT16 u_Int16;
+typedef INT32 Int32;
+typedef UINT32 u_Int32;
+
+typedef ULONG32 UFIXED32; /* FIXED point value */
+#define FLOAT_TO_FIXED(x) ((UFIXED32) ((x) * (1L << 16) + 0.5))
+#define FIXED_TO_FLOAT(x) ((float) ((((float)x)/ (float)(1L <<16))))
+
+/*
+ * UFIXED32 is a 32 value where the upper 16 bits are the unsigned integer
+ * portion of value, and the lower 16 bits are the fractional part of the
+ * value
+ */
+
+typedef const char* PCSTR;
+
+/*
+ * FOURCC's are 32bit codes used in Tagged File formats like
+ * the RealMedia file format.
+ */
+
+#ifndef PN_FOURCC
+#define PN_FOURCC( ch0, ch1, ch2, ch3 ) \
+ ( (UINT32)(UINT8)(ch0) | ( (UINT32)(UINT8)(ch1) << 8 ) | \
+ ( (UINT32)(UINT8)(ch2) << 16 ) | ( (UINT32)(UINT8)(ch3) << 24 ) )
+#endif
+
+typedef UINT16 PrefKey;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+/*--------------------------------------------------------------------------
+| ZeroInit - initializes a block of memory with zeros
+--------------------------------------------------------------------------*/
+#define ZeroInit(pb) memset((void *)pb,0,sizeof(*(pb)))
+
+#ifndef __MACTYPES__
+typedef unsigned char Byte;
+#endif
+
+/*
+/////////////////////////////////////////////////////////////////////////////
+// PNEXPORT needed for RA.H and RAGUI.H, should be able to be defined
+// and used in cross platform code...
+/////////////////////////////////////////////////////////////////////////////
+*/
+#define PNEXPORT __declspec(dllexport) __stdcall
+#define PNEXPORT_PTR __stdcall *
+
+typedef void (*RANOTIFYPROC)( void* );
+
+#if defined(EXPORT_CLASSES) && defined(_WINDOWS)
+#ifdef _WIN32
+#define PNEXPORT_CLASS __declspec(dllexport)
+#else
+#define PNEXPORT_CLASS __export
+#endif // _WIN32
+#else
+#define PNEXPORT_CLASS
+#endif // EXPORT_CLASSES
+
+
+/*
+ * STDMETHODCALLTYPE
+ */
+#ifndef STDMETHODCALLTYPE
+#if defined(_WIN32) || defined(_MPPC_)
+#ifdef _MPPC_
+#define STDMETHODCALLTYPE __cdecl
+#else
+#define STDMETHODCALLTYPE __stdcall
+#endif
+#elif defined(_WIN16)
+// XXXTW I made the change below on 5/18/98. The __export was causing
+// conflicts with duplicate CPNBuffer methods in being linked into
+// rpupgrd and rpdestpn. Also, the warning was "export imported".
+// This was fixed by removing the __export. The __export is also
+// causing the same problem in pndebug methods.
+//#define STDMETHODCALLTYPE __export far _cdecl
+#define STDMETHODCALLTYPE far _cdecl
+#else
+#define STDMETHODCALLTYPE
+#endif
+#endif
+
+/*
+ * STDMETHODVCALLTYPE (V is for variable number of arguments)
+ */
+#ifndef STDMETHODVCALLTYPE
+#if defined(_WINDOWS) || defined(_MPPC_)
+#define STDMETHODVCALLTYPE __cdecl
+#else
+#define STDMETHODVCALLTYPE
+#endif
+#endif
+
+/*
+ * STDAPICALLTYPE
+ */
+#ifndef STDAPICALLTYPE
+#if defined(_WIN32) || defined(_MPPC_)
+#define STDAPICALLTYPE __stdcall
+#elif defined(_WIN16)
+#define STDAPICALLTYPE __export FAR PASCAL
+#else
+#define STDAPICALLTYPE
+#endif
+#endif
+
+/*
+ * STDAPIVCALLTYPE (V is for variable number of arguments)
+ */
+#ifndef STDAPIVCALLTYPE
+#if defined(_WINDOWS) || defined(_MPPC_)
+#define STDAPIVCALLTYPE __cdecl
+#else
+#define STDAPIVCALLTYPE
+#endif
+#endif
+
+/*
+/////////////////////////////////////////////////////////////////////////////
+//
+// Macro:
+//
+// PN_GET_MAJOR_VERSION()
+//
+// Purpose:
+//
+// Returns the Major version portion of the encoded product version
+// of the RealAudio application interface DLL previously returned from
+// a call to RaGetProductVersion().
+//
+// Parameters:
+//
+// prodVer
+// The encoded product version of the RealAudio application interface
+// DLL previously returned from a call to RaGetProductVersion().
+//
+// Return:
+//
+// The major version number of the RealAudio application interface DLL
+//
+//
+*/
+#define PN_GET_MAJOR_VERSION(prodVer) ((prodVer >> 28) & 0xF)
+
+/*
+/////////////////////////////////////////////////////////////////////////////
+//
+// Macro:
+//
+// PN_GET_MINOR_VERSION()
+//
+// Purpose:
+//
+// Returns the minor version portion of the encoded product version
+// of the RealAudio application interface DLL previously returned from
+// a call to RaGetProductVersion().
+//
+// Parameters:
+//
+// prodVer
+// The encoded product version of the RealAudio application interface
+// DLL previously returned from a call to RaGetProductVersion().
+//
+// Return:
+//
+// The minor version number of the RealAudio application interface DLL
+//
+//
+*/
+#define PN_GET_MINOR_VERSION(prodVer) ((prodVer >> 20) & 0xFF)
+
+/*
+/////////////////////////////////////////////////////////////////////////////
+//
+// Macro:
+//
+// PN_GET_RELEASE_NUMBER()
+//
+// Purpose:
+//
+// Returns the release number portion of the encoded product version
+// of the RealAudio application interface DLL previously returned from
+// a call to RaGetProductVersion().
+//
+// Parameters:
+//
+// prodVer
+// The encoded product version of the RealAudio application interface
+// DLL previously returned from a call to RaGetProductVersion().
+//
+// Return:
+//
+// The release number of the RealAudio application interface DLL
+//
+//
+*/
+#define PN_GET_RELEASE_NUMBER(prodVer) ((prodVer >> 12) & 0xFF)
+
+/*
+/////////////////////////////////////////////////////////////////////////////
+//
+// Macro:
+//
+// PN_GET_BUILD_NUMBER()
+//
+// Purpose:
+//
+// Returns the build number portion of the encoded product version
+// of the RealAudio application interface DLL previously returned from
+// a call to RaGetProductVersion().
+//
+// Parameters:
+//
+// prodVer
+// The encoded product version of the RealAudio application interface
+// DLL previously returned from a call to RaGetProductVersion().
+//
+// Return:
+//
+// The build number of the RealAudio application interface DLL
+//
+//
+*/
+#define PN_GET_BUILD_NUMBER(prodVer) (prodVer & 0xFFF)
+
+/*
+/////////////////////////////////////////////////////////////////////////////
+//
+// Macro:
+//
+// PN_ENCODE_PROD_VERSION()
+//
+// Purpose:
+//
+// Encodes a major version, minor version, release number, and build
+// number into a product version for testing against the product version
+// of the RealAudio application interface DLL returned from a call to
+// RaGetProductVersion().
+//
+// Parameters:
+//
+// major
+// The major version number to encode.
+//
+// mimor
+// The minor version number to encode.
+//
+// release
+// The release number to encode.
+//
+// build
+// The build number to encode.
+//
+// Return:
+//
+// The encoded product version.
+//
+// NOTES:
+//
+// Macintosh DEVELOPERS especially, make sure when using the PN_ENCODE_PROD_VERSION
+// that you are passing a ULONG32 or equivalent for each of the parameters.
+// By default a number passed in as a constant is a short unless it requires more room,
+// so designate the constant as a long by appending a L to the end of it.
+// Example:
+// WORKS:
+// PN_ENCODE_VERSION(2L,1L,1L,0L);
+//
+// DOES NOT WORK:
+// PN_ENCODE_VERSION(2,1,1,0);
+//
+*/
+
+#define PN_ENCODE_PROD_VERSION(major,minor,release,build) \
+ ((ULONG32)((ULONG32)major << 28) | ((ULONG32)minor << 20) | \
+ ((ULONG32)release << 12) | (ULONG32)build)
+
+#define PN_ENCODE_ADD_PRIVATE_FIELD(ulversion,ulprivate) \
+ ((ULONG32)((ULONG32)(ulversion) & (UINT32)0xFFFFFF00) | (ULONG32)(ulprivate) )
+
+#define PN_EXTRACT_PRIVATE_FIELD(ulversion)(ulversion & (UINT32)0xFF)
+
+#define PN_EXTRACT_MAJOR_VERSION(ulversion) ((ulversion)>>28)
+#define PN_EXTRACT_MINOR_VERSION(ulversion) (((ulversion)>>20) & (UINT32)0xFF)
+
+#ifdef _AIX
+ typedef int tv_sec_t;
+ typedef int tv_usec_t;
+#elif (defined _HPUX)
+ typedef UINT32 tv_sec_t;
+ typedef INT32 tv_usec_t;
+#else
+ typedef INT32 tv_sec_t;
+ typedef INT32 tv_usec_t;
+#endif /* _AIX */
+
+#ifndef VOLATILE
+#define VOLATILE volatile
+#endif
+
+#ifdef __GNUC__
+#define PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME friend class SilenceGCCWarnings;
+#else
+#define PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
+#endif
+
+typedef ULONG32 PNXRESOURCE;
+typedef ULONG32 PNXHANDLE;
+typedef ULONG32 PNXIMAGE;
+
+// Macro which indicates that a particular variable is unused. Use this to
+// avoid compiler warnings.
+//#define UNUSED(x)
+
+/*
+ * For VC++ 6.0 and higher we need to include this substitute header file
+ * in place of the standard header file basetsd.h, since this standard
+ * header file conflicts with our definitions.
+ */
+#if defined(_MSC_VER) && (_MSC_VER > 1100)
+#include "pnbastsd.h"
+#ifdef _WINCE
+#define _TYPES_H_
+#endif
+#endif
+
+#ifdef _VXWORKS
+/* throw in some defines for VXWORKS */
+#define MAXPATHLEN 255
+
+
+#endif /* _PNTYPES_H_ */
diff --git a/include/realmedia/pnwintyp.h b/include/realmedia/pnwintyp.h
new file mode 100644
index 000000000..5c9c6f426
--- /dev/null
+++ b/include/realmedia/pnwintyp.h
@@ -0,0 +1,278 @@
+/****************************************************************************
+ *
+ * $Id: pnwintyp.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ *
+ * Defines the public classes for cross platform windows used in various
+ * Progressive Networks modules.
+ *
+ */
+
+#ifndef _PNWINTYP_H_
+#define _PNWINTYP_H_
+
+#include "pntypes.h" /* Needed at least for various defines and types. */
+
+#ifdef _WIN16
+#define BI_BITFIELDS 3L
+#endif
+
+/****************************************************************************
+ *
+ * Structure:
+ *
+ * PNxSize
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a size.
+ *
+ */
+typedef struct PNEXPORT_CLASS _PNxSize
+{
+ INT32 cx;
+ INT32 cy;
+} PNxSize;
+
+/****************************************************************************
+ *
+ * Structure:
+ *
+ * PNxPoint
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a point.
+ *
+ */
+typedef struct PNEXPORT_CLASS _PNxPoint
+{
+ INT32 x;
+ INT32 y;
+} PNxPoint;
+
+/****************************************************************************
+ *
+ * Structure:
+ *
+ * PNxRect
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a rectangle.
+ *
+ */
+typedef struct PNEXPORT_CLASS _PNxRect
+{
+ INT32 left;
+ INT32 top;
+ INT32 right;
+ INT32 bottom;
+} PNxRect;
+
+#define PNxRECT_WIDTH(r) ((r).right - (r).left)
+#define PNxRECT_HEIGHT(r) ((r).bottom - (r).top)
+
+/****************************************************************************
+ *
+ * Structure:
+ *
+ * PNxWindow
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a window. This struct is sufficiently
+ * wide to describe parent or child windows in Windows, MacOS, and
+ * various flavours of X-Windows.
+ *
+ * Data Members:
+ *
+ * void* window
+ * platform specific window handle
+ *
+ * ULONG32 x, y
+ * position of top left corner relative to a client page
+ *
+ * ULONG32 width, height
+ * maximum window size
+ *
+ * PNxRect clipRect;
+ * clipping rectangle in port coordinates
+ *
+ */
+typedef struct PNEXPORT_CLASS _PNxWindow
+{
+ /* NOTE: The window parameter is NOT guaranteed to be unique for every
+ corresponding CPNWindow. Use PNxWindowID if this is desired. */
+ void* window;
+ ULONG32 x;
+ ULONG32 y;
+ ULONG32 width;
+ ULONG32 height;
+ PNxRect clipRect;
+ #ifdef _UNIX
+ void * display;
+ #endif
+} PNxWindow;
+
+typedef void* PNxWindowID;
+
+/****************************************************************************
+ *
+ * Structure:
+ *
+ * PNxEvent
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a event. This struct is sufficiently
+ * wide to describe an event in Windows, MacOS, and various flavours of
+ * X-Windows.
+ *
+ * Data Members:
+ *
+ * void* event
+ * platform specific event ID, can also be one of the several PNxMSG_*
+ * event IDs which map onto existing platform specific event IDs
+ * UNIX: X Event Type
+ *
+ * void* window
+ * platform specific window handle
+ * UNIX: X Window ID
+ *
+ * void* param1
+ * message specific parameter
+ * UNIX: Display*
+ *
+ * void* param2
+ * Mac: for UpdateEvt, either NULL or RgnHandle to be filled with updated area
+ * UNIX: Native XEvent*
+ * RMA_SURFACE_UPDATE PNxWindow*
+ *
+ */
+typedef struct PNEXPORT_CLASS _PNxEvent
+{
+ ULONG32 event; /* IN */
+ void* window; /* IN */
+ void* param1; /* IN */
+ void* param2; /* IN */
+
+ UINT32 result; /* OUT */
+ BOOL handled; /* OUT */
+} PNxEvent;
+
+
+/****************************************************************************
+ *
+ * typedef:
+ *
+ * PNxRegion
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a region. This typedef is redefined as
+ * appropriate to describe a region in Windows, MacOS, and various
+ * flavours of X-Windows.
+ *
+ */
+typedef void* PNxRegion;
+
+/****************************************************************************
+ *
+ * typedef:
+ *
+ * PNxDC
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a device context. This typedef is redefined as
+ * appropriate to describe a device context in Windows, MacOS, and various
+ * flavours of X-Windows.
+ *
+ */
+typedef void* PNxDC;
+
+/****************************************************************************
+ *
+ * typedef:
+ *
+ * PNxFont
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a font. This typedef is redefined as
+ * appropriate to describe a font in Windows, MacOS, and various
+ * flavours of X-Windows.
+ *
+ */
+typedef void* PNxFont;
+
+/****************************************************************************
+ *
+ * typedef:
+ *
+ * PNxColor
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a color. This typedef is redefined as
+ * appropriate to describe a font in Windows, MacOS, and various
+ * flavours of X-Windows.
+ *
+ */
+typedef ULONG32 PNxColor;
+
+/****************************************************************************
+ *
+ * typedef:
+ *
+ * PNxIcon
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a icon. This typedef is redefined as
+ * appropriate to describe a font in Windows, MacOS, and various
+ * flavours of X-Windows.
+ *
+ */
+typedef void* PNxIcon;
+
+/****************************************************************************
+ *
+ * typedef:
+ *
+ * PNxMenu
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a menu. This typedef is redefined as
+ * appropriate to describe a font in Windows, MacOS, and various
+ * flavours of X-Windows.
+ *
+ */
+typedef void* PNxMenu;
+
+/****************************************************************************
+ *
+ * typedef:
+ *
+ * PNxCursor
+ *
+ * Purpose:
+ *
+ * Cross Platform definition of a cursor. This typedef is redefined as
+ * appropriate to describe a cursor in Windows, MacOS, and various
+ * flavours of X-Windows.
+ *
+ */
+typedef void* PNxCursor;
+
+#endif /* _PNWINTYP_H_ */
diff --git a/include/realmedia/pxresult.h b/include/realmedia/pxresult.h
new file mode 100644
index 000000000..9bbf61695
--- /dev/null
+++ b/include/realmedia/pxresult.h
@@ -0,0 +1,9 @@
+#ifndef _PXRESULT_H
+#define _PXRESULT_H
+
+#define PNR_UNKNOWN_IMAGE MAKE_PN_RESULT(1,SS_RPX,0)
+#define PNR_UNKNOWN_EFFECT MAKE_PN_RESULT(1,SS_RPX,1)
+#define PNR_SENDIMAGE_ABORTED MAKE_PN_RESULT(0,SS_RPX,2)
+#define PNR_SENDEFFECT_ABORTED MAKE_PN_RESULT(0,SS_RPX,3)
+
+#endif
diff --git a/include/realmedia/rmaaconf.h b/include/realmedia/rmaaconf.h
new file mode 100644
index 000000000..4d9188960
--- /dev/null
+++ b/include/realmedia/rmaaconf.h
@@ -0,0 +1,181 @@
+/****************************************************************************
+ *
+ *
+ * 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_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,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_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,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_ */
diff --git a/include/realmedia/rmaallow.h b/include/realmedia/rmaallow.h
new file mode 100644
index 000000000..cdb550215
--- /dev/null
+++ b/include/realmedia/rmaallow.h
@@ -0,0 +1,272 @@
+/****************************************************************************
+ *
+ * $Id: rmaallow.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ * Interfaces related to allowance plugins.
+ *
+ */
+
+#ifndef _RMAALLOW_H_
+#define _RMAALLOW_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMARequest IRMARequest;
+typedef _INTERFACE IRMAPlayerConnectionAdviseSinkManager IRMAPlayerConnectionAdviseSinkManager;
+typedef _INTERFACE IRMAPlayerConnectionAdviseSink IRMAPlayerConnectionAdviseSink;
+typedef _INTERFACE IRMAPlayerConnectionResponse IRMAPlayerConnectionResponse;
+typedef _INTERFACE IRMAPlayerController IRMAPlayerController;
+typedef _INTERFACE IRMAPlayerControllerProxyRedirect IRMAPlayerControllerProxyRedirect;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPlayerConnectionAdviseSink
+ *
+ * Purpose:
+ *
+ * Advise Sink which receives notification whenever a new player
+ * connects to the server.
+ *
+ * IID_IRMAPlayerConnectionAdviseSink:
+ *
+ * {00002600-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPlayerConnectionAdviseSink, 0x00002600, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPlayerConnectionAdviseSink
+
+DECLARE_INTERFACE_(IRMAPlayerConnectionAdviseSink, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* OnConnection is called when a new player has connected to the
+ * server. If the result is PNR_OK, then the plugin will be notified
+ * when certain events occur in the player's life cycle.
+ */
+ STDMETHOD(OnConnection) (THIS_
+ IRMAPlayerConnectionResponse* pResponse) PURE;
+
+ /* SetPlayerController is called by the server core to provide us with
+ * an interface which can stop, alert, redirect or otherwise control
+ * the player we are receiving notifications about.
+ */
+ STDMETHOD(SetPlayerController) (THIS_
+ IRMAPlayerController* pPlayerController) PURE;
+
+ /* SetRegistryID is called by the server core to provide us with the
+ * ID for this Player in the server registry. The plugin can use this
+ * registry ID to find out various information about the connected player.
+ */
+ STDMETHOD(SetRegistryID) (THIS_ UINT32 ulPlayerRegistryID) PURE;
+
+ STDMETHOD(OnURL) (THIS_ IRMARequest* pRequest) PURE;
+ STDMETHOD(OnBegin) (THIS) PURE;
+ STDMETHOD(OnStop) (THIS) PURE;
+ STDMETHOD(OnPause) (THIS) PURE;
+ STDMETHOD(OnDone) (THIS) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPlayerConnectionResponse
+ *
+ * Purpose:
+ *
+ * Response object for the PlayerConnectionAdviseSink.
+ *
+ * IID_IRMAPlayerConnectionResponse:
+ *
+ * {00002601-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPlayerConnectionResponse, 0x00002601, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPlayerConnectionResponse
+
+DECLARE_INTERFACE_(IRMAPlayerConnectionResponse, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ STDMETHOD(OnConnectionDone) (THIS_ PN_RESULT status) PURE;
+ STDMETHOD(OnURLDone) (THIS_ PN_RESULT status) PURE;
+ STDMETHOD(OnBeginDone) (THIS_ PN_RESULT status) PURE;
+ STDMETHOD(OnStopDone) (THIS_ PN_RESULT status) PURE;
+ STDMETHOD(OnPauseDone) (THIS_ PN_RESULT status) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPlayerController
+ *
+ * Purpose:
+ *
+ * Object created by the server core and given to the
+ * IRMAPlayerConnectionResponse object so that the response object
+ * can control the connected player.
+ *
+ * IID_IRMAPlayerController:
+ *
+ * {00002602-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPlayerController, 0x00002602, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPlayerController
+
+DECLARE_INTERFACE_(IRMAPlayerController, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ STDMETHOD(Pause) (THIS) PURE;
+ STDMETHOD(Resume) (THIS) PURE;
+ STDMETHOD(Disconnect) (THIS) PURE;
+ STDMETHOD(AlertAndDisconnect) (THIS_ IRMABuffer* pAlert) PURE;
+
+ /* HostRedirect is called by a PlayerConnectionAdviseSink to redirect
+ * this player to another host and/or port, for the same URL. This
+ * method works with both RTSP and PNA protocols.
+ */
+ STDMETHOD(HostRedirect) (THIS_ IRMABuffer* pHost,
+ UINT16 nPort) PURE;
+
+ /* NetworkRedirect is called by a PlayerConnectionAdviseSink to redirect
+ * this player to another URL. Note: This method is only available for
+ * redirecting an RTSP player connection to another RTSP URL.
+ */
+ STDMETHOD(NetworkRedirect) (THIS_ IRMABuffer* pURL,
+ UINT32 ulSecsFromNow) PURE;
+
+ /* Redirect is called by a PlayerConnectionAdviseSink to redirect
+ * this player to another URL on the same server. For example, if
+ * pPartialURL were set to "welcome.rm", the player would be redirected
+ * to "current_protocol://current_host:current_port/welcome.rm". This
+ * method works with both RTSP and PNA protocols.
+ */
+ STDMETHOD(Redirect) (THIS_ IRMABuffer* pPartialURL) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPlayerConnectionAdviseSinkManager
+ *
+ * Purpose:
+ *
+ * Manages the creation of IRMAPlayerConnectionAdviseSink objects
+ *
+ * IID_IRMAPlayerConnectionAdviseSinkManager:
+ *
+ * {00002603-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPlayerConnectionAdviseSinkManager, 0x00002603, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPlayerConnectionAdviseSinkManager
+
+DECLARE_INTERFACE_(IRMAPlayerConnectionAdviseSinkManager, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ STDMETHOD(CreatePlayerConnectionAdviseSink)
+ (THIS_
+ REF(IRMAPlayerConnectionAdviseSink*) pPCAdviseSink) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPlayerControllerProxyRedirect
+ *
+ * Purpose:
+ *
+ * QueryInterfaced from IRMAPlayerController. Allows 305 proxy redirect
+ * to be issued (as per RTSP spec).
+ *
+ * IID_IRMAPlayerControllerProxyRedirect:
+ *
+ * {00002607-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPlayerControllerProxyRedirect, 0x00002607, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPlayerControllerProxyRedirect
+
+DECLARE_INTERFACE_(IRMAPlayerControllerProxyRedirect, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * This URL is just a hostname / port. It must be formatted like this:
+ * "rtsp://audio.real.com:554/".
+ *
+ * NOTE: You can *only* call this method between OnURL() and OnURLDone().
+ * NOTE: This method only works on RTSP connections.
+ */
+ STDMETHOD(NetworkProxyRedirect) (THIS_ IRMABuffer* pURL) PURE;
+};
+
+#endif /* _RMAALLOW_H_ */
diff --git a/include/realmedia/rmaasm.h b/include/realmedia/rmaasm.h
new file mode 100644
index 000000000..cba8844de
--- /dev/null
+++ b/include/realmedia/rmaasm.h
@@ -0,0 +1,285 @@
+/****************************************************************************
+ *
+ * $Id: rmaasm.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Interfaces for Adaptive Stream Management and
+ * Backchannel Support.
+ *
+ */
+
+#ifndef _RMAASM_H_
+#define _RMAASM_H_
+
+/*
+ * Forward declarations of some interfaces defined here-in.
+ */
+typedef _INTERFACE IRMAPacket IRMAPacket;
+typedef _INTERFACE IRMABackChannel IRMABackChannel;
+typedef _INTERFACE IRMAASMSource IRMAASMSource;
+typedef _INTERFACE IRMAASMStreamSink IRMAASMStreamSink;
+typedef _INTERFACE IRMAASMStream IRMAASMStream;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMABackChannel
+ *
+ * Purpose:
+ *
+ * Backchannel interface to be used by renderers and implemented by
+ * FileFormat Plugins
+ *
+ * IID_IRMABackChannel:
+ *
+ * {00001500-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMABackChannel, 0x00001500, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMABackChannel
+
+DECLARE_INTERFACE_(IRMABackChannel, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMABackChannel method
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMABackChannel::PacketReady
+ * Purpose:
+ * A back channel packet sent from Renderer to FileFormat plugin.
+ */
+ STDMETHOD(PacketReady) (THIS_
+ IRMAPacket* pPacket) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAASMSource
+ *
+ * Purpose:
+ *
+ * This interface is implemented by file formats so that they can
+ * act on ASM Subscribe and Unsubscribe actions.
+ *
+ * IID_IRMAASMSource:
+ *
+ * {00001501-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAASMSource, 0x00001501, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAASMSource
+
+DECLARE_INTERFACE_(IRMAASMSource, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAASMSource methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAASMSource::Subscribe
+ * Purpose:
+ * Called to inform a file format that a subscription has occurred,
+ * to rule number uRuleNumber, for stream uStreamNumber.
+ */
+ STDMETHOD(Subscribe) (THIS_
+ UINT16 uStreamNumber,
+ UINT16 uRuleNumber) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAASMSource::Unsubscribe
+ * Purpose:
+ * Called to inform a file format that a unsubscription has occurred,
+ * to rule number uRuleNumber, for stream uStreamNumber.
+ */
+ STDMETHOD(Unsubscribe) (THIS_
+ UINT16 uStreamNumber,
+ UINT16 uRuleNumber) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAASMStream
+ *
+ * Purpose:
+ * This interface is implemented by the client core. Top level clients
+ * renderers, etc can query for this interface off of IRMAStream. This
+ * interface allows you to subscribe and unsubscribe to certain rules,
+ * and it also allows you to add a advise sink for these events.
+ *
+ * IID_IRMAASMStream:
+ *
+ * {00001502-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAASMStream, 0x00001502, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAASMStream
+
+DECLARE_INTERFACE_(IRMAASMStream, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAASMStream methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAASMStream::AddASMStreamSink
+ * Purpose:
+ * Add an advise sink for getting subscribe and unsubscribe
+ * notifications.
+ */
+ STDMETHOD(AddStreamSink) (THIS_
+ IRMAASMStreamSink* pASMStreamSink) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAASMStream::RemoveStreamSink
+ * Purpose:
+ * Remove an advise sink for getting subscribe and unsubscribe
+ * notifications.
+ */
+ STDMETHOD(RemoveStreamSink) (THIS_
+ IRMAASMStreamSink* pASMStreamSink) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAASMStream::Subscribe
+ * Purpose:
+ * Called by renderers and possibly even top level clients to
+ * inform the core to subscribe to a particular rule number for
+ * this stream.
+ */
+ STDMETHOD(Subscribe) (THIS_
+ UINT16 uRuleNumber) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAASMStream::Unsubscribe
+ * Purpose:
+ * Called by renderers and possibly even top level clients to
+ * inform the core to unsubscribe to a particular rule number for
+ * this stream.
+ */
+ STDMETHOD (Unsubscribe) (THIS_
+ UINT16 uRuleNumber) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAASMStreamSink
+ *
+ * Purpose:
+ * This is a advise sink for getting notification about subscriptions
+ * and unsubscriptions for a stream.
+ *
+ * IID_IRMAASMStream:
+ *
+ * {00001503-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAASMStreamSink, 0x00001503, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAASMStreamSink
+
+DECLARE_INTERFACE_(IRMAASMStreamSink, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAASMStreamSink methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAASMStreamSink::OnSubscribe
+ * Purpose:
+ * Called to inform you that a subscribe has occurred.
+ */
+ STDMETHOD (OnSubscribe) (THIS_
+ UINT16 uRuleNumber) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAASMStreamSink::OnUnsubscribe
+ * Purpose:
+ * Called to inform you that a unsubscribe has occurred.
+ */
+ STDMETHOD (OnUnsubscribe) (THIS_
+ UINT16 uRuleNumber) PURE;
+};
+
+#endif /*_RMAASM_H_*/
diff --git a/include/realmedia/rmaausvc.h b/include/realmedia/rmaausvc.h
new file mode 100644
index 000000000..ce8542116
--- /dev/null
+++ b/include/realmedia/rmaausvc.h
@@ -0,0 +1,1261 @@
+/****************************************************************************
+ *
+ * $Id: rmaausvc.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Audio Services Interfaces.
+ *
+ */
+
+#ifndef _RMAAUSVC_H_
+#define _RMAAUSVC_H_
+
+/****************************************************************************
+ *
+ * Forward declarations of some interfaces defined here-in.
+ */
+typedef _INTERFACE IRMAAudioPlayer IRMAAudioPlayer;
+typedef _INTERFACE IRMAAudioPlayerResponse IRMAAudioPlayerResponse;
+typedef _INTERFACE IRMAAudioStream IRMAAudioStream;
+typedef _INTERFACE IRMAAudioStream2 IRMAAudioStream2;
+typedef _INTERFACE IRMAAudioDevice IRMAAudioDevice;
+typedef _INTERFACE IRMAAudioDeviceResponse IRMAAudioDeviceResponse;
+typedef _INTERFACE IRMAAudioHook IRMAAudioHook;
+typedef _INTERFACE IRMAAudioStreamInfoResponse IRMAAudioStreamInfoResponse;
+typedef _INTERFACE IRMAVolume IRMAVolume;
+typedef _INTERFACE IRMAVolumeAdviseSink IRMAVolumeAdviseSink;
+typedef _INTERFACE IRMADryNotification IRMADryNotification;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAValues IRMAValues;
+
+/****************************************************************************
+ *
+ * Audio Services Data Structures
+ */
+typedef struct _RMAAudioFormat
+{
+ UINT16 uChannels; /* Num. of Channels (1=Mono, 2=Stereo, etc. */
+ UINT16 uBitsPerSample; /* 8 or 16 */
+ ULONG32 ulSamplesPerSec;/* Sampling Rate */
+ UINT16 uMaxBlockSize; /* Max Blocksize */
+} RMAAudioFormat;
+
+typedef enum _AudioStreamType
+{
+ STREAMING_AUDIO = 0,
+ INSTANTANEOUS_AUDIO = 1,
+ TIMED_AUDIO = 2
+} AudioStreamType;
+
+typedef struct _RMAAudioData
+{
+ IRMABuffer* pData; /* Audio data */
+ ULONG32 ulAudioTime; /* Start time in milliseconds */
+ AudioStreamType uAudioStreamType;
+} RMAAudioData;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioPlayer
+ *
+ * Purpose:
+ *
+ * This interface provides access to the Audio Player services. Use this
+ * interface to create audio streams, "hook" post-mixed audio data, and to
+ * control volume levels.
+ *
+ * IID_IRMAAudioPlayer:
+ *
+ * {00000700-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioPlayer, 0x00000700, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioPlayer
+
+DECLARE_INTERFACE_(IRMAAudioPlayer, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioPlayer methods
+ */
+ /************************************************************************
+ * Method:
+ * IRMAAudioPlayer::CreateAudioStream
+ * Purpose:
+ * Call this to create an audio stream.
+ */
+ STDMETHOD(CreateAudioStream) (THIS_
+ IRMAAudioStream** /*OUT*/ pAudioStream
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioPlayer::AddPostMixHook
+ * Purpose:
+ * Call this to hook audio data after all audio streams in this
+ * have been mixed.
+ */
+ STDMETHOD(AddPostMixHook) (THIS_
+ IRMAAudioHook* /*IN*/ pHook,
+ const BOOL /*IN*/ bDisableWrite,
+ const BOOL /*IN*/ bFinal
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioPlayer::RemovePostMixHook
+ * Purpose:
+ * Call this to remove an already added post hook.
+ */
+ STDMETHOD(RemovePostMixHook) (THIS_
+ IRMAAudioHook* /*IN*/ pHook
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioPlayer::GetAudioStreamCount
+ * Purpose:
+ * Get the number of audio streams currently active in the
+ * audio player. Since streams can be added mid-presentation
+ * this function may return different values on different calls.
+ * If the user needs to know about all the streams as they get
+ * get added to the player, IRMAAudioStreamInfoResponse should
+ * be implemented and passed in SetStreamInfoResponse.
+ */
+ STDMETHOD_(UINT16,GetAudioStreamCount) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioPlayer::GetAudioStream
+ * Purpose:
+ * Get an audio stream at position given.
+ */
+ STDMETHOD_(IRMAAudioStream*,GetAudioStream) (THIS_
+ UINT16 /*IN*/ uIndex
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioPlayer::SetStreamInfoResponse
+ * Purpose:
+ * Set a stream info response interface. A client must implement
+ * an IRMAAudioStreamInfoResponse and then call this method with
+ * the IRMAAudioStreamInfoResponse as the parameter. The audio
+ * player will call IRMAAudioStreamInfoResponse::OnStreamsReady
+ * with the total number of audio streams associated with this
+ * audio player.
+ */
+ STDMETHOD(SetStreamInfoResponse) (THIS_
+ IRMAAudioStreamInfoResponse* /*IN*/ pResponse
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioPlayer::RemoveStreamInfoResponse
+ * Purpose:
+ * Remove stream info response that was added earlier
+ */
+ STDMETHOD(RemoveStreamInfoResponse) (THIS_
+ IRMAAudioStreamInfoResponse* /*IN*/ pResponse
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioPlayer::GetAudioVolume
+ * Purpose:
+ * Get the audio player's volume interface. This volume controls
+ * the volume level of all the mixed audio streams for this
+ * audio player.
+ */
+ STDMETHOD_(IRMAVolume*,GetAudioVolume) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioPlayer::GetDeviceVolume
+ * Purpose:
+ * Get the audio device volume interface. This volume controls
+ * the audio device volume levels.
+ */
+ STDMETHOD_(IRMAVolume*,GetDeviceVolume) (THIS) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioPlayerResponse
+ *
+ * Purpose:
+ *
+ * This interface provides access to the Audio Player Response. Use this
+ * to receive audio player playback notifications. Your implementation of
+ * OnTimeSync() is called with the current audio playback time (millisecs).
+ * This interface is currently to be used ONLY by the RMA engine internally.
+ *
+ * IID_IRMAAudioPlayerResponse:
+ *
+ * {00000701-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioPlayerResponse, 0x00000701, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioPlayerResponse
+
+DECLARE_INTERFACE_(IRMAAudioPlayerResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioPlayerResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioPlayerResponse::OnTimeSync
+ * Purpose:
+ * This method is called with the current audio playback time.
+ */
+ STDMETHOD(OnTimeSync) (THIS_
+ ULONG32 /*IN*/ ulTimeEnd
+ ) PURE;
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioStream
+ *
+ * Purpose:
+ *
+ * This interface provides access to an Audio Stream. Use this to play
+ * audio, "hook" audio stream data, and to get audio stream information.
+ *
+ * IID_IRMAAudioStream:
+ *
+ * {00000702-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioStream, 0x00000702, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMAAudioStream
+
+DECLARE_INTERFACE_(IRMAAudioStream, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioStream methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioStream::Init
+ * Purpose:
+ * Initialize an audio stream with the given audio format. The
+ * IRMAValues contains stream identification information.
+ */
+ STDMETHOD(Init) (THIS_
+ const RMAAudioFormat* /*IN*/ pAudioFormat,
+ IRMAValues* /*IN*/ pValues
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioStream::Write
+ * Purpose:
+ * Write audio data to Audio Services.
+ *
+ * NOTE: If the renderer loses packets and there is no loss
+ * correction, then the renderer should write the next packet
+ * using a meaningful start time. Audio Services will play
+ * silence where packets are missing.
+ */
+ STDMETHOD(Write) (THIS_
+ RMAAudioData* /*IN*/ pAudioData
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioStream::AddPreMixHook
+ * Purpose:
+ * Use this to "hook" audio stream data prior to the mixing.
+ * Set bDisableWrite to TRUE to prevent this audio stream data
+ * from being mixed with other audio stream data associated
+ * with this audio player.
+ */
+ STDMETHOD(AddPreMixHook) (THIS_
+ IRMAAudioHook* /*IN*/ pHook,
+ const BOOL /*IN*/ bDisableWrite
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioStream::RemovePreMixHook
+ * Purpose:
+ * Use this to remove an already added "hook".
+ */
+ STDMETHOD(RemovePreMixHook) (THIS_
+ IRMAAudioHook* /*IN*/ pHook
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioStream::AddDryNotification
+ * Purpose:
+ * Use this to add a notification response object to get
+ * notifications when audio stream is running dry.
+ */
+ STDMETHOD(AddDryNotification) (THIS_
+ IRMADryNotification* /*IN*/ pNotification
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioStream::GetStreamInfo
+ * Purpose:
+ * Use this to get information specific to this audio stream.
+ */
+ STDMETHOD_(IRMAValues*,GetStreamInfo) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioStream::GetAudioVolume
+ * Purpose:
+ * Get the audio stream's volume interface. This volume controls
+ * the volume level for this audio stream.
+ */
+ STDMETHOD_(IRMAVolume*,GetAudioVolume) (THIS) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioDevice
+ *
+ * Purpose:
+ *
+ * Object that exports audio device API
+ * This interface is currently to be used ONLY by the RMA engine
+ * internally.
+ *
+ * IID_IRMAAudioDevice:
+ *
+ * {00000703-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioDevice, 0x00000703, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioDevice
+
+DECLARE_INTERFACE_(IRMAAudioDevice, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioDevice methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::Open
+ * Purpose:
+ * The caller calls this to open the audio device using the audio
+ * format given.
+ */
+ STDMETHOD(Open) (THIS_
+ const RMAAudioFormat* /*IN*/ pAudioFormat,
+ IRMAAudioDeviceResponse* /*IN*/ pStreamResponse) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::Close
+ * Purpose:
+ * The caller calls this to close the audio device.
+ */
+ STDMETHOD(Close) (THIS_
+ const BOOL /*IN*/ bFlush ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::Resume
+ * Purpose:
+ * The caller calls this to start or resume audio playback.
+ */
+ STDMETHOD(Resume) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::Pause
+ * Purpose:
+ * The caller calls this to pause the audio device. If bFlush is
+ * TRUE, any buffers in the audio device will be flushed; otherwise,
+ * the buffers are played.
+ */
+ STDMETHOD(Pause) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::Write
+ * Purpose:
+ * The caller calls this to write an audio buffer.
+ */
+ STDMETHOD(Write) (THIS_
+ const RMAAudioData* /*IN*/ pAudioData) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::InitVolume
+ * Purpose:
+ * The caller calls this to inform the audio stream of the client's
+ * volume range. The audio stream maps the client's volume range
+ * into the audio device volume range.
+ * NOTE: This function returns TRUE if volume is supported by this
+ * audio device.
+ */
+ STDMETHOD_(BOOL,InitVolume) (THIS_
+ const UINT16 /*IN*/ uMinVolume,
+ const UINT16 /*IN*/ uMaxVolume) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::SetVolume
+ * Purpose:
+ * The caller calls this to set the audio device volume level.
+ */
+ STDMETHOD(SetVolume) (THIS_
+ const UINT16 /*IN*/ uVolume) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::GetVolume
+ * Purpose:
+ * The caller calls this to get the audio device volume level.
+ */
+ STDMETHOD_(UINT16,GetVolume) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::Reset
+ * Purpose:
+ * The caller calls this to reset the audio device.
+ */
+ STDMETHOD(Reset) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::Drain
+ * Purpose:
+ * The caller calls this to drain the audio device.
+ */
+ STDMETHOD(Drain) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::CheckFormat
+ * Purpose:
+ * The caller calls this to check the input format with the
+ * audio device format.
+ */
+ STDMETHOD(CheckFormat) (THIS_
+ const RMAAudioFormat* /*IN*/ pAudioFormat ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDevice::GetCurrentAudioTime
+ * Purpose:
+ * The caller calls this to get current system audio time.
+ */
+ STDMETHOD(GetCurrentAudioTime) (THIS_
+ REF(ULONG32) /*OUT*/ ulCurrentTime) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ * IRMAAudioDeviceResponse
+ *
+ * Purpose:
+ *
+ * Object that exports audio device Response API
+ * This interface is currently to be used ONLY by the RMA engine
+ * internally.
+ *
+ * IID_IRMAAudioDeviceResponse:
+ *
+ * {00000704-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioDeviceResponse, 0x00000704, 0x901, 0x11d1, 0x8b, 0x6,
+ 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioDeviceResponse
+
+DECLARE_INTERFACE_(IRMAAudioDeviceResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioDeviceResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDeviceResponse::OnTimeSync
+ * Purpose:
+ * Notification interface provided by users of the IRMAAudioDevice
+ * interface. This method is called by the IRMAAudioDevice when
+ * audio playback occurs.
+ */
+ STDMETHOD(OnTimeSync) (THIS_
+ ULONG32 /*IN*/ ulTimeEnd) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioHook
+ *
+ * Purpose:
+ *
+ * Clients must implement this interface to access pre- or post-mixed
+ * audio data. Use this interface to get post processed audio buffers and
+ * their associated audio format.
+ *
+ * IID_IRMAAudioHook:
+ *
+ * {00000705-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioHook, 0x00000705, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioHook
+
+DECLARE_INTERFACE_(IRMAAudioHook, IUnknown)
+{
+ /*
+ * IUnknown methods!
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioHook methods
+ */
+ /************************************************************************
+ * Method:
+ * IRMAAudioHook::OnInit
+ * Purpose:
+ * Audio Services calls OnInit() with the audio data format of the
+ * audio data that will be provided in the OnBuffer() method.
+ */
+ STDMETHOD(OnInit) (THIS_
+ RMAAudioFormat* /*IN*/ pFormat) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioHook::OnBuffer
+ * Purpose:
+ * Audio Services calls OnBuffer() with audio data packets. The
+ * renderer should not modify the data in the IRMABuffer part of
+ * pAudioInData. If the renderer wants to write a modified
+ * version of the data back to Audio Services, then it should
+ * create its own IRMABuffer, modify the data and then associate
+ * this buffer with the pAudioOutData->pData member.
+ */
+ STDMETHOD(OnBuffer) (THIS_
+ RMAAudioData* /*IN*/ pAudioInData,
+ RMAAudioData* /*OUT*/ pAudioOutData) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioStreamInfoResponse
+ *
+ * Purpose:
+ *
+ * Clients must implement this interface when interested in receiving
+ * notification of the total number of streams associated with this
+ * audio player.
+ *
+ * IID_IRMAAudioStreamInfoResponse:
+ *
+ * {00000706-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioStreamInfoResponse, 0x00000706, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioStreamInfoResponse
+
+DECLARE_INTERFACE_(IRMAAudioStreamInfoResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioStreamInfoResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioStreamInfoResponse::OnStream
+ * Purpose:
+ * The client implements this to get notification of streams
+ * associated with this player. Use
+ * AudioPlayer::SetStreamInfoResponse() to register your
+ * implementation with the AudioPlayer. Once player has been
+ * initialized, it will call OnStream() multiple times to pass all
+ * the streams. Since a stream can be added mid-presentation,
+ * IRMAAudioStreamInfoResponse object should be written to handle
+ * OnStream() in the midst of the presentation as well.
+ */
+ STDMETHOD(OnStream) (THIS_
+ IRMAAudioStream* /*IN*/ pAudioStream) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAVolume
+ *
+ * Purpose:
+ *
+ * This interface provides access to Audio Services volume control. Use this
+ * interface to get, set, or receive notifications of volume changes. Audio
+ * Services implements IRMAVolume for IRMAAudioPlayer, IRMAAudioStream and
+ * for the audio device. Clients can use the IRMAVolume interface to get/set
+ * volume levels of each audio stream, to get/set volume levels for the
+ * audio player's mixed data, or to get/set the volume levels of the audio
+ * device. See AudioStream::GetStreamVolume() (TBD), AudioPlayer::
+ * GetAudioVolume() and AudioPlayer::GetDeviceVolume().
+ *
+ * IID_IRMAVolume:
+ *
+ * {00000707-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAVolume, 0x00000707, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAVolume
+
+DECLARE_INTERFACE_(IRMAVolume, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAVolume methods
+ */
+ /************************************************************************
+ * Method:
+ * IRMAVolume::SetVolume
+ * Purpose:
+ * Call this to set the volume level.
+ */
+ STDMETHOD(SetVolume) (THIS_
+ const UINT16 /*IN*/ uVolume ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVolume::GetVolume
+ * Purpose:
+ * Call this to get the current volume level.
+ */
+ STDMETHOD_(UINT16,GetVolume) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVolume::SetMute
+ * Purpose:
+ * Call this to mute the volume.
+ */
+ STDMETHOD(SetMute) (THIS_
+ const BOOL /*IN*/ bMute ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVolume::GetMute
+ * Purpose:
+ * Call this to determine if the volume is muted.
+ *
+ */
+ STDMETHOD_(BOOL,GetMute) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVolume::AddAdviseSink
+ * Purpose:
+ * Call this to register an IRMAVolumeAdviseSink. The advise sink
+ * methods: OnVolumeChange() and OnMuteChange() are called when
+ * ever IRMAVolume::SetVolume() and IRMAVolume::SetMute() are
+ * called.
+ */
+ STDMETHOD(AddAdviseSink) (THIS_
+ IRMAVolumeAdviseSink* /*IN*/ pSink
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVolume::RemoveAdviseSink
+ * Purpose:
+ * Call this to unregister an IRMAVolumeAdviseSink. Use this when
+ * you are no longer interested in receiving volume or mute change
+ * notifications.
+ */
+ STDMETHOD(RemoveAdviseSink) (THIS_
+ IRMAVolumeAdviseSink* /*IN*/ pSink
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAVolumeAdviseSink
+ *
+ * Purpose:
+ *
+ * This interface provides access to notifications of volume changes. A
+ * client must implement this interface if they are interested in receiving
+ * notifications of volume level changes or mute state changes. A client must
+ * register their volume advise sink using IRMAVolume::AddAdviseSink().
+ * See the IRMAVolume interface.
+ *
+ * IID_IRMAVolumeAdviseSink:
+ *
+ * {00000708-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAVolumeAdviseSink, 0x00000708, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAVolumeAdviseSink
+
+DECLARE_INTERFACE_(IRMAVolumeAdviseSink, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAVolumeAdviseSink methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAVolumeAdviseSink::OnVolumeChange
+ * Purpose:
+ * This interface is called whenever the associated IRMAVolume
+ * SetVolume() is called.
+ */
+ STDMETHOD(OnVolumeChange) (THIS_
+ const UINT16 uVolume
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVolumeAdviseSink::OnMuteChange
+ * Purpose:
+ * This interface is called whenever the associated IRMAVolume
+ * SetMute() is called.
+ *
+ */
+ STDMETHOD(OnMuteChange) (THIS_
+ const BOOL bMute
+ ) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMADryNotification
+ *
+ * Purpose:
+ *
+ * Audio Renderer should implement this if it needs notification when the
+ * audio stream is running dry.
+ *
+ * IID_IRMADryNotification:
+ *
+ * {00000709-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMADryNotification, 0x00000709, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMADryNotification
+
+DECLARE_INTERFACE_(IRMADryNotification, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMADryNotification methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMADryNotification::OnDryNotification
+ * Purpose:
+ * This function is called when it is time to write to audio device
+ * and there is not enough data in the audio stream. The renderer can
+ * then decide to add more data to the audio stream. This should be
+ * done synchronously within the call to this function.
+ * It is OK to not write any data. Silence will be played instead.
+ */
+ STDMETHOD(OnDryNotification) (THIS_
+ UINT32 /*IN*/ ulCurrentStreamTime,
+ UINT32 /*IN*/ ulMinimumDurationRequired
+ ) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioDeviceManager
+ *
+ * Purpose:
+ *
+ * Allows the default audio device to be replaced.
+ *
+ * IID_IRMAAudioDeviceManager:
+ *
+ * {0000070A-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioDeviceManager, 0x0000070A, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioDeviceManager
+
+DECLARE_INTERFACE_(IRMAAudioDeviceManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioDeviceManager methods
+ */
+
+ /**********************************************************************
+ * Method:
+ * IRMAAudioDeviceManager::Replace
+ * Purpose:
+ * This is used to replace the default implementation of the audio
+ * device by the given audio device interface.
+ */
+ STDMETHOD(Replace) (THIS_
+ IRMAAudioDevice* /*IN*/ pAudioDevice) PURE;
+
+ /**********************************************************************
+ * Method:
+ * IRMAAudioDeviceManager::Remove
+ * Purpose:
+ * This is used to remove the audio device given to the manager in
+ * the earlier call to Replace.
+ */
+ STDMETHOD(Remove) (THIS_
+ IRMAAudioDevice* /*IN*/ pAudioDevice) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDeviceManager::AddFinalHook
+ * Purpose:
+ * One last chance to modify data being written to the audio device.
+ * This hook allows the user to change the audio format that
+ * is to be written to the audio device. This can be done in call
+ * to OnInit() in IRMAAudioHook.
+ */
+ STDMETHOD(SetFinalHook) (THIS_
+ IRMAAudioHook* /*IN*/ pHook
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDeviceManager::RemoveFinalHook
+ * Purpose:
+ * Remove final hook
+ */
+ STDMETHOD(RemoveFinalHook) (THIS_
+ IRMAAudioHook* /*IN*/ pHook
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioDeviceManager::GetAudioFormat
+ * Purpose:
+ * Returns the audio format in which the audio device is opened.
+ * This function will fill in the pre-allocated RMAAudioFormat
+ * structure passed in.
+ */
+ STDMETHOD(GetAudioFormat) (THIS_
+ RMAAudioFormat* /*IN/OUT*/pAudioFormat) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioCrossFade
+ *
+ * Purpose:
+ *
+ * This interface can be used to cross-fade two audio streams. It is exposed
+ * by IRMAAudioPlayer
+ *
+ * IID_IRMAAudioCrossFade:
+ *
+ * {0000070B-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioCrossFade, 0x0000070B, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioCrossFade
+
+DECLARE_INTERFACE_(IRMAAudioCrossFade, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioCrossFade methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioCrossFade::CrossFade
+ * Purpose:
+ * Cross-fade two audio streams.
+ * pStreamFrom - Stream to be cross faded from
+ * pStreamTo - Stream to be cross faded to
+ * ulFromCrossFadeStartTime- "From" Stream time when cross fade is
+ * to be started
+ * ulToCrossFadeStartTime - "To" Stream time when cross fade is to
+ * be started
+ * ulCrossFadeDuration - Duration over which cross-fade needs
+ * to be done
+ *
+ */
+ STDMETHOD(CrossFade) (THIS_
+ IRMAAudioStream* pStreamFrom,
+ IRMAAudioStream* pStreamTo,
+ UINT32 ulFromCrossFadeStartTime,
+ UINT32 ulToCrossFadeStartTime,
+ UINT32 ulCrossFadeDuration) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioStream2
+ *
+ * Purpose:
+ *
+ * This interface contains some last-minute added audio stream functions
+ *
+ * IID_IRMAAudioStream2:
+ *
+ * {0000070C-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioStream2, 0x0000070C, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioStream2
+
+DECLARE_INTERFACE_(IRMAAudioStream2, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioStream2 methods
+ */
+ /************************************************************************
+ * Method:
+ * IRMAAudioStream2::RemoveDryNotification
+ * Purpose:
+ * Use this to remove itself from the notification response object
+ * during the stream switching.
+ */
+ STDMETHOD(RemoveDryNotification) (THIS_
+ IRMADryNotification* /*IN*/ pNotification
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioStream2::GetAudioFormat
+ * Purpose:
+ * Returns the input audio format of the data written by the
+ * renderer. This function will fill in the pre-allocated
+ * RMAAudioFormat structure passed in.
+ */
+ STDMETHOD(GetAudioFormat) (THIS_
+ RMAAudioFormat* /*IN/OUT*/pAudioFormat) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioPushdown
+ *
+ * Purpose:
+ *
+ * This interface can be used to setup the audio pushdown time.
+ *
+ * IID_IRMAAudioPushdown:
+ *
+ * {0000070D-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioPushdown, 0x0000070D, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioPushdown
+
+DECLARE_INTERFACE_(IRMAAudioPushdown, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioPushdown methods
+ */
+ /************************************************************************
+ * Method:
+ * IRMAAudioPushdown::SetAudioPushdown
+ * Purpose:
+ * Use this to set the minimum audio pushdown value in ms.
+ * This is the amount of audio data that is being written
+ * to the audio device before starting playback.
+ */
+ STDMETHOD(SetAudioPushdown) (THIS_
+ UINT32 /*IN*/ ulAudioPushdown
+ ) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAudioHookManager
+ *
+ * Purpose:
+ *
+ * This interface can be used to add a hook at the audio device layer.
+ *
+ * IID_IRMAAudioHookManager:
+ *
+ * {0000070E-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAudioHookManager, 0x0000070E, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAudioHookManager
+
+DECLARE_INTERFACE_(IRMAAudioHookManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAudioHookManager methods
+ */
+ /************************************************************************
+ * Method:
+ * IRMAAudioHookManager::AddHook
+ * Purpose:
+ * Use this to add a hook
+ */
+ STDMETHOD(AddHook) (THIS_
+ IRMAAudioHook* /*IN*/ pHook
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAudioHookManager::RemoveHook
+ * Purpose:
+ * Use this to remove a hook
+ */
+ STDMETHOD(RemoveHook) (THIS_
+ IRMAAudioHook* /*IN*/ pHook
+ ) PURE;
+};
+
+#endif /* _RMAAUSVC_H_ */
diff --git a/include/realmedia/rmaauth.h b/include/realmedia/rmaauth.h
new file mode 100644
index 000000000..866bf87bf
--- /dev/null
+++ b/include/realmedia/rmaauth.h
@@ -0,0 +1,342 @@
+/****************************************************************************
+ *
+ * $Id: rmaauth.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ * Authentication and password interfaces.
+ *
+ */
+
+#ifndef _RMAAUTH_H_
+#define _RMAAUTH_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IRMAAuthenticator IRMAAuthenticator;
+typedef _INTERFACE IRMAAuthenticatorResponse IRMAAuthenticatorResponse;
+typedef _INTERFACE IRMAAuthenticatorRequest IRMAAuthenticatorRequest;
+typedef _INTERFACE IRMAPassword IRMAPassword;
+typedef _INTERFACE IRMAAuthenticationManagerResponse IRMAAuthenticationManagerResponse;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAuthenticator
+ *
+ * Purpose:
+ *
+ * Provide a means of authenticating users.
+ *
+ * IID_IRMAAuthenticator:
+ *
+ * {00001800-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAAuthenticator, 0x00001800, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#define CLSID_IRMAAuthenticator IID_IRMAAuthenticator
+
+#undef INTERFACE
+#define INTERFACE IRMAAuthenticator
+
+DECLARE_INTERFACE_(IRMAAuthenticator, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * InitAuthenticator is called by the creator of the Authenticator
+ * object in order to pass it an IRMAAuthenticatorRequest object,
+ * usually implemented by the creator itself.
+ */
+ STDMETHOD(InitAuthenticator) (THIS_
+ IRMAAuthenticatorRequest* pRequest) PURE;
+ /*
+ * Authenticate is called by a file object (and others??)
+ * when it wants to ask the creator, presumably an FS Manager,
+ * for authorization to open it's file.
+ *
+ * Authenticate will call IRMAAuthenticateResponse::AuthenticateDone
+ * when done with PNR_OK or an error.
+ *
+ * File objects will presumably perform the Authenticate response as
+ * part of their Init() call, and not call InitDone until they receive
+ * a response one way or the other.
+ */
+ STDMETHOD(Authenticate) (THIS_
+ IRMAValues* pValues,
+ IRMAAuthenticatorResponse* pResponse) PURE;
+
+ /* GenerateAuthRequest is called by the creator of this object
+ * when they want to send an authentication request to someone.
+ */
+ STDMETHOD(GenerateAuthRequest) (THIS_
+ UINT32 authType,
+ REF(IRMAValues*) pValues) PURE;
+ /*
+ * AuthValuesReady is called by IRMAAuthenticatorRequest when it
+ * is ready to respond to a GetAuthValues request.
+ */
+ STDMETHOD(AuthValuesReady) (THIS_
+ PN_RESULT result,
+ IRMAValues* pValues) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAuthenticatorResponse
+ *
+ * Purpose:
+ *
+ * Response object for the Authenticator class.
+ *
+ * IID_IRMAAuthenticatorResponse:
+ *
+ * {00001801-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAAuthenticatorResponse, 0x00001801, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAuthenticatorResponse
+
+DECLARE_INTERFACE_(IRMAAuthenticatorResponse, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* AuthenticateDone is called by an IRMAAuthenticator when it has
+ * finished it's authorization steps. If the result is PNR_OK,
+ * then the values contain authorization information as generated by
+ * IRMAPassword.
+ */
+ STDMETHOD(AuthenticateDone) (THIS_ PN_RESULT result,
+ IRMAValues* pAuthResponseValues) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAuthenticatorRequest
+ *
+ * Purpose:
+ *
+ * Request object for the Authenticator class.
+ *
+ * IID_IRMAAuthenticatorRequest:
+ *
+ * {00001802-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAAuthenticatorRequest, 0x00001802, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAuthenticatorRequest
+
+DECLARE_INTERFACE_(IRMAAuthenticatorRequest, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* GetAuthValues is called by the Authenticator object when it
+ * needs to know the authorization info for this transaction.
+ *
+ * This object should call AuthValuesReady when ready.
+ */
+ STDMETHOD(GetAuthValues) (THIS_ IRMAValues* pOrigValues) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPassword
+ *
+ * Purpose:
+ *
+ * Provides a general password facility for storing of passwords in
+ * an encrypted form and a facility for verifying passwords securely
+ * over the network.
+ *
+ * IID_IRMAPassword:
+ *
+ * {00001700-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+#define PN_AUTH_BASIC 1
+#define PN_AUTH_DIGEST 2
+#define PN_AUTH_RN5 3
+#define PN_AUTH_NTLM 4
+
+DEFINE_GUID(IID_IRMAPassword, 0x00001700, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPassword
+
+DECLARE_INTERFACE_(IRMAPassword, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPassword methods
+ */
+
+ STDMETHOD(Crypt) (THIS_ IRMAValues* pAuthentication) PURE;
+ STDMETHOD(Verify) (THIS_ IRMAValues* pAuth1, IRMAValues* pAuth2) PURE;
+
+ STDMETHOD(AsString) (THIS_ IRMAValues* pAuth, REF(IRMABuffer*) pBuffer) PURE;
+ STDMETHOD(AsValues) (THIS_ const char* str, IRMAValues* pValues) PURE;
+
+ /*
+ * CreateBuffer is provided for the convenince of external users,
+ * who would otherwise have to get a context and common class factory
+ * just to create IRMABuffers. This method can be used instead, but
+ * is not advisable if other means are available.
+ */
+ STDMETHOD(CreateBuffer) (THIS_ REF(IRMABuffer*) pBuffer) PURE;
+
+ /*
+ * Ditto for CreateValues
+ */
+ STDMETHOD(CreateValues) (THIS_ REF(IRMAValues*) pValues) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAuthenticationManager
+ *
+ * Purpose:
+ *
+ * Provide a means of authenticating users.
+ *
+ * IID_IRMAAuthenticator:
+ *
+ * {00001a00-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAAuthenticationManager, 0x00001a00, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAuthenticationManager
+
+DECLARE_INTERFACE_(IRMAAuthenticationManager, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* HandleAuthenticationRequest is called when the core wants us to get
+ * a username and password.
+ */
+ STDMETHOD(HandleAuthenticationRequest) (
+ THIS_ IRMAAuthenticationManagerResponse* pResponse) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAuthenticationManagerResponse
+ *
+ * Purpose:
+ *
+ * Response object for IRMAAuthenticationManager.
+ *
+ * IID_IRMAAuthenticator:
+ *
+ * {00001a01-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAAuthenticationManagerResponse, 0x00001a01, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAAuthenticationManagerResponse
+
+DECLARE_INTERFACE_(IRMAAuthenticationManagerResponse, IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* HandleAuthenticationRequest is called when the core wants us to get
+ * a username and password.
+ */
+ STDMETHOD(AuthenticationRequestDone) (THIS_
+ PN_RESULT result,
+ const char* pUserName,
+ const char* pPassword) PURE;
+};
+
+#ifdef _MACINTOSH
+#pragma export on
+#endif
+
+STDAPI CreatePassword(IUnknown** /* OUT */ ppIUnknown);
+
+#ifdef _MACINTOSH
+#pragma export off
+#endif
+
+#endif /* _RMAAUTH_H_ */
diff --git a/include/realmedia/rmaauthn.h b/include/realmedia/rmaauthn.h
new file mode 100644
index 000000000..4f2e39b7f
--- /dev/null
+++ b/include/realmedia/rmaauthn.h
@@ -0,0 +1,716 @@
+/****************************************************************************
+ *
+ * $Id: rmaauthn.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Interface.
+ *
+ */
+
+#ifndef _RMAAUTHN_H_
+#define _RMAAUTHN_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IUnknown IUnknown;
+typedef _INTERFACE IRMACredRequest IRMACredRequest;
+typedef _INTERFACE IRMACredRequestResponse IRMACredRequestResponse;
+typedef _INTERFACE IRMAClientAuthConversation IRMAClientAuthConversation;
+typedef _INTERFACE IRMAClientAuthResponse IRMAClientAuthResponse;
+typedef _INTERFACE IRMAServerAuthConversation IRMAServerAuthConversation;
+typedef _INTERFACE IRMAServerAuthResponse IRMAServerAuthResponse;
+typedef _INTERFACE IRMAUserContext IRMAUserContext;
+typedef _INTERFACE IRMAUserProperties IRMAUserProperties;
+typedef _INTERFACE IRMAUserImpersonation IRMAUserImpersonation;
+typedef _INTERFACE IRMAChallenge IRMAChallenge;
+typedef _INTERFACE IRMAChallengeResponse IRMAChallengeResponse;
+typedef _INTERFACE IRMARequest IRMARequest;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAValues IRMAValues;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMACredRequest
+ *
+ * Purpose:
+ *
+ * This is queried from the response interface passed into
+ * IRMAClientAuthConversation::MakeResponse. MakeResponse
+ * uses it to request the current user to enter their credentials.
+ *
+ * IRMACredRequest:
+ *
+ * {00002801-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMACredRequest, 0x00002801, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMACredRequest
+
+DECLARE_INTERFACE_(IRMACredRequest, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMACredRequest::GetCredentials
+ * Purpose:
+ *
+ * Call this to request the credentials. Usually presents UI to
+ * the user asking for username and password.
+ *
+ * While ignored at this time, pValuesCredentialRequest should
+ * contain CString properties that describe the reason for the
+ * request. (like the URL, the Realm, the Auth protocol, and how
+ * secure it is, etc..) In the future this data will be displayed
+ * to the user.
+ *
+ */
+ STDMETHOD(GetCredentials)
+ (
+ THIS_
+ IRMACredRequestResponse* pCredRequestResponseRequester,
+ IRMAValues* pValuesCredentialRequest
+ ) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMACredRequestResponse
+ *
+ * Purpose:
+ *
+ * This is implemented by a client authenticator in order to receive
+ * the credentials requested in IRMACredRequest::GetCredentials
+ *
+ * IRMACredRequestResponse:
+ *
+ * {00002800-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMACredRequestResponse, 0x00002800, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMACredRequestResponse
+
+DECLARE_INTERFACE_(IRMACredRequestResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMACredRequestResponse::CredentialsReady
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMACredRequest::GetCredentials
+ *
+ * If successful pValuesCredentials contains the requested
+ * credentials. (usually CString:Username and CString:Password)
+ *
+ */
+ STDMETHOD(CredentialsReady)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMAValues* pValuesCredentials
+ ) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAClientAuthConversation
+ *
+ * Purpose:
+ *
+ * This is implemented by a client authenticator in order to perform
+ * the client side of an authentication protocol.
+ *
+ * IRMAClientAuthConversation:
+ *
+ * {00002803-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAClientAuthConversation, 0x00002803, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * The IRMACommonClassFactory supports creating an instance
+ * of this object.
+ */
+#define CLSID_CRMAClientAuthenticator IID_IRMAClientAuthConversation
+
+#undef INTERFACE
+#define INTERFACE IRMAClientAuthConversation
+
+DECLARE_INTERFACE_(IRMAClientAuthConversation, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAuthConversation::MakeResponse
+ * Purpose:
+ *
+ * Call this when a challenge is received from the server.
+ *
+ * pRequestChallengeHeaders should contain the server challenge.
+ *
+ */
+ STDMETHOD(MakeResponse)
+ (
+ THIS_
+ IRMAClientAuthResponse* pClientAuthResponseRequester,
+ IRMARequest* pRequestChallengeHeaders
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAuthConversation::IsDone
+ * Purpose:
+ *
+ * Call this to determine whether the conversation is complete.
+ * (some protocols have more then one message exchange.)
+ *
+ */
+ STDMETHOD_(BOOL,IsDone)(THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAuthConversation::Authenticated
+ * Purpose:
+ *
+ * Call this to signal the authenticator that the conversation
+ * just completed succeeded or failed.
+ *
+ */
+ STDMETHOD(Authenticated)(THIS_ BOOL bAuthenticated) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAClientAuthResponse
+ *
+ * Purpose:
+ *
+ * This is implemented by the client core in order to receive the
+ * response generated by IRMAClientAuthConversation::MakeResponse
+ *
+ * IRMAClientAuthResponse:
+ *
+ * {00002802-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAClientAuthResponse, 0x00002802, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAClientAuthResponse
+
+DECLARE_INTERFACE_(IRMAClientAuthResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAuthResponse::ResponseReady
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAClientAuthConversation::MakeResponse
+ *
+ * pRequestResponseHeaders should be the same Request object
+ * that was passed into MakeResponse, it should contain
+ * CString values for each MimeHeader it wishes to send to
+ * the Server.
+ *
+ */
+ STDMETHOD(ResponseReady)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMARequest* pRequestResponseHeaders
+ ) PURE;
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAServerAuthConversation
+ *
+ * Purpose:
+ *
+ * This is implemented by a server authenticator in order to perform
+ * the server side of an authentication protocol.
+ *
+ * IRMAServerAuthConversation:
+ *
+ * {00002805-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAServerAuthConversation, 0x00002805, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * The IRMACommonClassFactory supports creating an instance
+ * of this object.
+ */
+#define CLSID_CRMAServerAuthenticator IID_IRMAServerAuthResponse
+
+#undef INTERFACE
+#define INTERFACE IRMAServerAuthConversation
+
+DECLARE_INTERFACE_(IRMAServerAuthConversation, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAServerAuthConversation::MakeChallenge
+ * Purpose:
+ *
+ * Call this to create a challenge for a client. If the request
+ * passed in does not contain a respose from the client, then it
+ * will generate the initial challenge.
+ *
+ * pRequestResponseHeaders is the request for a secured URL. If
+ * this is the initial request for the URL it probably does not
+ * have any credentials from the client.
+ *
+ */
+ STDMETHOD(MakeChallenge)
+ (
+ THIS_
+ IRMAServerAuthResponse* pServerAuthResponseRequester,
+ IRMARequest* pRequestResponseHeaders
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAServerAuthConversation::IsAuthenticated
+ * Purpose:
+ *
+ * Call this to determine whether the last response from the
+ * client completed the authentication successfully.
+ *
+ */
+ STDMETHOD_(BOOL,IsAuthenticated)(THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAServerAuthConversation::GetUserContext
+ * Purpose:
+ *
+ * Call this to retrieve the Context of the user that completed
+ * authentication successfully.
+ *
+ * If successful pUnknownUser is a valid context
+ *
+ */
+ STDMETHOD(GetUserContext)(THIS_ REF(IUnknown*) pUnknownUser) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAServerAuthResponse
+ *
+ * Purpose:
+ *
+ * This is implemented by various server plugins in order to receive the
+ * challenge generated by IRMAServerAuthConversation::MakeChallenge
+ *
+ * IRMAServerAuthResponse:
+ *
+ * {00002804-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAServerAuthResponse, 0x00002804, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAServerAuthResponse
+
+DECLARE_INTERFACE_(IRMAServerAuthResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAServerAuthResponse::ChallengeReady
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAServerAuthConversation::MakeChallenge
+ *
+ * pRequestChallengeHeaders should be the same Request object
+ * that was passed into MakeChallenge, it should contain
+ * CString values for each MimeHeader it wishes to send to
+ * the client.
+ *
+ */
+ STDMETHOD(ChallengeReady)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMARequest* pRequestChallengeHeaders
+ ) PURE;
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAUserContext
+ *
+ * Purpose:
+ *
+ * This is implemented by a user context in order to provide
+ * access to information about the currently authenticated user.
+ *
+ * IRMAUserContext:
+ *
+ * {00002806-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAUserContext, 0x00002806, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAUserContext
+
+DECLARE_INTERFACE_(IRMAUserContext, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAUserContext::IsMemberOf
+ * Purpose:
+ *
+ * Call this to determine whether the authenticated user
+ * is a member of the specified group.
+ *
+ */
+ STDMETHOD(IsMemberOf)(THIS_ IRMABuffer* pBufferGroupID) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAUserProperties
+ *
+ * Purpose:
+ *
+ * This is implemented by a user context in order to provide
+ * access to properties of the currently authenticated user.
+ *
+ * IRMAUserProperties:
+ *
+ * {00002807-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAUserProperties, 0x00002807, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAUserProperties
+
+DECLARE_INTERFACE_(IRMAUserProperties, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+
+ /************************************************************************
+ * Method:
+ * IRMAUserProperties::GetPrincipalID
+ * Purpose:
+ *
+ * Call this to determine the principalID of the authenticated user.
+ *
+ */
+ STDMETHOD(GetPrincipalID)(THIS_ REF(IRMABuffer*) pBufferPrincipalID) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAUserProperties::GetAuthorityName
+ * Purpose:
+ *
+ * Call this to determine the authority name that authorized the
+ * authenticated user. (realm or domain name)
+ *
+ */
+ STDMETHOD(GetAuthorityName)(THIS_ REF(IRMABuffer*) pBufferAuthorityName) PURE;
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAUserImpersonation
+ *
+ * Purpose:
+ *
+ * This can be implemented by a user context in order to provide
+ * the ability to have the server impersonate the currently authenticated
+ * user.
+ *
+ * IRMAUserImpersonation:
+ *
+ * {00002808-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAUserImpersonation, 0x00002808, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAUserImpersonation
+
+DECLARE_INTERFACE_(IRMAUserImpersonation, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAUserImpersonation::Start
+ * Purpose:
+ *
+ * Call this to impersonate the authenticated user.
+ *
+ */
+ STDMETHOD(Start)(THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAUserImpersonation::Stop
+ * Purpose:
+ *
+ * Call this to stop impersonating the authenticated user.
+ *
+ */
+ STDMETHOD(Stop)(THIS) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAChallenge
+ *
+ * Purpose:
+ *
+ * This is implemented by the server core in order to allow
+ * additional exchanges of information with the client without
+ * creating a new request. (It is stored in the IRMARequest object
+ * and can be retrieved by calling IRMARequestContext::GetRequester()
+ * if it is absent then the protocol that this request was made on
+ * does not support multi-message authentication (PNA doesn't) )
+ *
+ * IRMAChallenge:
+ *
+ * {0000280A-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAChallenge, 0x0000280A, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAChallenge
+
+DECLARE_INTERFACE_(IRMAChallenge, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAChallenge::SendChallenge
+ * Purpose:
+ *
+ * Call this to request additional information from the client.
+ *
+ * pRequestChallenge should be the same Request object
+ * that was passed into MakeChallenge, it should contain
+ * CString values for each MimeHeader it wishes to send to
+ * the client.
+ *
+ */
+ STDMETHOD(SendChallenge)
+ (
+ THIS_
+ IRMAChallengeResponse* pChallengeResponseSender,
+ IRMARequest* pRequestChallenge
+ ) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAChallengeResponse
+ *
+ * Purpose:
+ *
+ * This is implemented by a server authenticator in order to
+ * receive the Response returned by the client in response to
+ * IRMAChallenge::SendChallenge.
+ *
+ * IRMAChallengeResponse:
+ *
+ * {00002809-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAChallengeResponse, 0x00002809, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAChallengeResponse
+
+DECLARE_INTERFACE_(IRMAChallengeResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAChallengeResponse::ResponseReady
+ * Purpose:
+ *
+ * Called this to return the additional information requested
+ * from IRMAChallenge::SendChallenge.
+ *
+ * pRequestResponse should be the same Request object
+ * that was passed into MakeChallenge and SendChallenge.
+ *
+ */
+ STDMETHOD(ResponseReady)
+ (
+ THIS_
+ IRMARequest* pRequestResponse
+ ) PURE;
+
+};
+
+#endif //!_RMAAUTHN_H_
diff --git a/include/realmedia/rmacfg.h b/include/realmedia/rmacfg.h
new file mode 100644
index 000000000..d2fdde3ee
--- /dev/null
+++ b/include/realmedia/rmacfg.h
@@ -0,0 +1,166 @@
+/****************************************************************************
+ *
+ * $Id: rmacfg.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ * Server Configuration File Interface
+ *
+ */
+
+#ifndef _RMACFG_H_
+#define _RMACFG_H_
+
+typedef _INTERFACE IRMABuffer IRMABuffer;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAConfigFile
+ *
+ * Purpose:
+ *
+ * IID_IRMAConfigFile:
+ *
+ * {00001c00-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAConfigFile, 0x00001c00, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAConfigFile
+
+DECLARE_INTERFACE_(IRMAConfigFile, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAConfigFile methods
+ */
+ /************************************************************************
+ * Method:
+ * IRMAConfigFile::LoadFrom
+ * Purpose:
+ *
+ * LoadFrom tells the server to load the config file specified,
+ * and sets that file as the default for future Reloads and Saves
+ */
+ STDMETHOD(LoadFrom) (THIS_
+ IRMABuffer* filename) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAConfigFile::Reload
+ * Purpose:
+ *
+ * Reload causes the current default config file to be reloaded.
+ */
+ STDMETHOD(Reload) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAConfigFile::Save
+ * Purpose:
+ *
+ * Save causes the current configuration to be written to the
+ * current default file.
+ */
+ STDMETHOD(Save) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAConfigFile::SaveAs
+ * Purpose:
+ *
+ * SaveAs writes the configuration to the named file, and sets that
+ * file as the default.
+ */
+ STDMETHOD(SaveAs) (THIS_
+ IRMABuffer* pFilename) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAConfigFile::GetFilename
+ * Purpose:
+ *
+ * GetFilename returns the current default file
+ */
+ STDMETHOD(GetFilename) (THIS_
+ REF(IRMABuffer*) pFilename) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAConfigFile::SetFilename
+ * Purpose:
+ *
+ * SetFilename sets the current default file, but does not read it
+ * or change its contents.
+ */
+ STDMETHOD(SetFilename) (THIS_
+ IRMABuffer* pFilename) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARegConfig
+ *
+ * Purpose:
+ *
+ * IID_IRMARegConfig:
+ *
+ * {00001c01-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARegConfig, 0x00001c01, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMARegConfig
+
+DECLARE_INTERFACE_(IRMARegConfig, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARegConfig::WriteKey
+ * Purpose:
+ *
+ * Write out the registry from the passed in keyname to the
+ * currently active permanent config storage area (ex. config file,
+ * registry).
+ */
+ STDMETHOD(WriteKey) (THIS_
+ const char* pKeyName) PURE;
+
+};
+
+#endif /* _RMACFG_H_ */
diff --git a/include/realmedia/rmaclsnk.h b/include/realmedia/rmaclsnk.h
new file mode 100644
index 000000000..ac66fe0b4
--- /dev/null
+++ b/include/realmedia/rmaclsnk.h
@@ -0,0 +1,191 @@
+/****************************************************************************
+ *
+ * $Id: rmaclsnk.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ *
+ * Client Advise Sink Interfaces
+ *
+ */
+
+#ifndef _RMACLSNK_H_
+#define _RMACLSNK_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IRMAClientAdviseSink IRMAClientAdviseSink;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAClientAdviseSink
+ *
+ * Purpose:
+ *
+ * Interface supplied by client to core to receive notifications of
+ * status changes.
+ *
+ * IID_IRMAClientAdviseSink:
+ *
+ * {00000B00-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAClientAdviseSink, 0x00000B00, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAClientAdviseSink
+
+DECLARE_INTERFACE_(IRMAClientAdviseSink, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAClientAdviseSink methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnPosLength
+ * Purpose:
+ * Called to advise the client that the position or length of the
+ * current playback context has changed.
+ */
+ STDMETHOD(OnPosLength) (THIS_
+ UINT32 ulPosition,
+ UINT32 ulLength) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnPresentationOpened
+ * Purpose:
+ * Called to advise the client a presentation has been opened.
+ */
+ STDMETHOD(OnPresentationOpened) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnPresentationClosed
+ * Purpose:
+ * Called to advise the client a presentation has been closed.
+ */
+ STDMETHOD(OnPresentationClosed) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnStatisticsChanged
+ * Purpose:
+ * Called to advise the client that the presentation statistics
+ * have changed.
+ */
+ STDMETHOD(OnStatisticsChanged) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnPreSeek
+ * Purpose:
+ * Called by client engine to inform the client that a seek is
+ * about to occur. The render is informed the last time for the
+ * stream's time line before the seek, as well as the first new
+ * time for the stream's time line after the seek will be completed.
+ *
+ */
+ STDMETHOD(OnPreSeek) (THIS_
+ ULONG32 ulOldTime,
+ ULONG32 ulNewTime) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnPostSeek
+ * Purpose:
+ * Called by client engine to inform the client that a seek has
+ * just occurred. The render is informed the last time for the
+ * stream's time line before the seek, as well as the first new
+ * time for the stream's time line after the seek.
+ *
+ */
+ STDMETHOD(OnPostSeek) (THIS_
+ ULONG32 ulOldTime,
+ ULONG32 ulNewTime) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnStop
+ * Purpose:
+ * Called by client engine to inform the client that a stop has
+ * just occurred.
+ *
+ */
+ STDMETHOD(OnStop) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnPause
+ * Purpose:
+ * Called by client engine to inform the client that a pause has
+ * just occurred. The render is informed the last time for the
+ * stream's time line before the pause.
+ *
+ */
+ STDMETHOD(OnPause) (THIS_
+ ULONG32 ulTime) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnBegin
+ * Purpose:
+ * Called by client engine to inform the client that a begin or
+ * resume has just occurred. The render is informed the first time
+ * for the stream's time line after the resume.
+ *
+ */
+ STDMETHOD(OnBegin) (THIS_
+ ULONG32 ulTime) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnBuffering
+ * Purpose:
+ * Called by client engine to inform the client that buffering
+ * of data is occuring. The render is informed of the reason for
+ * the buffering (start-up of stream, seek has occurred, network
+ * congestion, etc.), as well as percentage complete of the
+ * buffering process.
+ *
+ */
+ STDMETHOD(OnBuffering) (THIS_
+ ULONG32 ulFlags,
+ UINT16 unPercentComplete) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientAdviseSink::OnContacting
+ * Purpose:
+ * Called by client engine to inform the client is contacting
+ * hosts(s).
+ *
+ */
+ STDMETHOD(OnContacting) (THIS_
+ const char* pHostName) PURE;
+};
+
+#endif /* _RMACLSNK_H_ */
diff --git a/include/realmedia/rmacmenu.h b/include/realmedia/rmacmenu.h
new file mode 100644
index 000000000..4491282cd
--- /dev/null
+++ b/include/realmedia/rmacmenu.h
@@ -0,0 +1,215 @@
+/****************************************************************************
+ *
+ * $Id: rmacmenu.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
+ *
+ * http://www.real.com/devzone
+ *
+ * This program contains proprietary information of RealNetworks, Inc,
+ * and is licensed subject to restrictions on use and distribution.
+ *
+ *
+ * RealMedia Architecture Context Menu Interfaces.
+ *
+ */
+
+#ifndef _RMACMENU_H_
+#define _RMACMENU_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IRMAContextMenu IRMAContextMenu;
+typedef _INTERFACE IRMAContextMenuResponse IRMAContextMenuResponse;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAContextMenu
+ *
+ * Purpose:
+ *
+ * Interface implemented by top level clients and provided to renderers.
+ * Allows the renderer to show a context menu and the top level client
+ * to add client specitic commands unknown to the renderer to that menu.
+ *
+ * IID_IRMAContextMenu:
+ *
+ * {00001f00-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAContextMenu, 0x00001f00, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAContextMenu
+
+DECLARE_INTERFACE_(IRMAContextMenu, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAContextMenu methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAContextMenu::InitContextMenu
+ * Purpose:
+ * Initializes the context menu to a blank menu, and sets the name
+ * of the "sub menu" for the renderer if appropriate. This will
+ * clear any previously added menu items and sub menus.
+ */
+ STDMETHOD(InitContextMenu) (THIS_
+ const char* pMenuText
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAContextMenu::AddMenuItem
+ * Purpose:
+ * Returns information vital to the instantiation of rendering
+ * plugins.
+ */
+ STDMETHOD(AddMenuItem) (THIS_
+ UINT16 commandID,
+ const char* pMenuItemText,
+ BOOL bChecked,
+ BOOL bRadioOn,
+ BOOL bDisabled
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAContextMenu::AddMenuItem
+ * Purpose:
+ * Returns information vital to the instantiation of rendering
+ * plugins.
+ */
+ STDMETHOD(AddSeparator) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAContextMenu::AddChildMenu
+ * Purpose:
+ * Returns information vital to the instantiation of rendering
+ * plugins.
+ */
+ STDMETHOD(AddChildMenu) (THIS_
+ const char* pMenuText
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAContextMenu::EndChildMenu
+ * Purpose:
+ * Returns information vital to the instantiation of rendering
+ * plugins.
+ */
+ STDMETHOD(EndChildMenu) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAContextMenu::ChangeMenuItem
+ * Purpose:
+ * Returns information vital to the instantiation of rendering
+ * plugins.
+ */
+ STDMETHOD(ChangeMenuItem) (THIS_
+ UINT16 commandID,
+ const char* pMenuItemText,
+ BOOL bChecked,
+ BOOL bRadioOn,
+ BOOL bDisabled
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAContextMenu::ShowMenu
+ * Purpose:
+ * Shows the setup context menu at the specified point.
+ */
+ STDMETHOD(ShowMenu) (THIS_
+ IRMAContextMenuResponse* pResonse,
+ PNxPoint ptPopup
+ ) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAContextMenuResponse
+ *
+ * Purpose:
+ *
+ * Interface implemented by renderers that use the context menut.
+ * Is called to inform the renderer that a particular menu item was
+ * chosen.
+ *
+ * IRMAContextMenuResponse:
+ *
+ * {00001f01-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAContextMenuResponse, 0x00001f01, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAContextMenuResponse
+
+DECLARE_INTERFACE_(IRMAContextMenuResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAContextMenuResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAContextMenuResponse::OnCommand
+ * Purpose:
+ * Called to inform the renderer that a command was chosen from
+ * the context menu.
+ */
+ STDMETHOD(OnCommand) (THIS_
+ UINT16 commandID
+ ) PURE;
+
+
+ /************************************************************************
+ * Method:
+ * IRMAContextMenuResponse::OnCanceled
+ * Purpose:
+ * Called to inform the renderer that the context menu was closed
+ * without a command being chosen from the renders set of commands.
+ */
+ STDMETHOD(OnCanceled) (THIS) PURE;
+
+};
+
+#endif /* _RMACMENU_H_ */
diff --git a/include/realmedia/rmacomm.h b/include/realmedia/rmacomm.h
new file mode 100644
index 000000000..c9f2ed120
--- /dev/null
+++ b/include/realmedia/rmacomm.h
@@ -0,0 +1,568 @@
+/****************************************************************************
+ *
+ * $Id: rmacomm.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Common Utility interfaces
+ *
+ */
+
+#ifndef _RMACOMM_H_
+#define _RMACOMM_H_
+
+#include "rmaengin.h" // For RMATimeval
+
+/*
+ * Forward declarations of some interfaces defined here-in.
+ */
+
+typedef _INTERFACE IRMACommonClassFactory IRMACommonClassFactory;
+typedef _INTERFACE IRMAStatistics IRMAStatistics;
+typedef _INTERFACE IRMARegistryID IRMARegistryID;
+typedef _INTERFACE IRMAServerFork IRMAServerFork;
+typedef _INTERFACE IRMAServerControl IRMAServerControl;
+typedef _INTERFACE IRMAReconfigServerResponse IRMAReconfigServerResponse;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAWantServerReconfigNotification
+ IRMAWantServerReconfigNotification;
+typedef _INTERFACE IRMAFastAlloc IRMAFastAlloc;
+
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMACommonClassFactory
+ *
+ * Purpose:
+ *
+ * RMA interface that manages the creation of common RMA classes.
+ *
+ * IID_IRMACommonClassFactory:
+ *
+ * {00000000-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMACommonClassFactory, 0x00000000, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMACommonClassFactory
+
+DECLARE_INTERFACE_(IRMACommonClassFactory, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMACommonClassFactory methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMACommonClassFactory::CreateInstance
+ * Purpose:
+ * Creates instances of common objects supported by the system,
+ * like IRMABuffer, IRMAPacket, IRMAValues, etc.
+ *
+ * This method is similar to Window's CoCreateInstance() in its
+ * purpose, except that it only creates objects of a well known
+ * types.
+ *
+ * NOTE: Aggregation is never used. Therefore and outer unknown is
+ * not passed to this function, and you do not need to code for this
+ * situation.
+ */
+ STDMETHOD(CreateInstance) (THIS_
+ REFCLSID /*IN*/ rclsid,
+ void** /*OUT*/ ppUnknown) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAController::CreateInstanceAggregatable
+ * Purpose:
+ * Creates instances of common objects that can be aggregated
+ * supported by the system, like IRMASiteWindowed
+ *
+ * This method is similar to Window's CoCreateInstance() in its
+ * purpose, except that it only creates objects of a well known
+ * types.
+ *
+ * NOTE 1: Unlike CreateInstance, this method will create internal
+ * objects that support Aggregation.
+ *
+ * NOTE 2: The output interface is always the non-delegating
+ * IUnknown.
+ */
+ STDMETHOD(CreateInstanceAggregatable)
+ (THIS_
+ REFCLSID /*IN*/ rclsid,
+ REF(IUnknown*) /*OUT*/ ppUnknown,
+ IUnknown* /*IN*/ pUnkOuter) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAStatistics
+ *
+ * Purpose:
+ *
+ * This interface allows update of the client statistics.
+ *
+ * IID_IRMAStatistics:
+ *
+ * {00000001-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAStatistics, 0x00000001, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAStatistics
+
+DECLARE_INTERFACE_(IRMAStatistics, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAStatistics methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAStatistics::Init
+ * Purpose:
+ * Pass registry ID to the caller
+ *
+ */
+ STDMETHOD(InitializeStatistics) (THIS_
+ UINT32 /*IN*/ ulRegistryID) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStatistics::Update
+ * Purpose:
+ * Notify the client to update its statistics stored in the registry
+ *
+ */
+ STDMETHOD(UpdateStatistics) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARegistryID
+ *
+ * Purpose:
+ *
+ * This interface is implemented by IRMAPlayer, IRMAStreamSource,
+ * and IRMAStream. It allows the user to get the registry Base ID,
+ * for an object that you have a pointer to.
+ *
+ * IID_IRMARegistryID:
+ *
+ * {00000002-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARegistryID, 0x00000002, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMARegistryID
+
+DECLARE_INTERFACE_(IRMARegistryID, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMARegistryID methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMARegistryID::GetID
+ * Purpose:
+ * Get the registry ID of the object.
+ *
+ */
+ STDMETHOD(GetID) (THIS_
+ REF(UINT32) /*OUT*/ ulRegistryID) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAServerFork
+ *
+ * Purpose:
+ *
+ * This interface is implemented by the server context on Unix
+ * platforms. This interface allows your plugin to fork off a
+ * process. Note that the process that is forked off cannot use
+ * any RMA APIs. The fork() system call is prohibited from within
+ * a RMA plugin.
+ *
+ * IID_IRMAServerFork:
+ *
+ * {00000003-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAServerFork, 0x00000003, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAServerFork
+
+DECLARE_INTERFACE_(IRMAServerFork, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAServerFork methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAServerFork::Fork
+ * Purpose:
+ * Fork off a child process. The child process cannot use any RMA
+ * APIs. Upon successful completion, Fork returns 0 to the child
+ * process and the PID of the child to the parent. A return value
+ * of -1 indicates an error.
+ *
+ * Note: The child process should *NOT* Release any interfaces.
+ * The cleanup of the IRMAServerFork() interface and other
+ * RMA interfaces is done by the parent.
+ *
+ */
+ STDMETHOD_(INT32, Fork) (THIS) PURE;
+};
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAServerControl
+ *
+ * Purpose:
+ *
+ * This inteface provides access to the RealMedia server's controls
+ * for shutting down (for now).
+ *
+ * Note: This registry is not related to the Windows system registry.
+ *
+ * IID_IRMAServerControl:
+ *
+ * {00000004-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAServerControl, 0x00000004, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#define CLSID_IRMAServerControl IID_IRMAServerControl
+
+#undef INTERFACE
+#define INTERFACE IRMAServerControl
+
+DECLARE_INTERFACE_(IRMAServerControl, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAServerControl methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAServerControl::ShutdownServer
+ * Purpose:
+ * Shutdown the server.
+ */
+ STDMETHOD(ShutdownServer) (THIS_
+ UINT32 status) PURE;
+};
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAServerControl2
+ *
+ * Purpose:
+ *
+ * Interface for extended server control methods.
+ *
+ *
+ * IID_IRMAServerControl2:
+ *
+ * {00000005-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAServerControl2, 0x00000005, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAServerControl2
+
+DECLARE_INTERFACE_(IRMAServerControl2, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAServerControl2 methods
+ */
+
+ /************************************************************************
+ * IRMAServerControl2::RestartServer
+ *
+ * Purpose:
+ *
+ * Completely shutdown the server, then restart. Mainly used to
+ * cause not hot setting config var changes to take effect.
+ */
+ STDMETHOD(RestartServer) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAServerControl2::ReconfigServer
+ *
+ * Purpose:
+ *
+ * Used to cause the server to re-read in config from file or registry
+ * (however it was started) and attempt to use the values.
+ */
+ STDMETHOD(ReconfigServer) (THIS_ IRMAReconfigServerResponse* pResp) PURE;
+
+};
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAReconfigServerResponse
+ *
+ * Purpose:
+ *
+ * Response interface for IRMAServerControl2::ReconfigServer
+ *
+ *
+ * IID_IRMAReconfigServerResponse:
+ *
+ * {00000006-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAReconfigServerResponse, 0x00000006, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAReconfigServerResponse
+
+DECLARE_INTERFACE_(IRMAReconfigServerResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAReconfigServerResponse::ReconfigServerDone
+ *
+ * Purpose:
+ *
+ * Notification that reconfiguring the server is done.
+ */
+ STDMETHOD(ReconfigServerDone) (THIS_
+ PN_RESULT res,
+ IRMABuffer** pInfo,
+ UINT32 ulNumInfo) PURE;
+};
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAServerReconfigNotification
+ *
+ * Purpose:
+ *
+ * Register with the server that you want notification when a reconfig
+ * request comes in and want/need to take part in the reconfiguration. This
+ * is used when you have configuration info outside the server config file
+ * which needs to be re-initialized.
+ *
+ *
+ * IID_IRMAServerReconfigNotification:
+ *
+ * {00000007-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAServerReconfigNotification, 0x00000007, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAServerReconfigNotification
+
+DECLARE_INTERFACE_(IRMAServerReconfigNotification, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAServerReconfigNotification::WantReconfigNotification
+ *
+ * Purpose:
+ *
+ * Tell the server that you want reconfig notification.
+ */
+ STDMETHOD(WantReconfigNotification) (THIS_
+ IRMAWantServerReconfigNotification* pResponse) PURE;
+
+ /************************************************************************
+ * IRMAServerReconfigNotification::CancelReconfigNotification
+ *
+ * Purpose:
+ *
+ * Tell the server that you no longer want reconfig notification.
+ */
+ STDMETHOD(CancelReconfigNotification) (THIS_
+ IRMAWantServerReconfigNotification* pResponse) PURE;
+
+};
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAWantServerReconfigNotification
+ *
+ * Purpose:
+ *
+ * Tell user that the server got a reconfig request and it is time to
+ * do your reconfiguration. NOTE: You should not need this if all of your
+ * configuration is stored in the config file; that is taken care of through
+ * IRMAActiveRegistry.
+ *
+ * IID_IRMAWantServerReconfigNotification:
+ *
+ * {00000008-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAWantServerReconfigNotification, 0x00000008, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAWantServerReconfigNotification
+
+DECLARE_INTERFACE_(IRMAWantServerReconfigNotification, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAWantServerReconfigNotification::ServerReconfig
+ *
+ * Purpose:
+ *
+ * Notify user that a server reconfig request had come in and it
+ * is now your turn to do external (not server config) reconfiguration.*
+ */
+ STDMETHOD(ServerReconfig) (THIS_
+ IRMAReconfigServerResponse* pResponse) PURE;
+
+};
+
+
+#endif /*_RMACOMM_H_*/
diff --git a/include/realmedia/rmacore.h b/include/realmedia/rmacore.h
new file mode 100644
index 000000000..8461dafba
--- /dev/null
+++ b/include/realmedia/rmacore.h
@@ -0,0 +1,844 @@
+/****************************************************************************
+ *
+ * $Id: rmacore.h 74 2003-07-02 02:42:47Z gabest $
+ *
+ * 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.
+ *
+ *
+ * Client Core interfaces
+ *
+ */
+
+#ifndef _RMACORE_H_
+#define _RMACORE_H_
+
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IUnknown IUnknown;
+typedef _INTERFACE IRMAStream IRMAStream;
+typedef _INTERFACE IRMAStreamSource IRMAStreamSource;
+typedef _INTERFACE IRMAPlayer IRMAPlayer;
+typedef _INTERFACE IRMAClientEngine IRMAClientEngine;
+typedef _INTERFACE IRMAScheduler IRMAScheduler;
+typedef _INTERFACE IRMAClientAdviseSink IRMAClientAdviseSink;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAPacket IRMAPacket;
+typedef _INTERFACE IRMARenderer IRMARenderer;
+typedef _INTERFACE IRMAPlayer2 IRMAPlayer2;
+typedef _INTERFACE IRMARequest IRMArequest;
+
+typedef struct _PNxEvent PNxEvent;
+
+
+#ifdef _MACINTOSH
+#pragma export on
+#endif
+
+#if defined _UNIX && !(defined _VXWORKS)
+/* Includes needed for select() stuff */
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#endif
+
+#ifdef _BEOS // fd_set stuff
+#include <net/socket.h>
+#endif
+
+/* Used in renderer and advise sink interface */
+enum BUFFERING_REASON
+{
+ BUFFERING_START_UP = 0,
+ BUFFERING_SEEK,
+ BUFFERING_CONGESTION,
+ BUFFERING_LIVE_PAUSE
+};
+
+/****************************************************************************
+ *
+ * Function:
+ *
+ * CreateEngine()
+ *
+ * Purpose:
+ *
+ * Function implemented by the RMA core to return a pointer to the
+ * client engine. This function would be run by top level clients.
+ */
+STDAPI CreateEngine
+ (
+ IRMAClientEngine** /*OUT*/ ppEngine
+ );
+
+/****************************************************************************
+ *
+ * Function:
+ *
+ * CloseEngine()
+ *
+ * Purpose:
+ *
+ * Function implemented by the RMA core to close the engine which
+ * was returned in CreateEngine().
+ */
+STDAPI CloseEngine
+ (
+ IRMAClientEngine* /*IN*/ pEngine
+ );
+
+#ifdef _MACINTOSH
+#pragma export off
+#endif
+
+/*
+ * Definitions of Function Pointers to CreateEngine() and Close Engine().
+ * These types are provided as a convenince to authors of top level clients.
+ */
+typedef PN_RESULT (PNEXPORT_PTR FPRMCREATEENGINE)(IRMAClientEngine** ppEngine);
+typedef PN_RESULT (PNEXPORT_PTR FPRMCLOSEENGINE) (IRMAClientEngine* pEngine);
+typedef PN_RESULT (PNEXPORT_PTR FPRMSETDLLACCESSPATH) (const char*);
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAStream
+ *
+ * Purpose:
+ *
+ * Interface provided by the client engine to the renderers. This
+ * interface allows access to stream related information and properties.
+ *
+ * IID_IRMAStream:
+ *
+ * {00000400-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAStream, 0x00000400, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAStream
+
+DECLARE_INTERFACE_(IRMAStream, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAStream methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAStream::GetSource
+ * Purpose:
+ * Get the interface to the source object of which the stream is
+ * a part of.
+ *
+ */
+ STDMETHOD(GetSource) (THIS_
+ REF(IRMAStreamSource*) pSource) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStream::GetStreamNumber
+ * Purpose:
+ * Get the stream number for this stream relative to the source
+ * object of which the stream is a part of.
+ *
+ */
+ STDMETHOD_(UINT16,GetStreamNumber) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStream::GetStreamType
+ * Purpose:
+ * Get the MIME type for this stream. NOTE: The returned string is
+ * assumed to be valid for the life of the IRMAStream from which it
+ * was returned.
+ *
+ */
+ STDMETHOD_(const char*,GetStreamType) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStream::GetHeader
+ * Purpose:
+ * Get the header for this stream.
+ *
+ */
+ STDMETHOD_(IRMAValues*,GetHeader) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStream::ReportQualityOfService
+ * Purpose:
+ * Call this method to report to the playback context that the
+ * quality of service for this stream has changed. The unQuality
+ * should be on a scale of 0 to 100, where 100 is the best possible
+ * quality for this stream. Although the transport engine can
+ * determine lost packets and report these through the user
+ * interface, only the renderer of this stream can determine the
+ * "real" perceived damage associated with this loss.
+ *
+ * NOTE: The playback context may use this value to indicate loss
+ * in quality to the user interface. When the effects of a lost
+ * packet are eliminated the renderer should call this method with
+ * a unQuality of 100.
+ *
+ */
+ STDMETHOD(ReportQualityOfService) (THIS_
+ UINT8 unQuality) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStream::ReportRebufferStatus
+ * Purpose:
+ * Call this method to report to the playback context that the
+ * available data has dropped to a critically low level, and that
+ * rebuffering should occur. The renderer should call back into this
+ * interface as it receives additional data packets to indicate the
+ * status of its rebuffering effort.
+ *
+ * NOTE: The values of unNeeded and unAvailable are used to indicate
+ * the general status of the rebuffering effort. For example, if a
+ * renderer has "run dry" and needs 5 data packets to play smoothly
+ * again, it should call ReportRebufferStatus() with 5,0 then as
+ * packet arrive it should call again with 5,1; 5,2... and eventually
+ * 5,5.
+ *
+ */
+ STDMETHOD(ReportRebufferStatus) (THIS_
+ UINT8 unNeeded,
+ UINT8 unAvailable) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStream::SetGranularity
+ * Purpose:
+ * Sets the desired Granularity for this stream. The actual
+ * granularity will be the lowest granularity of all streams.
+ * Valid to call before stream actually begins. Best to call during
+ * IRMARenderer::OnHeader().
+ */
+ STDMETHOD(SetGranularity) (THIS_
+ ULONG32 ulGranularity) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStream::GetRendererCount
+ * Purpose:
+ * Returns the current number of renderer instances supported by
+ * this stream instance.
+ */
+ STDMETHOD_(UINT16, GetRendererCount)(THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStream::GetRenderer
+ * Purpose:
+ * Returns the Nth renderer instance supported by this stream.
+ */
+ STDMETHOD(GetRenderer) (THIS_
+ UINT16 nIndex,
+ REF(IUnknown*) pUnknown) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAStreamSource
+ *
+ * Purpose:
+ *
+ * Interface provided by the client engine to the renderers. This
+ * interface allows access to source related information and properties.
+ *
+ * IID_IRMAStreamSource:
+ *
+ * {00000401-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAStreamSource, 0x00000401, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAStreamSource
+
+DECLARE_INTERFACE_(IRMAStreamSource, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAStreamSource methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAStreamSource::IsLive
+ * Purpose:
+ * Ask the source whether it is live
+ *
+ */
+ STDMETHOD_ (BOOL,IsLive) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStreamSource::GetPlayer
+ * Purpose:
+ * Get the interface to the player object of which the source is
+ * a part of.
+ *
+ */
+ STDMETHOD(GetPlayer) (THIS_
+ REF(IRMAPlayer*) pPlayer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStreamSource::GetURL
+ * Purpose:
+ * Get the URL for this source. NOTE: The returned string is
+ * assumed to be valid for the life of the IRMAStreamSource from which
+ * it was returned.
+ *
+ */
+ STDMETHOD_(const char*,GetURL) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStreamSource::GetStreamCount
+ * Purpose:
+ * Returns the current number of stream instances supported by
+ * this source instance.
+ */
+ STDMETHOD_(UINT16, GetStreamCount)(THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAStreamSource::GetStream
+ * Purpose:
+ * Returns the Nth stream instance supported by this source.
+ */
+ STDMETHOD(GetStream) (THIS_
+ UINT16 nIndex,
+ REF(IUnknown*) pUnknown) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPlayer
+ *
+ * Purpose:
+ *
+ * Interface provided by the client engine to the renderers. This
+ * interface allows access to player related information, properties,
+ * and operations.
+ *
+ * IID_IRMAPlayer:
+ *
+ * {00000402-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPlayer, 0x00000402, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPlayer
+
+DECLARE_INTERFACE_(IRMAPlayer, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPlayer methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::GetClientEngine
+ * Purpose:
+ * Get the interface to the client engine object of which the
+ * player is a part of.
+ *
+ */
+ STDMETHOD(GetClientEngine) (THIS_
+ REF(IRMAClientEngine*) pEngine) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::IsDone
+ * Purpose:
+ * Ask the player if it is done with the current presentation
+ *
+ */
+ STDMETHOD_(BOOL,IsDone) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::IsLive
+ * Purpose:
+ * Ask the player whether it contains the live source
+ *
+ */
+ STDMETHOD_(BOOL,IsLive) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::GetCurrentPlayTime
+ * Purpose:
+ * Get the current time on the Player timeline
+ *
+ */
+ STDMETHOD_(ULONG32,GetCurrentPlayTime) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::OpenURL
+ * Purpose:
+ * Tell the player to begin playback of all its sources.
+ *
+ */
+ STDMETHOD(OpenURL) (THIS_
+ const char* pURL) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::Begin
+ * Purpose:
+ * Tell the player to begin playback of all its sources.
+ *
+ */
+ STDMETHOD(Begin) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::Stop
+ * Purpose:
+ * Tell the player to stop playback of all its sources.
+ *
+ */
+ STDMETHOD(Stop) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::Pause
+ * Purpose:
+ * Tell the player to pause playback of all its sources.
+ *
+ */
+ STDMETHOD(Pause) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::Seek
+ * Purpose:
+ * Tell the player to seek in the playback timeline of all its
+ * sources.
+ *
+ */
+ STDMETHOD(Seek) (THIS_
+ ULONG32 ulTime) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::GetSourceCount
+ * Purpose:
+ * Returns the current number of source instances supported by
+ * this player instance.
+ */
+ STDMETHOD_(UINT16, GetSourceCount)(THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::GetSource
+ * Purpose:
+ * Returns the Nth source instance supported by this player.
+ */
+ STDMETHOD(GetSource) (THIS_
+ UINT16 nIndex,
+ REF(IUnknown*) pUnknown) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::SetClientContext
+ * Purpose:
+ * Called by the client to install itself as the provider of client
+ * services to the core. This is traditionally called by the top
+ * level client application.
+ */
+ STDMETHOD(SetClientContext) (THIS_
+ IUnknown* pUnknown) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::GetClientContext
+ * Purpose:
+ * Called to get the client context for this player. This is
+ * set by the top level client application.
+ */
+ STDMETHOD(GetClientContext) (THIS_
+ REF(IUnknown*) pUnknown) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::AddAdviseSink
+ * Purpose:
+ * Call this method to add a client advise sink.
+ *
+ */
+ STDMETHOD(AddAdviseSink) (THIS_
+ IRMAClientAdviseSink* pAdviseSink) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayer::RemoveAdviseSink
+ * Purpose:
+ * Call this method to remove a client advise sink.
+ */
+ STDMETHOD(RemoveAdviseSink) (THIS_
+ IRMAClientAdviseSink* pAdviseSink) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAClientEngine
+ *
+ * Purpose:
+ *
+ * Interface to the basic client engine. Provided to the renderers and
+ * other client side components.
+ *
+ * IID_IRMAClientEngine:
+ *
+ * {00000403-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAClientEngine, 0x00000403, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAClientEngine
+
+DECLARE_INTERFACE_(IRMAClientEngine, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAClientEngine methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAClientEngine::CreatePlayer
+ * Purpose:
+ * Creates a new IRMAPlayer instance.
+ *
+ */
+ STDMETHOD(CreatePlayer) (THIS_
+ REF(IRMAPlayer*) pPlayer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientEngine::ClosePlayer
+ * Purpose:
+ * Called by the client when it is done using the player...
+ *
+ */
+ STDMETHOD(ClosePlayer) (THIS_
+ IRMAPlayer* pPlayer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientEngine::GetPlayerCount
+ * Purpose:
+ * Returns the current number of IRMAPlayer instances supported by
+ * this client engine instance.
+ */
+ STDMETHOD_(UINT16, GetPlayerCount)(THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientEngine::GetPlayer
+ * Purpose:
+ * Returns the Nth IRMAPlayer instances supported by this client
+ * engine instance.
+ */
+ STDMETHOD(GetPlayer) (THIS_
+ UINT16 nPlayerNumber,
+ REF(IUnknown*) pUnknown) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientEngine::EventOccurred
+ * Purpose:
+ * Clients call this to pass OS events to all players. PNxEvent
+ * defines a cross-platform event.
+ */
+ STDMETHOD(EventOccurred) (THIS_
+ PNxEvent* /*IN*/ pEvent) PURE;
+};
+
+#if defined _UNIX && !defined (_VXWORKS)
+DEFINE_GUID(IID_IRMAClientEngineSelector, 0x00000404, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAClientEngineSelector
+
+DECLARE_INTERFACE_(IRMAClientEngineSelector, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAClientEngine::Select
+ * Purpose:
+ * Top level clients under Unix should use this instead of
+ * select() to select for events.
+ */
+ STDMETHOD_(INT32, Select) (THIS_
+ INT32 n,
+ fd_set *readfds,
+ fd_set *writefds,
+ fd_set *exceptfds,
+ struct timeval* timeout) PURE;
+};
+#endif /* _UNIX */
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAClientEngineSetup
+ *
+ * Purpose:
+ *
+ * Interface to the basic client engine. Provided to the renderers and
+ * other client side components.
+ *
+ * IID_IRMAClientEngineSetup:
+ *
+ * {00000405-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAClientEngineSetup, 0x00000405, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAClientEngineSetup
+
+DECLARE_INTERFACE_(IRMAClientEngineSetup, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAClientEngineSetup methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAClientEngineSetup::Setup
+ * Purpose:
+ * Top level clients use this interface to over-ride certain basic
+ * interfaces implemented by the core. Current over-ridable
+ * interfaces are: IRMAPreferences, IRMAHyperNavigate
+ */
+ STDMETHOD(Setup) (THIS_
+ IUnknown* pContext) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAInfoLogger
+ *
+ * Purpose:
+ *
+ * Interface to send any logging information back to the server.
+ * This information will appear in the server's access log.
+ *
+ * IID_IRMAInfoLogger:
+ *
+ * {00000409-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAInfoLogger, 0x00000409, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAInfoLogger
+
+DECLARE_INTERFACE_(IRMAInfoLogger, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAInfoLogger methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAInfoLogger::LogInformation
+ * Purpose:
+ * Logs any user defined information in form of action and
+ * associated data.
+ */
+ STDMETHOD(LogInformation) (THIS_
+ const char* /*IN*/ pAction,
+ const char* /*IN*/ pData) PURE;
+};
+
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPlayer2
+ *
+ * Purpose:
+ *
+ * Extra methods in addition to IRMAPlayer
+ *
+ * IID_IRMAPlayer2:
+ *
+ * {00000411-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPlayer2, 0x00000411, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPlayer2
+
+DECLARE_INTERFACE_(IRMAPlayer2, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IID_IRMAPlayer2::SetMinimumPreroll
+ * Purpose:
+ * Call this method to set the minimum preroll of this clip
+ */
+ STDMETHOD(SetMinimumPreroll) (THIS_
+ UINT32 ulMinPreroll) PURE;
+
+ /************************************************************************
+ * Method:
+ * IID_IRMAPlayer2::GetMinimumPreroll
+ * Purpose:
+ * Call this method to get the minimum preroll of this clip
+ */
+ STDMETHOD(GetMinimumPreroll) (THIS_
+ REF(UINT32) ulMinPreroll) PURE;
+
+ /************************************************************************
+ * Method:
+ * IID_IRMAPlayer2::OpenRequest
+ * Purpose:
+ * Call this method to open the IRMARequest
+ */
+ STDMETHOD(OpenRequest) (THIS_
+ IRMARequest* pRequest) PURE;
+
+ /************************************************************************
+ * Method:
+ * IID_IRMAPlayer2::GetRequest
+ * Purpose:
+ * Call this method to get the IRMARequest
+ */
+ STDMETHOD(GetRequest) (THIS_
+ REF(IRMARequest*) pRequest) PURE;
+};
+
+#endif /* _RMACORE_H_ */
+
diff --git a/include/realmedia/rmadb.h b/include/realmedia/rmadb.h
new file mode 100644
index 000000000..bc1c090a5
--- /dev/null
+++ b/include/realmedia/rmadb.h
@@ -0,0 +1,1304 @@
+/****************************************************************************
+ *
+ * $Id: rmadb.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Interface.
+ *
+ */
+
+#ifndef _RMADB_H_
+#define _RMADB_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMADatabaseManager IRMADatabaseManager;
+typedef _INTERFACE IRMAAuthenticationDBManager IRMAAuthenticationDBManager;
+typedef _INTERFACE IRMAAuthenticationDBManagerResponse IRMAAuthenticationDBManagerResponse;
+typedef _INTERFACE IRMAAsyncEnumAuthenticationDB IRMAAsyncEnumAuthenticationDB;
+typedef _INTERFACE IRMAAsyncEnumAuthenticationDBResponse IRMAAsyncEnumAuthenticationDBResponse;
+typedef _INTERFACE IRMAAuthenticationDBAccess IRMAAuthenticationDBAccess;
+typedef _INTERFACE IRMAAuthenticationDBAccessResponse IRMAAuthenticationDBAccessResponse;
+typedef _INTERFACE IRMAGUIDDBManager IRMAGUIDDBManager;
+typedef _INTERFACE IRMAGUIDDBManagerResponse IRMAGUIDDBManagerResponse;
+typedef _INTERFACE IRMAPPVDBManager IRMAPPVDBManager;
+typedef _INTERFACE IRMAPPVDBManagerResponse IRMAPPVDBManagerResponse;
+typedef _INTERFACE IRMARedirectDBManager IRMARedirectDBManager;
+typedef _INTERFACE IRMARedirectDBManagerResponse IRMARedirectDBManagerResponse;
+typedef _INTERFACE IRMARegistrationLogger IRMARegistrationLogger;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMADatabaseManager
+ *
+ * Purpose:
+ *
+ * This is implemented by the database manager in order to provide
+ * access to the databases it manages.
+ *
+ * IRMADatabaseManager:
+ *
+ * {00002A00-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMADatabaseManager, 0x00002A00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#define CLSID_CRMADatabaseManager IID_IRMADatabaseManager
+
+#undef INTERFACE
+#define INTERFACE IRMADatabaseManager
+
+DECLARE_INTERFACE_(IRMADatabaseManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMADatabaseManager::GetInstanceFromID
+ * Purpose:
+ *
+ * Returns a database object configured as defined for the specifed
+ * DatabaseID in the server config file.
+ *
+ */
+ STDMETHOD(GetInstanceFromID)
+ (
+ THIS_
+ IRMABuffer* pBufferID,
+ REF(IUnknown*) pUnknownDatabase
+ ) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAuthenticationDBManager
+ *
+ * Purpose:
+ *
+ * A database plugin will implement this when it desires to provide
+ * storage for authentication data.
+ *
+ * IRMAAuthenticationDBManager:
+ *
+ * {00002A02-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAuthenticationDBManager, 0x00002A02, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAuthenticationDBManager
+
+DECLARE_INTERFACE_(IRMAAuthenticationDBManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBManager::AddPrincipal
+ * Purpose:
+ *
+ * Adds the specified user to the database, if it is not already
+ * there.
+ *
+ */
+ STDMETHOD(AddPrincipal)
+ (
+ THIS_
+ IRMAAuthenticationDBManagerResponse* pAuthenticationDBManagerResponseNew,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBManager::RemovePrincipal
+ * Purpose:
+ *
+ * Removes the specified user from the database, if it is there.
+ *
+ *
+ */
+ STDMETHOD(RemovePrincipal)
+ (
+ THIS_
+ IRMAAuthenticationDBManagerResponse* pAuthenticationDBManagerResponseNew,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBManager::SetCredentials
+ * Purpose:
+ *
+ * Replaces the credentials for the specified user.
+ * Usually the credentials are a password.
+ * It is not the databases job to protect this data
+ * Authentication plugins will protect this data
+ * before storing it when neccesary.
+ *
+ */
+ STDMETHOD(SetCredentials)
+ (
+ THIS_
+ IRMAAuthenticationDBManagerResponse* pAuthenticationDBManagerResponseNew,
+ IRMABuffer* pBufferPrincipalID,
+ IRMABuffer* pBufferCredentials
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAuthenticationDBManagerResponse
+ *
+ * Purpose:
+ *
+ * A database user will implement this when it desires to manage
+ * storage for authentication data.
+ * This interface receives the results of IRMAAuthenticationDBManager
+ * methods
+ *
+ * IRMAAuthenticationDBManagerResponse:
+ *
+ * {00002A01-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAuthenticationDBManagerResponse, 0x00002A01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAuthenticationDBManagerResponse
+
+DECLARE_INTERFACE_(IRMAAuthenticationDBManagerResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBManagerResponse::AddPrincipalDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAAuthenticationDBManager::AddPrincipal
+ *
+ */
+ STDMETHOD(AddPrincipalDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBManagerResponse::RemovePrincipalDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAAuthenticationDBManager::RemovePrincipal
+ *
+ */
+ STDMETHOD(RemovePrincipalDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBManagerResponse::SetCredentialsDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAAuthenticationDBManager::SetCredentials
+ *
+ */
+ STDMETHOD(SetCredentialsDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAsyncEnumAuthenticationDB
+ *
+ * Purpose:
+ *
+ * A database plugin will implement this when it desires to provide
+ * enumeration of authentication data.
+ *
+ * IRMAAsyncEnumAuthenticationDB:
+ *
+ * {00002A04-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAsyncEnumAuthenticationDB, 0x00002A04, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAsyncEnumAuthenticationDB
+
+DECLARE_INTERFACE_(IRMAAsyncEnumAuthenticationDB, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAsyncEnumAuthenticationDB::Reset
+ * Purpose:
+ *
+ * Call this to reset this enumerator to the beginning of the
+ * collection.
+ *
+ */
+ STDMETHOD(Reset)
+ (
+ THIS_
+ IRMAAsyncEnumAuthenticationDBResponse* pAsyncEnumAuthenticationDBResponseNew
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAsyncEnumAuthenticationDB::Next
+ * Purpose:
+ *
+ * Call this to retrieve the next item in the collection.
+ *
+ */
+ STDMETHOD(Next)
+ (
+ THIS_
+ IRMAAsyncEnumAuthenticationDBResponse* pAsyncEnumAuthenticationDBResponseNew
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAsyncEnumAuthenticationDB::Skip
+ * Purpose:
+ *
+ * Call this to skip the next n items in the collection and
+ * retrieve the n+1 item.
+ *
+ */
+ STDMETHOD(Skip)
+ (
+ THIS_
+ IRMAAsyncEnumAuthenticationDBResponse* pAsyncEnumAuthenticationDBResponseNew,
+ UINT32 ulNumToSkip
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAsyncEnumAuthenticationDB::Clone
+ * Purpose:
+ *
+ * Call this to make a new enumerator of this collection.
+ *
+ */
+ STDMETHOD(Clone)
+ (
+ THIS_
+ REF(IRMAAsyncEnumAuthenticationDB*) pAsyncEnumAuthenticationDBNew
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAsyncEnumAuthenticationDBResponse
+ *
+ * Purpose:
+ *
+ * A database user will implement this when it desires to
+ * enumerate authentication data.
+ * This interface receives the results of IRMAAsyncEnumAuthenticationDB
+ * methods
+ *
+ * IRMAAsyncEnumAuthenticationDBResponse:
+ *
+ * {00002A03-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAsyncEnumAuthenticationDBResponse, 0x00002A03, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAsyncEnumAuthenticationDBResponse
+
+DECLARE_INTERFACE_(IRMAAsyncEnumAuthenticationDBResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAsyncEnumAuthenticationDBResponse::ResetDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAAsyncEnumAuthenticationDB::Reset
+ *
+ */
+ STDMETHOD(ResetDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAsyncEnumAuthenticationDBResponse::NextDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAAsyncEnumAuthenticationDB::Next
+ * If successful the PrincipalID is valid.
+ *
+ */
+ STDMETHOD(NextDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferNextPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAsyncEnumAuthenticationDBResponse::SkipDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAAsyncEnumAuthenticationDB::Skip
+ * If successful the PrincipalID is valid.
+ *
+ */
+ STDMETHOD(SkipDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferNextPrincipalID
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAuthenticationDBAccess
+ *
+ * Purpose:
+ *
+ * A database plugin will implement this when it desires to provide
+ * access to authentication data.
+ *
+ * IRMAAuthenticationDBAccess:
+ *
+ * {00002A06-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAuthenticationDBAccess, 0x00002A06, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAuthenticationDBAccess
+
+DECLARE_INTERFACE_(IRMAAuthenticationDBAccess, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBAccess::_NewEnum
+ * Purpose:
+ *
+ * Call this to make a new enumerator of this collection.
+ *
+ */
+ STDMETHOD(_NewEnum)
+ (
+ THIS_
+ REF(IRMAAsyncEnumAuthenticationDB*) pAsyncEnumAuthenticationDBNew
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBAccess::CheckExistence
+ * Purpose:
+ *
+ * Call this to verify the existance of a principal.
+ *
+ */
+ STDMETHOD(CheckExistence)
+ (
+ THIS_
+ IRMAAuthenticationDBAccessResponse* pAuthenticationDBAccessResponseNew,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBAccess::GetCredentials
+ * Purpose:
+ *
+ * Call this to access the credentials for the specified principal.
+ *
+ */
+ STDMETHOD(GetCredentials)
+ (
+ THIS_
+ IRMAAuthenticationDBAccessResponse* pAuthenticationDBAccessResponseNew,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAuthenticationDBAccessResponse
+ *
+ * Purpose:
+ *
+ * A database user will implement this when it desires to
+ * access authentication data.
+ * This interface receives the results of IRMAAuthenticationDBAccess
+ * methods
+ *
+ * IRMAAuthenticationDBAccessResponse:
+ *
+ * {00002A05-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAuthenticationDBAccessResponse, 0x00002A05, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAuthenticationDBAccessResponse
+
+DECLARE_INTERFACE_(IRMAAuthenticationDBAccessResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBAccessResponse::ExistenceCheckDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAAuthenticationDBAccess::ExistenceCheck
+ *
+ */
+ STDMETHOD(ExistenceCheckDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAuthenticationDBAccessResponse::GetCredentialsDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAAuthenticationDBAccess::GetCredentials
+ * If successful the Credentials var is valid.
+ *
+ */
+ STDMETHOD(GetCredentialsDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferPrincipalID,
+ IRMABuffer* pBufferCredentials
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAGUIDDBManager
+ *
+ * Purpose:
+ *
+ * A database plugin will implement this when it desires to provide
+ * storage of player GUID data (for Player Authentication).
+ *
+ * IRMAGUIDDBManager:
+ *
+ * {00002A08-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAGUIDDBManager, 0x00002A08, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAGUIDDBManager
+
+DECLARE_INTERFACE_(IRMAGUIDDBManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGUIDDBManager::SetGUIDForPrincipalID
+ * Purpose:
+ *
+ * Call this to associate a player GUID with a user.
+ *
+ */
+ STDMETHOD(SetGUIDForPrincipalID)
+ (
+ THIS_
+ IRMAGUIDDBManagerResponse* pGUIDDBManagerResponseNew,
+ IRMABuffer* pBufferPrincipalID,
+ IRMABuffer* pBufferGUID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGUIDDBManager::GetPrincipalIDFromGUID
+ * Purpose:
+ *
+ * Call this to get the associated player GUID from a user.
+ *
+ */
+ STDMETHOD(GetPrincipalIDFromGUID)
+ (
+ THIS_
+ IRMAGUIDDBManagerResponse* pGUIDDBManagerResponseNew,
+ IRMABuffer* pBufferGUID
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAGUIDDBManagerResponse
+ *
+ * Purpose:
+ *
+ * A database user will implement this when it desires to
+ * manage player GUID data.
+ * This interface receives the results of IRMAGUIDDBManager
+ * methods
+ *
+ * IRMAGUIDDBManagerResponse:
+ *
+ * {00002A07-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAGUIDDBManagerResponse, 0x00002A07, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAGUIDDBManagerResponse
+
+DECLARE_INTERFACE_(IRMAGUIDDBManagerResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGUIDDBManagerResponse::SetGUIDForPrincipalIDDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAGUIDDBManager::SetGUIDForPrincipalID
+ *
+ */
+ STDMETHOD(SetGUIDForPrincipalIDDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGUIDDBManagerResponse::GetPrincipalIDFromGUIDDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAGUIDDBManager::GetGUIDForPrincipalID
+ *
+ */
+ STDMETHOD(GetPrincipalIDFromGUIDDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferGUID,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPPVDBManager
+ *
+ * Purpose:
+ *
+ * A database plugin will implement this when it desires to provide
+ * storage of Pay-Per-View permission data.
+ *
+ * IRMAPPVDBManager:
+ *
+ * {00002A0A-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPPVDBManager, 0x00002A0A, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPPVDBManager
+
+DECLARE_INTERFACE_(IRMAPPVDBManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDBManager::GetPermissions
+ * Purpose:
+ *
+ * Call this to find the PPV permissions for the specified URL
+ * and user.
+ *
+ */
+ STDMETHOD(GetPermissions)
+ (
+ THIS_
+ IRMAPPVDBManagerResponse* pPPVDBManagerResponseNew,
+ IRMABuffer* pBufferPrincipalID,
+ IRMABuffer* pBufferURL
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDBManager::SetPermissions
+ * Purpose:
+ *
+ * Call this to set the PPV permissions for the specified URL
+ * and user.
+ *
+ */
+ STDMETHOD(SetPermissions)
+ (
+ THIS_
+ IRMAPPVDBManagerResponse* pPPVDBManagerResponseNew,
+ IRMABuffer* pBufferPrincipalID,
+ IRMABuffer* pBufferURL,
+ IRMAValues* pValuesPermissions
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDBManager::RevokePermissions
+ * Purpose:
+ *
+ * Call this to remove the PPV permissions for the specified URL
+ * and user.
+ *
+ */
+ STDMETHOD(RevokePermissions)
+ (
+ THIS_
+ IRMAPPVDBManagerResponse* pPPVDBManagerResponseNew,
+ IRMABuffer* pBufferPrincipalID,
+ IRMABuffer* pBufferURL
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDBManager::RevokeAllPermissions
+ * Purpose:
+ *
+ * Call this to remove the PPV permissions for all URL's
+ * that this user has access too.
+ *
+ */
+ STDMETHOD(RevokeAllPermissions)
+ (
+ THIS_
+ IRMAPPVDBManagerResponse* pPPVDBManagerResponseNew,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDBManager::LogAccessAttempt
+ * Purpose:
+ *
+ * Call this to record the results of an attempt to access
+ * protected content.
+ *
+ */
+ STDMETHOD(LogAccessAttempt)
+ (
+ THIS_
+ IRMAValues* pValuesAccess
+ ) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPPVDBManagerResponse
+ *
+ * Purpose:
+ *
+ * A database user will implement this when it desires to
+ * manage Pay-Per-View permission data.
+ * This interface receives the results of IRMAPPVDBManager
+ * methods
+ *
+ * IRMAPPVDBManagerResponse:
+ *
+ * {00002A09-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPPVDBManagerResponse, 0x00002A09, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPPVDBManagerResponse
+
+DECLARE_INTERFACE_(IRMAPPVDBManagerResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDBManagerResponse::GetPermissionsDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAPPVDBManager::GetPermissions
+ * If successful then the Permissions are valid
+ *
+ */
+ STDMETHOD(GetPermissionsDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferPrincipalID,
+ IRMAValues* pValuesPermissions
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDBManagerResponse::SetPermissionsDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAPPVDBManager::SetPermissions
+ *
+ */
+ STDMETHOD(SetPermissionsDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDBManagerResponse::RevokePermissionsDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAPPVDBManager::RevokePermissions
+ *
+ */
+ STDMETHOD(RevokePermissionsDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDBManagerResponse::RevokeAllPermissionsDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMAPPVDBManager::RevokeAllPermissions
+ *
+ */
+ STDMETHOD(RevokeAllPermissionsDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferPrincipalID
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARedirectDBManager
+ *
+ * Purpose:
+ *
+ * A database plugin will implement this when it desires to provide
+ * storage of URL's to redirect.
+ *
+ * IRMARedirectDBManager:
+ *
+ * {00002A0C-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARedirectDBManager, 0x00002A0C, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMARedirectDBManager
+
+DECLARE_INTERFACE_(IRMARedirectDBManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARedirectDBManager::GetRedirect
+ * Purpose:
+ *
+ * Call this to retrieve the URL that the specified URL should
+ * be redirected to.
+ *
+ */
+ STDMETHOD(GetRedirect)
+ (
+ THIS_
+ IRMARedirectDBManagerResponse* pRedirectDBManagerResponseNew,
+ IRMABuffer* pBufferURL
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARedirectDBManager::AddRedirect
+ * Purpose:
+ *
+ * Call this to set the new URL that the specified URL should
+ * be redirected to.
+ *
+ */
+ STDMETHOD(AddRedirect)
+ (
+ THIS_
+ IRMARedirectDBManagerResponse* pRedirectDBManagerResponseNew,
+ IRMABuffer* pBufferURL,
+ IRMABuffer* pBufferNewURL
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARedirectDBManager::RemoveRedirect
+ * Purpose:
+ *
+ * Call this to stop redirecting the specified URL.
+ *
+ */
+ STDMETHOD(RemoveRedirect)
+ (
+ THIS_
+ IRMARedirectDBManagerResponse* pRedirectDBManagerResponseNew,
+ IRMABuffer* pBufferURL
+ ) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARedirectDBManagerResponse
+ *
+ * Purpose:
+ *
+ * A database user will implement this when it desires to
+ * manage the URL's to redirect.
+ * This interface receives the results of IRMARedirectDBManager
+ * methods
+ *
+ * IRMARedirectDBManagerResponse:
+ *
+ * {00002A0B-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARedirectDBManagerResponse, 0x00002A0B, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMARedirectDBManagerResponse
+
+DECLARE_INTERFACE_(IRMARedirectDBManagerResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARedirectDBManagerResponse::GetRedirectDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMARedirectDBManager::GetRedirect
+ * If successful then the new URL is valid
+ *
+ */
+ STDMETHOD(GetRedirectDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferURL,
+ IRMABuffer* pBufferNewURL
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARedirectDBManagerResponse::AddRedirectDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMARedirectDBManager::AddRedirect
+ *
+ */
+ STDMETHOD(AddRedirectDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferURL
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARedirectDBManagerResponse::RemoveRedirectDone
+ * Purpose:
+ *
+ * Reports the success or failure of
+ * IRMARedirectDBManager::RemoveRedirect
+ *
+ */
+ STDMETHOD(RemoveRedirectDone)
+ (
+ THIS_
+ PN_RESULT ResultStatus,
+ IRMABuffer* pBufferURL
+ ) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARegistrationLogger
+ *
+ * Purpose:
+ *
+ * A database plugin will implement this when it desires to provide
+ * storage of player registration attempts.
+ *
+ * IRMARegistrationLogger:
+ *
+ * {00002A0E-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARegistrationLogger, 0x00002A0E, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMARegistrationLogger
+
+DECLARE_INTERFACE_(IRMARegistrationLogger, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface)
+ (
+ THIS_
+ REFIID IIDOfInterfaceDesired,
+ void** ppVoidRequestedInterface
+ ) PURE;
+
+ STDMETHOD_(ULONG,AddRef)
+ (
+ THIS
+ ) PURE;
+
+ STDMETHOD_(ULONG,Release)
+ (
+ THIS
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARegistrationLogger::LogRegistrationAttempt
+ * Purpose:
+ *
+ * Call this to record the results of an attempt to register
+ * a player's GUID.
+ *
+ */
+ STDMETHOD(LogRegistrationAttempt)
+ (
+ THIS_
+ IRMAValues* pValuesRegistration
+ ) PURE;
+};
+
+
+#endif /* !_RMADB_H_ */
diff --git a/include/realmedia/rmadtcvt.h b/include/realmedia/rmadtcvt.h
new file mode 100644
index 000000000..042436151
--- /dev/null
+++ b/include/realmedia/rmadtcvt.h
@@ -0,0 +1,533 @@
+/****************************************************************************
+ *
+ * $Id: rmadtcvt.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * Copyright (C) 1995-2000 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 Stream Data Conversion Interfaces.
+ *
+ */
+
+
+#ifndef _RMADTCVT_H
+#define _RMADTCVT_H
+
+typedef _INTERFACE IRMADataConvertSystemObject
+ IRMADataConvertSystemObject;
+typedef _INTERFACE IRMADataConvert IRMADataConvert;
+typedef _INTERFACE IRMADataConvertResponse IRMADataConvertResponse;
+typedef _INTERFACE IRMADataRevert IRMADataRevert;
+typedef _INTERFACE IRMADataRevertResponse IRMADataRevertResponse;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMADataConvertSystemObject
+ *
+ * Purpose:
+ *
+ * Object that allows Controller to communicate with a specific
+ * Data Convert plugin session (similar to IRMAFileSystemObject)
+ *
+ * Implemented by:
+ *
+ * Server side plugin.
+ *
+ * IID_IMADataConvertSystemObject:
+ *
+ * {00003900-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMADataConvertSystemObject,
+ 0x00003900, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMADataConvertSystemObject
+
+DECLARE_INTERFACE_(IRMADataConvertSystemObject, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMADataConvertSystemObject
+ */
+
+ /***********************************************************************
+ * Method: GetDataConvertInfo
+ *
+ * Purpose:
+ * Returns information needed for proper instantiation of data
+ * convert plugin. pShortName should be a short, human readable
+ * name in the form of "company-dcname". For example:
+ * pShortName = "rn-dataconvert"
+ */
+ STDMETHOD(GetDataConvertInfo) (THIS_ REF(const char*) pShortName) PURE;
+
+ /***********************************************************************
+ * Method: InitDataConvertSystem
+ *
+ * Purpose:
+ * Pass in options from config file from under DataConvertMount
+ * for this specific plugin.
+ */
+ STDMETHOD(InitDataConvertSystem) (THIS_ IRMAValues* pOptions) PURE;
+
+ /***********************************************************************
+ * Method: CreateDataConvert
+ *
+ * Purpose:
+ * Purpose:
+ * System is requesting an IRMADataConvert object for this mount
+ * point.
+ */
+ STDMETHOD(CreateDataConvert) (THIS_ IUnknown** /*OUT*/ ppConvObj) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMADataConvert
+ *
+ * Purpose:
+ *
+ * Per connection object to handle the actual data and header
+ * conversions.
+ *
+ * Implemented by:
+ *
+ * Server side plugin.
+ *
+ * IID_IMADataConvert:
+ *
+ * {00003901-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMADataConvert,
+ 0x00003901, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMADataConvert
+
+DECLARE_INTERFACE_(IRMADataConvert, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMADataConvert
+ */
+
+ /*
+ * NOTE: for each of ConvertFileHeader, ConvertStreamHeader,
+ * ConvertData, you can call the appropriate done method on
+ * the response object with a result of PNR_OK and a NULL buffer
+ * and the system will use the original header/packet. Do this
+ * if you aren't going to change things in the header/packet.
+ */
+ /************************************************************************
+ * Method: DataConvertInit
+ *
+ *Purpose:
+ * Basic initialization, mainly just to pass in response object.
+ */
+ STDMETHOD(DataConvertInit) (THIS_ IRMADataConvertResponse* pResponse) PURE;
+
+ /************************************************************************
+ * Method: ConvertFileHeader
+ *
+ * Purpose:
+ * Pass in file headers for data conversion.
+ */
+ STDMETHOD(ConvertFileHeader) (THIS_ IRMAValues* pFileHeader) PURE;
+
+ /************************************************************************
+ * Method: ConvertStreamHeader
+ *
+ * Purpose:
+ * Pass in stream headers for data conversion.
+ */
+ STDMETHOD(ConvertStreamHeader) (THIS_ IRMAValues* pStreamHeader) PURE;
+
+ /************************************************************************
+ * Method: GetConversionMimeType
+ *
+ * Purpose:
+ * Tell the server what converstion type you are using for the
+ * session.
+ */
+ STDMETHOD(GetConversionMimeType)
+ (THIS_ REF(const char*) pConversionType) PURE;
+
+ /************************************************************************
+ * Method: ConvertData
+ *
+ * Purpose:
+ * Pass in data to be converted.
+ */
+ STDMETHOD(ConvertData) (THIS_ IRMAPacket* pPacket) PURE;
+
+ /************************************************************************
+ * Method: ControlBufferReady
+ *
+ * Purpose:
+ * Pass in a control channel buffer sent from the IRMADataRevert
+ * on the other side (player).
+ */
+ STDMETHOD(ControlBufferReady) (THIS_ IRMABuffer* pBuffer) PURE;
+
+ /************************************************************************
+ * Method: SetMulticastTransportConverter
+ *
+ * Purpose:
+ * In this case the IRMADataConvert is only handling the header
+ * conversions per player and this call is handing you the data
+ * converter which is doing the data. This will a different
+ * instance of the same object.
+ */
+ STDMETHOD(SetMulticastTransportConverter) (THIS_
+ IRMADataConvert* pConverter) PURE;
+
+
+ /************************************************************************
+ * Method: AddMulticastControlConverter
+ *
+ * Purpose:
+ * In this case the IRMADataConvert is only handling the data
+ * conversions for all of the players (but only once because it's
+ * multicast). This call is handing you one of a possible many
+ * IRMADataConvert objects which will be handling the header
+ * conversions.
+ */
+ STDMETHOD(AddMulticastControlConverter) (THIS_
+ IRMADataConvert* pConverter) PURE;
+
+ /************************************************************************
+ * Method: Done
+ *
+ * Purpose:
+ * Let IRMADataConvert know that it is done. This is mainly to clear
+ * circular refs between multicast transport and controllers.
+ */
+ STDMETHOD(Done) (THIS) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMADataConvertResponse
+ *
+ * Purpose:
+ *
+ * Response object for IRMADataConvert.
+ *
+ * Implemented by:
+ *
+ * Server Core.
+ *
+ * IID_IMADataConvertResponse:
+ *
+ * {00003902-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMADataConvertResponse,
+ 0x00003902, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMADataConvertResponse
+
+DECLARE_INTERFACE_(IRMADataConvertResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMADataConvertResponse
+ */
+
+ /*
+ * NOTE: for each of ConvertFileHeader, ConvertStreamHeader,
+ * ConvertData, you can call the appropriate done method on
+ * the response object with a result of PNR_OK and a NULL buffer
+ * and the system will use the original header/packet. Do this
+ * if you aren't going to change things in the header/packet.
+ */
+ /************************************************************************
+ * Method: DataConvertInitDone
+ *
+ * Purpose:
+ * Async notification that the IRMADataConvert is done with
+ * intialization.
+ */
+ STDMETHOD(DataConvertInitDone) (THIS_ PN_RESULT status) PURE;
+
+ /************************************************************************
+ * Method: ConvertedFileHeaderReady
+ *
+ * Purpose:
+ * Async notification that the IRMADataCovert is done converting the
+ * file header.
+ */
+ STDMETHOD(ConvertedFileHeaderReady) (THIS_
+ PN_RESULT status, IRMAValues* pFileHeader) PURE;
+
+ /************************************************************************
+ * Method: ConvertedStreamHeaderReady
+ *
+ * Purpose:
+ * Async notification that the IRMADataConvert is done converting the
+ * stream header.
+ */
+ STDMETHOD(ConvertedStreamHeaderReady) (THIS_
+ PN_RESULT status, IRMAValues* pStreamHeader) PURE;
+
+ /************************************************************************
+ * Method: ConvertedDataReady
+ *
+ * Purpose:
+ * Async notification that the IRMADataConvert is done converting
+ * the stream data packet.
+ */
+ STDMETHOD(ConvertedDataReady) (THIS_ PN_RESULT status,
+ IRMAPacket* pPacket) PURE;
+
+ /************************************************************************
+ * Method: SendControlBuffer
+ *
+ * Purpose:
+ * Provided to allow IRMADataConvert to send an arbitrary buffer
+ * to the IRMADataRevert on the other side (player).
+ */
+ STDMETHOD(SendControlBuffer) (THIS_ IRMABuffer* pBuffer) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMADataRevert
+ *
+ * Purpose:
+ *
+ * Revert data coming from coresponding IRMADataConvert on server.
+ *
+ * Implemented by:
+ *
+ * Player side plugin.
+ *
+ * IID_IMADataRevert:
+ *
+ * {00003903-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMADataRevert,
+ 0x00003903, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMADataRevert
+
+DECLARE_INTERFACE_(IRMADataRevert, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMADataRevert
+ */
+
+ /************************************************************************
+ * Method: DataRevertInit
+ *
+ * Purpose:
+ * Basic inialization of IRMADataRevert. Mainly just to pass in
+ * response object.
+ */
+ STDMETHOD(DataRevertInit) (THIS_ IRMADataRevertResponse* pResponse) PURE;
+
+ /************************************************************************
+ * Method: GetDataRevertInfo
+ *
+ * Purpose:
+ * Allow IRMADataRevert to notify player core about which data
+ * conversion mime types it is willing to handle.
+ */
+ STDMETHOD(GetDataRevertInfo) (THIS_ REF(const char**)
+ ppConversionMimeTypes) PURE;
+
+ /************************************************************************
+ * Method: RevertFileHeader
+ *
+ * Purpose:
+ * Pass in converted FileHeader to allow IRMADataRevert to revert
+ * the header.
+ */
+ STDMETHOD(RevertFileHeader) (THIS_ IRMAValues* pFileHeader) PURE;
+
+ /************************************************************************
+ * Method: RevertStreamHeader
+ *
+ * Purpose:
+ * Pass in converted StreamHeader to allow IRMADataRevert to revert
+ * the header.
+ */
+ STDMETHOD(RevertStreamHeader)(THIS_ IRMAValues* pStreamHeader) PURE;
+
+ /************************************************************************
+ * Method: RevertData
+ *
+ * Purpose:
+ * Pass in converted stream data to allow IRMADataRevert to
+ * revert the data.
+ */
+ STDMETHOD(RevertData) (THIS_ IRMAPacket* pPacket) PURE;
+
+ /************************************************************************
+ * Method: ControlBufferReady
+ *
+ * Purpose:
+ * Pass in control channel buffer received from corresponding
+ * IRMADataConvert on server side.
+ */
+ STDMETHOD(ControlBufferReady) (THIS_ IRMABuffer* pBuffer) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMADataRevertResponse
+ *
+ * Purpose:
+ *
+ * Response ojbect for IRMADataRevert.
+ *
+ * Implemented by:
+ *
+ * Player core.
+ *
+ * IID_IMADataRevertResponse:
+ *
+ * {00003904-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMADataRevertResponse,
+ 0x00003904, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMADataRevertResponse
+
+DECLARE_INTERFACE_(IRMADataRevertResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMADataRevertResponse
+ */
+
+ /************************************************************************
+ * Method: DataRevertInitDone
+ *
+ * Purpose:
+ * Async notification that the IRMADataRevert is done intializing
+ * and can begin processing headers.
+ */
+ STDMETHOD(DataRevertInitDone) (THIS_ PN_RESULT status) PURE;
+
+ /************************************************************************
+ * Method: RevertedFileHeaderReady
+ *
+ * Purpose:
+ * Async notification that the IRMADataRevert is done reverting the
+ * file headers.
+ */
+ STDMETHOD(RevertedFileHeaderReady) (THIS_
+ PN_RESULT status, IRMAValues* pHeader) PURE;
+
+ /************************************************************************
+ * Method: RevertedStreamHeaderReady
+ *
+ * Purpose:
+ * Async notification that the IRMADataRevert is done reverting the
+ * stream headers.
+ */
+ STDMETHOD(RevertedStreamHeaderReady) (THIS_
+ PN_RESULT status, IRMAValues* pHeader) PURE;
+
+ /************************************************************************
+ * Method: RevertedDataReady
+ *
+ * Purpose:
+ * Async notification that the IRMADataRevert is done reverting the
+ * stream data.
+ */
+ STDMETHOD(RevertedDataReady) (THIS_ PN_RESULT status,
+ IRMAPacket* pPacket) PURE;
+
+ /************************************************************************
+ * Method: SendControlBuffer
+ *
+ * Purpose:
+ * Provided to allow IRMADataRevert to send an arbitrary control
+ * buffer to the IRMADataConvert on the other side (server).
+ */
+ STDMETHOD(SendControlBuffer) (THIS_ IRMABuffer* pBuffer) PURE;
+
+};
+
+
+#endif
diff --git a/include/realmedia/rmaencod.h b/include/realmedia/rmaencod.h
new file mode 100644
index 000000000..f03c224c7
--- /dev/null
+++ b/include/realmedia/rmaencod.h
@@ -0,0 +1,240 @@
+/****************************************************************************
+ *
+ * $Id: rmaencod.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Encoder Interfaces.
+ *
+ */
+
+#ifndef _RMAENCOD_H_
+#define _RMAENCOD_H_
+
+typedef _INTERFACE IUnknown IUnknown;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMAPacket IRMAPacket;
+typedef _INTERFACE IRMARequest IRMARequest;
+typedef _INTERFACE IRMAEncoder IRMAEncoder;
+typedef _INTERFACE IRMAEncoderResponse IRMAEncoderResponse;
+typedef _INTERFACE IRMAEncoderCompletion IRMAEncoderCompletion;
+typedef _INTERFACE IRMAEncoderResponseCompletion IRMAEncoderResponseCompletion;
+typedef _INTERFACE IRMAConnectionlessControl IRMAConnectionlessControl;
+typedef _INTERFACE IRMATransportControl IRMATransportControl;
+
+#ifndef _MACINTOSH
+STDAPI_(IUnknown*) CreateContext();
+#else
+#pragma export on
+STDAPI_(IUnknown*) CreateContext();
+#pragma export off
+#endif
+
+
+DEFINE_GUID(IID_IRMAEncoderResponse, 0x00001600, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAEncoderResponse
+
+DECLARE_INTERFACE_(IRMAEncoderResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAEncoderResponse methods
+ */
+ STDMETHOD(InitEncoderResponse) (THIS_
+ const char* pHost,
+ UINT16 unPort,
+ IRMARequest* pRequest,
+ const char* pUsername,
+ const char* pPassword,
+ IRMAEncoder* pEncoder) PURE;
+
+ STDMETHOD(FileHeaderReady) (THIS_
+ PN_RESULT result,
+ IRMAValues* pHeader) PURE;
+
+ STDMETHOD(StreamHeaderReady) (THIS_
+ PN_RESULT result,
+ IRMAValues* pHeader) PURE;
+
+ STDMETHOD(PacketReady) (THIS_
+ PN_RESULT result,
+ IRMAPacket* pPacket) PURE;
+
+ STDMETHOD(StreamDone) (THIS_
+ UINT16 unStream) PURE;
+
+ STDMETHOD(Process) (THIS) PURE;
+
+ STDMETHOD_(UINT32,GetTime) (THIS) PURE;
+};
+
+DEFINE_GUID(IID_IRMAEncoder, 0x00001601, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAEncoder
+
+DECLARE_INTERFACE_(IRMAEncoder, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAEncoder methods
+ */
+ STDMETHOD(InitEncoderResponseDone) (THIS_
+ PN_RESULT result) PURE;
+
+ STDMETHOD(GetFileHeader) (THIS) PURE;
+
+ STDMETHOD(GetStreamHeader) (THIS_
+ UINT16 unStream) PURE;
+
+ STDMETHOD(StartPackets) (THIS_
+ UINT16 unStream) PURE;
+
+ STDMETHOD(StopPackets) (THIS_
+ UINT16 unStream) PURE;
+};
+
+DEFINE_GUID(IID_IRMAEncoderCompletion, 0x00001602, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAEncoderCompletion
+
+DECLARE_INTERFACE_(IRMAEncoderCompletion, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAEncoderCompletion methods
+ */
+
+ STDMETHOD(EncoderDone) (THIS_
+ PN_RESULT result) PURE;
+};
+
+DEFINE_GUID(IID_IRMAConnectionlessControl, 0x00001603, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAConnectionlessControl
+
+DECLARE_INTERFACE_(IRMAConnectionlessControl, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAConnectionlessControl methods
+ */
+
+ STDMETHOD(EnableConnectionlessControl)
+ (THIS) PURE;
+
+ STDMETHOD(ConnectionCheckFailed) (THIS_
+ PN_RESULT status) PURE;
+
+ STDMETHOD(SetConnectionTimeout) (THIS_
+ UINT32 uSeconds) PURE;
+};
+
+DEFINE_GUID(IID_IRMAEncoderResponseCompletion, 0x00001604, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAEncoderResponseCompletion
+
+DECLARE_INTERFACE_(IRMAEncoderResponseCompletion, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAEncoderResponseCompletion methods
+ */
+
+ STDMETHOD(EncoderResponseDone) (THIS) PURE;
+};
+
+/*
+ * The only 2 encoder transport types supported are:
+ * "x-pn-tng/udp"
+ * "x-pn-tng/tcp"
+ */
+
+DEFINE_GUID(IID_IRMATransportControl, 0x00001605, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMATransportControl
+
+DECLARE_INTERFACE_(IRMATransportControl, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMATransportControl methods
+ */
+
+ STDMETHOD(SetTransportType) (const char* pTransportType) PURE;
+};
+
+#endif /* _RMAENCOD_H_ */
diff --git a/include/realmedia/rmaengin.h b/include/realmedia/rmaengin.h
new file mode 100644
index 000000000..abcf8a542
--- /dev/null
+++ b/include/realmedia/rmaengin.h
@@ -0,0 +1,1500 @@
+/****************************************************************************
+ *
+ * $Id: rmaengin.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Callback, Networking, and Scheduling interfaces.
+ *
+ */
+
+#ifndef _RMAENGIN_H_
+#define _RMAENGIN_H_
+
+/*
+ * Forward declarations of some interfaces used here-in.
+ */
+
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMACallback IRMACallback;
+typedef _INTERFACE IRMAScheduler IRMAScheduler;
+typedef _INTERFACE IRMATCPResponse IRMATCPResponse;
+typedef _INTERFACE IRMALBoundTCPSocket IRMALBoundTCPSocket;
+typedef _INTERFACE IRMATCPSocket IRMATCPSocket;
+typedef _INTERFACE IRMAListenResponse IRMAListenResponse;
+typedef _INTERFACE IRMAListenSocket IRMAListenSocket;
+typedef _INTERFACE IRMANetworkServices IRMANetworkServices;
+typedef _INTERFACE IRMANetworkServices2 IRMANetworkServices2;
+typedef _INTERFACE IRMAUDPResponse IRMAUDPResponse;
+typedef _INTERFACE IRMAUDPSocket IRMAUDPSocket;
+typedef _INTERFACE IRMAResolver IRMAResolver;
+typedef _INTERFACE IRMAResolverResponse IRMAResolverResponse;
+typedef _INTERFACE IRMAInterruptSafe IRMAInterruptSafe;
+typedef _INTERFACE IRMAAsyncIOSelection IRMAAsyncIOSelection;
+typedef _INTERFACE IRMAUDPMulticastInit IRMAUDPMulticastInit;
+typedef _INTERFACE IRMAInterruptState IRMAInterruptState;
+typedef _INTERFACE IRMAOptimizedScheduler IRMAOptimizedScheduler;
+
+
+/*
+ * Address flags starting with PNR are depricated.
+ */
+#define PNR_INADDR_ANY (UINT32)0x00000000 //THIS FLAG IS DEPRICATED
+#define PN_INADDR_ANY (UINT32)0x00000000
+
+/*
+ * 255.255.255.254
+ *
+ * Bind to all ports in IPBindings list from
+ * server config.
+ */
+#define PNR_INADDR_IPBINDINGS (UINT32)0xfffffffe //THIS FLAG IS DEPRICATED
+#define PN_INADDR_IPBINDINGS (UINT32)0xfffffffe
+
+
+/* Async IO Selection Type (Unix Only) */
+
+#define PNAIO_READ 1
+#define PNAIO_WRITE 2
+#define PNAIO_EXCEPTION 4
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMACallback
+ *
+ * Purpose:
+ *
+ * This interface defines a simple callback which will be used in
+ * various interfaces such as IRMAScheduler.
+ *
+ * IID_IRMACallback:
+ *
+ * {00000100-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMACallback, 0x00000100, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMACallback
+
+DECLARE_INTERFACE_(IRMACallback, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMACallback methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMACallback::Func
+ * Purpose:
+ * This is the function that will be called when a callback is
+ * to be executed.
+ */
+ STDMETHOD(Func) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAScheduler
+ *
+ * Purpose:
+ *
+ * This interface provides the user with a way of scheduling callbacks
+ * that will be executed at some time in the future.
+ *
+ * IID_IRMAScheduler:
+ *
+ * {00000101-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAScheduler, 0x00000101, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAScheduler
+
+typedef ULONG32 CallbackHandle;
+
+typedef struct _RMATimeval
+{
+ UINT32 tv_sec;
+ UINT32 tv_usec;
+} RMATimeval;
+
+DECLARE_INTERFACE_(IRMAScheduler, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAScheduler methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAScheduler::RelativeEnter
+ * Purpose:
+ * Schedule a callback to be executed "ms" milliseconds from now
+ * This function is less percise then AbsoluteEnter and should only
+ * be used when accurate timing is not critical.
+ */
+ STDMETHOD_(CallbackHandle,RelativeEnter) (THIS_
+ IRMACallback* pCallback,
+ UINT32 ms) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAScheduler::AbsoluteEnter
+ * Purpose:
+ * Schedule a callback to be executed at time "tVal".
+ */
+ STDMETHOD_(CallbackHandle,AbsoluteEnter) (THIS_
+ IRMACallback* pCallback,
+ RMATimeval tVal) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAScheduler::Remove
+ * Purpose:
+ * Remove a callback from the scheduler.
+ */
+ STDMETHOD(Remove) (THIS_
+ CallbackHandle Handle) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAScheduler::GetCurrentSchedulerTime
+ * Purpose:
+ * Gives the current time (in the timeline of the scheduler).
+ */
+ STDMETHOD_(RMATimeval,GetCurrentSchedulerTime) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMATCPResponse
+ *
+ * Purpose:
+ *
+ * This is the response interface for the asynchronous TCP networking
+ * interface.
+ *
+ * IID_IRMATCPResponse:
+ *
+ * {00000102-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMATCPResponse, 0x00000102, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMATCPResponse
+
+DECLARE_INTERFACE_(IRMATCPResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMATCPResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMATCPResponse::ConnectDone
+ * Purpose:
+ * A Connect operation has been completed or an error has occurred.
+ */
+ STDMETHOD(ConnectDone) (THIS_
+ PN_RESULT status) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMATCPResponse::ReadDone
+ * Purpose:
+ * A Read operation has been completed or an error has occurred.
+ * The data is returned in the IRMABuffer.
+ */
+ STDMETHOD(ReadDone) (THIS_
+ PN_RESULT status,
+ IRMABuffer* pBuffer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMATCPResponse::WriteReady
+ * Purpose:
+ * This is the response method for WantWrite.
+ * If PN_RESULT is ok, then the TCP channel is ok to Write to.
+ */
+ STDMETHOD(WriteReady) (THIS_
+ PN_RESULT status) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMATCPResponse::Closed
+ * Purpose:
+ * This method is called to inform you that the TCP channel has
+ * been closed by the peer or closed due to error.
+ */
+ STDMETHOD(Closed) (THIS_
+ PN_RESULT status) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMATCPSocket
+ *
+ * Purpose:
+ *
+ * Provides the user with an asynchronous TCP networking interface.
+ *
+ * IID_IRMATCPSocket:
+ *
+ * {00000103-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMATCPSocket, 0x00000103, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMATCPSocket
+
+DECLARE_INTERFACE_(IRMATCPSocket, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMATCPSocket methods
+ *
+ * Network addresses and ports are in native byte order
+ *
+ */
+
+ STDMETHOD(Init) (THIS_
+ IRMATCPResponse* /*IN*/ pTCPResponse) PURE;
+
+ STDMETHOD(SetResponse) (THIS_
+ IRMATCPResponse* pTCPResponse) PURE;
+
+ STDMETHOD(Bind) (THIS_
+ UINT32 ulLocalAddr,
+ UINT16 nPort) PURE;
+
+ /*
+ * pDestination is a string containing host name or dotted-ip notation
+ */
+ STDMETHOD(Connect) (THIS_
+ const char* pDestination,
+ UINT16 nPort) PURE;
+
+ STDMETHOD(Read) (THIS_
+ UINT16 Size) PURE;
+
+ STDMETHOD(Write) (THIS_
+ IRMABuffer* pBuffer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMATCPSocket::WantWrite
+ * Purpose:
+ * This method is called when you wish to write a large amount of
+ * data. If you are only writing small amounts of data, you can
+ * just call Write (all data not ready to be transmitted will be
+ * buffered on your behalf). When the TCP channel is ready to be
+ * written to, the response interfaces WriteReady method will be
+ * called.
+ */
+ STDMETHOD(WantWrite) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMATCPSocket::GetForeignAddress
+ * Purpose:
+ * Returns the address of the other end of the TCP socket as a
+ * ULONG32 in local host order
+ */
+ STDMETHOD(GetForeignAddress) (THIS_
+ REF(ULONG32) lAddress) PURE;
+
+ STDMETHOD(GetLocalAddress) (THIS_
+ REF(ULONG32) lAddress) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMATCPSocket::GetForeignPort
+ * Purpose:
+ * Returns the port of the other end of the TCP socket in local
+ * host order.
+ */
+ STDMETHOD(GetForeignPort) (THIS_
+ REF(UINT16) port) PURE;
+
+ STDMETHOD(GetLocalPort) (THIS_
+ REF(UINT16) port) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAListenResponse
+ *
+ * Purpose:
+ *
+ * This is the response interface for the asynchronous TCP listening
+ * socket interface.
+ *
+ * IID_IRMAListenResponse:
+ *
+ * {00000104-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAListenResponse, 0x00000104, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAListenResponse
+
+DECLARE_INTERFACE_(IRMAListenResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAListenResponse methods
+ */
+
+ STDMETHOD(NewConnection) (THIS_
+ PN_RESULT status,
+ IRMATCPSocket* pTCPSocket) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAListenSocket
+ *
+ * Purpose:
+ *
+ * This interfaces allows you to asynchronously listen on a port for
+ * TCP connections.
+ *
+ * IID_IRMAListenSocket:
+ *
+ * {00000105-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAListenSocket, 0x00000105, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAListenSocket
+
+DECLARE_INTERFACE_(IRMAListenSocket, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAListenSocket methods
+ */
+
+ STDMETHOD(Init) (THIS_
+ UINT32 ulLocalAddr,
+ UINT16 port,
+ IRMAListenResponse* /*IN*/ pListenResponse
+ ) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMANetworkServices
+ *
+ * Purpose:
+ *
+ * This is a factory interface for the various types of networking
+ * interfaces described above.
+ *
+ * IID_IRMANetworkServices:
+ *
+ * {00000106-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMANetworkServices, 0x00000106, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMANetworkServices
+
+DECLARE_INTERFACE_(IRMANetworkServices, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMANetworkServices methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMANetworkServices::CreateTCPSocket
+ * Purpose:
+ * Create a new TCP socket.
+ */
+ STDMETHOD(CreateTCPSocket) (THIS_
+ IRMATCPSocket** /*OUT*/ ppTCPSocket) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMANetworkServices::CreateUDPSocket
+ * Purpose:
+ * Create a new UDP socket.
+ */
+ STDMETHOD(CreateUDPSocket) (THIS_
+ IRMAUDPSocket** /*OUT*/ ppUDPSocket) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMANetworkServices::CreateListenSocket
+ * Purpose:
+ * Create a new TCP socket that will listen for connections on a
+ * particular port.
+ */
+ STDMETHOD(CreateListenSocket) (THIS_
+ IRMAListenSocket** /*OUT*/ ppListenSocket
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMANetworkServices::CreateResolver
+ * Purpose:
+ * Create a new resolver that can lookup host names
+ */
+ STDMETHOD(CreateResolver) (THIS_
+ IRMAResolver** /*OUT*/ ppResolver) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMANetworkServices2
+ *
+ * Purpose:
+ *
+ * This is a factory interface for the various types of networking
+ * interfaces described above.
+ *
+ * IID_IRMANetworkServices:
+ *
+ * {17951551-5683-11d3-B6BA-00C0F031C237}
+ *
+ */
+
+// {17951551-5683-11d3-B6BA-00C0F031C237}
+DEFINE_GUID(IID_IRMANetworkServices2, 0x17951551, 0x5683, 0x11d3, 0xb6, 0xba, 0x0, 0xc0, 0xf0, 0x31, 0xc2, 0x37);
+
+#undef INTERFACE
+#define INTERFACE IRMANetworkServices2
+
+DECLARE_INTERFACE_(IRMANetworkServices2, IRMANetworkServices)
+{
+ /************************************************************************
+ * Method:
+ * IRMANetworkServices2::CreateLBoundTCPSocket
+ * Purpose:
+ * Create a new local bound TCP socket.
+ */
+ STDMETHOD(CreateLBoundTCPSocket) (THIS_
+ IRMATCPSocket** /*OUT*/ ppTCPSocket) PURE;
+};
+
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAUDPResponse
+ *
+ * Purpose:
+ *
+ * This is the response interface for the asynchronous UDP networking
+ * interface.
+ *
+ * IID_IRMAUDPResponse:
+ *
+ * {00000107-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAUDPResponse, 0x00000107, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAUDPResponse
+
+DECLARE_INTERFACE_(IRMAUDPResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAUDPResponse methods
+ */
+
+ STDMETHOD(ReadDone) (THIS_
+ PN_RESULT status,
+ IRMABuffer* pBuffer,
+ ULONG32 ulAddr,
+ UINT16 nPort) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAUDPSocket
+ *
+ * Purpose:
+ *
+ * Provides the user with an asynchronous UDP networking interface.
+ *
+ * IID_IRMAUDPSocket:
+ *
+ * {00000108-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAUDPSocket, 0x00000108, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAUDPSocket
+
+DECLARE_INTERFACE_(IRMAUDPSocket, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAUDPSocket methods
+ *
+ * Network addresses and ports are in native byte order
+ */
+
+ STDMETHOD(Init) (THIS_
+ ULONG32 ulAddr,
+ UINT16 nPort,
+ IRMAUDPResponse* pUDPResponse) PURE;
+
+ STDMETHOD(Bind) (THIS_
+ UINT32 ulLocalAddr,
+ UINT16 nPort) PURE;
+
+ STDMETHOD(Read) (THIS_
+ UINT16 Size) PURE;
+
+ STDMETHOD(Write) (THIS_
+ IRMABuffer* pBuffer) PURE;
+
+ STDMETHOD(WriteTo) (THIS_
+ ULONG32 ulAddr,
+ UINT16 nPort,
+ IRMABuffer* pBuffer) PURE;
+
+ STDMETHOD(GetLocalPort) (THIS_
+ REF(UINT16) port) PURE;
+
+ STDMETHOD(JoinMulticastGroup) (THIS_
+ ULONG32 ulMulticastAddr,
+ ULONG32 ulInterfaceAddr) PURE;
+
+ STDMETHOD(LeaveMulticastGroup) (THIS_
+ ULONG32 ulMulticastAddr,
+ ULONG32 ulInterfaceAddr) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAResolver
+ *
+ * Purpose:
+ *
+ * This interface allows you to asynchronously resolve hostnames.
+ *
+ * IID_IRMAResolver:
+ *
+ * {00000109-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAResolver, 0x00000109, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAResolver
+
+DECLARE_INTERFACE_(IRMAResolver, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAResolver methods
+ */
+
+ STDMETHOD(Init) (THIS_
+ IRMAResolverResponse* pResponse) PURE;
+
+ STDMETHOD(GetHostByName) (THIS_
+ const char* pHostName) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAResolverResponse
+ *
+ * Purpose:
+ *
+ * This is the response interface for the asynchronous DNS hostname
+ * resolver.
+ *
+ * IID_IRMAResolverResponse:
+ *
+ * {0000010A-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAResolverResponse, 0x0000010A, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAResolverResponse
+
+DECLARE_INTERFACE_(IRMAResolverResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAResolverResponse methods
+ */
+
+ STDMETHOD(GetHostByNameDone) (THIS_
+ PN_RESULT status,
+ ULONG32 ulAddr) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAInterruptSafe
+ *
+ * Purpose:
+ *
+ * This interface is used in Macintosh implementations of callback
+ * functions, renderers, etc... to determine if interrupt time execution
+ * is supported. If this interface is not implemented then it is assumed
+ * that interrupt time execution is NOT supported. There are restrictions
+ * on what may be executed at interrupt time; please consult the Macintosh
+ * Deferred Task Manager tech notes from Apple.
+ *
+ * IID_IRMAInterruptSafe:
+ *
+ * {0000010B-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAInterruptSafe, 0x0000010B, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAInterruptSafe
+
+DECLARE_INTERFACE_(IRMAInterruptSafe, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAInterruptSafe methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAInterruptSafe::IsInterruptSafe
+ * Purpose:
+ * This is the function that will be called to determine if
+ * interrupt time execution is supported.
+ */
+ STDMETHOD_(BOOL,IsInterruptSafe) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAAsyncIOSelection
+ *
+ * Purpose:
+ *
+ * This interface is implemented by the server/player context on Unix
+ * platforms. This interface allows your plugin to get callbacks based
+ * I/O events that are normally handled by select(). This interface
+ * allows you to setup callbacks which will be executed when a file
+ * descriptor is ready for reading, writing, or has an exception.
+ *
+ * IID_IRMAAsyncIOSelection:
+ *
+ * {0000010C-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAAsyncIOSelection, 0x0000010C, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAAsyncIOSelection
+
+DECLARE_INTERFACE_(IRMAAsyncIOSelection, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAAsyncIOSelection methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAAsyncIOSelection::Add
+ * Purpose:
+ * This function will allow you to receive a callback when the
+ * given descriptor is ready for read, write, or has an
+ * exception. This function is only available on Unix, and is
+ * intended to replace the functionality of select().
+ */
+ STDMETHOD(Add) (THIS_
+ IRMACallback* pCallback,
+ INT32 lFileDescriptor,
+ UINT32 ulType) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAAsyncIOSelection::Remove
+ * Purpose:
+ * This function will allow you remove the callback associated
+ * with the given descriptor from the event handler.
+ * This function is only available on Unix, and is intended to
+ * replace the functionality of select().
+ */
+ STDMETHOD(Remove) (THIS_
+ INT32 lFileDescriptor,
+ UINT32 ulType) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAUDPMulticastInit
+ *
+ * Purpose:
+ *
+ * Provides the user with a way to set the TTL for outgoing multicast
+ * UDP packets. Usually shared with IRMAUDPSocket.
+ *
+ * IID_IRMAUDPMulticastInit:
+ *
+ * {0000010D-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAUDPMulticastInit, 0x0000010D, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAUDPMulticastInit
+
+DECLARE_INTERFACE_(IRMAUDPMulticastInit, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAUDPMulticastInit methods
+ *
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAUDPMulticastInit::InitMulticast
+ * Purpose:
+ * This function will set the TTL (time to live) for the UDP socket
+ * so it can be used as a multicast socket, sending packets across
+ * the number of routers specified in the ulTTL parameter.
+ */
+
+ STDMETHOD(InitMulticast) (THIS_
+ UINT8 chTTL) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAInterruptState
+ *
+ * Purpose:
+ *
+ * This interface is used in Macintosh implementations to inform the
+ * the client engine when entering & leaving an interupt task. It is
+ * also used to determine if it is currently at interrupt time.
+ * Please consult the Macintosh Deferred Task Manager tech notes from Apple
+ * for information on interrupt tasks.
+ *
+ * IID_IRMAInterruptState:
+ *
+ * {0000010E-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAInterruptState, 0x0000010E, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAInterruptState
+
+DECLARE_INTERFACE_(IRMAInterruptState, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAInterruptState methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAInterruptState::AtInterruptTime
+ * Purpose:
+ * This function is called to determine if we are currently at
+ * interrupt task time.
+ */
+ STDMETHOD_(BOOL,AtInterruptTime) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAInterruptState::EnterInterruptState
+ * Purpose:
+ * This function is called when starting a deferred/interrupt task
+ */
+ STDMETHOD(EnterInterruptState) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAInterruptState::LeaveInterruptState
+ * Purpose:
+ * This function is called when leaving a deferred/interrupt task
+ */
+ STDMETHOD(LeaveInterruptState) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAInterruptState::EnableInterrupt
+ * Purpose:
+ * This function can be called to enable/disable interrupt time
+ * processsing
+ */
+ STDMETHOD(EnableInterrupt) (THIS_
+ BOOL bEnable) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAInterruptState::IsInterruptEnabled
+ * Purpose:
+ * This function can be called to find if the core is currently
+ * interrupt enabled.
+ */
+ STDMETHOD_(BOOL, IsInterruptEnabled) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAOptimizedScheduler
+ *
+ * Purpose:
+ *
+ * This interface provides the user with a way of scheduling callbacks
+ * that will be executed at some time in the future.
+ *
+ * This interface should ONLY be used if you need accurately timed
+ * callbacks. These callbacks should be efficient and should not consume
+ * much time/CPU. This is not a thread safe interface. The user has to
+ * take care of synchronization in their callbacks.
+ *
+ * IID_IRMAOptimizedScheduler:
+ *
+ * {0000010F-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAOptimizedScheduler, 0x0000010F, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAOptimizedScheduler
+
+DECLARE_INTERFACE_(IRMAOptimizedScheduler, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAOptimizedScheduler methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAOptimizedScheduler::RelativeEnter
+ * Purpose:
+ * Schedule a callback to be executed "ms" milliseconds from now
+ * This function is less percise then AbsoluteEnter and should only
+ * be used when accurate timing is not critical.
+ */
+ STDMETHOD_(CallbackHandle,RelativeEnter) (THIS_
+ IRMACallback* pCallback,
+ UINT32 ms) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAOptimizedScheduler::AbsoluteEnter
+ * Purpose:
+ * Schedule a callback to be executed at time "tVal".
+ */
+ STDMETHOD_(CallbackHandle,AbsoluteEnter) (THIS_
+ IRMACallback* pCallback,
+ RMATimeval tVal) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAOptimizedScheduler::Remove
+ * Purpose:
+ * Remove a callback from the scheduler.
+ */
+ STDMETHOD(Remove) (THIS_
+ CallbackHandle Handle) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAOptimizedScheduler::GetCurrentSchedulerTime
+ * Purpose:
+ * Gives the current time (in the timeline of the scheduler).
+ */
+ STDMETHOD_(RMATimeval,GetCurrentSchedulerTime) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMALoadBalancedListen
+ *
+ * Purpose:
+ *
+ * This interface is queried off of IRMAListenSocket. It allows
+ * a plugin to specify that it wants the server to load balance
+ * multiple instances of itself. The server will instantiate multiple
+ * instances of the plugin as needed based on socket / descriptor limits.
+ * Each plugin instance should attempt to listen on the same port as
+ * other instances (they will share the port).
+ *
+ * IID_IRMALoadBalancedListen:
+ *
+ * {00000110-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMALoadBalancedListen, 0x00000110, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMALoadBalancedListen
+
+DECLARE_INTERFACE_(IRMALoadBalancedListen, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMALoadBalancedListen methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMALoadBalancedListen::SetID
+ * Purpose:
+ * This function set's the unique ID for this listen socket. This
+ * ID is used to determine whether or not different instances of
+ * a plugin trying to listen on a single port are actually the
+ * same plugin. Without this function, it would be possible for
+ * two completely different plugins to listen on the same port using
+ * the load balanced listener.
+ */
+ STDMETHOD(SetID) (THIS_
+ REFIID ID) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMALoadBalancedListen::SetReserveLimit
+ * Purpose:
+ * Sets the reserve limit for descriptors / sockets. If less
+ * than reserve limit descriptors / sockets are left then a new
+ * instance of the plugin will be created.
+ */
+ STDMETHOD(SetReserveLimit) (THIS_
+ UINT32 ulDescriptors,
+ UINT32 ulSockets) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAOverrideDefaultServices
+ *
+ * Purpose:
+ *
+ * This interface is queried off of the context. It allows
+ * a plugin to override any default services provided by the G2 system.
+ * Currently, it is supported only on the client side.
+ * You may currently override IRMANetworkServices using this interface
+ * You can use the same interface to later restore back the overriden services.
+ * This is done by calling the same OverrideServices() function with the
+ * original service QIed before the initial override.
+ *
+ * IID_IRMAOverrideDefaultServices:
+ *
+ * {00000111-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAOverrideDefaultServices, 0x00000111, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAOverrideDefaultServices
+
+DECLARE_INTERFACE_(IRMAOverrideDefaultServices, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAOverrideDefaultServices methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAOverrideDefaultServices::OverrideServices
+ * Purpose:
+ * Override default services provided by the G2 system.
+ *
+ */
+ STDMETHOD(OverrideServices) (THIS_
+ IUnknown* pContext) PURE;
+};
+
+enum PN_SOCKET_OPTION
+{
+ PN_SOCKOPT_REUSE_ADDR,
+ PN_SOCKOPT_REUSE_PORT,
+ PN_SOCKOPT_BROADCAST,
+ PN_SOCKOPT_SET_RECVBUF_SIZE,
+ PN_SOCKOPT_SET_SENDBUF_SIZE
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASetSocketOption
+ *
+ * Purpose:
+ *
+ * Set sockt option
+ *
+ * IID_IRMASetSocketOption:
+ *
+ * IID_IRMASetSocketOption: {00000114-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASetSocketOption,
+ 0x00000114, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMASetSocketOption
+DECLARE_INTERFACE_(IRMASetSocketOption, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAListenSocket methods
+ */
+
+ STDMETHOD(SetOption) (THIS_
+ PN_SOCKET_OPTION option,
+ UINT32 ulValue) PURE;
+};
+
+#define RMA_THREADSAFE_METHOD_FF_GETPACKET 0x00000001
+/*
+ * FileFormat::GetPacket() only calls:
+ * CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
+ * FS->Read(), FS->Close(), FS->Seek(),
+ * FFR->PacketReady(), FFR->StreamDone()
+ * Context->Scheduler->*,
+ * CCF->CI(Mutex), Mutex->*
+ * Context->ErrorMessages
+ *
+ * XXXSMPNOW
+ */
+
+#define RMA_THREADSAFE_METHOD_FS_READ 0x00000002
+/*
+ * FileSystem::Read()/Seek()/Close() only calls:
+ * CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
+ * FS->Read(), FS->Close(), FS->Seek(),
+ * Context->Scheduler->*,
+ * CCF->CI(Mutex), Mutex->*
+ * Context->ErrorMessages
+ *
+ * XXXSMPNOW
+ */
+#define RMA_THREADSAFE_METHOD_FSR_READDONE 0x00000004
+/*
+ * FileFormat::ReadDone()/SeekDone()/CloseDone() only calls:
+ * CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
+ * FS->Read(), FS->Close(), FS->Seek(),
+ * FFR->PacketReady(), FFR->StreamDone()
+ * Context->Scheduler->*,
+ * CCF->CI(Mutex), Mutex->*
+ * Context->ErrorMessages
+ *
+ * XXXSMPNOW
+ */
+#define RMA_THREADSAFE_METHOD_CACHE_FILE 0x00000008
+/*
+ * FileSystem::Read()/Seek()/Close() only calls:
+ * CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
+ * FS->Read(), FS->Close(), FS->Seek(),
+ * IRMACacheFile->*, IRMACacheFileResponse->*,
+ * Context->Scheduler->*,
+ * CCF->CI(Mutex), Mutex->*
+ * Context->ErrorMessages
+ *
+ * XXXSMPNOW
+ */
+#define RMA_THREADSAFE_METHOD_CACHE_FILE_RESPONSE 0x00000010
+/*
+ * FileSystem::Read()/Seek()/Close() only calls:
+ * CCF->CI(Buffer), CCF->CI(Packet), CCF->CI(Values), *Alloc, *Free,
+ * FS->Read(), FS->Close(), FS->Seek(),
+ * IRMACacheFile->*, IRMACacheFileResponse->*,
+ * Context->Scheduler->*,
+ * CCF->CI(Mutex), Mutex->*
+ * Context->ErrorMessages
+ *
+ * XXXSMPNOW
+ */
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAThreadSafeMethods
+ *
+ * Purpose:
+ *
+ * XXXSMPNOW
+ *
+ * IID_IRMAThreadSafeMethods:
+ *
+ * {00000115-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAThreadSafeMethods, 0x00000115, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAThreadSafeMethods
+
+DECLARE_INTERFACE_(IRMAThreadSafeMethods, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAThreadSafeMethods methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAThreadSafeMethods::IsThreadSafe
+ * Purpose:
+ * XXXSMPNOW
+ */
+ STDMETHOD_(UINT32,IsThreadSafe) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAMutex
+ *
+ * Purpose:
+ *
+ * XXXSMPNOW
+ *
+ * IID_IRMAMutex:
+ *
+ * {00000116-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAMutex, 0x00000116, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAMutex
+
+/*
+ * The IRMACommonClassFactory supports creating an instance
+ * of this object.
+ */
+#define CLSID_IRMAMutex IID_IRMAMutex
+
+DECLARE_INTERFACE_(IRMAMutex, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAMutex methods
+ */
+
+ /* XXXSMPNOW Comments */
+ STDMETHOD(Lock) (THIS) PURE;
+
+ STDMETHOD(TryLock) (THIS) PURE;
+
+ STDMETHOD(Unlock) (THIS) PURE;
+};
+
+
+#endif /* _RMAENGIN_H_ */
diff --git a/include/realmedia/rmaerror.h b/include/realmedia/rmaerror.h
new file mode 100644
index 000000000..c923c5a33
--- /dev/null
+++ b/include/realmedia/rmaerror.h
@@ -0,0 +1,276 @@
+/****************************************************************************
+ *
+ * $Id: rmaerror.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 error reporting interfaces.
+ *
+ */
+
+#ifndef _RMAERROR_H_
+#define _RMAERROR_H_
+
+/*
+ * Forward declarations of some interfaces defined here-in.
+ */
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAErrorSinkControl IRMAErrorSinkControl;
+
+
+/* Message Severity values */
+
+enum {
+ PNLOG_EMERG = 0, /* A panic condition. Server / Player will halt or
+ restart. */
+
+ PNLOG_ALERT = 1, /* A condition that should be corrected immediately.
+ Needs user intervention to prevent problems. */
+
+ PNLOG_CRIT = 2, /* Critical conditions. */
+
+ PNLOG_ERR = 3, /* Errors. */
+
+ PNLOG_WARNING = 4, /* Warning messages. */
+
+ PNLOG_NOTICE = 5, /* Conditions that are not error conditions, but
+ should possibly be handled specially. */
+
+ PNLOG_INFO = 6, /* Informational messages. */
+
+ PNLOG_DEBUG = 7 /* Messages that contain information normally of use
+ only when debugging a program. */
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAErrorMessages
+ *
+ * Purpose:
+ *
+ * Error, event, and status message reporting interface
+ *
+ * IID_IRMAErrorMessages:
+ *
+ * {00000800-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAErrorMessages, 0x00000800, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAErrorMessages
+
+DECLARE_INTERFACE_(IRMAErrorMessages, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAErrorMessages methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAErrorMessages::Report
+ * Purpose:
+ * Call this method to report an error, event, or status message.
+ * Parameters:
+ *
+ * const UINT8 unSeverity
+ * Type of report. This value will impact how the player, tool, or
+ * server will react to the report. Possible values are described
+ * above. Depending on the error type, an error message with the
+ * RMA code, anda string translation of that code will be displayed.
+ * The error dialog includes a "more info" section that displays the
+ * user code and string, and a link to the more info URL. In the
+ * server these messages are logged to the log file.
+ *
+ * const ULONG32 ulRMACode
+ * Well known RMA error code. This will be translated to a text
+ * representation for display in an error dialog box or log file.
+ *
+ * const ULONG32 ulUserCode
+ * User specific error code. This will NOT be translated to a text
+ * representation. This can be any value the caller wants, it will
+ * be logged or displayed but not interpretted.
+ *
+ * const char* pUserString
+ * User specific error string. This will NOT be translated or
+ * modified. This can be any value the caller wants, it will
+ * be logged or displayed but not interpretted.
+ *
+ * const char* pMoreInfoURL
+ * User specific more info URL string.
+ *
+ */
+ STDMETHOD(Report) (THIS_
+ const UINT8 unSeverity,
+ PN_RESULT ulRMACode,
+ const ULONG32 ulUserCode,
+ const char* pUserString,
+ const char* pMoreInfoURL) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAErrorMessages::GetErrorText
+ * Purpose:
+ * Call this method to get the text description of a RMA error code.
+ * Parameters:
+ * PN_RESULT ulRMACode (A RMA error code)
+ * Return Value:
+ * IRMABuffer* containing error text.
+ */
+ STDMETHOD_(IRMABuffer*, GetErrorText) (THIS_
+ PN_RESULT ulRMACode) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAErrorSink
+ *
+ * Purpose:
+ *
+ * Error Sink Interface
+ *
+ * IID_IRMAErrorSink:
+ *
+ * {00000801-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAErrorSink, 0x00000801, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAErrorSink
+
+DECLARE_INTERFACE_(IRMAErrorSink, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAErrorSink methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAErrorSink::ErrorOccurred
+ * Purpose:
+ * After you have registered your error sink with an
+ * IRMAErrorSinkControl (either in the server or player core) this
+ * method will be called to report an error, event, or status message.
+ *
+ * The meaning of the arguments is exactly as described in
+ * rmaerror.h
+ */
+ STDMETHOD(ErrorOccurred) (THIS_
+ const UINT8 unSeverity,
+ const ULONG32 ulRMACode,
+ const ULONG32 ulUserCode,
+ const char* pUserString,
+ const char* pMoreInfoURL
+ ) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAErrorSinkControl
+ *
+ * Purpose:
+ *
+ * Error Sink Control Interface
+ *
+ * IID_IRMAErrorSinkControl:
+ *
+ * {00000802-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAErrorSinkControl, 0x00000802, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAErrorSinkControl
+
+
+DECLARE_INTERFACE_(IRMAErrorSinkControl, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAErrorSinkControl methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAErrorSinkControl::AddErrorSink
+ * Purpose:
+ * Call this method to tell the sink controller to handle an error
+ * sink.
+ *
+ * This method also allows you to set a range of severity levels which
+ * you will receive reports for.
+ *
+ * Note: You should specify an invalid range (Low = 1, High = 0 for
+ * example) if you don't want to receive any errors.
+ *
+ * The default severity range is PNLOG_EMERG to PNLOG_INFO (0-6).
+ */
+ STDMETHOD(AddErrorSink) (THIS_
+ IRMAErrorSink* pErrorSink,
+ const UINT8 unLowSeverity,
+ const UINT8 unHighSeverity) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAErrorSinkControl::AddErrorSink
+ * Purpose:
+ * Call this method to remove an error sink.
+ */
+ STDMETHOD(RemoveErrorSink) (THIS_
+ IRMAErrorSink* pErrorSink) PURE;
+
+};
+
+#endif /* _RMAERROR_H_ */
diff --git a/include/realmedia/rmaevent.h b/include/realmedia/rmaevent.h
new file mode 100644
index 000000000..6a0ee2fc3
--- /dev/null
+++ b/include/realmedia/rmaevent.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+ *
+ * $Id: rmaevent.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
+ *
+ * This program contains proprietary information of RealNetworks, Inc.,
+ * and is licensed subject to restrictions on use and distribution.
+ *
+ * rmaevent.h
+ *
+ */
+
+#ifndef _RMAEVENT_H_
+#define _RMAEVENT_H_
+
+#define RMA_BASE_EVENT 0x00001000UL
+
+// This class of events are events sent to site users of windowless
+// sites to notify them of events on the site with platform independent
+// messages.
+#define RMA_SURFACE_EVENTS RMA_BASE_EVENT + 0x00001000
+
+// RMA_SURFACE_UPDATE is sent by the site to the renderer when the
+// surface has damage and needs to be updated. The event struct is
+// filled out as follows:
+//
+// ULONG32 event; RMA_SURFACE_UPDATE
+// void* window; Native Window - may be null if no window is associated with the site
+// void* param1; IRMAVideoSurface*
+// void* param2; UNIX - PNxWindow, Mac/Win - UNUSED
+//
+// void* result; HRESULT result code of message handling
+// BOOL handled; TRUE if handled, FALSE if not handled
+//
+#define RMA_SURFACE_UPDATE RMA_SURFACE_EVENTS + 1
+
+// Each event should document the values of PNxEvent struct expected
+// on input and output.
+// The next surface event should use this ID:
+#define RMA_SURFACE_NEXT_EVENT RMA_SURFACE_EVENTS + 2
+
+// This class of events are sent to site users to
+// notify them of mouse events.
+// All mouse events have the event structure filled out as follows:
+//
+// UINT32 event;
+// void* window;
+// void* param1; PNxPoint struct with mouse position local to the renderer
+// void* param2; UINT32 of flags for modifier keys
+// void* result; HRESULT result code of message handling
+// BOOL handled; TRUE if handled, FALSE if not handled
+//
+#define RMA_MOUSE_EVENTS (RMA_BASE_EVENT + 0x00002000)
+
+#define RMA_SHIFT_KEY 0x00000001
+#define RMA_CTRL_KEY 0x00000002
+#define RMA_ALT_COMMAND_KEY 0x00000004 // Apple/Splat key
+
+#define RMA_PRIMARY_BUTTON_DOWN (RMA_MOUSE_EVENTS + 1)
+#define RMA_PRIMARY_BUTTON_UP (RMA_MOUSE_EVENTS + 2)
+#define RMA_CONTEXT_BUTTON_DOWN (RMA_MOUSE_EVENTS + 3)
+#define RMA_CONTEXT_BUTTON_UP (RMA_MOUSE_EVENTS + 4)
+#define RMA_MOUSE_MOVE (RMA_MOUSE_EVENTS + 5)
+#define RMA_MOUSE_ENTER (RMA_MOUSE_EVENTS + 6)
+#define RMA_MOUSE_LEAVE (RMA_MOUSE_EVENTS + 7)
+
+// This class of events are sent to renderers to
+// notify them of the validation of the window
+// All window events have the event structure filled out as follows:
+//
+// UINT32 event;
+// void* window;
+// void* UNUSED;
+// void* UNUSED;
+// void* result; HRESULT result code of message handling
+// BOOL handled; TRUE if handled, FALSE if not handled
+//
+#define RMA_WINDOW_EVENTS RMA_BASE_EVENT + 0x00003000
+
+#define RMA_ATTACH_WINDOW RMA_WINDOW_EVENTS + 1
+#define RMA_DETACH_WINDOW RMA_WINDOW_EVENTS + 2
+
+// Each event class should have a comment describing the kinds
+// of events that belong to this class
+// The next event class should use this base:
+#define RMA_NEXT_EVENT_CLASS RMA_BASE_EVENT + 0x00004000
+
+
+#endif // _RMAEVENT_H_
diff --git a/include/realmedia/rmafiles.h b/include/realmedia/rmafiles.h
new file mode 100644
index 000000000..33e8b5a32
--- /dev/null
+++ b/include/realmedia/rmafiles.h
@@ -0,0 +1,1583 @@
+/****************************************************************************
+ *
+ * $Id: rmafiles.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 File Format and File System Plug-in Interfaces.
+ *
+ */
+
+#ifndef _RMAFILES_H_
+#define _RMAFILES_H_
+
+/*
+ * Forward declarations of some interfaces defined here-in.
+ */
+typedef _INTERFACE IRMAFileObject IRMAFileObject;
+typedef _INTERFACE IRMAFileResponse IRMAFileResponse;
+typedef _INTERFACE IRMAFileSystemObject IRMAFileSystemObject;
+typedef _INTERFACE IRMAFileStat IRMAFileStat;
+typedef _INTERFACE IRMAFileStatResponse IRMAFileStatResponse;
+
+typedef _INTERFACE IRMAFileSystemManager IRMAFileSystemManager;
+typedef _INTERFACE IRMAFileSystemManagerResponse IRMAFileSystemManagerResponse;
+typedef _INTERFACE IRMAFileExists IRMAFileExists;
+typedef _INTERFACE IRMAFileExistsResponse IRMAFileExistsResponse;
+typedef _INTERFACE IRMAFileMimeMapper IRMAFileMimeMapper;
+typedef _INTERFACE IRMAFileMimeMapperResponse IRMAFileMimeMapperResponse;
+typedef _INTERFACE IRMABroadcastMapper IRMABroadcastMapper;
+typedef _INTERFACE IRMABroadcastMapperResponse IRMABroadcastMapperResponse;
+typedef _INTERFACE IRMAGetFileFromSamePoolResponse IRMAGetFileFromSamePoolResponse;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAPacket IRMAPacket;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMAMetaCreation IRMAMetaCreation;
+
+typedef _INTERFACE IRMAAuthenticator IRMAAuthenticator;
+typedef _INTERFACE IRMARequest IRMARequest;
+typedef _INTERFACE IRMAFileRename IRMAFileRename;
+typedef _INTERFACE IRMADirHandler IRMADirHandler;
+typedef _INTERFACE IRMADirHandlerResponse IRMADirHandlerResponse;
+typedef _INTERFACE IRMAFileRemove IRMAFileRemove;
+
+
+
+/****************************************************************************
+ * Defines:
+ * PN_FILE_XXXX
+ * Purpose:
+ * Flags for opening file objects
+ */
+#define PN_FILE_READ 1
+#define PN_FILE_WRITE 2
+#define PN_FILE_BINARY 4
+#define PN_FILE_NOTRUNC 8
+
+
+/****************************************************************************
+ * Defines:
+ * RMA_FILEADVISE_XXXX
+ * Purpose:
+ * Flags for file object Advise method
+ */
+#define RMA_FILEADVISE_RANDOMACCESS 1
+
+
+#if defined(_UNIX) || defined(_WINDOWS)
+#include <sys/stat.h>
+/*
+ * This is a subset of standard stat()/fstat() values that both Unix and
+ * Windows support (or at least define).
+ *
+ * These flags are returned from IRMAFileStatResponse::StatDone() in the
+ * ulMode argument.
+ */
+#define PN_S_IFMT S_IFMT
+#define PN_S_IFDIR S_IFDIR
+#define PN_S_IFCHR S_IFCHR
+#define PN_S_IFIFO S_IFIFO
+#define PN_S_IFREG S_IFREG
+#else
+/* Macintosh */
+#define PN_S_IFMT 0170000
+#define PN_S_IFDIR 0040000
+#define PN_S_IFCHR 0020000
+#define PN_S_IFIFO 0010000
+#define PN_S_IFREG 0100000
+#endif
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileObject
+ *
+ * Purpose:
+ *
+ * Object that exports file control API
+ *
+ * IID_IRMAFileObject:
+ *
+ * {00000200-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileObject, 0x00000200, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileObject
+
+DECLARE_INTERFACE_(IRMAFileObject, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileObject methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAFileObject::Init
+ * Purpose:
+ * Associates a file object with the file response object it should
+ * notify of operation completness. This method should also check
+ * for validity of the object (for example by opening it if it is
+ * a local file).
+ */
+ STDMETHOD(Init) (THIS_
+ ULONG32 /*IN*/ ulFlags,
+ IRMAFileResponse* /*IN*/ pFileResponse) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAFileObject::GetFilename
+ * Purpose:
+ * Returns the filename (without any path information) associated
+ * with a file object.
+ *
+ * Note: The returned pointer's lifetime expires as soon as the
+ * caller returns from a function which was called from the RMA
+ * core (i.e. when you return control to the RMA core)
+ *
+ */
+ STDMETHOD(GetFilename) (THIS_
+ REF(const char*) /*OUT*/ pFilename) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAFileObject::Close
+ * Purpose:
+ * Closes the file resource and releases all resources associated
+ * with the object.
+ */
+ STDMETHOD(Close) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAFileObject::Read
+ * Purpose:
+ * Reads a buffer of data of the specified length from the file
+ * and asynchronously returns it to the caller via the
+ * IRMAFileResponse interface passed in to Init.
+ */
+ STDMETHOD(Read) (THIS_
+ ULONG32 ulCount) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAFileObject::Write
+ * Purpose:
+ * Writes a buffer of data to the file and asynchronously notifies
+ * the caller via the IRMAFileResponse interface passed in to Init,
+ * of the completeness of the operation.
+ */
+ STDMETHOD(Write) (THIS_
+ IRMABuffer* pBuffer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAFileObject::Seek
+ * Purpose:
+ * Seeks to an offset in the file and asynchronously notifies
+ * the caller via the IRMAFileResponse interface passed in to Init,
+ * of the completeness of the operation.
+ * If the bRelative flag is TRUE, it is a relative seek; else
+ * an absolute seek.
+ */
+ STDMETHOD(Seek) (THIS_
+ ULONG32 ulOffset,
+ BOOL bRelative) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAFileObject::Advise
+ * Purpose:
+ * To pass information to the File Object advising it about usage
+ * heuristics.
+ */
+ STDMETHOD(Advise) (THIS_
+ ULONG32 ulInfo) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileResponse
+ *
+ * Purpose:
+ *
+ * Object that exports file response API
+ *
+ * IID_IRMAFileResponse:
+ *
+ * {00000201-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileResponse, 0x00000201, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileResponse
+
+DECLARE_INTERFACE_(IRMAFileResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAFileResponse::InitDone
+ * Purpose:
+ * Notification interface provided by users of the IRMAFileObject
+ * interface. This method is called by the IRMAFileObject when the
+ * initialization of the file is complete. If the file is not valid
+ * for the file system, the status PNR_FAILED should be
+ * returned.
+ */
+ STDMETHOD(InitDone) (THIS_
+ PN_RESULT status) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAFileResponse::CloseDone
+ * Purpose:
+ * Notification interface provided by users of the IRMAFileObject
+ * interface. This method is called by the IRMAFileObject when the
+ * close of the file is complete.
+ */
+ STDMETHOD(CloseDone) (THIS_
+ PN_RESULT status) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAFileResponse::ReadDone
+ * Purpose:
+ * Notification interface provided by users of the IRMAFileObject
+ * interface. This method is called by the IRMAFileObject when the
+ * last read from the file is complete and a buffer is available.
+ */
+ STDMETHOD(ReadDone) (THIS_
+ PN_RESULT status,
+ IRMABuffer* pBuffer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAFileResponse::WriteDone
+ * Purpose:
+ * Notification interface provided by users of the IRMAFileObject
+ * interface. This method is called by the IRMAFileObject when the
+ * last write to the file is complete.
+ */
+ STDMETHOD(WriteDone) (THIS_
+ PN_RESULT status) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAFileResponse::SeekDone
+ * Purpose:
+ * Notification interface provided by users of the IRMAFileObject
+ * interface. This method is called by the IRMAFileObject when the
+ * last seek in the file is complete.
+ */
+ STDMETHOD(SeekDone) (THIS_
+ PN_RESULT status) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileSystemObject
+ *
+ * Purpose:
+ *
+ * Object that allows a Controller to communicate with a specific
+ * File System plug-in session
+ *
+ * IID_IRMAFileSystemObject:
+ *
+ * {00000202-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileSystemObject, 0x00000202, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileSystemObject
+
+DECLARE_INTERFACE_(IRMAFileSystemObject, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileSystemObject methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAFileSystemObject::GetFileSystemInfo
+ * Purpose:
+ * Returns information vital to the instantiation of file system
+ * plugin.
+ *
+ * pShortName should be a short, human readable name in the form
+ * of "company-fsname". For example: pShortName = "pn-local".
+ */
+ STDMETHOD(GetFileSystemInfo) (THIS_
+ REF(const char*) /*OUT*/ pShortName,
+ REF(const char*) /*OUT*/ pProtocol) PURE;
+
+ STDMETHOD(InitFileSystem) (THIS_
+ IRMAValues* pOptions) PURE;
+
+ STDMETHOD(CreateFile) (THIS_
+ IUnknown** /*OUT*/ ppFileObject) PURE;
+
+ /*
+ * The following method is deprecated and should return PNR_NOTIMPL
+ */
+
+ STDMETHOD(CreateDir) (THIS_
+ IUnknown** /*OUT*/ ppDirObject) PURE;
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileStat
+ *
+ * Purpose:
+ *
+ * Gets information about a specific File object
+ *
+ * IID_IRMAFileStat:
+ *
+ * {00000205-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileStat, 0x00000205, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileStat
+
+DECLARE_INTERFACE_(IRMAFileStat, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileStat methods
+ */
+
+ STDMETHOD(Stat) (THIS_
+ IRMAFileStatResponse* pFileStatResponse
+ ) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileStatResponse
+ *
+ * Purpose:
+ *
+ * Returns information about a specific File object
+ *
+ * IID_IRMAFileStatResponse:
+ *
+ * {00000206-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileStatResponse, 0x00000206, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileStatResponse
+
+DECLARE_INTERFACE_(IRMAFileStatResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileStat methods
+ */
+
+ STDMETHOD(StatDone) (THIS_
+ PN_RESULT status,
+ UINT32 ulSize,
+ UINT32 ulCreationTime,
+ UINT32 ulAccessTime,
+ UINT32 ulModificationTime,
+ UINT32 ulMode) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileSystemManager
+ *
+ * Purpose:
+ *
+ * Gives out File Objects based on URLs
+ *
+ * IID_IRMAFileSystemManager:
+ *
+ * {00000207-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileSystemManager, 0x00000207, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileSystemManager
+
+#define CLSID_IRMAFileSystemManager IID_IRMAFileSystemManager
+
+DECLARE_INTERFACE_(IRMAFileSystemManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileSystemManager methods
+ */
+
+ STDMETHOD(Init) (THIS_
+ IRMAFileSystemManagerResponse* /*IN*/ pFileManagerResponse
+ ) PURE;
+
+ /* GetFileObject attempts to locate an existing file via the DoesExist
+ * method in each file system's objects, and returns that object through
+ * FSManagerResponse->FileObjectReady
+ */
+ STDMETHOD(GetFileObject) (THIS_
+ IRMARequest* pRequest,
+ IRMAAuthenticator* pAuthenticator) PURE;
+
+ /* GetNewFileObject is similar to GetFileObject except that no DoesExist
+ * checks are done. The first file system that matches the mount point
+ * or protocol for the path in the request object creates the file
+ * which is then returned through FileObjectReady. This is especially
+ * useful for those who wish to open a brand new file for writing.
+ */
+ STDMETHOD(GetNewFileObject) (THIS_
+ IRMARequest* pRequest,
+ IRMAAuthenticator* pAuthenticator) PURE;
+
+ STDMETHOD(GetRelativeFileObject) (THIS_
+ IUnknown* pOriginalObject,
+ const char* pPath) PURE;
+
+ /*
+ * The following method is deprecated and should return PNR_NOTIMPL
+ */
+
+ STDMETHOD(GetDirObjectFromURL) (THIS_
+ const char* pURL) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileSystemManagerResponse
+ *
+ * Purpose:
+ *
+ * Gives out File System objects based on URLs
+ *
+ * IID_IRMAFileSystemManagerResponse:
+ *
+ * {00000208-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileSystemManagerResponse, 0x00000208, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileSystemManagerResponse
+
+DECLARE_INTERFACE_(IRMAFileSystemManagerResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileSystemManagerResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAFileSystemManagerResponse::InitDone
+ * Purpose:
+ */
+ STDMETHOD(InitDone) (THIS_
+ PN_RESULT status) PURE;
+
+ STDMETHOD(FileObjectReady) (THIS_
+ PN_RESULT status,
+ IUnknown* pObject) PURE;
+
+ /*
+ * The following method is deprecated and should return PNR_NOTIMPL
+ */
+
+ STDMETHOD(DirObjectReady) (THIS_
+ PN_RESULT status,
+ IUnknown* pDirObject) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileExists
+ *
+ * Purpose:
+ *
+ * Checks for the existense of a file. Must be implemented.
+ *
+ * IID_IRMAFileExists:
+ *
+ * {00000209-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileExists, 0x00000209, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileExists
+
+DECLARE_INTERFACE_(IRMAFileExists, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileExists methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAFileExists::DoesExist
+ * Purpose:
+ */
+ STDMETHOD(DoesExist) (THIS_
+ const char* /*IN*/ pPath,
+ IRMAFileExistsResponse* /*IN*/ pFileResponse) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileExistsResponse
+ *
+ * Purpose:
+ *
+ * Response interface for IRMAFileExists. Must be implemented.
+ *
+ * IID_IRMAFileExistsResponse:
+ *
+ * {0000020A-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileExistsResponse, 0x0000020a, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileExists
+
+DECLARE_INTERFACE_(IRMAFileExistsResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileExistsResponse methods
+ */
+
+ STDMETHOD(DoesExistDone) (THIS_
+ BOOL bExist) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileMimeMapper
+ *
+ * Purpose:
+ *
+ * Allows you to specify a mime type for a specific file.
+ * Optional interface.
+ *
+ * IID_IRMAFileMimeMapper:
+ *
+ * {0000020B-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileMimeMapper, 0x0000020b, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileMimeMapper
+
+DECLARE_INTERFACE_(IRMAFileMimeMapper, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileMimeMapper methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAFileMimeMapper::FindMimeType
+ * Purpose:
+ */
+ STDMETHOD(FindMimeType) (THIS_
+ const char* /*IN*/ pURL,
+ IRMAFileMimeMapperResponse* /*IN*/ pMimeMapperResponse
+ ) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileMimeMapperResponse
+ *
+ * Purpose:
+ *
+ * Response interface for IRMAFileMimeMapper.
+ * Optional interface.
+ *
+ * IID_IRMAFileMimeMapperResponse:
+ *
+ * {0000020C-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileMimeMapperResponse, 0x0000020c, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileMimeMapperResponse
+
+DECLARE_INTERFACE_(IRMAFileMimeMapperResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileMimeMapperResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAFileMimeMapperResponse::MimeTypeFound
+ * Purpose:
+ * Notification interface provided by users of the IRMAFileMimeMapper
+ * interface. This method is called by the IRMAFileObject when the
+ * initialization of the file is complete, and the Mime type is
+ * available for the request file. If the file is not valid for the
+ * file system, the status PNR_FAILED should be returned,
+ * with a mime type of NULL. If the file is valid but the mime type
+ * is unknown, then the status PNR_OK should be returned with
+ * a mime type of NULL.
+ *
+ */
+ STDMETHOD(MimeTypeFound) (THIS_
+ PN_RESULT status,
+ const char* pMimeType) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMABroadcastMapper
+ *
+ * Purpose:
+ *
+ * Associates a file with a broadcast format plugin.
+ * Implementation only required by broadcast plugin file systems.
+ *
+ * IID_IRMABroadcastMapper:
+ *
+ * {0000020D-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMABroadcastMapper, 0x0000020d, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMABroadcastMapper
+
+DECLARE_INTERFACE_(IRMABroadcastMapper, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMABroadcastMapper methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMABroadcastMapper::FindBroadcastType
+ * Purpose:
+ */
+ STDMETHOD(FindBroadcastType) (THIS_
+ const char* /*IN*/ pURL,
+ IRMABroadcastMapperResponse* /*IN*/ pBroadcastMapperResponse) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMABroadcastMapperResponse
+ *
+ * Purpose:
+ *
+ * Response interface for IRMABroadcastMapper.
+ * Implementation only required by broadcast plugin file systems.
+ *
+ * IID_IRMABroadcastMapperResponse:
+ *
+ * {0000020E-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMABroadcastMapperResponse, 0x0000020e, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMABroadcastMapperResponse
+
+DECLARE_INTERFACE_(IRMABroadcastMapperResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMABroadcastMapperResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMABroadcastMapperResponse::BroadcastTypeFound
+ * Purpose:
+ * Notification interface provided by users of the IRMABroadcastMapper
+ * interface. This method is called by the File Object when the
+ * initialization of the file is complete, and the broadcast type is
+ * available for the request file. If the file is not valid for the
+ * file system, the status PNR_FAILED should be returned,
+ * with the broadcast type set to NULL.
+ *
+ */
+ STDMETHOD(BroadcastTypeFound) (THIS_
+ PN_RESULT status,
+ const char* pBroadcastType) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAGetFileFromSamePool
+ *
+ * Purpose:
+ *
+ * Gives out File Objects based on filenames and relative "paths"
+ *
+ * IID_IRMAGetFileFromSamePool:
+ *
+ * {0000020f-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAGetFileFromSamePool, 0x0000020f, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMAGetFileFromSamePool
+
+#define CLSID_IRMAGetFileFromSamePool IID_IRMAGetFileFromSamePool
+
+DECLARE_INTERFACE_(IRMAGetFileFromSamePool, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+
+ /*
+ * IRMAGetFileFromSamePool method
+ */
+ /************************************************************************
+ * Method:
+ * IRMAGetFileFromSamePool::GetFileObjectFromPool
+ * Purpose:
+ * To get another FileObject from the same pool.
+ */
+ STDMETHOD(GetFileObjectFromPool) (THIS_
+ IRMAGetFileFromSamePoolResponse*) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAGetFileFromSamePoolResponse
+ *
+ * Purpose:
+ *
+ * Gives out File Objects based on filenames and relative "paths"
+ *
+ * IID_IRMAGetFileFromSamePoolResponse:
+ *
+ * {00000210-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAGetFileFromSamePoolResponse, 0x00000210, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMAGetFileFromSamePoolResponse
+
+#define CLSID_IRMAGetFileFromSamePoolResponse IID_IRMAGetFileFromSamePoolResponse
+
+DECLARE_INTERFACE_(IRMAGetFileFromSamePoolResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAGetFileFromSamePoolResponse method
+ */
+ /************************************************************************
+ * Method:
+ * IRMAGetFileFromSamePoolResponse::FileObjectReady
+ * Purpose:
+ * To return another FileObject from the same pool.
+ */
+ STDMETHOD(FileObjectReady) (THIS_
+ PN_RESULT status,
+ IUnknown* ppUnknown) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileAuthenticator
+ *
+ * Purpose:
+ *
+ * Set and Get a file object's authenticator object.
+ *
+ * IID_IRMAFileAuthenticator:
+ *
+ * {00000211-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileAuthenticator, 0x00000211, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMAFileAuthenticator
+
+#define CLSID_IRMAFileAuthenticator IID_IRMAFileAuthenticator
+
+DECLARE_INTERFACE_(IRMAFileAuthenticator, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileAuthenticator methods
+ */
+ STDMETHOD(SetAuthenticator) (THIS_
+ IRMAAuthenticator* pAuthenticator) PURE;
+
+ STDMETHOD(GetAuthenticator) (THIS_
+ REF(IRMAAuthenticator*) pAuthenticator) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARequestHandler
+ *
+ * Purpose:
+ *
+ * Object to manage IRMARequest objects
+ *
+ * IID_IRMARequestHandler:
+ *
+ * {00000212-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARequestHandler, 0x00000212, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMARequestHandler
+
+#define CLSID_IRMARequestHandler IID_IRMARequestHandler
+
+DECLARE_INTERFACE_(IRMARequestHandler, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARequestHandler::SetRequest
+ * Purpose:
+ * Associates an IRMARequest with an object
+ */
+ STDMETHOD(SetRequest) (THIS_
+ IRMARequest* /*IN*/ pRequest) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARequestHandler::GetRequest
+ * Purpose:
+ * Gets the IRMARequest object associated with an object
+ */
+ STDMETHOD(GetRequest) (THIS_
+ REF(IRMARequest*) /*OUT*/ pRequest) PURE;
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARequestContext
+ *
+ * Purpose:
+ *
+ * Object to manage the context of the Request
+ *
+ * IID_IRMARequestContext:
+ *
+ * {00000217-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARequestContext, 0x00000217, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMARequestContext
+
+#define CLSID_IRMARequestContext IID_IRMARequestContext
+
+DECLARE_INTERFACE_(IRMARequestContext, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMARequestContext methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMARequestContext::SetUserContext
+ * Purpose:
+ * Sets the Authenticated users Context.
+ */
+ STDMETHOD(SetUserContext)
+ (
+ THIS_
+ IUnknown* pIUnknownNewContext
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARequestContext::GetUserContext
+ * Purpose:
+ * Gets the Authenticated users Context.
+ */
+ STDMETHOD(GetUserContext)
+ (
+ THIS_
+ REF(IUnknown*) pIUnknownCurrentContext
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARequestContext::SetRequester
+ * Purpose:
+ * Sets the Object that made the request.
+ */
+ STDMETHOD(SetRequester)
+ (
+ THIS_
+ IUnknown* pIUnknownNewRequester
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARequestContext::GetRequester
+ * Purpose:
+ * Gets the Object that made the request.
+ */
+ STDMETHOD(GetRequester)
+ (
+ THIS_
+ REF(IUnknown*) pIUnknownCurrentRequester
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARequest
+ *
+ * Purpose:
+ *
+ * Object to manage the RFC822 headers sent by the client
+ *
+ * IID_IRMARequest:
+ *
+ * {00000213-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARequest, 0x00000213, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMARequest
+
+#define CLSID_IRMARequest IID_IRMARequest
+
+DECLARE_INTERFACE_(IRMARequest, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMARequest methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMARequest::SetRequestHeaders
+ * Purpose:
+ * Sets the headers that will be sent in the RFC822 header section
+ * of the request message
+ */
+ STDMETHOD(SetRequestHeaders) (THIS_
+ IRMAValues* pRequestHeaders) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARequest::GetRequestHeaders
+ * Purpose:
+ * Gets the headers that were sent in the RFC822 header section
+ * of the request message
+ */
+ STDMETHOD(GetRequestHeaders) (THIS_
+ REF(IRMAValues*) pRequestHeaders) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARequest::SetResponseHeaders
+ * Purpose:
+ * Sets the headers that will be returned in the RFC822 header
+ * section of the response message
+ */
+ STDMETHOD(SetResponseHeaders) (THIS_
+ IRMAValues* pResponseHeaders) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARequest::GetResponseHeaders
+ * Purpose:
+ * Gets the headers that were returned in the RFC822 header section
+ * of the response message
+ */
+ STDMETHOD(GetResponseHeaders) (THIS_
+ REF(IRMAValues*) pResponseHeaders) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARequest::SetURL
+ * Purpose:
+ * Sets the fully qualified path associated with a file object.
+ * Note: On the server, this path does not include the file system
+ * mount point.
+ */
+ STDMETHOD(SetURL) (THIS_
+ const char* pURL) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARequest::GetURL
+ * Purpose:
+ * Returns the fully qualified path associated with a file object.
+ * Note: On the server, this path does not include the file system
+ * mount point.
+ *
+ * Note: The returned pointer's lifetime expires as soon as the
+ * caller returns from a function which was called from the RMA
+ * core (i.e. when you return control to the RMA core)
+ */
+ STDMETHOD(GetURL) (THIS_
+ REF(const char*) pURL) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileRename
+ *
+ * Purpose:
+ *
+ * Interface to allow renaming of files. Query off of the File Object.
+ * Not all filesystem plugins implement this feature.
+ *
+ * IID_IRMAFileRename:
+ *
+ * {00000214-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileRename, 0x00000214, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMAFileRename
+
+DECLARE_INTERFACE_(IRMAFileRename, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileRename methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAFileRename::Rename
+ * Purpose:
+ * Renames a file to a new name.
+ */
+ STDMETHOD(Rename) (THIS_
+ const char* pNewFileName) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMADirHandler
+ *
+ * Purpose:
+ *
+ * Object that exports directory handler API
+ *
+ * IID_IRMADirHandler:
+ *
+ * {00000215-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMADirHandler, 0x00000215, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMADirHandler
+
+DECLARE_INTERFACE_(IRMADirHandler, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMADirHandler methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMADirHandler::InitDirHandler
+ * Purpose:
+ * Associates a directory handler with the directory handler
+ * response, it should notify of operation completness.
+ */
+ STDMETHOD(InitDirHandler) (THIS_
+ IRMADirHandlerResponse* /*IN*/ pDirResponse) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMADirHandler::CloseDirHandler
+ * Purpose:
+ * Closes the directory handler resource and releases all resources
+ * associated with the object.
+ */
+ STDMETHOD(CloseDirHandler) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMADirHandler::MakeDir
+ * Purpose:
+ * Create the directory
+ */
+ STDMETHOD(MakeDir) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMADirHandler::ReadDir
+ * Purpose:
+ * Get a dump of the directory
+ */
+ STDMETHOD(ReadDir) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMADirHandlerResponse
+ *
+ * Purpose:
+ *
+ * Object that exports the directory handler response API
+ *
+ * IID_IRMADirHandlerResponse:
+ *
+ * {00000216-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMADirHandlerResponse, 0x00000216, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMADirHandlerResponse
+
+DECLARE_INTERFACE_(IRMADirHandlerResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMADirHandlerResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMADirHandlerResponse::InitDirHandlerDone
+ * Purpose:
+ * Notification interface provided by users of the IRMADirHandler
+ * interface. This method is called by the IRMADirHandler when the
+ * initialization of the object is complete.
+ */
+ STDMETHOD(InitDirHandlerDone) (THIS_
+ PN_RESULT status) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMADirHandlerResponse::CloseDirHandlerDone
+ * Purpose:
+ * Notification interface provided by users of the IRMADirHandler
+ * interface. This method is called by the IRMADirHandler when the
+ * close of the directory is complete.
+ */
+ STDMETHOD(CloseDirHandlerDone) (THIS_
+ PN_RESULT status) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMADirHandler::MakeDirDone
+ * Purpose:
+ * Notification interface provided by users of the IRMADirHandler
+ * interface. This method is called by the IRMADirHandler when the
+ * attempt to create the directory is complete.
+ */
+ STDMETHOD(MakeDirDone) (THIS_
+ PN_RESULT status) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMADirHandler::ReadDirDone
+ * Purpose:
+ * Notification interface provided by users of the IRMADirHandler
+ * interface. This method is called by the IRMADirHandler when the
+ * read from the directory is complete and a buffer is available.
+ */
+ STDMETHOD(ReadDirDone) (THIS_
+ PN_RESULT status,
+ IRMABuffer* pBuffer) PURE;
+};
+
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileRemove
+ *
+ * Purpose:
+ *
+ * Interface to allow removing of files. Query off of the File Object.
+ * Not all filesystem plugins implement this feature.
+ *
+ * IID_IRMAFileRemove:
+ *
+ * {0000021A-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileRemove, 0x0000021A, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMAFileRemove
+
+DECLARE_INTERFACE_(IRMAFileRemove, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileRemove methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAFileRemove::Remove
+ * Purpose:
+ * Removes a file from the file system.
+ */
+ STDMETHOD(Remove) (THIS) PURE;
+};
+
+
+
+
+
+#endif /* _RMAFILES_H_ */
diff --git a/include/realmedia/rmaformt.h b/include/realmedia/rmaformt.h
new file mode 100644
index 000000000..57a922521
--- /dev/null
+++ b/include/realmedia/rmaformt.h
@@ -0,0 +1,518 @@
+/****************************************************************************
+ *
+ * $Id: rmaformt.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Broadcast Format Plug-in Interfaces.
+ *
+ */
+
+#ifndef _RMAFORMT_H_
+#define _RMAFORMT_H_
+
+#include "rmafiles.h"
+
+/*
+ * Forward declarations of some interfaces defined here-in.
+ */
+typedef _INTERFACE IRMAFileFormatObject IRMAFileFormatObject;
+typedef _INTERFACE IRMABroadcastFormatObject IRMABroadcastFormatObject;
+typedef _INTERFACE IRMAFormatResponse IRMAFormatResponse;
+typedef _INTERFACE IRMAFileObject IRMAFileObject;
+typedef _INTERFACE IRMANetworkServices IRMANetworkServices;
+typedef _INTERFACE IRMAPacket IRMAPacket;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMAPacketTimeOffsetHandler IRMAPacketTimeOffsetHandler;
+typedef _INTERFACE IRMAPacketTimeOffsetHandlerResponse
+ IRMAPacketTimeOffsetHandlerResponse;
+typedef _INTERFACE IRMALiveFileFormatInfo IRMALiveFileFormatInfo;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileFormatObject
+ *
+ * Purpose:
+ *
+ * Object that allows a Controller to communicate with a specific
+ * File Format plug-in session
+ *
+ * IID_IRMAFileFormatObject:
+ *
+ * {00000F00-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFileFormatObject, 0x00000F00, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileFormatObject
+
+DECLARE_INTERFACE_(IRMAFileFormatObject, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFileFormatObject methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAFileFormatObject::GetFileFormatInfo
+ * Purpose:
+ * Returns information vital to the instantiation of file format
+ * plugins.
+ */
+ STDMETHOD(GetFileFormatInfo)(THIS_
+ REF(const char**) /*OUT*/ pFileMimeTypes,
+ REF(const char**) /*OUT*/ pFileExtensions,
+ REF(const char**) /*OUT*/ pFileOpenNames
+ ) PURE;
+
+ STDMETHOD(InitFileFormat)
+ (THIS_
+ IRMARequest* /*IN*/ pRequest,
+ IRMAFormatResponse* /*IN*/ pFormatResponse,
+ IRMAFileObject* /*IN*/ pFileObject) PURE;
+
+ STDMETHOD(GetFileHeader) (THIS) PURE;
+
+ STDMETHOD(GetStreamHeader) (THIS_
+ UINT16 unStreamNumber) PURE;
+
+ STDMETHOD(GetPacket) (THIS_
+ UINT16 unStreamNumber) PURE;
+
+ STDMETHOD(Seek) (THIS_
+ ULONG32 ulOffset) PURE;
+
+ STDMETHOD(Close) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMABroadcastFormatObject
+ *
+ * Purpose:
+ *
+ * Object that allows a Controller to communicate with a specific
+ * Broadcast Format plug-in session
+ *
+ * IID_IRMABroadcastFormatObject:
+ *
+ * {00000F01-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMABroadcastFormatObject, 0x00000F01, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMABroadcastFormatObject
+
+DECLARE_INTERFACE_(IRMABroadcastFormatObject, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMABroadcastFormatObject methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMABroadcastFormatObject::GetBroadcastFormatInfo
+ * Purpose:
+ * Returns information vital to the instantiation of broadcast format
+ * plugins.
+ */
+ STDMETHOD(GetBroadcastFormatInfo)(THIS_
+ REF(const char*) /*OUT*/ pToken) PURE;
+
+ STDMETHOD(InitBroadcastFormat) (THIS_
+ const char* /*IN*/ pURL,
+ IRMAFormatResponse* /*IN*/ pFormatResponse
+ ) PURE;
+
+ STDMETHOD(GetFileHeader) (THIS) PURE;
+
+ STDMETHOD(GetStreamHeader) (THIS_
+ UINT16 unStreamNumber) PURE;
+
+ STDMETHOD(StartPackets) (THIS_
+ UINT16 unStreamNumber) PURE;
+
+ STDMETHOD(StopPackets) (THIS_
+ UINT16 unStreamNumber) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFormatResponse
+ *
+ * Purpose:
+ *
+ * Object that allows a specific File Format Object to communicate
+ * with its user
+ *
+ * IID_IRMAFormatResponse:
+ *
+ * {00000F02-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAFormatResponse, 0x00000F02, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFormatResponse
+
+DECLARE_INTERFACE_(IRMAFormatResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAFormatResponse methods
+ */
+ STDMETHOD(InitDone) (THIS_
+ PN_RESULT status) PURE;
+
+ STDMETHOD(PacketReady) (THIS_
+ PN_RESULT status,
+ IRMAPacket* pPacket) PURE;
+
+ STDMETHOD(SeekDone) (THIS_
+ PN_RESULT status) PURE;
+
+ STDMETHOD(FileHeaderReady) (THIS_
+ PN_RESULT status,
+ IRMAValues* pHeader) PURE;
+
+ STDMETHOD(StreamHeaderReady) (THIS_
+ PN_RESULT status,
+ IRMAValues* pHeader) PURE;
+
+ STDMETHOD(StreamDone) (THIS_
+ UINT16 unStreamNumber) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPacketFormat
+ *
+ * Purpose:
+ *
+ * Interface that modifies the behavior of an IRMAFileFormat by defining
+ * the packet format it will be creating.
+ *
+ * IID_IRMAPacketFormat:
+ *
+ * {00000F03-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPacketFormat, 0x00000F03, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPacketFormat
+
+DECLARE_INTERFACE_(IRMAPacketFormat, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPacketFormat methods
+ */
+ STDMETHOD(GetSupportedPacketFormats)
+ (THIS_
+ REF(const char**) pFormats) PURE;
+
+ STDMETHOD(SetPacketFormat) (THIS_
+ const char* pFormat) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPacketTimeOffsetHandler
+ *
+ * Purpose:
+ *
+ * Provides methods for handling the changing of a packets timestamp.
+ *
+ * IID_IRMAPacketTimeOffsetHandler:
+ *
+ * {00000F04-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPacketTimeOffsetHandler, 0x00000F04, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+DECLARE_INTERFACE_(IRMAPacketTimeOffsetHandler, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPacketTimeOffsetHandler methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketTimeOffsetHandler::Init
+ * Purpose:
+ * Initialize the IRMAPacketTimeOffsetHandler and set the response.
+ * Implementors should look up the MimeType.
+ */
+ STDMETHOD(Init) (THIS_
+ IRMAPacketTimeOffsetHandlerResponse* pResponse,
+ IRMAValues* pHeader,
+ IUnknown* pContext) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketTimeOffsetHandler::SetTimeOffset
+ * Purpose:
+ * Called to set the time offset. Uses a bool and a UINT32 instead
+ * of and INT32 so that the time offset wraps around after 47 days
+ * instead of 24. bPlus says whether to add or subtract.
+ */
+ STDMETHOD(SetTimeOffset) (THIS_
+ UINT32 ulTimeOffset,
+ BOOL bPlus) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketTimeOffsetHandler::HandlePacket
+ * Purpose:
+ * give the IRMAPacketTimeOffsetHandler a packet to modify for the
+ * time offset.
+ */
+ STDMETHOD(HandlePacket) (THIS_
+ IRMAPacket* pPacket) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPacketTimeOffsetHandlerResponse
+ *
+ * Purpose:
+ *
+ * Provides methods for the IRMAPacketTimeOffsetHandler to respond to.
+ *
+ * IID_IRMAPacketTimeOffsetHandlerResponse:
+ *
+ * {00000F05-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPacketTimeOffsetHandlerResponse, 0x00000F05, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+DECLARE_INTERFACE_(IRMAPacketTimeOffsetHandlerResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPacketTimeOffsetHandler methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketTimeOffsetHandler::PacketReady
+ * Purpose:
+ * Called by IRMAPacketTimeOffsetHandler to pass back the packet
+ * when it is done with it.
+ */
+ STDMETHOD(TimeOffsetPacketReady) (THIS_
+ IRMAPacket* pPacket) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMALiveFileFormatInfo
+ *
+ * Purpose:
+ *
+ * Provides miscellaneous information needed to transmit a live stream.
+ * Optionally implemented by the file format object.
+ *
+ * IID_IRMALiveFileFormatInfo:
+ *
+ * {00000F06-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMALiveFileFormatInfo, 0x00000F06, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMALiveFileFormatInfo
+
+DECLARE_INTERFACE_(IRMALiveFileFormatInfo, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMALiveFileFormatInfo methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMALiveFileFormatInfo::VerifyFileCompatibility
+ * Purpose:
+ * Compares two file headers and returns PNR_OK if these two
+ * files can be transmitted sequentially in a single live
+ * presentation.
+ */
+ STDMETHOD(VerifyFileCompatibility) (THIS_
+ IRMAValues* pFileHeader1,
+ IRMAValues* pFileHeader2) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMALiveFileFormatInfo::VerifyStreamCompatibility
+ * Purpose:
+ * Compares two stream headers and returns PNR_OK if these two
+ * streams can be transmitted sequentially in a single live
+ * presentation.
+ */
+ STDMETHOD(VerifyStreamCompatibility) (THIS_
+ IRMAValues* pStreamHeader1,
+ IRMAValues* pStreamHeader2) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMALiveFileFormatInfo::IsLiveResendRequired
+ * Purpose:
+ * Returns TRUE if this stream requires the latest packet to be
+ * resent periodically in a live presentation.
+ */
+ STDMETHOD_(BOOL,IsLiveResendRequired) (THIS_
+ UINT16 unStreamNumber) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMALiveFileFormatInfo::GetResendBitrate
+ * Purpose:
+ * If periodic live resends are required for this stream, this
+ * method returns the rate at which we should resend packets. The
+ * resend rate is measured in bits per second.
+ */
+ STDMETHOD(GetResendBitrate) (THIS_
+ UINT16 unStreamNumber,
+ REF(UINT32) ulBitrate) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMALiveFileFormatInfo::GetResendDuration
+ * Purpose:
+ * If periodic live resends are required for this stream, this
+ * method returns the number of milliseconds for which this packet
+ * should be resent.
+ */
+ STDMETHOD(GetResendDuration) (THIS_
+ IRMAPacket* pPacket,
+ REF(UINT32) ulDuration) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMALiveFileFormatInfo::FormResendPacket
+ * Purpose:
+ * Forms a live resend packet based upon the original packet passed
+ * as the first parameter. This allows the file format plugin to
+ * make resend packets distinguishable from original packets.
+ */
+ STDMETHOD(FormResendPacket) (THIS_
+ IRMAPacket* pOriginalPacket,
+ REF(IRMAPacket*) pResendPacket) PURE;
+};
+
+
+
+
+#endif /* _RMAFORMT_H_ */
diff --git a/include/realmedia/rmagroup.h b/include/realmedia/rmagroup.h
new file mode 100644
index 000000000..14ad71b25
--- /dev/null
+++ b/include/realmedia/rmagroup.h
@@ -0,0 +1,391 @@
+/****************************************************************************
+ *
+ * $Id: rmagroup.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ *
+ * Group Interface.
+ *
+ */
+
+#ifndef _IRMAGROUP_H_
+#define _IRMAGROUP_H_
+
+/****************************************************************************
+ *
+ * Forward declarations of some interfaces defined/used here-in.
+ */
+typedef _INTERFACE IRMAGroup IRMAGroup;
+typedef _INTERFACE IRMAGroupManager IRMAGroupManager;
+typedef _INTERFACE IRMAGroupSink IRMAGroupSink;
+typedef _INTERFACE IRMAValues IRMAValues;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAGroup
+ *
+ * Purpose:
+ *
+ *
+ * IID_IRMAGroup:
+ *
+ * {0x00002400-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAGroup, 0x00002400, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAGroup
+
+DECLARE_INTERFACE_(IRMAGroup, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAGroup methods
+ */
+ /************************************************************************
+ * Method:
+ * IRMAGroup::SetGroupProperties
+ * Purpose:
+ * Set any group specific information like Title Author
+ * Copyright etc.
+ */
+ STDMETHOD(SetGroupProperties) (THIS_
+ IRMAValues* /*IN*/ pProperties) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroup::GetGroupProperties
+ * Purpose:
+ * Get any group specific information. May return NULL.
+ */
+ STDMETHOD_(IRMAValues*, GetGroupProperties) (THIS) PURE;
+ /************************************************************************
+ * Method:
+ * IRMAGroup::GetTrackCount
+ * Purpose:
+ * Get the number of tracks within this group.
+ */
+ STDMETHOD_(UINT16,GetTrackCount) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroup::GetTrack
+ * Purpose:
+ * Get ith track in this group
+ */
+ STDMETHOD(GetTrack) (THIS_
+ UINT16 /*IN*/ uTrackIndex,
+ REF(IRMAValues*) /*OUT*/ pTrack) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroup::AddTrack
+ * Purpose:
+ * Add Tracks to the group.
+ */
+ STDMETHOD(AddTrack) (THIS_
+ IRMAValues* /*IN*/ pTrack) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroup::RemoveTrack
+ * Purpose:
+ * Remove an already added track
+ */
+ STDMETHOD(RemoveTrack) (THIS_
+ UINT16 /*IN*/ uTrackIndex) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAGroupManager
+ *
+ * Purpose:
+ *
+ *
+ * IID_IRMAGroupManager:
+ *
+ * {0x00002401-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAGroupManager, 0x00002401, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAGroupManager
+
+DECLARE_INTERFACE_(IRMAGroupManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAGroupManager methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupManager::CreateGroup
+ * Purpose:
+ * Create a group
+ */
+ STDMETHOD(CreateGroup) (REF(IRMAGroup*) pGroup) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupManager::GetGroupCount
+ * Purpose:
+ * Get the number of groups within the presentation.
+ */
+ STDMETHOD_(UINT16,GetGroupCount) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupManager::GetGroup
+ * Purpose:
+ * Get ith group in the presentation
+ */
+ STDMETHOD(GetGroup) (THIS_
+ UINT16 /*IN*/ uGroupIndex,
+ REF(IRMAGroup*) /*OUT*/ pGroup) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupManager::SetCurrentGroup
+ * Purpose:
+ * Play this group in the presentation.
+ */
+ STDMETHOD(SetCurrentGroup) (THIS_
+ UINT16 /*IN*/ uGroupIndex) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupMgr::GetCurrentGroup
+ * Purpose:
+ * Get the current group index
+ */
+ STDMETHOD(GetCurrentGroup) (THIS_
+ REF(UINT16) /*OUT*/ uGroupIndex) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupManager::AddGroup
+ * Purpose:
+ * Add a group to the presentation.
+ */
+ STDMETHOD(AddGroup) (THIS_
+ IRMAGroup* /*IN*/ pGroup) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupManager::RemoveGroup
+ * Purpose:
+ * Remove an already added group
+ */
+ STDMETHOD(RemoveGroup) (THIS_
+ UINT16 /*IN*/ uGroupIndex) PURE;
+
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupManager::AddSink
+ * Purpose:
+ * Add a sink to get notifications about any tracks or groups
+ * being added to the presentation.
+ */
+ STDMETHOD(AddSink) (THIS_
+ IRMAGroupSink* /*IN*/ pGroupSink) PURE;
+
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupManager::RemoveSink
+ * Purpose:
+ * Remove Sink
+ */
+ STDMETHOD(RemoveSink) (THIS_
+ IRMAGroupSink* /*IN*/ pGroupSink) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroup::GetPresentationProperties
+ * Purpose:
+ * Get any presentation information. May return NULL.
+ */
+ STDMETHOD_(IRMAValues*, GetPresentationProperties) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroup::SetPresentationProperties
+ * Purpose:
+ * Set any presentation information like Title Author
+ * Copyright etc.
+ */
+ STDMETHOD(SetPresentationProperties) (THIS_
+ IRMAValues* /*IN*/ pProperties) PURE;
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAGroupSink
+ *
+ * Purpose:
+ *
+ *
+ * IID_IRMAGroupSink:
+ *
+ * {0x00002402-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAGroupSink, 0x00002402, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMAGroupSink
+
+DECLARE_INTERFACE_(IRMAGroupSink, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAGroupSink methods
+ */
+ /************************************************************************
+ * Method:
+ * IRMAGroupSink::GroupAdded
+ * Purpose:
+ * Notification of a new group being added to the presentation.
+ */
+ STDMETHOD(GroupAdded) (THIS_
+ UINT16 /*IN*/ uGroupIndex,
+ IRMAGroup* /*IN*/ pGroup) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupSink::GroupRemoved
+ * Purpose:
+ * Notification of a group being removed from the presentation.
+ */
+ STDMETHOD(GroupRemoved) (THIS_
+ UINT16 /*IN*/ uGroupIndex,
+ IRMAGroup* /*IN*/ pGroup) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupSink::AllGroupsRemoved
+ * Purpose:
+ * Notification that all groups have been removed from the
+ * current presentation.
+ */
+ STDMETHOD(AllGroupsRemoved) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupSink::TrackAdded
+ * Purpose:
+ * Notification of a new track being added to a group.
+ */
+ STDMETHOD(TrackAdded) (THIS_
+ UINT16 /*IN*/ uGroupIndex,
+ UINT16 /*IN*/ uTrackIndex,
+ IRMAValues* /*IN*/ pTrack) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupSink::TrackRemoved
+ * Purpose:
+ * Notification of a track being removed from a group.
+ */
+ STDMETHOD(TrackRemoved) (THIS_
+ UINT16 /*IN*/ uGroupIndex,
+ UINT16 /*IN*/ uTrackIndex,
+ IRMAValues* /*IN*/ pTrack) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupSink::TrackStarted
+ * Purpose:
+ * Notification of a track being started (to get duration, for
+ * instance...)
+ */
+ STDMETHOD(TrackStarted) (THIS_
+ UINT16 /*IN*/ uGroupIndex,
+ UINT16 /*IN*/ uTrackIndex,
+ IRMAValues* /*IN*/ pTrack) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupSink::TrackStopped
+ * Purpose:
+ * Notification of a track being stopped
+ *
+ */
+ STDMETHOD(TrackStopped) (THIS_
+ UINT16 /*IN*/ uGroupIndex,
+ UINT16 /*IN*/ uTrackIndex,
+ IRMAValues* /*IN*/ pTrack) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAGroupSink::CurrentGroupSet
+ * Purpose:
+ * This group is being currently played in the presentation.
+ */
+ STDMETHOD(CurrentGroupSet) (THIS_
+ UINT16 /*IN*/ uGroupIndex,
+ IRMAGroup* /*IN*/ pGroup) PURE;
+};
+
+
+
+
+#endif /*_IRMAGROUP_H_*/
diff --git a/include/realmedia/rmahyper.h b/include/realmedia/rmahyper.h
new file mode 100644
index 000000000..a19afbeda
--- /dev/null
+++ b/include/realmedia/rmahyper.h
@@ -0,0 +1,85 @@
+/****************************************************************************
+ *
+ * $Id: rmahyper.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ *
+ * Simple Hyper Navigation Interfaces
+ *
+ */
+
+#ifndef _RMAHYPER_H_
+#define _RMAHYPER_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IUnknown IUnknown;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMAHyperNavigate IRMAHyperNavigate;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAHyperNavigate
+ *
+ * Purpose:
+ *
+ * Allows you to perform simple "Go to URL" operations.
+ *
+ * IID_IRMAHyperNavigate:
+ *
+ * {00000900-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAHyperNavigate, 0x00000900, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAHyperNavigate
+
+DECLARE_INTERFACE_(IRMAHyperNavigate, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAHyperNavigate methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAHyperNavigate::GoToURL
+ * Purpose:
+ * Performs a simple Go To URL operation.
+ * Parameters:
+ * pURL: fully qualified URL such as http://www.real.com
+ * pTarget: target frame. To not use a frame, set this to NULL
+ */
+ STDMETHOD(GoToURL) (THIS_
+ const char* pURL,
+ const char* pTarget) PURE;
+
+};
+
+
+
+#endif /* _RMAHYPER_H_ */
diff --git a/include/realmedia/rmaiids.h b/include/realmedia/rmaiids.h
new file mode 100644
index 000000000..2d9a657cc
--- /dev/null
+++ b/include/realmedia/rmaiids.h
@@ -0,0 +1,1094 @@
+/****************************************************************************
+ *
+ * $Id: rmaiids.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ *
+ * Exhaustive list of IID's used in IRMA interfaces
+ *
+ * Note: These IIDs generally are duplicated in the headers that are specific
+ * to each interface, so if you change this file, change the other file(s) as
+ * well. Having all these IIDS in one files is convenient to some folks, but
+ * not everyone includes this file, hence the need to keep them in individual
+ * files as well.
+ */
+
+#ifndef _RMAIIDS_H_
+#define _RMAIIDS_H_
+
+/*
+ * File:
+ * pncom.h
+ * Description:
+ * Interfaces defined by COM.
+ * Interfaces:
+ * IID_IUnknown: {00000000-0000-0000-C000000000000046}
+ * IID_IMalloc: {00000002-0000-0000-C000000000000046}
+ */
+
+/*
+ * These GUIDs are defined in pncom.h:
+ *
+ * DEFINE_GUID(IID_IUnknown, 0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
+ * DEFINE_GUID(IID_IMalloc, 0x00000002, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
+ *
+ */
+
+/*
+ * File:
+ * rmacomm.h
+ * Description:
+ * RealMedia Common Utility interfaces
+ * Interfaces:
+ * IID_IRMACommonClassFactory: {00000000-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAStatistics: {00000001-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARegistryID: {00000002-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAServerFork: {00000003-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAServerControl: {00000004-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAServerControl2: {00000005-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAReconfigServerResponse: {00000006-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMACOMM_H_
+DEFINE_GUID(IID_IRMACommonClassFactory, 0x00000000, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAStatistics, 0x00000001, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARegistryID, 0x00000002, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAServerFork, 0x00000003, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAServerControl, 0x00000004, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAServerControl2, 0x00000005, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAReconfigServerResponse, 0x00000006, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAServerReconfigNotification, 0x00000007, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAWantServerReconfigNotification, 0x00000008, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+
+/*
+ * File:
+ * rmaengin.h
+ * Description:
+ * Interfaces related to callbacks, networking, and scheduling.
+ * Interfaces:
+ * IID_IRMACallback: {00000100-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAScheduler: {00000101-0901-11d1-8B06-00A024406D59}
+ * IID_IRMATCPResponse: {00000102-0901-11d1-8B06-00A024406D59}
+ * IID_IRMATCPSocket: {00000103-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAListenResponse: {00000104-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAListenSocket: {00000105-0901-11d1-8B06-00A024406D59}
+ * IID_IRMANetworkServices: {00000106-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAUDPResponse: {00000107-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAUDPSocket: {00000108-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAResolver: {00000109-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAResolverResponse: {0000010A-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAInterruptSafe: {0000010B-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAsyncIOSelection: {0000010C-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAUDPMulticastInit: {0000010D-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAInterruptState: {0000010E-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAOptimizedScheduler: {0000010F-0901-11d1-8B06-00A024406D59}
+ * IID_IRMALoadBalancedListen: {00000110-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAOverrideDefaultServices: {00000111-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAHTTPPostObject: {00000112-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAHTTPPostResponse: {00000113-0901-11d1-8B06-00A024406D59}
+ * IID_IRMASetSocketOption: {00000114-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAThreadSafeMethods: {00000115-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAMutex: {00000116-0901-11d1-8B06-00A024406D59}
+ *
+ */
+#ifndef _RMAENGIN_H_
+DEFINE_GUID(IID_IRMACallback, 0x00000100, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAScheduler, 0x00000101, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMATCPResponse, 0x00000102, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMATCPSocket, 0x00000103, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAListenResponse, 0x00000104, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAListenSocket, 0x00000105, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMANetworkServices, 0x00000106, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMANetworkServices2, 0x17951551, 0x5683, 0x11d3, 0xb6, 0xba, 0x0, 0xc0, 0xf0, 0x31, 0xc2, 0x37);
+DEFINE_GUID(IID_IRMAUDPResponse, 0x00000107, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAUDPSocket, 0x00000108, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAResolver, 0x00000109, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAResolverResponse, 0x0000010A, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAInterruptSafe, 0x0000010B, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAsyncIOSelection, 0x0000010C, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAUDPMulticastInit, 0x0000010D, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAInterruptState, 0x0000010E, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAOptimizedScheduler, 0x0000010F, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMALoadBalancedListen, 0x00000110, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAOverrideDefaultServices, 0x00000111, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMASetSocketOption, 0x00000114, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAThreadSafeMethods, 0x00000115, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAMutex, 0x00000116, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+
+
+/*
+ * File:
+ * rmafiles.h
+ * Description:
+ * Interfaces related to file systems.
+ * Interfaces:
+ * IID_IRMAFileObject: {00000200-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileResponse: {00000201-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileSystemObject: {00000202-0901-11d1-8B06-00A024406D59}
+ * IID_IRMADirObject: {00000203-0901-11d1-8B06-00A024406D59}
+ * IID_IRMADirResponse: {00000204-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileStat: {00000205-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileStatResponse: {00000206-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileSystemManager: {00000207-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileSystemManagerResponse:
+ * {00000208-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileExists: {00000209-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileExistsResponse: {0000020A-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileMimeMapper: {0000020B-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileMimeMapperResponse: {0000020C-0901-11d1-8B06-00A024406D59}
+ * IID_IRMABroadcastMapper: {0000020D-0901-11d1-8B06-00A024406D59}
+ * IID_BroadcastMimeMapperResponse:{0000020E-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAGetFileFromSamePool: {0000020F-0901-11d1-8B06-00A024406D59}
+ * IID_GetFileFromSamePoolResponse:{00000210-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileAuthenticator: {00000211-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARequestHandler: {00000212-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARequest: {00000213-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileRename: {00000214-0901-11d1-8B06-00A024406D59}
+ * IID_IRMADirHandler: {00000215-0901-11d1-8B06-00A024406D59}
+ * IID_IRMADirHandlerResponse: {00000216-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARequestContext {00000217-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileRemove: {0000021A-0901-11d1-8B06-00A024406D59}
+ * DEPRECATED DEPRECATED {0000021B-0901-11d1-8B06-00A024406D59}
+ *
+ */
+#ifndef _RMAFILES_H_
+DEFINE_GUID(IID_IRMAHTTPPostObject, 0x00000112, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAHTTPPostResponse, 0x00000113, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileObject, 0x00000200, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileResponse, 0x00000201, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileSystemObject, 0x00000202, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMADirObject, 0x00000203, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59); //NOTE, use is deprecated
+DEFINE_GUID(IID_IRMADirResponse, 0x00000204, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59); //NOTE, use is deprecated
+DEFINE_GUID(IID_IRMAFileStat, 0x00000205, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileStatResponse, 0x00000206, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileSystemManager, 0x00000207, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileSystemManagerResponse, 0x00000208, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileExists, 0x00000209, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileExistsResponse, 0x0000020a, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileMimeMapper, 0x0000020b, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileMimeMapperResponse, 0x0000020c, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMABroadcastMapper, 0x0000020d, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMABroadcastMapperResponse, 0x0000020e, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAGetFileFromSamePool, 0x0000020f, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAGetFileFromSamePoolResponse,0x00000210, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileAuthenticator, 0x00000211, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARequestHandler, 0x00000212, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARequest, 0x00000213, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileRename, 0x00000214, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMADirHandler, 0x00000215, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMADirHandlerResponse, 0x00000216, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARequestContext, 0x00000217, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileRemove, 0x0000021a, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmarendr.h
+ * Description:
+ * Interfaces related to renderers.
+ * Interfaces:
+ * IID_IRMARenderer: {00000300-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMARenderer, 0x00000300, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmacore.h
+ * Description:
+ * Interfaces related to the client core services.
+ * Interfaces:
+ * IID_IRMAStream: {00000400-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAStreamSource {00000401-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPlayer: {00000402-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAClientEngine: {00000403-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAClientEngineSelector{00000404-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAClientEngineSetup: {00000405-0901-11d1-8B06-00A024406D59}
+ * : {00000406-0901-11d1-8B06-00A024406D59} -- Deprecated
+ * IID_IRMAInfoLogger: {00000409-0901-11d1-8B06-00A024406D59}
+ * {0000040F-0901-11d1-8B06-00A024406D59} -- Deprecated
+ * IID_IRMAPlayer2: {00000411-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMACORE_H_
+DEFINE_GUID(IID_IRMAStream, 0x00000400, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAStreamSource, 0x00000401, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPlayer, 0x00000402, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAClientEngine, 0x00000403, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#ifdef _UNIX
+DEFINE_GUID(IID_IRMAClientEngineSelector, 0x00000404, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+DEFINE_GUID(IID_IRMAClientEngineSetup, 0x00000405, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAInfoLogger, 0x00000409, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPlayer2, 0x00000411, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmaprefs.h
+ * Description:
+ * Interfaces related to persistent preferences services.
+ * Interfaces:
+ * IID_IRMAPreferences: {00000500-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAPREFS_H_
+DEFINE_GUID(IID_IRMAPreferences, 0x00000500, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPreferences2, 0x00000503, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPreferenceEnumerator, 0x00000504, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+
+/*
+ * File:
+ * rmamon.h
+ * Description:
+ * Interfaces related to Monitor plugins.
+ * Interfaces:
+ * IID_IRMAPNRegistry: {00000600-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPropWatch: {00000601-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPropWatchResponse: {00000602-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAActiveRegistry: {00000603-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAActivePropUser: {00000604-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAActivePropUserResponse: {00000605-0901-11d1-8B06-00A024406D59}
+ * IID_IRMACopyRegistry: {00000606-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPNRegistryAltStringHandling: {00000607-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAMON_H_
+DEFINE_GUID(IID_IRMAPNRegistry, 0x00000600, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPropWatch, 0x00000601, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPropWatchResponse, 0x00000602, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAActiveRegistry, 0x00000603, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAActivePropUser, 0x00000604, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAActivePropUserResponse, 0x00000605, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMACopyRegistry, 0x00000606, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPNRegistryAltStringHandling, 0x00000607, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmaausvc.h
+ * Description:
+ * Interfaces related to audio services.
+ * Interfaces:
+ * IID_IRMAAudioPlayer: {00000700-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioPlayerResponse: {00000701-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioStream: {00000702-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioDevice: {00000703-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioDeviceResponse: {00000704-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioHook: {00000705-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioStreamInfoResponse: {00000706-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAVolume: {00000707-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAVolumeAdviseSink: {00000708-0901-11d1-8B06-00A024406D59}
+ * IID_IRMADryNotification: {00000709-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioDeviceManager: {0000070A-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioCrossFade: {0000070B-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioStream2: {0000070C-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioPushdown: {0000070D-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAudioHookManager: {0000070E-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAAudioPlayer, 0x00000700, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioPlayerResponse, 0x00000701, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioStream, 0x00000702, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioDevice, 0x00000703, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioDeviceResponse, 0x00000704, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioHook, 0x00000705, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioStreamInfoResponse, 0x00000706, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAVolume, 0x00000707, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAVolumeAdviseSink, 0x00000708, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMADryNotification, 0x00000709, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioDeviceManager, 0x0000070A, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioCrossFade, 0x0000070B, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioStream2, 0x0000070C, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioPushdown, 0x0000070D, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAudioHookManager, 0x0000070E, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmaerror.h
+ * Description:
+ * Interfaces related to error reporting and receiving notification of errors.
+ * Interfaces:
+ * IID_IRMAErrorMessages: {00000800-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAErrorSink: {00000801-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAErrorSinkControl: {00000802-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAERROR_H_
+DEFINE_GUID(IID_IRMAErrorMessages, 0x00000800, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAErrorSink, 0x00000801, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAErrorSinkControl, 0x00000802, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmahyper.h
+ * Description:
+ * Simple Hyper Navigation Interfaces
+ * Interfaces:
+ * IID_IRMAHyperNavigate: {00000900-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAHyperNavigate2: {00000901-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAHyperNavigateWithContext: {00000902-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAHyperNavigate, 0x00000900, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmaclsnk.h
+ * Description:
+ * Client Advise Sink Interfaces
+ * Interfaces:
+ * IID_IRMAClientAdviseSink: {00000B00-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAClientAdviseSink, 0x00000B00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmaplugn.h
+ * Description:
+ * Plugin inspector interface
+ * Interfaces:
+ * IID_IRMAPlugin: {00000C00-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPluginEnumerator {00000C01-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPluginGroupEnumerator {00000C02-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPluginReloader {00000C03-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPluginFactory {00000C04-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAPLUGN_H_
+DEFINE_GUID(IID_IRMAPlugin, 0x00000C00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPluginEnumerator, 0x00000C01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPluginGroupEnumerator, 0x00000C02, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPluginReloader, 0x00000C03, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPluginFactory, 0x00000C04, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmawin.h
+ * Description:
+ * Site interfaces
+ * Interfaces:
+ * IID_IRMASiteWindowed: {00000D01-0901-11d1-8B06-00A024406D59}
+ * IID_IRMASiteWindowless: {00000D02-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMASite: {00000D03-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMASiteUser: {00000D04-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMASiteWatcher: {00000D05-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMASiteUserSupplier: {00000D06-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMASiteSupplier: {00000D07-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMASiteManager: {00000D08-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMAMultiInstanceSiteUserSupplier: {00000D09-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMASite2: {00000D0A-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMASiteFullScreen {00000D0B-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMAEventHookMgr {00000D0D-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMAEventHook {00000D0E-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMAPassiveSiteWatcher {00000D0F-0901-11d1-8B-6-00A024406D59}
+ * IID_IRMAStatusMessage {00000D10-0901-11d1-8B-6-00A024406D59}
+ */
+#ifndef _RMAWIN_H_
+DEFINE_GUID(IID_IRMASiteWindowed, 0x00000D01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMASiteWindowless, 0x00000D02, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMASite, 0x00000D03, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMASiteUser, 0x00000D04, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMASiteWatcher, 0x00000D05, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMASiteUserSupplier, 0x00000D06, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMASiteSupplier, 0x00000D07, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMASiteManager, 0x00000D08, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAMultiInstanceSiteUserSupplier, 0x00000D09, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMASite2, 0x00000D0A, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMASiteFullScreen, 0x00000D0B, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAEventHookMgr, 0x00000D0D, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAEventHook, 0x00000D0E, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPassiveSiteWatcher, 0x00000D0F, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAStatusMessage, 0x00000D10, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmaformt.h
+ * Description:
+ * Interfaces related to file and broadcast format plugins.
+ * Interfaces:
+ *
+ * IID_IRMAFileFormatObject: {00000F00-0901-11d1-8B06-00A024406D59}
+ * IID_IRMABroadcastFormatObject: {00000F01-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFormatResponse: {00000F02-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPacketFormat: {00000F03-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPacketTimeOffsetHandler {00000F04-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPacketTimeOffsetHandlerResponse {00000F05-0901-11d1-8B06-00A024406D59}
+ * IID_IRMALiveFileFormatInfo {00000F06-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAFORMT_H_
+DEFINE_GUID(IID_IRMAFileFormatObject, 0x00000F00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMABroadcastFormatObject, 0x00000F01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFormatResponse, 0x00000F02, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPacketFormat, 0x00000F03, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPacketTimeOffsetHandler, 0x00000F04, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPacketTimeOffsetHandlerResponse, 0x00000F05, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMALiveFileFormatInfo, 0x00000F06, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+
+/*
+ * File:
+ * rmapends.h
+ * Description:
+ * Interfaces related to get pending status from objects
+ * Interfaces:
+ * IRMAPendingStatus: {00001100-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAPENDS_H_
+DEFINE_GUID(IID_IRMAPendingStatus, 0x00001100, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmapckts.h
+ * Description:
+ * Interfaces related to buffers, packets, streams, etc.
+ * Interfaces:
+ * IID_IRMABuffer: {00001300-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPacket: {00001301-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARTPPacket {0169A731-1ED0-11d4-952B-00902742C923}
+ * IID_IRMAValues: {00001302-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAValuesRemove: {00001303-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAPCKTS_H_
+DEFINE_GUID(IID_IRMABuffer, 0x00001300, 0x0901, 0x11d1, 0x8b, 0x06, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPacket, 0x00001301, 0x0901, 0x11d1, 0x8b, 0x06, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARTPPacket, 0x0169a731, 0x1ed0, 0x11d4, 0x95, 0x2b, 0x0, 0x90, 0x27, 0x42, 0xc9, 0x23);
+DEFINE_GUID(IID_IRMAValues, 0x00001302, 0x0901, 0x11d1, 0x8b, 0x06, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAValuesRemove, 0x00001303, 0x0901, 0x11d1, 0x8b, 0x06, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmaasm.h
+ * Description:
+ * Interfaces related to abm and back channel support.
+ *
+ * Interfaces:
+ * IID_IRMABackChannel: {00001500-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAASMSource: {00001501-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAASMStream: {00001502-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAASMStreamSink: {00001503-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAASM_H_
+DEFINE_GUID(IID_IRMABackChannel, 0x00001500, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAASMSource, 0x00001501, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAASMStream, 0x00001502, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAASMStreamSink, 0x00001503, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmaencod.h
+ * Description:
+ * Interfaces related to superencoders.
+ *
+ * Interaces:
+ * IID_IRMAEncoderResponse {00001600-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAEncoder {00001601-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAEncoderCompletion {00001602-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAConnectionlessControl
+ {00001603-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAEncoderResponseCompletion
+ {00001604-0901-11d1-8B06-00A024406D59}
+ * IID_IRMATransportControl {00001605-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAENCOD_H_
+DEFINE_GUID(IID_IRMAEncoderResponse, 0x00001600, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAEncoder, 0x00001601, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAEncoderCompletion, 0x00001602, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAConnectionlessControl,
+ 0x00001603, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAEncoderResponseCompletion,
+ 0x00001604, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMATransportControl, 0x00001605, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmaauth.h
+ * Description:
+ * Password handling API
+ * Interfaces:
+ * IID_IRMAPassword {00001700-0901-11d1-8B06-00A024406D59}
+ */
+
+/*
+ * 000017**-0901-11d1-8B06-00A024406D59 is reserved for interfaces in rmaauth.h (below)
+ */
+
+/*
+ * File:
+ * rmaauth.h
+ * Description:
+ * Authentication API
+ * Interfaces:
+ * IID_IRMAAuthenticator {00001800-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAuthenticatorResponse {00001801-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAuthenticatorRequest {00001802-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPassword {00001700-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAuthenticationManager {00001A00-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAuthenticationManagerResponse
+ * {00001A01-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAAUTH_H_
+DEFINE_GUID(IID_IRMAAuthenticator, 0x00001800, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAuthenticatorResponse, 0x00001801, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAuthenticatorRequest, 0x00001802, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPassword, 0x00001700, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAuthenticationManager, 0x00001a00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAuthenticationManagerResponse, 0x00001a01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmasdesc.h
+ * Description:
+ * Stream description API
+ * Interfaces:
+ * IID_IRMAStreamDescription {00001900-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARTPPacketInfo {00001901-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMASDESC_
+DEFINE_GUID(IID_IRMAStreamDescription, 0x00001900, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARTPPacketInfo, 0x00001901, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * 00001A**-0901-11d1-8B06-00A024406D59 is reserved for interfaces in rmaauth.h (above)
+ */
+
+/*
+ * File:
+ * rmalvtxt.h
+ * Description:
+ * Interfaces related to live text superencoder.
+ *
+ * Interaces:
+ * IID_IRMALiveText {00001b00-0901-11d1-8B06-00A024406D59}
+ * IID_IRMALiveText2 {00001b01-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMALVTXT_H_
+DEFINE_GUID(IID_IRMALiveText, 0x00001b00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMALiveText2, 0x00001b01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+/*
+ * File:
+ * rmacfg.h
+ * Description:
+ * Interfaces used by server configuration tools.
+ *
+ * Interfaces:
+ * IID_IRMAConfigFile {00001c00-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARegConfig {00001c01-0901-11d1-8B06-00A024406D59}
+ *
+ */
+#ifndef _RMACFG_H_
+DEFINE_GUID(IID_IRMAConfigFile, 0x00001c00, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARegConfig, 0x00001c01, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+
+/*
+ * File:
+ * rmappv.h
+ * Description:
+ * Interfaces related to Pay Per View Database Plugins
+ * Interfaces:
+ * IID_IRMAPPVDatabase {00001d00-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAPPVDatabase,
+ 0x00001d00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+/*
+ * 00001e**-0901-11d1-8B06-00A024406D59 is reserved for an interface which
+ * has been deprecated.
+ */
+
+/*
+ * File:
+ * rmacmenu.h
+ * Description:
+ * Interfaces used by renderers for context menus.
+ *
+ * Interfaces:
+ * IID_IRMAContextMenu {00001f00-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAContextMenuResponse {00001f01-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMACMENU_H_
+DEFINE_GUID(IID_IRMAContextMenu, 0x00001f00, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAContextMenuResponse, 0x00001f01, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#endif
+/*
+ * File:
+ * rmaphook.h
+ * Description:
+ * Interfaces used by the top level client. client core and renderer to
+ * support Selective Record.
+ *
+ * Interfaces:
+ * IID_IRMAPacketHook {00002000-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPacketHookManager {00002001-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPacketHookHelper {00002002-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPacketHookHelperResponse {00002003-0901-11d1-8B06-00A024406D59}
+ */
+
+DEFINE_GUID(IID_IRMAPacketHook, 0x00002000, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPacketHookManager, 0x00002001, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPacketHookHelper, 0x00002002, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPacketHookHelperResponse, 0x00002003, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmapsink.h
+ * Description:
+ * Interfaces used by the top level client or renderers to determine
+ * that a player has been created or closed.
+ *
+ * Interfaces:
+ * IID_IRMAPlayerCreationSink {00002100-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPlayerSinkControl {00002101-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAPlayerCreationSink, 0x00002100, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPlayerSinkControl, 0x00002101, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmavsurf.h
+ * Description:
+ * Interface used by renderers to blt data to the screen (when in
+ * full screen mode).
+ *
+ * Interfaces:
+ * IID_IRMAVideoSurface {00002200-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAVideoSurface, 0x00002200, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+/*
+ * File:
+ * rmagroup.h
+ * Description:
+ * Client side Group related interfaces
+ *
+ * Interfaces:
+ * IID_IRMAGroup {00002400-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAGroupManager {00002401-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAGroupSink {00002402-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAGroup, 0x00002400, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAGroupManager, 0x00002401, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAGroupSink, 0x00002402, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmaupgrd.h
+ * Description:
+ * Interfaces used by player for auto-upgrade.
+ *
+ * Interfaces:
+ * IID_IRMAUpgradeCollection {00002500-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAUpgradeHandler {00002501-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAUpgradeCollection,
+ 0x00002500, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAUpgradeHandler,
+ 0x00002501, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmaallow.h
+ * Description:
+ * Interfaces related to Allowance plugins
+ * Interfaces:
+ * IID_IRMAPlayerConnectionAdviseSink {00002600-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPlayerConnectionResponse {00002601-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPlayerController {00002602-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPlayerConnectionAdviseSinkManager
+ {00002603-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAProxyConnectionAdviseSink {00002604-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAProxyConnectionResponse {00002605-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAProxyController {00002605-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPlayerControllerProxyRedirect {00002607-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAPlayerConnectionAdviseSink,
+ 0x00002600, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPlayerConnectionResponse,
+ 0x00002601, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPlayerController,
+ 0x00002602, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPlayerConnectionAdviseSinkManager,
+ 0x00002603, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+DEFINE_GUID(IID_IRMAProxyConnectionAdviseSink,
+ 0x00002604, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAProxyConnectionResponse,
+ 0x00002605, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAProxyController,
+ 0x00002606, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPlayerControllerProxyRedirect, 0x00002607, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmaaconf.h
+ * Description:
+ * Interfaces used by the top level client. client core to
+ * support Auto. Transport Configuration
+ *
+ * Interfaces:
+ * IID_IRMAAutoConfig {00002700-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAutoConfigResponse {00002701-0901-11d1-8B06-00A024406D59}
+ */
+
+DEFINE_GUID(IID_IRMAAutoConfig, 0x00002700, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAutoConfigResponse, 0x00002701, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmaauthn.h
+ * Description:
+ * Interfaces used to validate a users access to content.
+ *
+ * Interfaces:
+ * IID_IRMACredRequestResponse, {00002800-0901-11d1-8B06-00A024406D59}
+ * IID_IRMACredRequest, {00002801-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAClientAuthResponse, {00002802-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAClientAuthConversation, {00002803-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAServerAuthResponse, {00002804-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAServerAuthConversation, {00002805-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAUserContext, {00002806-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAUserProperties, {00002807-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAUserImpersonation, {00002808-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAUserDB, {00002809-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAChallengeResponse, {0000280A-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAChallenge, {0000280B-0901-11d1-8B06-00A024406D59}
+ */
+
+DEFINE_GUID(IID_IRMACredRequestResponse, 0x00002800, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMACredRequest, 0x00002801, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAClientAuthResponse, 0x00002802, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAClientAuthConversation, 0x00002803, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAServerAuthResponse, 0x00002804, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAServerAuthConversation, 0x00002805, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAUserContext, 0x00002806, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAUserProperties, 0x00002807, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAUserImpersonation, 0x00002808, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAChallengeResponse, 0x00002809, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAChallenge, 0x0000280A, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+/*
+ * File:
+ * rmaplgns.h
+ *
+ * Description:
+ * Interfaces for Plugins:
+ * IRMAObjectConfiguration - Consistant configuration.
+ * IRMAPluginProperties - Consistant property retrival.
+ *
+ * Interfaces:
+ * IID_IRMAObjectConfiguration: {00002900-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPluginProperties: {00002901-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAObjectConfiguration, 0x00002900, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPluginProperties, 0x00002901, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmadb.h
+ *
+ * Description:
+ * Interfaces for Plugins:
+ * IRMADatabaseManager - Creates Configured Database Instances
+ * IRMAAuthenticationDBManagerResponse - Provides Callbacks for IRMAAuthenticationDBManager
+ * IRMAAuthenticationDBManager - Functions to add and remove users from a database
+ * IRMAAsyncEnumAuthenticationDBResponse - Provides Callbacks for IRMAAsyncEnumAuthenticationDB
+ * IRMAAsyncEnumAuthenticationDB - Functions to enumerate the list of users in a database
+ * IRMAAuthenticationDBAccessResponse - Provides Callbacks for IRMAAuthenticationDBAccess
+ * IRMAAuthenticationDBAccess - Functions to access a users info in the database
+ * IRMAGUIDDBManagerResponse - Provides Callbacks for IRMAGUIDDBManager
+ * IRMAGUIDDBManager - Functions to add and remove GUID's from a database
+ * IRMAPPVDBManagerResponse - Provides Callbacks for IRMAPPVDBManager
+ * IRMAPPVDBManager - Functions to add, remove, and adjust a user's permissions from a database
+ * IRMARedirectDBManagerResponse - Provides Callbacks for IRMARedirectDBManager
+ * IRMARedirectDBManager - Functions to add and remove URL Redirects from a database
+ * IRMARegistrationLoggerResponse - Provides Callbacks for IRMARegistrationLogger
+ * IRMARegistrationLogger - Functions to Log registration Activity.
+ *
+ * Interfaces:
+ * IID_IRMADatabaseManager: {00002A00-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAuthenticationDBManagerResponse: {00002A01-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAuthenticationDBManager: {00002A02-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAsyncEnumAuthenticationDBResponse:{00002A03-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAsyncEnumAuthenticationDB: {00002A04-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAuthenticationDBAccessResponse: {00002A05-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAAuthenticationDBAccess: {00002A06-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAGUIDDBManagerResponse: {00002A07-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAGUIDDBManager: {00002A08-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPPVDBManagerResponse: {00002A09-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAPPVDBManager: {00002A0A-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARedirectDBManagerResponse: {00002A0B-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARedirectDBManager: {00002A0C-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARegistrationLoggerResponse: {00002A0D-0901-11d1-8B06-00A024406D59}
+ * IID_IRMARegistrationLogger: {00002A0E-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMADatabaseManager, 0x00002A00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAuthenticationDBManagerResponse, 0x00002A01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAuthenticationDBManager, 0x00002A02, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAsyncEnumAuthenticationDBResponse, 0x00002A03, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAsyncEnumAuthenticationDB, 0x00002A04, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAuthenticationDBAccessResponse, 0x00002A05, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAAuthenticationDBAccess, 0x00002A06, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAGUIDDBManagerResponse, 0x00002A07, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAGUIDDBManager, 0x00002A08, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPPVDBManagerResponse, 0x00002A09, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAPPVDBManager, 0x00002A0A, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARedirectDBManagerResponse, 0x00002A0B, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARedirectDBManager, 0x00002A0C, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARegistrationLoggerResponse, 0x00002A0D, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMARegistrationLogger, 0x00002A0E, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+/*
+ * File:
+ * rmaxmltg.h
+ *
+ * Description:
+ * Interfaces for Plugins:
+ * IRMAXMLTagHandler: Interface for registering for a specific tag
+ * and providing an IRMAXMLTagObject to tagfsys.
+ * (Works like IRMAFileSystemObject)
+ *
+ * IRMAXMLTagObject: Interface for receiving the contents of a tag
+ * for which the creating IRMAXMLTagHandler has registerd.
+ *
+ * IRMAXMLTagObjectResponse: Interface for IRMAXMLTagObject to return
+ * the replacement for the tag. This is implemented by tagfsys.
+ *
+ *
+ * Interfaces:
+ * IID_IRMAXMLTagObjectResponse: {00002C02-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAXMLTagHandler: {00002C03-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAXMLTagObject: {00002C04-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAXMLTG_H
+DEFINE_GUID(IID_IRMAXMLTagObjectResponse, 0x00002C02, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAXMLTagHandler, 0x00002C03, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAXMLTagObject, 0x00002C04, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+
+
+/*
+ * File:
+ * rmacache.h
+ *
+ * Description:
+ * Interfaces for caching services:
+ * IRMACache - Creates IRMACacheFiles
+ * IRMACacheResponse - Response object for IRMACache
+ * IRMACacheFile - Persistant store object for caching
+ * IRMACacheFileResponse - Response object for IRMACacheFile
+ *
+ * Interfaces:
+ * IID_IRMACache: {00002E00-0901-11d1-8B06-00A024406D59}
+ * IID_IRMACacheResponse: {00002E01-0901-11d1-8B06-00A024406D59}
+ * IID_IRMACacheFile: {00002E02-0901-11d1-8B06-00A024406D59}
+ * IID_IRMACacheFileResponse: {00002E03-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAMIIFetch: {00002E04-0901-11d1-8B06-00A024406D59}
+ */
+
+DEFINE_GUID(IID_IRMACache, 0x00002E00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMACacheResponse, 0x00002E01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMACacheFile, 0x00002E02, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMACacheFileResponse, 0x00002E03, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAMIIFetch, 0x00002E04, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+/*
+ * File: intrpm.h
+ *
+ * IID_IRMAInterPluginMessenger: {00003000-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAInterPluginMessenger, 0x00003000, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File: rmavalue.h
+ *
+ * DEPRECATED: {00003100-0901-11d1-8B06-00A024406D59}
+ * DEPRECATED: {00003101-0901-11d1-8B06-00A024406D59}
+ * DEPRECATED: {00003102-0901-11d1-8B06-00A024406D59}
+ * DEPRECATED: {00003103-0901-11d1-8B06-00A024406D59}
+ * DEPRECATED: {00003104-0901-11d1-8B06-00A024406D59}
+ * DEPRECATED: {00003105-0901-11d1-8B06-00A024406D59}
+ * DEPRECATED: {00003106-0901-11d1-8B06-00A024406D59}
+ * DEPRECATED: {00003107-0901-11d1-8B06-00A024406D59}
+ *
+ * IID_IRMAKeyValueList: {00003108-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAKeyValueListIter: {00003109-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAKeyValueListIterOneKey: {00003110-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAOptions: {00003111-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAVALUE_H_
+/* DEPRECATED 3100 - 3107 */
+DEFINE_GUID(IID_IRMAKeyValueList, 0x00003108, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAKeyValueListIter, 0x00003109, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAKeyValueListIterOneKey, 0x00003110, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAOptions, 0x00003111, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+
+/*
+ * File:
+ * rmcookie.h
+ *
+ * Description:
+ * Interfaces for Plugins:
+ * IRMACookies - Cookie database management APIs
+ * IRMACookiesHelper - Cookie output helper APIs
+ *
+ * Interfaces:
+ * IID_IRMACookies: {00003200-0901-11d1-8B06-00A024406D59}
+ * IID_IRMACookiesHelper: {00003201-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMACookies, 0x00003200, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMACookiesHelper, 0x00003201, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File: addrpool.h
+ *
+ * IID_IRMAMulticastAddressPool: {00003300-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAMulticastAddressPool, 0x00003300, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File: sapmgr.h
+ *
+ * IID_IRMASapManager: {00003400-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMASapManager, 0x00003400, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmavsrc.h
+ *
+ * Description:
+ * Interfaces for Plugins:
+ * IRMAFileViewSource - Interface so file formats can support view source.
+ * IRMAFileViewSourceResponse - Response interface.
+ *
+ * Interfaces:
+ * IID_IRMAFileViewSource: {00003500-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAFileViewSourceResponse: {00003501-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAViewSourceCommand: {00003504-0901-11d1-8B06-00A024406D59}
+ * IID_IRMAViewSourceURLResponse {00003505-0901-11d1-8B06-00A024406D59}
+ */
+#ifndef _RMAVSRC_H_
+DEFINE_GUID(IID_IRMAFileViewSource, 0x00003500, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAFileViewSourceResponse, 0x00003501, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAViewSourceCommand, 0x00003504, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMAViewSourceURLResponse, 0x00003505, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#endif
+
+
+
+
+
+/* File:
+ * embdengn.h
+ *
+ * Description:
+ *
+ * IRCAEmbeddedPlayerEngine - RCA embedded player engine
+ */
+
+DEFINE_GUID(IID_IRCAEmbeddedEngine,
+ 0x00003800, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/* File:
+ * embdctxt.h
+ *
+ * Description:
+ *
+ * IRCAEmbeddedContext - RCA embedded player engine context
+ */
+
+DEFINE_GUID(IID_IRCAEmbeddedContext,
+ 0x00003801, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/* File:
+ * embdplay.h
+ *
+ * Description:
+ *
+ * IRCAEmbeddedPlayer - RCA embedded player interface
+ */
+
+DEFINE_GUID(IID_IRCAEmbeddedPlayer,
+ 0x00003802, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/* File:
+ * embdsink.h
+ *
+ * Description:
+ *
+ * IRCAEmbeddedSink - RCA embedded player event sink
+ * IRCAEmbeddedSinkResponse - RCA embedded player event sink response object
+ */
+
+DEFINE_GUID(IID_IRCAEmbeddedSink,
+ 0x00003803, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRCAEmbeddedSinkResponse,
+ 0x00003804, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/* File:
+ * embdstrm.h
+ *
+ * Description:
+ *
+ * IRCAEmbeddedStreamManager - RCA embedded player stream manager
+ * IRCAEmbeddedStream - RCA embedded player stream
+ */
+
+DEFINE_GUID(IID_IRCAEmbeddedStreamManager,
+ 0x00003805, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRCAEmbeddedStream,
+ 0x00003806, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/* File:
+ * rmadtcvt.h
+ *
+ * Description
+ * IRMADataConvertSystemObject - RMA Stream data conversion creator
+ * IRMADataConvert - RMA Stream data conversion
+ * IRMADataConvertResponse - response for above
+ * IRMADataRevert - RMA Stream data reversion
+ * IRMADataRevertResponse - response for above
+ */
+DEFINE_GUID(IID_IRMADataConvertSystemObject,
+ 0x00003900, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMADataConvert,
+ 0x00003901, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMADataConvertResponse,
+ 0x00003902, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMADataRevert,
+ 0x00003903, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+DEFINE_GUID(IID_IRMADataRevertResponse,
+ 0x00003904, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * File:
+ * rmaslta.h
+ *
+ * Description:
+ *
+ * IRMASLTA - RMA version of slta. Simulates a live stream from file format.
+ *
+ * IRMASltaEvent - Allows events to be sent in an SLTA stream
+ */
+DEFINE_GUID(IID_IRMASLTA,
+ 0x00000D00, 0xb4c8, 0x11d0, 0x99, 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
+
+DEFINE_GUID(IID_IRMASltaEvent,
+ 0x00000D01, 0xb4c8, 0x11d0, 0x99, 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
+
+#endif /* _RMAIIDS_H_ */
+
diff --git a/include/realmedia/rmalvpix.h b/include/realmedia/rmalvpix.h
new file mode 100644
index 000000000..5ad3f8b92
--- /dev/null
+++ b/include/realmedia/rmalvpix.h
@@ -0,0 +1,385 @@
+/****************************************************************************
+ *
+ * rmalvpix.h
+ *
+ * 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.
+ *
+ *
+ * RealPix live encoder interfaces
+ *
+ */
+
+#ifndef _RMALVPIX_H
+#define _RMALVPIX_H
+
+/*
+ * PixInitInfo
+ *
+ * This struct contains initialization information
+ * and is passed in in the IRMALiveRealPix::StartEncoder()
+ * method. All of the members of this struct are input variables.
+ */
+typedef struct PNEXPORT_CLASS _PixInitInfo
+{
+ UINT32 m_ulStructLength; /* length in bytes of this structure */
+ char *m_pServerAddress; /* name or ip address of server */
+ UINT32 m_ulServerPort; /* pn-encoder port on server */
+ char *m_pUsername; /* username for authentication on server */
+ char *m_pPassword; /* password for authentication on server */
+ char *m_pFilename; /* filename which clients should open */
+ char *m_pTitle; /* title of live presentation */
+ char *m_pAuthor; /* author of live presentation */
+ char *m_pCopyright; /* copyright on live presentation */
+ UINT32 m_ulBitrate; /* bitrate of realpix stream */
+ UINT32 m_ulMaxFps; /* max frames per second of effects */
+ UINT32 m_ulDisplayWidth; /* display width in pixels */
+ UINT32 m_ulDisplayHeight; /* display height in pixels */
+ BOOL m_bPreserveAspect; /* preserve aspect ratio by default? */
+ char *m_pDefaultURL; /* default URL to send browser to when clicked */
+ UINT32 m_ulNumImageCodecs; /* number of image codecs used in this stream */
+ char **m_ppImageCodec; /* string names of codecs */
+ UINT32 m_ulNumEffectPackages; /* number of external effect packages used */
+ char **m_ppEffectPackage; /* string names of effect packages*/
+}
+PixInitInfo;
+
+/*
+ * PixImageInfo
+ *
+ * This struct contains all the information for images which
+ * should be sent down the stream. This struct is used in the
+ * IRMALiveRealPix::InitImage() method.
+ */
+typedef struct PNEXPORT_CLASS _PixImageInfo
+{
+ UINT32 m_ulStructLength; /* Input: size of struct */
+ BYTE *m_pImageBuffer; /* Input: buffer holding image data */
+ UINT32 m_ulImageBufferSize; /* Input: size of image buffer */
+ char *m_pImageCodec; /* Input: image codec to be used */
+ UINT32 m_ulHandle; /* Output: image handle */
+ UINT32 m_ulNumPackets; /* Output: number of packets image will be sent */
+ UINT32 m_ulTimeToSend; /* Output: milliseconds required to send image */
+}
+PixImageInfo;
+
+#define EFFECT_FILL 0
+#define EFFECT_FADEIN 1
+#define EFFECT_FADEOUT 2
+#define EFFECT_CROSSFADE 3
+#define EFFECT_WIPE 4
+#define EFFECT_VIEWCHANGE 5
+#define EFFECT_EXTERNAL 6
+#define EFFECT_ANIMATE 7
+
+#define WIPE_DIRECTION_UP 0
+#define WIPE_DIRECTION_DOWN 1
+#define WIPE_DIRECTION_LEFT 2
+#define WIPE_DIRECTION_RIGHT 3
+
+#define WIPE_TYPE_NORMAL 0
+#define WIPE_TYPE_PUSH 1
+
+/*
+ * PixEffectInfo
+ *
+ * This struct contains all the information about the effect which
+ * the RealPix renderer should perform. This struct is used in the
+ * IRMALiveRealPix::SendEffect() method.
+ */
+typedef struct PNEXPORT_CLASS _PixEffectInfo
+{
+ UINT32 m_ulStructLength; /* Input: Length in bytes of this struct */
+ BYTE m_ucEffectType; /* Input: Effect Type: EFFECT_FILL, EFFECT_FADEIN, etc. */
+ UINT32 m_ulStart; /* Input: Start time in milliseconds of effect */
+ UINT32 m_ulDuration; /* Input: Duration in milliseconds of effect */
+ UINT32 m_ulTarget; /* Input: Handle of image to perform effect on */
+ UINT32 m_ulSrcX; /* Input: Horizontal offset of source rectangle */
+ UINT32 m_ulSrcY; /* Input: Vertical offset of source rectangle */
+ UINT32 m_ulSrcW; /* Input: Width of source rectangle */
+ UINT32 m_ulSrcH; /* Input: Height of source rectangle */
+ UINT32 m_ulDstX; /* Input: Horizontal offset of destination rectangle */
+ UINT32 m_ulDstY; /* Input: Vertical offset of destination rectangle */
+ UINT32 m_ulDstW; /* Input: Width of destination rectangle */
+ UINT32 m_ulDstH; /* Input: Height of destination rectangle */
+ UINT32 m_ulMaxFps; /* Input: Max frames per second for this effect */
+ BOOL m_bAspectFlag; /* Input: TRUE: preserve aspect on this effect; FALSE: don't preserve */
+ BYTE m_ucRed; /* Input: Red component of fill or fadeout color */
+ BYTE m_ucGreen; /* Input: Green component of fill or fadeout color */
+ BYTE m_ucBlue; /* Input: Blue component of fill or fadeout color */
+ BYTE m_ucWipeDirection; /* Input: WIPE_DIRECTION_xxx, where xxx is UP, DOWN, LEFT, or RIGHT */
+ BYTE m_ucWipeType; /* Input: WIPE_TYPE_NORMAL or WIPE_TYPE_PUSH */
+ char *m_pURL; /* Input: URL for this effect */
+ char *m_pExtPackage; /* Input: Name of external effect package */
+ char *m_pExtName; /* Input: Name of external effect within the package */
+ char *m_pExtData; /* Input Opaque string data for external effect */
+ char *m_pExtFile; /* Input: File contents of external effect data */
+ BOOL m_bDiscardImage; /* Input: TRUE: discard image after doing effect; FALSE: don't discard */
+ BOOL m_bDisplayImmediately; /* Input: FALSE: obey start time; TRUE: do effect immediately */
+ UINT32 m_ulHandle; /* Output: Handle by which effect will be referred to */
+}
+PixEffectInfo;
+
+/*
+ * Forward declarations of some interfaces defined here.
+ */
+typedef _INTERFACE IRMALiveRealPix IRMALiveRealPix;
+typedef _INTERFACE IRMALiveRealPixResponse IRMALiveRealPixResponse;
+typedef _INTERFACE IRMALiveRealPixResend IRMALiveRealPixResend;
+
+/*
+ * Forward declarations of interfaces used here
+ */
+typedef _INTERFACE IRMAValues IRMAValues;
+
+/*
+ * Declaration of the DLL entry point
+ */
+STDAPI CreateLiveRealPix(IRMALiveRealPix **);
+
+typedef PN_RESULT (PNEXPORT_PTR FPRMCREATELIVEREALPIX)(IRMALiveRealPix **ppLiveRealPix);
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMALivePix
+ *
+ * Purpose:
+ *
+ * Asynchronous interface that allows an application to encode live RealPix
+ *
+ * IID_IRMALiveRealPix:
+ *
+ * {E7ADF466-477D-11d2-AA0C-0060972D23A7}
+ *
+ */
+DEFINE_GUID(IID_IRMALiveRealPix, 0xe7adf466, 0x477d, 0x11d2, 0xaa, 0xc, 0x0,
+ 0x60, 0x97, 0x2d, 0x23, 0xa7);
+
+#undef INTERFACE
+#define INTERFACE IRMALiveRealPix
+
+DECLARE_INTERFACE_(IRMALiveRealPix, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMALiveRealPix methods
+ */
+
+ /*
+ * StartEncoder() must be called before anything else and a pointer to
+ * an IRMALiveRealPixResponse interface must be passed in. The encoder will
+ * respond to this call asynchronously with IRMALiveRealPixResponse::EncoderStarted().
+ */
+ STDMETHOD(StartEncoder) (THIS_ PixInitInfo *pInitInfo,
+ IRMALiveRealPixResponse *pResponse) PURE;
+
+ /*
+ * InitImage() is called to prep an image for being sent. It returns several useful
+ * pieces of information which the caller can make use of: the handle to refer to
+ * the image in SendImage(), the number of packets this image will be broken up into,
+ * and the time required to send this image in milliseconds. Note that InitImage()
+ * simply breaks the image up into packets - nothing has been sent to the server yet.
+ * This is not an asynchronous call - all processing has finished by the time this
+ * call returns.
+ */
+ STDMETHOD(InitImage) (THIS_ PixImageInfo *pImageInfo) PURE;
+
+ /*
+ * SendImage() tranfers the all the packets for the image referred to by ulImageHandle
+ * into the packet send queue. Further calls to Process() will result in these
+ * packets being sent to the RealServer. When all the packets for this image have
+ * been sent, the encoder will respond with IRMALiveRealPixResponse::ImageSent().
+ */
+ STDMETHOD(SendImage) (THIS_ UINT32 ulImageHandle) PURE;
+
+ /*
+ * SendEffect() creates an effect packet with the information contained in
+ * the PixEffectInfo struct and immediately adds this packet to the packet
+ * send queue. Further calls to Process() will result in this packet being
+ * sent to the server. A handle is returned in the PixEffectInfo struct by
+ * which this effect can later be identified. When the effect has been
+ * sent to the server, the encoder will respond with
+ * IRMALiveRealPixResponse::EffectSent().
+ */
+ STDMETHOD(SendEffect) (THIS_ PixEffectInfo *pEffectInfo) PURE;
+
+ /*
+ * StopEncoder() may be called at any time after calling StartEncoder().
+ * This tells the encoder that no more images of effects are going to
+ * be sent to the encoder. The encoder shuts down the connection to
+ * the server and responds with IRMALiveRealPixResponse::EncoderStopped().
+ */
+ STDMETHOD(StopEncoder) (THIS) PURE;
+
+ /*
+ * GetTime() returns the time in milliseconds since the encoder library was initialized.
+ */
+ STDMETHOD_(UINT32, GetTime) (THIS) PURE;
+
+ /*
+ * Process() must be called in order to give the library time to send
+ * packets to the server. It should be called very often in between SendImage()
+ * and ImageSent(), as well as between SendEffect() and EffectSent(). Other
+ * that these times, it should be called every 3-5 seconds.
+ */
+ STDMETHOD(Process) (THIS) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMALiveRealPixResponse
+ *
+ * Purpose:
+ *
+ * Asynchronous response interface that allows an application to
+ * encode live RealPix
+ *
+ * IID_IRMALiveRealPixResponse:
+ *
+ * {E7ADF46C-477D-11d2-AA0C-0060972D23A7}
+ *
+ */
+DEFINE_GUID(IID_IRMALiveRealPixResponse, 0xe7adf46c, 0x477d, 0x11d2, 0xaa, 0xc, 0x0,
+ 0x60, 0x97, 0x2d, 0x23, 0xa7);
+
+
+#undef INTERFACE
+#define INTERFACE IRMALiveRealPixResponse
+
+DECLARE_INTERFACE_(IRMALiveRealPixResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMALiveRealPixResponse methods
+ */
+
+ /*
+ * EncoderStarted() is the asynchronous response to StartEncoder(). The status
+ * argument tells whether initializing the server was successful or not, and the pszHeaderString
+ * argument returns the text string returned by the RealServer.
+ */
+ STDMETHOD(EncoderStarted) (THIS_ PN_RESULT status, const char *pszHeaderString) PURE;
+
+ /*
+ * ImageSent() is the asynchronous response to SendImage(). The ulImageHandle argument
+ * identifies which image has just completed sending to the server, and the status
+ * argument tells whether or not the send was successful or not.
+ */
+ STDMETHOD(ImageSent) (THIS_ PN_RESULT status, UINT32 ulImageHandle) PURE;
+
+ /*
+ * EffectSent() is the asynchronous response to SendEffect(). The ulEffectHandle argument
+ * identifies which effect has just completed sending to the server, and the status
+ * argument tells whether or not the send was successful or not.
+ */
+ STDMETHOD(EffectSent) (THIS_ PN_RESULT status, UINT32 ulEffectHandle) PURE;
+
+ /*
+ * EncoderStopped() is the asynchronous response to StopEncoder(). The status
+ * argument tells whether or not the stopping of the encoder was successful.
+ * If the status is PNR_OK, then the application can then shut down or turn
+ * around and call StartEncoder() again.
+ */
+ STDMETHOD(EncoderStopped) (THIS_ PN_RESULT status) PURE;
+
+ /*
+ * ErrorOccurred() is called when the encoder receives an error from the RealServer.
+ * Depending upon the severity of the error, the RealServer may then shut down
+ * the encoder and an EncoderStopped() call would be made. Therefore, the
+ * application should be ready to handle an EncoderStopped() call at any time.
+ * If an error occurs, it's probably a good idea to call StopEncoder() and shut
+ * down the encoder from the application side anyway.
+ */
+ STDMETHOD(ErrorOccurred) (THIS_ const UINT8 unSeverity,
+ const ULONG32 ulRMACode,
+ const ULONG32 ulUserCode,
+ const char *pszUserString,
+ const char *pszMoreInfoURL) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMALiveRealPixResend
+ *
+ * Purpose:
+ *
+ * Allows re-sending and releasing of images with IRMALiveRealPix
+ *
+ * IID_IRMALiveRealPixResend:
+ *
+ * {D814DA11-8B02-11D3-8AF3-00C0F030B4E5}
+ */
+DEFINE_GUID(IID_IRMALiveRealPixResend, 0xd814da11, 0x8b02, 0x11d3, 0x8a, 0xfe, 0x0,
+ 0xc0, 0xf0, 0x30, 0xb4, 0xe5);
+
+
+#undef INTERFACE
+#define INTERFACE IRMALiveRealPixResend
+
+DECLARE_INTERFACE_(IRMALiveRealPixResend, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMALiveRealPixResend methods
+ */
+
+ /*
+ * InitResend() informs the encoder that from now on, after an
+ * image is sent with SendImage() it should not be discarded
+ * but held in the encoder until ReleaseImage() is called().
+ */
+ STDMETHOD(InitResend) (THIS_ IRMAValues* pOptions) PURE;
+
+ /*
+ * ReleaseImage() informs the encoder that the application no longer
+ * intends to call SendImage() on the image referenced by ulImageHandle
+ * and that it can discard the image. Further calls to SendImage(x) will
+ * return PNR_UNKNOWN_IMAGE after ReleaseImage(x) has been called.
+ * ReleaseImage(x) will return PNR_UNKNOWN_IMAGE if x is an unknown handle.
+ */
+ STDMETHOD(ReleaseImage) (THIS_ UINT32 ulImageHandle) PURE;
+
+ /*
+ * DumpAllQueuedPackets() clears any packets currently waiting to be
+ * sent to the server. These packets were put on the send queue by
+ * either IRMALiveRealPix::SendImage() or IRMALiveRealPix::SendEffect().
+ */
+ STDMETHOD(DumpAllQueuedPackets) (THIS) PURE;
+};
+
+#endif
diff --git a/include/realmedia/rmalvtxt.h b/include/realmedia/rmalvtxt.h
new file mode 100644
index 000000000..98f58fb05
--- /dev/null
+++ b/include/realmedia/rmalvtxt.h
@@ -0,0 +1,324 @@
+/****************************************************************************
+ *
+ * $Id: rmalvtxt.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ *
+ * RealText encoder class using the SuperEncoder library.
+ *
+ */
+
+#ifndef _RMALVTXT_H_
+#define _RMALVTXT_H_
+
+/* These need to be visible to rtlive and to exlvtext: */
+/* For live, duration is max allowed val, or max ulong:
+ */
+#if !defined(MAX_ULONG32)
+# define MAX_ULONG32 0xFFFFFFFF
+#endif
+#if !defined(MIN_LONG32)
+# define MIN_LONG32 0xFFFFFFFF
+#endif
+
+/* These, too, need to be visible to rtlive and to exlvtext: */
+#define MAX_PACKET_SIZE 500
+#define USE_DEFAULT_TYPE NULL
+#define USE_DEFAULT_HEIGHT MAX_ULONG32
+#define USE_DEFAULT_WIDTH MAX_ULONG32
+#define USE_DEFAULT_SCROLLRATE MIN_LONG32
+#define USE_DEFAULT_CRAWLRATE MIN_LONG32
+#define USE_DEFAULT_BGCOLOR NULL
+#define USE_DEFAULT_LINKCOLOR NULL
+#define USE_DEFAULT_LINKUNDERLINING 0x2
+#define USE_DEFAULT_WORDWRAP 0x2
+#define USE_DEFAULT_DOLOOPING 0L
+
+#define USE_DEFAULT_IGNOREEXTRASPACES FALSE
+
+
+typedef _INTERFACE IUnknown IUnknown;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMAPacket IRMAPacket;
+typedef _INTERFACE IRMALiveText IRMALiveText;
+typedef _INTERFACE IRMALiveText2 IRMALiveText2;
+
+STDAPI
+CreateLiveText(IRMALiveText**);
+
+typedef PN_RESULT (PNEXPORT_PTR FPRMCREATELIVETEXT)(IRMALiveText** ppLiveText);
+
+
+DEFINE_GUID(IID_IRMALiveText, 0x00001b00, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMALiveText
+
+DECLARE_INTERFACE_(IRMALiveText, IUnknown)
+{
+ /***********************************************************************/
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+
+ /***********************************************************************/
+ /*
+ * IRMALiveText methods
+ */
+
+ /*
+ * InitLiveText() must be called before any of the other IRMALiveText
+ * methods:
+ */
+ STDMETHOD(InitLiveText) (THIS_
+ /*
+ * This is the computer where the
+ * RMServer is running:
+ */
+ char* pAddress,
+ /*
+ * This is the port number defined in
+ * the config file where the FSMount
+ * option has the following entry:
+ * { /encoder/, pn-encoder, Port=#### }
+ * where #### is the port number that
+ * encoders will use:
+ */
+ UINT16 port,
+ char* pUsername,
+ char* pPassword,
+ /*
+ * This is the "file" name that
+ * RMPlayers can use to view the
+ * stream. For example, if your
+ * server was called "srv1" and the
+ * rtsp port in the config file was
+ * 8080, and the filename from the
+ * encoder was "foo.rtx", then a
+ * player could view the stream by
+ * opening the following location:
+ * "rtsp://srv1:8080/encoder/foo.rtx"
+ */
+ char* pFilename) PURE;
+
+
+ /* ******************************************************************* */
+ /* The following methods are to be called prior to sending any data
+ * and exist as overrides to the default attributes of a RealText
+ * presentation. Please see the section on the <WINDOW> header tag
+ * in the realtext.htm in the SDK's doc directory for more information.
+ * Note: with live text, you do not need a <WINDOW> tag; you must use
+ * the following methods to set the stream type (e.g., "tickertape"),
+ * window width, height, background color, ...etc.
+ */
+
+ STDMETHOD(SetType) (THIS_
+ char* szType) PURE;
+
+ STDMETHOD(SetWindowDimensions) (THIS_
+ ULONG32 width,
+ ULONG32 height) PURE;
+
+ STDMETHOD(SetTextMotion) (THIS_
+ LONG32 scrollrate,
+ LONG32 crawlrate) PURE;
+
+ STDMETHOD(SetBackgroundColor) (THIS_
+ char* szBackgroundColor) PURE;
+
+ STDMETHOD(SetHyperlinkInfo) (THIS_
+ BOOL underlineHyperlinks,
+ char* szLinkColor) PURE;
+
+ STDMETHOD(UseWordwrap) (THIS_
+ BOOL useWordwrap) PURE;
+ /*
+ * This is for "TickerTape"-type windows only; it is ignored by all
+ * other types:
+ */
+ STDMETHOD(SetDoLooping) (THIS_
+ BOOL bDoLooping) PURE;
+
+
+ /* ******************************************************************* */
+
+ /*
+ * AddData() lets you add text to the stream. The second
+ * parameter, bSendImmediately, can be used to force the encoder to
+ * send all text that's been added (and not yet sent) immediately.
+ * Note: if bSendImmediately is FALSE, the encoder will decide when
+ * to send the text it has buffered based on the length of the text in
+ * the buffer and the time since the last packet was sent:
+ */
+ STDMETHOD(AddData) (THIS_
+ char* szMoreData,
+ BOOL bSendImmediately) PURE;
+ /*
+ * AddTickerItem() lets you add "tickertape" text to the stream.
+ * This method prepends "<TU>" to szTickerUpperData, and
+ * "<TL>" to szTickerLowerData. Calling:
+ * AddTickerItem("ABCD", "5 1/2", TRUE)
+ * is the same as calling
+ * AddData("<TU>ABCD", FALSE);
+ * AddData("<TL>5 1/2", TRUE);
+ * except that the former guarantees that the "upper" and "lower"
+ * items will be sent in the same packet.
+ * (Please see the comments above for AddData() for details on use of
+ * the second parameter, bSendImmediately.
+ */
+ STDMETHOD(AddTickerItem) (THIS_
+ char* szTickerUpperData,
+ char* szTickerLowerData,
+ BOOL bSendImmediately) PURE;
+
+
+ /* ******************************************************************* */
+ /*
+ * flush() tells the encoder to send everything that's in the buffer and
+ * clear it:
+ */
+ STDMETHOD(flush) (THIS) PURE;
+
+
+ /* ******************************************************************* */
+ /*
+ * GetTime returns the current system time in milliseconds. The return
+ * value is a UINT32 (32-bit unsigned int):
+ */
+ STDMETHOD_(UINT32,GetTime) (THIS) PURE;
+
+
+ /* ******************************************************************* */
+ /*
+ * This must be called on a regular basis:
+ */
+ STDMETHOD(Process) (THIS) PURE;
+
+
+ /* ******************************************************************* */
+ /*
+ * These methods keep track of the encoder's state and must be called
+ * as they are in main.cpp in the exlvtext directory:
+ */
+ STDMETHOD_(BOOL,EncoderIsInitialized) (THIS) PURE;
+ STDMETHOD_(BOOL,PacketsHaveStarted) (THIS) PURE;
+ STDMETHOD_(BOOL,EncoderIsDone) (THIS) PURE;
+ STDMETHOD(SetEncoderDone) (THIS) PURE;
+};
+
+
+DEFINE_GUID(IID_IRMALiveText2, 0x00001b01, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMALiveText2
+
+DECLARE_INTERFACE_(IRMALiveText2, IUnknown)
+{
+ /***********************************************************************/
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+
+ /***********************************************************************/
+ /*
+ * IRMALiveText2 methods
+ */
+
+ /* ******************************************************************* */
+ /* The following methods are to be called prior to sending any data
+ * and exist as overrides to the default attributes of a RealText
+ * presentation. Please see the section on the <window> header tag
+ * in the realtext.htm in the SDK's doc directory for more information.
+ * Note: these are additional to the IRMALiveText methods, listed
+ * above.
+ */
+
+ /* This allows you to give an estimate of the bit rate needed by a live
+ * text stream so that the server can determine whether or not a player
+ * can view the stream based on its available bandwidth This method
+ * should be called before sending any data::
+ */
+ STDMETHOD(DeclareAverageBitrate) (THIS_
+ ULONG32 ulAvgBitsPerSecond) PURE;
+
+ /* As above, for DeclareAverageBitrate, this method should be called
+ * before sending any data::
+ */
+ STDMETHOD(DeclareMaximumBitrate) (THIS_
+ ULONG32 ulMaxBitsPerSecond) PURE;
+
+ /*This determines how multiple contiguous space characters are presented;
+ * Defaults to FALSE which means that multiple spaces in non-tag text
+ * would all be renderered. If this value is TRUE, multiple contiguous
+ * spaces will be treated as a single space. This method should be
+ * called before sending any data.
+ */
+ STDMETHOD(IgnoreExtraSpaces) (THIS_
+ BOOL bIgnoreExtraSpaces) PURE;
+
+ /* This is for internal testing use only and does not affect the
+ * presentation of a live text stream:
+ */
+ STDMETHOD(SetFlags) (THIS_
+ ULONG32 ulFlags) PURE;
+
+
+
+ /* ******************************************************************* */
+ /* The following methods can be called at any time while the encoder is
+ * running.
+ */
+
+ /* This method tells you when the last-sent text will end. This
+ * allows you to determine when it's ok to send more text. For example,
+ * if you're streaming a presentation that's scrolling at a rate of 20
+ * pixels per second in a window that's 200 pixels high and you call
+ * IRMALiveText's AddData() with 100 lines of 20-point text, it will take
+ * 100 seconds for all that text to scroll up and out of the window. The
+ * following method would return the current time plus 100 if you called
+ * it right after calling AddData():
+ */
+ STDMETHOD(GetLastSentTextEndTime) (THIS_
+ ULONG32& ulLastEndTime) PURE;
+
+ /* This method allows you to adjust the time, since the last data was
+ * sent, that the encoder waits before resending "heartbeat" packets that
+ * let the server know the encoder still alive and to let newly-connected
+ * players know what's currently visible in the window (in case they
+ * connected during a "dry" period in the stream, after the last new
+ * text was sent). Time is in milliseconds. NOTE: this defaults to
+ * 3000 milliseconds; any number higher than this will result in longer
+ * connect times for players coming in during a "dry" spell in the
+ * stream, and a sufficiently high value may cause the server to
+ * disconnect since it assumes the encoder has stopped if it does not
+ * periodically send data. This value's minimum is 500 milliseconds.
+ */
+ STDMETHOD(SetTimeBetweenDryStreamResends) (THIS_
+ ULONG32 ulMillisecBetweenResends) PURE;
+};
+
+
+#endif /* _RMALVTXT_H_ */
diff --git a/include/realmedia/rmamon.h b/include/realmedia/rmamon.h
new file mode 100644
index 000000000..4f9c177fe
--- /dev/null
+++ b/include/realmedia/rmamon.h
@@ -0,0 +1,1105 @@
+/****************************************************************************
+ *
+ * $Id: rmamon.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Registry Interfaces.
+ *
+ */
+
+#ifndef _RMAMON_H_
+#define _RMAMON_H_
+
+typedef _INTERFACE IUnknown IUnknown;
+typedef _INTERFACE IRMAPlugin IRMAPlugin;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMAPropWatch IRMAPropWatch;
+typedef _INTERFACE IRMAPropWatchResponse IRMAPropWatchResponse;
+typedef _INTERFACE IRMAActiveRegistry IRMAActiveRegistry;
+typedef _INTERFACE IRMAActivePropUser IRMAActivePropUser;
+typedef _INTERFACE IRMAActivePropUserResponse IRMAActivePropUserResponse;
+typedef _INTERFACE IRMAPNRegistryAltStringHandling IRMAPNRegistryAltStringHandling;
+
+/*
+ * Types of the values stored in the registry.
+ */
+typedef enum _RMAPropType
+{
+ PT_UNKNOWN,
+ PT_COMPOSITE, /* Contains other values (elements) */
+ PT_INTEGER, /* 32-bit signed value */
+ PT_INTREF, /* Integer reference object -- 32-bit signed integer */
+ PT_STRING, /* Signed char* value */
+ PT_BUFFER /* IRMABuffer object */
+} RMAPropType;
+
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAPNRegistry
+ *
+ * Purpose:
+ *
+ * This inteface provides access to the "Registry" in the server and
+ * client. The "Registry" is a hierarchical structure of Name/Value
+ * pairs (properties) which is capable of storing many different types
+ * of data including strings, buffers, and integers. The registry
+ * provides various types of information including statistics,
+ * configuration information, and system status.
+ *
+ * Note: This registry is not related to the Windows system registry.
+ *
+ * IID_IRMAPNRegistry:
+ *
+ * {00000600-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPNRegistry, 0x00000600, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#define CLSID_IRMAPNRegistry IID_IRMAPNRegistry
+
+#undef INTERFACE
+#define INTERFACE IRMAPNRegistry
+
+DECLARE_INTERFACE_(IRMAPNRegistry, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPNRegistry methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::CreatePropWatch
+ * Purpose:
+ * Create a new IRMAPropWatch object which can then be queried for
+ * the right kind of IRMAPropWatch object.
+ *
+ * pPropWatch - OUT - returns a new addref'ed IRMAPropWatch object
+ */
+ STDMETHOD(CreatePropWatch) (THIS_
+ REF(IRMAPropWatch*) pPropWatch) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::AddComp
+ * Purpose:
+ * Add a COMPOSITE property to the registry and return its ID
+ * if successful. It returns ZERO (0) if an error occurred
+ * during the operation.
+ *
+ * pName - IN - name of the Property that is going to be added to
+ * the registry
+ */
+ STDMETHOD_(UINT32, AddComp) (THIS_
+ const char* pName) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::AddInt
+ * Purpose:
+ * Add an INTEGER property with name in "pName" and value in
+ * "iValue" to the registry. The return value is the id to
+ * the newly added Property or ZERO if there was an error.
+ *
+ * pName - IN - name of the Property that is going to be added to
+ * the registry
+ * nValue - IN - integer value of the Property that is going to be
+ * added to the registry
+ */
+ STDMETHOD_(UINT32, AddInt) (THIS_
+ const char* pName,
+ const INT32 nValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetIntByName
+ * Purpose:
+ * Retreive an INTEGER value from the registry given its Property
+ * name "pName". If the Property is found, it will return PNR_OK,
+ * otherwise it returns PNR_FAIL.
+ *
+ * pName - IN - name of the Property whose value is to be retreived
+ * nValue - OUT - parameter into which the value of the Property is
+ * going to be returned
+ */
+ STDMETHOD(GetIntByName) (THIS_
+ const char* pName,
+ REF(INT32) nValue) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetIntById
+ * Purpose:
+ * Retreive an INTEGER value from the registry given its id "ulId".
+ * If the Property is found, it will return PNR_OK, otherwise it
+ * returns PNR_FAIL.
+ *
+ * ulId - IN - unique id of the Property whose value is to be retreived
+ * nValue - OUT - parameter into which the value of the Property is
+ * going to be returned
+ */
+ STDMETHOD(GetIntById) (THIS_
+ const UINT32 ulId,
+ REF(INT32) nValue) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::SetIntByName
+ * Purpose:
+ * Modify a Property's INTEGER value in the registry given the
+ * Property's name "pName". If the value was set, it will return PNR_OK,
+ * otherwise it returns PNR_FAIL.
+ *
+ * pName - IN - name of the Property whose value is to be set
+ * nValue - IN - the new value of the Property which is going to be set
+ */
+ STDMETHOD(SetIntByName) (THIS_
+ const char* pName,
+ const INT32 nValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::SetIntById
+ * Purpose:
+ * Modify a Property's INTEGER value in the registry given the
+ * its id "id". If the value was set, it will return PNR_OK, otherwise
+ * it returns PNR_FAIL.
+ *
+ * ulId - IN - unique id of the Property whose value is to be set
+ * nValue - IN - the new value of the Property which is going to be set
+ */
+ STDMETHOD(SetIntById) (THIS_
+ const UINT32 id,
+ const INT32 nValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::AddStr
+ * Purpose:
+ * Add an STRING property with name in "pName" and value in
+ * "pValue" to the registry.
+ *
+ * pName - IN - name of the Property that is going to be added to
+ * the registry
+ * pValue - IN - buffer value of the Property that is going to be
+ * added to the registry
+ */
+ STDMETHOD_(UINT32, AddStr) (THIS_
+ const char* pName,
+ IRMABuffer* pValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetStrByName
+ * Purpose:
+ * Retreive an STRING value from the registry given its Property
+ * name "pName". If the Property is found, it will return PNR_OK,
+ * otherwise it returns PNR_FAIL.
+ *
+ * pName - IN - name of the Property whose value is to be retreived
+ * pValue - OUT - parameter into which the value of the Property is
+ * going to be returned
+ */
+ STDMETHOD(GetStrByName) (THIS_
+ const char* pName,
+ REF(IRMABuffer*) pValue) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetStrById
+ * Purpose:
+ * Retreive an STRING value from the registry given its id "ulId".
+ * If the Property is found, it will return PNR_OK, otherwise it
+ * returns PNR_FAIL.
+ *
+ * ulId - IN - unique id of the Property whose value is to be retreived
+ * pValue - OUT - parameter into which the value of the Property is
+ * going to be returned
+ */
+ STDMETHOD(GetStrById) (THIS_
+ const UINT32 ulId,
+ REF(IRMABuffer*) pValue) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::SetStrByName
+ * Purpose:
+ * Modify a Property's STRING value in the registry given the
+ * Property's name "pName". If the value was set, it will return
+ * PNR_OK, otherwise it returns PNR_FAIL.
+ *
+ * pName - IN - name of the Property whose value is to be set
+ * pValue - IN - the new value of the Property which is going to be set
+ */
+ STDMETHOD(SetStrByName) (THIS_
+ const char* pName,
+ IRMABuffer* pValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::SetStrById
+ * Purpose:
+ * Modify a Property's STRING value in the registry given the
+ * its id "ulId". If the value was set, it will return PNR_OK,
+ * otherwise it returns PNR_FAIL.
+ *
+ * ulId - IN - unique id of the Property whose value is to be set
+ * pValue - IN - the new value of the Property which is going to be set
+ */
+ STDMETHOD(SetStrById) (THIS_
+ const UINT32 ulId,
+ IRMABuffer* pValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::AddBuf
+ * Purpose:
+ * Add an BUFFER property with name in "pName" and value in
+ * "pValue" to the registry.
+ *
+ * pName - IN - name of the Property that is going to be added to
+ * the registry
+ * pValue - IN - buffer value of the Property that is going to be
+ * added to the registry
+ */
+ STDMETHOD_(UINT32, AddBuf) (THIS_
+ const char* pName,
+ IRMABuffer* pValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetBufByName
+ * Purpose:
+ * Retreive the BUFFER from the registry given its Property name
+ * "pName". If the Property is found, it will return PNR_OK, otherwise
+ * it returns PNR_FAIL.
+ *
+ * pName - IN - name of the Property whose value is to be retreived
+ * pValue - OUT - parameter into which the value of the Property is
+ * going to be returned
+ */
+ STDMETHOD(GetBufByName) (THIS_
+ const char* pName,
+ REF(IRMABuffer*) pValue) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetBufById
+ * Purpose:
+ * Retreive the BUFFER from the registry given its id "ulId". If the
+ * Property is found, it will return PNR_OK, otherwise it returns
+ * PNR_FAIL.
+ *
+ * ulId - IN - unique id of the Property whose value is to be retreived
+ * pValue - OUT - parameter into which the value of the Property is
+ * going to be returned
+ */
+ STDMETHOD(GetBufById) (THIS_
+ const UINT32 ulId,
+ REF(IRMABuffer*) pValue) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::SetBufByName
+ * Purpose:
+ * Modify a Property's BUFFER in the registry given the
+ * Property's name "pName". If the value was set, it will return
+ * PNR_OK, otherwise it returns PNR_FAIL.
+ *
+ * pName - IN - name of the Property whose value is to be set
+ * pValue - IN - the new value of the Property which is going to be set
+ */
+ STDMETHOD(SetBufByName) (THIS_
+ const char* pName,
+ IRMABuffer* pValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::SetBufById
+ * Purpose:
+ * Modify a Property's BUFFER in the registry given its id "ulId".
+ * If the value was set, it will return PNR_OK, otherwise it returns
+ * PNR_FAIL.
+ *
+ * ulId - IN - unique id of the Property whose value is to be set
+ * pValue - IN - the new value of the Property which is going to be set
+ */
+ STDMETHOD(SetBufById) (THIS_
+ const UINT32 ulId,
+ IRMABuffer* pValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::AddIntRef
+ * Purpose:
+ * Add an INTEGER REFERENCE property with name in "pName" and
+ * value in "iValue" to the registry. This property allows the user
+ * to modify its contents directly, without having to go through the
+ * registry.
+ *
+ * pName - IN - name of the Property that is going to be added to
+ * the registry
+ * pValue - IN - the pointer of the integer value is what gets stored
+ * in the registry as the Interger Reference Property's
+ * value
+ */
+ STDMETHOD_(UINT32, AddIntRef) (THIS_
+ const char* pName,
+ INT32* pValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::DeleteByName
+ * Purpose:
+ * Delete a Property from the registry using its name "pName".
+ *
+ * pName - IN - name of the Property that is going to be deleted
+ */
+ STDMETHOD_(UINT32, DeleteByName) (THIS_
+ const char* pName) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::DeleteById
+ * Purpose:
+ * Delete a Property from the registry using its id "ulId".
+ *
+ * ulId - IN - unique id of the Property that is going to be deleted
+ */
+ STDMETHOD_(UINT32, DeleteById) (THIS_
+ const UINT32 ulId) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetTypeByName
+ * Purpose:
+ * Returns the datatype of the Property given its name "pName".
+ *
+ * pName - IN - name of the Property whose type is to be retreived
+ */
+ STDMETHOD_(RMAPropType, GetTypeByName) (THIS_
+ const char* pName) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetTypeById
+ * Purpose:
+ * Returns the datatype of the Property given its its id "ulId".
+ *
+ * ulId - IN - unique id of the Property whose type is to be retreived
+ */
+ STDMETHOD_(RMAPropType, GetTypeById) (THIS_
+ const UINT32 ulId) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::FindParentIdByName
+ * Purpose:
+ * Returns the id value of the parent node of the Property whose
+ * name "pName" has been passed in. If it fails, a ZERO value is
+ * returned.
+ *
+ * pName - IN - name of the Property whose parent's unique id is to be
+ * retreived
+ */
+ STDMETHOD_(UINT32, FindParentIdByName) (THIS_
+ const char* pName) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::FindParentIdById
+ * Purpose:
+ * Returns the id value of the parent node of the Property whose
+ * id "ulId" has been passed in. If it fails, a ZERO value is returned.
+ *
+ * ulId - IN - unique id of the Property whose parent's id is to be
+ * retreived
+ */
+ STDMETHOD_(UINT32, FindParentIdById) (THIS_
+ const UINT32 ulId) const PURE;
+
+ /************************************************************************
+ * Method:
+ * PNRegistry::GetPropName
+ * Purpose:
+ * Returns the Property name in the pName char buffer passed
+ * as a parameter, given the Property's id "ulId".
+ *
+ * ulId - IN - unique id of the Property whose name is to be retreived
+ * pName - OUT - parameter into which the Property name is going to be
+ * returned
+ */
+ STDMETHOD(GetPropName) (THIS_
+ const UINT32 ulId,
+ REF(IRMABuffer*) pName) const PURE;
+
+ /************************************************************************
+ * Method:
+ * PNRegistry::GetId
+ * Purpose:
+ * Returns the Property's id given the Property name.
+ *
+ * pName - IN - name of the Property whose unique id is to be
+ * retreived
+ */
+ STDMETHOD_(UINT32, GetId) (THIS_
+ const char* pName) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetPropListOfRoot
+ * Purpose:
+ * Returns an array of a Properties under the root level of the
+ * registry's hierarchy.
+ *
+ * pValues - OUT - list of property name and unique id at the
+ * highest level (root) in the registry
+ */
+ STDMETHOD(GetPropListOfRoot) (THIS_
+ REF(IRMAValues*) pValues) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetPropListByName
+ * Purpose:
+ * Returns an array of Properties immediately under the one whose
+ * name is passed in "pName".
+ *
+ * pName - IN - name of the Property whose child property list is to be
+ * retreived
+ * pValues - OUT - list of property name and unique id under the
+ * Property whose name is in "pName"
+ */
+ STDMETHOD(GetPropListByName) (THIS_
+ const char* pName,
+ REF(IRMAValues*) pValues) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetPropListById
+ * Purpose:
+ * Returns an array of Properties immediately under the one whose
+ * id is passed in "ulId".
+ *
+ * ulId - IN - unique id of the Property whose child property list is
+ * to be retreived
+ * pValues - OUT - list of property name and unique id under the
+ * Property whose is is in "ulId"
+ */
+ STDMETHOD(GetPropListById) (THIS_
+ const UINT32 ulId,
+ REF(IRMAValues*) pValues) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetNumPropsAtRoot
+ * Purpose:
+ * Returns the number of Properties at the root of the registry.
+ */
+ STDMETHOD_(INT32, GetNumPropsAtRoot) (THIS) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetNumPropsByName
+ * Purpose:
+ * Returns the count of the number of Properties under the one
+ * whose name is specified in "pName".
+ *
+ * pName - IN - name of the Property whose number of children is to be
+ * retreived
+ */
+ STDMETHOD_(INT32, GetNumPropsByName) (THIS_
+ const char* pName) const PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPNRegistry::GetNumPropsById
+ * Purpose:
+ * Returns the count of the number of Properties under the one
+ * whose unique id is specified in "ulId".
+ *
+ * ulId - IN - unique id of the Property whose number of children is
+ * to be retreived
+ */
+ STDMETHOD_(INT32, GetNumPropsById) (THIS_
+ const UINT32 ulId) const PURE;
+};
+
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAPropWatch
+ *
+ * Purpose:
+ *
+ * This interface allows the user to watch properties so that when
+ * changes happen to the properties the plugins receive notification via
+ * the IRMAPropWatchResponse API.
+ *
+ * IID_IRMAPropWatch:
+ *
+ * {00000601-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPropWatch, 0x00000601, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPropWatch
+
+DECLARE_INTERFACE_(IRMAPropWatch, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPropWatch methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPropWatch::Init
+ * Purpose:
+ * Initialize with the response object so that the Watch
+ * notifications can be sent back to the respective plugins.
+ *
+ * pResponse - IN - pointer to the response object which gets used to
+ * initialize the IRMAPropWatch object. the response
+ * object gets AddRef'd in the Init method.
+ */
+ STDMETHOD(Init) (THIS_
+ IRMAPropWatchResponse* pResponse) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPropWatch::SetWatchOnRoot
+ * Purpose:
+ * The SetWatch method puts a watch at the highest level of
+ * the registry hierarchy. It notifies ONLY IF properties at THIS LEVEL
+ * get added/modified/deleted.
+ */
+ STDMETHOD_(UINT32, SetWatchOnRoot) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPropWatch::SetWatchByName
+ * Purpose:
+ * Sets a watch-point on the Property whose name is passed in.
+ * In case the mentioned Property gets modified or deleted a
+ * notification of that will be sent to the object which set the
+ * watch-point.
+ *
+ * pName - IN - name of Property on which a watch point is to be added
+ */
+ STDMETHOD_(UINT32, SetWatchByName) (THIS_
+ const char* pName) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPropWatch::SetWatchById
+ * Purpose:
+ * Sets a watch-point on the Property whose name is passed in.
+ * In case the mentioned Property gets modified or deleted a
+ * notification of that will be sent to the object which set the
+ * watch-point.
+ *
+ * ulId - IN - unique id of Property on which a watch point is to be
+ * added
+ */
+ STDMETHOD_(UINT32, SetWatchById) (THIS_
+ const UINT32 ulId) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPropWatch::ClearWatchOnRoot
+ * Purpose:
+ * It clears the watch on the root of the registry.
+ */
+ STDMETHOD(ClearWatchOnRoot) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPropWatch::ClearWatchByName
+ * Purpose:
+ * Clears a watch-point based on the Property's name.
+ *
+ * pName - IN - name of Property whose watch point is to be cleared
+ */
+ STDMETHOD(ClearWatchByName) (THIS_
+ const char* pName) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPropWatch::ClearWatchById
+ * Purpose:
+ * Clears a watch-point based on the Property's id.
+ *
+ * ulId - IN - unique id of Property whose watch point is to be cleared
+ */
+ STDMETHOD(ClearWatchById) (THIS_
+ const UINT32 ulId) PURE;
+};
+
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAPropWatchResponse
+ *
+ * Purpose:
+ *
+ * Interface for notification of additions/modifications/deletions of
+ * properties in the registry which are being watched.
+ *
+ * IID_IRMAPropWatchResponse:
+ *
+ * {00000602-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPropWatchResponse, 0x00000602, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPropWatchResponse
+
+DECLARE_INTERFACE_(IRMAPropWatchResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPropWatchResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPropWatchResponse::AddedProp
+ * Purpose:
+ * Gets called when a new Property gets added under the Property
+ * on which the Watch was set. It passes the id of the Property just
+ * added, its datatype and the id of its immediate parent COMPOSITE
+ * property.
+ */
+ STDMETHOD(AddedProp) (THIS_
+ const UINT32 ulId,
+ const RMAPropType propType,
+ const UINT32 ulParentID) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPropWatchResponse::ModifiedProp
+ * Purpose:
+ * Gets called when a watched Property gets modified. It passes
+ * the id of the Property just modified, its datatype and the
+ * id of its immediate parent COMPOSITE property.
+ */
+ STDMETHOD(ModifiedProp) (THIS_
+ const UINT32 ulId,
+ const RMAPropType propType,
+ const UINT32 ulParentID) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPropWatchResponse::DeletedProp
+ * Purpose:
+ * Gets called when a watched Property gets deleted. As can be
+ * seen, it returns the id of the Property just deleted and
+ * its immediate parent COMPOSITE property.
+ */
+ STDMETHOD(DeletedProp) (THIS_
+ const UINT32 ulId,
+ const UINT32 ulParentID) PURE;
+};
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAActiveRegistry
+ *
+ * Purpose:
+ *
+ * Interface to get IRMAActiveUser responsible for a particular property
+ * from the registry.
+ *
+ * IID_IRMAActiveRegistry:
+ *
+ * {00000603-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAActiveRegistry, 0x00000603, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAActiveRegistry
+
+DECLARE_INTERFACE_(IRMAActiveRegistry, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAActiveRegistry::SetAsActive
+ *
+ * Method to set prop pName to active and register pUser as
+ * the active prop user.
+ */
+ STDMETHOD(SetAsActive) (THIS_
+ const char* pName,
+ IRMAActivePropUser* pUser) PURE;
+
+ /************************************************************************
+ * IRMAActiveRegistry::SetAsInactive
+ *
+ * Method to remove an IRMAActiveUser from Prop activation.
+ */
+ STDMETHOD(SetAsInactive) (THIS_
+ const char* pName,
+ IRMAActivePropUser* pUser) PURE;
+
+ /************************************************************************
+ * IRMAActiveRegistry::IsActive
+ *
+ * Tells if prop pName has an active user that must be queried to
+ * change the value, or if it can just be set.
+ */
+ STDMETHOD_(BOOL, IsActive) (THIS_
+ const char* pName) PURE;
+
+ /************************************************************************
+ * IRMAActiveRegistry::SetActiveInt
+ *
+ * Async request to set int pName to ul.
+ */
+ STDMETHOD(SetActiveInt) (THIS_
+ const char* pName,
+ UINT32 ul,
+ IRMAActivePropUserResponse* pResponse) PURE;
+
+ /************************************************************************
+ * IRMAActiveRegistry::SetActiveStr
+ *
+ * Async request to set string pName to string in pBuffer.
+ */
+ STDMETHOD(SetActiveStr) (THIS_
+ const char* pName,
+ IRMABuffer* pBuffer,
+ IRMAActivePropUserResponse* pResponse) PURE;
+
+ /************************************************************************
+ * IRMAActiveRegistry::SetActiveBuf
+ *
+ * Async request to set buffer pName to buffer in pBuffer.
+ */
+ STDMETHOD(SetActiveBuf) (THIS_
+ const char* pName,
+ IRMABuffer* pBuffer,
+ IRMAActivePropUserResponse* pResponse) PURE;
+
+ /************************************************************************
+ * IRMAActiveRegistry::DeleteActiveProp
+ *
+ * Async request to delete the active property.
+ */
+ STDMETHOD(DeleteActiveProp) (THIS_
+ const char* pName,
+ IRMAActivePropUserResponse* pResponse) PURE;
+
+
+};
+
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAActivePropUser
+ *
+ * Purpose:
+ *
+ * An IRMAActivePropUser can be set as the active user of a property in
+ * an IRMAActiveRegistry. This causes the IRMAActivePropUser to be consulted
+ * everytime someone wants to change a property. The difference between this
+ * and a prop watch is that this is async, and can call a done method with
+ * failure to cause the prop to not be set, and this get called instead of
+ * calling into the IRMAPNReg.
+ *
+ * IID_IRMAActivePropUser:
+ *
+ * {00000604-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAActivePropUser, 0x00000604, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAActivePropUser
+
+DECLARE_INTERFACE_(IRMAActivePropUser, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAActivePropUser::SetActiveInt
+ *
+ * Async request to set int pName to ul.
+ */
+ STDMETHOD(SetActiveInt) (THIS_
+ const char* pName,
+ UINT32 ul,
+ IRMAActivePropUserResponse* pResponse) PURE;
+
+ /************************************************************************
+ * IRMAActivePropUser::SetActiveStr
+ *
+ * Async request to set string pName to string in pBuffer.
+ */
+ STDMETHOD(SetActiveStr) (THIS_
+ const char* pName,
+ IRMABuffer* pBuffer,
+ IRMAActivePropUserResponse* pResponse) PURE;
+
+ /************************************************************************
+ * IRMAActivePropUser::SetActiveBuf
+ *
+ * Async request to set buffer pName to buffer in pBuffer.
+ */
+ STDMETHOD(SetActiveBuf) (THIS_
+ const char* pName,
+ IRMABuffer* pBuffer,
+ IRMAActivePropUserResponse* pResponse) PURE;
+
+ /************************************************************************
+ * IRMAActivePropUser::DeleteActiveProp
+ *
+ * Async request to delete the active property.
+ */
+ STDMETHOD(DeleteActiveProp) (THIS_
+ const char* pName,
+ IRMAActivePropUserResponse* pResponse) PURE;
+
+};
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAActivePropUserResponse
+ *
+ * Purpose:
+ *
+ * Gets responses from IRMAActivePropUser for queries to set properties
+ * in the IRMAActiveRegistry.
+ *
+ *
+ * IID_IRMAActivePropUserResponse:
+ *
+ * {00000605-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAActivePropUserResponse, 0x00000605, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAActivePropUserResponse
+
+DECLARE_INTERFACE_(IRMAActivePropUserResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Called with status result on completion of set request.
+ */
+ STDMETHOD(SetActiveIntDone) (THIS_
+ PN_RESULT res,
+ const char* pName,
+ UINT32 ul,
+ IRMABuffer* pInfo[],
+ UINT32 ulNumInfo) PURE;
+
+ STDMETHOD(SetActiveStrDone) (THIS_
+ PN_RESULT res,
+ const char* pName,
+ IRMABuffer* pBuffer,
+ IRMABuffer* pInfo[],
+ UINT32 ulNumInfo) PURE;
+
+ STDMETHOD(SetActiveBufDone) (THIS_
+ PN_RESULT res,
+ const char* pName,
+ IRMABuffer* pBuffer,
+ IRMABuffer* pInfo[],
+ UINT32 ulNumInfo) PURE;
+
+ STDMETHOD(DeleteActivePropDone) (THIS_
+ PN_RESULT res,
+ const char* pName,
+ IRMABuffer* pInfo[],
+ UINT32 ulNumInfo) PURE;
+
+};
+
+/*
+ *
+ * Interface:
+ *
+ * IRMACopyRegistry
+ *
+ * Purpose:
+ *
+ * Allows copying from one registry key to another.
+ *
+ *
+ * IID_IRMACopyRegistry
+ *
+ * {00000606-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMACopyRegistry, 0x00000606, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMACopyRegistry
+
+DECLARE_INTERFACE_(IRMACopyRegistry, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMACopyRegistry::Copy
+ *
+ * Here it is! The "Copy" method!
+ */
+ STDMETHOD (CopyByName) (THIS_
+ const char* pFrom,
+ const char* pTo) PURE;
+};
+
+
+/*
+ *
+ * Interface:
+ *
+ * IRMAPNRegistryAltStringHandling
+ *
+ * Purpose:
+ *
+ * Tells the registry about alternate handling of PT_STRING types.
+ *
+ *
+ * IID_IRMAPNRegistryAltStringHandling
+ *
+ * {00000607-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPNRegistryAltStringHandling, 0x00000607, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPNRegistryAltStringHandling
+
+DECLARE_INTERFACE_(IRMAPNRegistryAltStringHandling, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAPNRegistryAltStringHandling::SetStringAccessAsBufferById
+ *
+ * For those times when you added a property as a buffer, but wish it
+ * were a string (and of course, people now rely on the fact that it's
+ * a buffer)... Create the property as a string and then pass this
+ * method it's ID. The property will now be accessible/setable as a,
+ * but it will still be a string!
+ */
+ STDMETHOD (SetStringAccessAsBufferById) (THIS_
+ UINT32 ulId) PURE;
+};
+
+
+#endif /* _RMAMON_H_ */
diff --git a/include/realmedia/rmapckts.h b/include/realmedia/rmapckts.h
new file mode 100644
index 000000000..42cbf57ff
--- /dev/null
+++ b/include/realmedia/rmapckts.h
@@ -0,0 +1,449 @@
+/****************************************************************************
+ *
+ * $Id: rmapckts.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Packet and Header Interface.
+ *
+ */
+
+#ifndef _RMAPCKTS_H_
+#define _RMAPCKTS_H_
+
+// Define IRMAUtilities
+
+/* ASMFlags in IRMAPacket */
+#define RMA_ASM_SWITCH_ON 0x01
+#define RMA_ASM_SWITCH_OFF 0x02
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMABuffer
+ *
+ * Purpose:
+ *
+ * Basic opaque data storage buffer. Used in interfaces where
+ * object ownership is best managed through COM style reference
+ * counting.
+ *
+ * IID_IRMABuffer:
+ *
+ * {00001300-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMABuffer, 0x00001300, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * The IRMACommonClassFactory supports creating an instance
+ * of this object.
+ */
+#define CLSID_IRMABuffer IID_IRMABuffer
+
+#undef INTERFACE
+#define INTERFACE IRMABuffer
+
+DECLARE_INTERFACE_(IRMABuffer, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMABuffer methods
+ */
+ STDMETHOD(Get) (THIS_
+ REF(UCHAR*) pData,
+ REF(ULONG32) ulLength) PURE;
+
+ STDMETHOD(Set) (THIS_
+ const UCHAR* pData,
+ ULONG32 ulLength) PURE;
+
+ STDMETHOD(SetSize) (THIS_
+ ULONG32 ulLength) PURE;
+
+ STDMETHOD_(ULONG32,GetSize) (THIS) PURE;
+
+ STDMETHOD_(UCHAR*,GetBuffer)(THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPacket
+ *
+ * Purpose:
+ *
+ * Basic data packet in the RealMedia system.
+ *
+ * IID_IRMAPacket:
+ *
+ * {00001301-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPacket, 0x00001301, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * The IRMACommonClassFactory supports creating an instance
+ * of this object.
+ */
+#define CLSID_IRMAPacket IID_IRMAPacket
+
+#undef INTERFACE
+#define INTERFACE IRMAPacket
+
+DECLARE_INTERFACE_(IRMAPacket, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPacket methods
+ */
+ STDMETHOD(Get) (THIS_
+ REF(IRMABuffer*) pBuffer,
+ REF(UINT32) ulTime,
+ REF(UINT16) unStreamNumber,
+ REF(UINT8) unASMFlags,
+ REF(UINT16) unASMRuleNumber
+ ) PURE;
+
+ STDMETHOD_(IRMABuffer*,GetBuffer) (THIS) PURE;
+
+ STDMETHOD_(ULONG32,GetTime) (THIS) PURE;
+
+ STDMETHOD_(UINT16,GetStreamNumber) (THIS) PURE;
+
+ STDMETHOD_(UINT8,GetASMFlags) (THIS) PURE;
+
+ STDMETHOD_(UINT16,GetASMRuleNumber) (THIS) PURE;
+
+ STDMETHOD_(BOOL,IsLost) (THIS) PURE;
+
+ STDMETHOD(SetAsLost) (THIS) PURE;
+
+ STDMETHOD(Set) (THIS_
+ IRMABuffer* pBuffer,
+ UINT32 ulTime,
+ UINT16 uStreamNumber,
+ UINT8 unASMFlags,
+ UINT16 unASMRuleNumber
+ ) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPacket
+ *
+ * Purpose:
+ *
+ * RTP data packet in the RealMedia system.
+ *
+ * IID_IRMARTPPacket:
+ *
+ * {0169A731-1ED0-11d4-952B-00902742C923}
+ *
+ */
+DEFINE_GUID(IID_IRMARTPPacket, 0x169a731, 0x1ed0, 0x11d4, 0x95, 0x2b, 0x0,
+ 0x90, 0x27, 0x42, 0xc9, 0x23);
+
+/*
+ * The IRMACommonClassFactory supports creating an instance
+ * of this object.
+ */
+#define CLSID_IRMARTPPacket IID_IRMARTPPacket
+
+#undef INTERFACE
+#define INTERFACE IRMARTPPacket
+
+DECLARE_INTERFACE_(IRMARTPPacket, IRMAPacket)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPacket methods
+ */
+ STDMETHOD(Get) (THIS_
+ REF(IRMABuffer*) pBuffer,
+ REF(UINT32) ulTime,
+ REF(UINT16) unStreamNumber,
+ REF(UINT8) unASMFlags,
+ REF(UINT16) unASMRuleNumber
+ ) PURE;
+
+ STDMETHOD_(IRMABuffer*,GetBuffer) (THIS) PURE;
+
+ STDMETHOD_(ULONG32,GetTime) (THIS) PURE;
+
+ STDMETHOD_(UINT16,GetStreamNumber) (THIS) PURE;
+
+ STDMETHOD_(UINT8,GetASMFlags) (THIS) PURE;
+
+ STDMETHOD_(UINT16,GetASMRuleNumber) (THIS) PURE;
+
+ STDMETHOD_(BOOL,IsLost) (THIS) PURE;
+
+ STDMETHOD(SetAsLost) (THIS) PURE;
+
+ STDMETHOD(Set) (THIS_
+ IRMABuffer* pBuffer,
+ UINT32 ulTime,
+ UINT16 uStreamNumber,
+ UINT8 unASMFlags,
+ UINT16 unASMRuleNumber
+ ) PURE;
+
+ /*
+ * IRMARTPPacket methods
+ */
+ STDMETHOD_(ULONG32,GetRTPTime) (THIS) PURE;
+
+ STDMETHOD(GetRTP) (THIS_
+ REF(IRMABuffer*) pBuffer,
+ REF(UINT32) ulTime,
+ REF(UINT32) ulRTPTime,
+ REF(UINT16) unStreamNumber,
+ REF(UINT8) unASMFlags,
+ REF(UINT16) unASMRuleNumber
+ ) PURE;
+
+ STDMETHOD(SetRTP) (THIS_
+ IRMABuffer* pBuffer,
+ UINT32 ulTime,
+ UINT32 ulRTPTime,
+ UINT16 uStreamNumber,
+ UINT8 unASMFlags,
+ UINT16 unASMRuleNumber
+ ) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAValues
+ *
+ * Purpose:
+ *
+ * This is an interface to a generic name-value pair facility. This
+ * is used in various places (such as stream headers).
+ *
+ * IID_IRMAValues:
+ *
+ * {00001302-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAValues, 0x00001302, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * The IRMACommonClassFactory supports creating an instance
+ * of this object.
+ */
+#define CLSID_IRMAValues IID_IRMAValues
+
+#undef INTERFACE
+#define INTERFACE IRMAValues
+
+DECLARE_INTERFACE_(IRMAValues, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAValues methods
+ */
+
+ /*
+ * Note: That strings returned as references should be copied or
+ * used immediately because their lifetime is only as long as the
+ * IRMAValues's objects lifetime.
+ *
+ * Note: Your iterator will be reset once you give up control to the
+ * RMA core (i.e. you exit whatever function gave you a time slice).
+ */
+
+ STDMETHOD(SetPropertyULONG32) (THIS_
+ const char* pPropertyName,
+ ULONG32 uPropertyValue) PURE;
+
+ STDMETHOD(GetPropertyULONG32) (THIS_
+ const char* pPropertyName,
+ REF(ULONG32) uPropertyName) PURE;
+
+ STDMETHOD(GetFirstPropertyULONG32) (THIS_
+ REF(const char*) pPropertyName,
+ REF(ULONG32) uPropertyValue) PURE;
+
+ STDMETHOD(GetNextPropertyULONG32) (THIS_
+ REF(const char*) pPropertyName,
+ REF(ULONG32) uPropertyValue) PURE;
+
+ STDMETHOD(SetPropertyBuffer) (THIS_
+ const char* pPropertyName,
+ IRMABuffer* pPropertyValue) PURE;
+
+ STDMETHOD(GetPropertyBuffer) (THIS_
+ const char* pPropertyName,
+ REF(IRMABuffer*) pPropertyValue) PURE;
+
+ STDMETHOD(GetFirstPropertyBuffer) (THIS_
+ REF(const char*) pPropertyName,
+ REF(IRMABuffer*) pPropertyValue) PURE;
+
+ STDMETHOD(GetNextPropertyBuffer) (THIS_
+ REF(const char*) pPropertyName,
+ REF(IRMABuffer*) pPropertyValue) PURE;
+
+ STDMETHOD(SetPropertyCString) (THIS_
+ const char* pPropertyName,
+ IRMABuffer* pPropertyValue) PURE;
+
+ STDMETHOD(GetPropertyCString) (THIS_
+ const char* pPropertyName,
+ REF(IRMABuffer*) pPropertyValue) PURE;
+
+ STDMETHOD(GetFirstPropertyCString) (THIS_
+ REF(const char*) pPropertyName,
+ REF(IRMABuffer*) pPropertyValue) PURE;
+
+ STDMETHOD(GetNextPropertyCString) (THIS_
+ REF(const char*) pPropertyName,
+ REF(IRMABuffer*) pPropertyValue) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAValuesRemove
+ *
+ * Purpose:
+ *
+ * This interface is to add Remove methods to a class that supports
+ * IRMAValues. All classes that support this interface will also
+ * support IRMAValues.
+ *
+ *
+ *
+ * IID_IRMAValuesRemove:
+ *
+ * {00001303-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAValuesRemove, 0x00001303, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+/*
+ * The IRMACommonClassFactory does not support creating an instance
+ * of this object.
+ */
+
+#undef INTERFACE
+#define INTERFACE IRMAValuesRemove
+
+DECLARE_INTERFACE_(IRMAValuesRemove, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAValuesRemove methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValuesRemove::Remove
+ * Purpose:
+ * Remove all items matching pKey. (If you know what datatype you saved
+ * the key as, use the specific method.)
+ */
+ STDMETHOD(Remove) (const char* pKey) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValuesRemove::RemoveULONG32
+ * Purpose:
+ * Remove all ULONG32 items matching pKey.
+ */
+ STDMETHOD(RemoveULONG32) (const char* pKey) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValuesRemove::RemoveBuffer
+ * Purpose:
+ * Remove all Buffer items matching pKey.
+ */
+ STDMETHOD(RemoveBuffer) (const char* pKey) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValuesRemove::RemoveCString
+ * Purpose:
+ * Remove all CString items matching pKey.
+ */
+ STDMETHOD(RemoveCString) (const char* pKey) PURE;
+};
+
+#endif /* _RMAPCKTS_H_ */
+
diff --git a/include/realmedia/rmapends.h b/include/realmedia/rmapends.h
new file mode 100644
index 000000000..1cc22856b
--- /dev/null
+++ b/include/realmedia/rmapends.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+ *
+ * $Id: rmapends.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ *
+ * Pending Status interfaces
+ *
+ */
+
+#ifndef _RMAPENDS_H_
+#define _RMAPENDS_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IUnknown IUnknown;
+typedef _INTERFACE IRMAPendingStatus IRMAPendingStatus;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPendingStatus
+ *
+ * Purpose:
+ *
+ * Interface to get the current pending status from an object
+ *
+ * IRMAPendingStatus:
+ *
+ * {00001100-0901-11d1-8B06-00A024406D59}
+ */
+
+DEFINE_GUID(IID_IRMAPendingStatus, 0x00001100, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPendingStatus
+
+#define RMA_STATUS_INITIALIZING 0x01
+#define RMA_STATUS_BUFFERING 0x02
+#define RMA_STATUS_CONTACTING 0x03
+#define RMA_STATUS_READY 0x04
+
+DECLARE_INTERFACE_(IRMAPendingStatus, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPendingStatus methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPendingStatus::GetStatus
+ * Purpose:
+ * Called by the user to get the current pending status from an object
+ */
+ STDMETHOD(GetStatus) (THIS_
+ REF(UINT16) uStatusCode,
+ REF(IRMABuffer*) pStatusDesc,
+ REF(UINT16) ulPercentDone) PURE;
+};
+
+#endif /* _RMAPENDS_H_ */
diff --git a/include/realmedia/rmaphook.h b/include/realmedia/rmaphook.h
new file mode 100644
index 000000000..99722db01
--- /dev/null
+++ b/include/realmedia/rmaphook.h
@@ -0,0 +1,302 @@
+/****************************************************************************
+ *
+ * $Id: rmaphook.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Selective Record interface
+ *
+ */
+
+#ifndef _RMAPHOOK_H_
+#define _RMAPHOOK_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IRMAPacket IRMAPacket;
+typedef _INTERFACE IRMAPacketHook IRMAPacketHook;
+typedef _INTERFACE IRMAPacketHookManager IRMAPacketHookManager;
+typedef _INTERFACE IRMAPacketHookHelper IRMAPacketHookHelper;
+typedef _INTERFACE IRMAPacketHookHelperResponse IRMAPacketHookHelperResponse;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPacketHook
+ *
+ * Purpose:
+ *
+ * Interface implemented by the top level client to support selective
+ * record
+ *
+ * IID_IRMAPacketHook:
+ *
+ * {00002000-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPacketHook, 0x00002000, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+DECLARE_INTERFACE_(IRMAPacketHook, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPacketHook methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHook::OnStart
+ * Purpose:
+ * Called by the core to notify the start of this packet hook session
+ */
+ STDMETHOD(OnStart) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHook::OnEnd
+ * Purpose:
+ * Called by the core to notify the end of this packet hook session
+ */
+ STDMETHOD(OnEnd) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHook::OnFileHeader
+ * Purpose:
+ * Called by the core to send file header information
+ *
+ */
+ STDMETHOD(OnFileHeader) (THIS_
+ IRMAValues* pValues) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHook::OnStreamHeader
+ * Purpose:
+ * Called by the core to send stream header information
+ *
+ */
+ STDMETHOD(OnStreamHeader) (THIS_
+ IRMAValues* pValues) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHook:OnPacket
+ * Purpose:
+ * Called by the core to send packet information.
+ *
+ */
+ STDMETHOD(OnPacket) (THIS_
+ IRMAPacket* pPacket) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPacketHookManager
+ *
+ * Purpose:
+ *
+ * Interface to the selective record
+ *
+ * IID_IRMAPacketHookManager
+ *
+ * {00002001-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAPacketHookManager, 0x00002001, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPacketHookManager
+
+DECLARE_INTERFACE_(IRMAPacketHookManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPacketHookManager methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHookManager::InitHook
+ * Purpose:
+ * called by the top level client to pass the IRMAPacketHook object
+ */
+ STDMETHOD(InitHook) (THIS_
+ IRMAPacketHook* pPacketHook) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHookManager::CloseHook
+ * Purpose:
+ * called by the top level client to close the hook connection
+ */
+ STDMETHOD(CloseHook) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHookManager::StartHook
+ * Purpose:
+ * called by the top level client to start recording
+ */
+ STDMETHOD(StartHook) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHookManager::StopHook
+ * Purpose:
+ * called by the top level client to stop recording
+ */
+ STDMETHOD(StopHook) (THIS) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPacketHookHelper
+ *
+ * Purpose:
+ *
+ * provide methods to prepare the packet for recording and send back the core
+ *
+ * IID_IRMAPacketHookHelper:
+ *
+ * {00002002-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPacketHookHelper, 0x00002002, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPacketHookHelper
+
+DECLARE_INTERFACE_(IRMAPacketHookHelper, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPacketHookHelper methods
+ */
+
+ /******************************************************************
+ * Method:
+ * IRMAPacketHookHelper::StartHook
+ *
+ * Purpose:
+ * tell the renderer to start sending the record packets
+ *
+ */
+ STDMETHOD(StartHook) (THIS_
+ ULONG32 ulStreamNumber,
+ ULONG32 ulTimeOffset,
+ IRMAPacketHookHelperResponse* pPacketHookHelperResponse) PURE;
+
+
+ /******************************************************************
+ * Method:
+ * IRMAPacketHookHelper::StopHook
+ *
+ * Purpose:
+ * tell the renderer to stop sending the record packets
+ */
+ STDMETHOD(StopHook) (THIS) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPacketHookHelperResponse
+ *
+ * Purpose:
+ *
+ * Response interface to the IRMAPacketHookHelper at renderer
+ *
+ * IID_IRMAPacketHookHelperResponse
+ *
+ * {00002003-0901-11d1-8B06-00A024406D59}
+ */
+DEFINE_GUID(IID_IRMAPacketHookHelperResponse, 0x00002003, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPacketHookHelperResponse
+
+DECLARE_INTERFACE_(IRMAPacketHookHelperResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPacketHookHelperResponse methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHookHelperResponse::OnPacket
+ * Purpose:
+ * called by the renderer to pass the packet for recording
+ */
+ STDMETHOD(OnPacket) (THIS_
+ IRMAPacket* pPacket) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPacketHookManager::OnEndOfPackets
+ * Purpose:
+ * called by the renderer to notify the end of this stream
+ */
+ STDMETHOD(OnEndOfPackets) (THIS) PURE;
+};
+
+#endif /* _RMAPHOOK_H_ */
diff --git a/include/realmedia/rmaplgns.h b/include/realmedia/rmaplgns.h
new file mode 100644
index 000000000..ec6e794c4
--- /dev/null
+++ b/include/realmedia/rmaplgns.h
@@ -0,0 +1,152 @@
+/****************************************************************************
+ *
+ * $Id: rmaplgns.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Plug-in Interfaces.
+ *
+ */
+
+#ifndef _RMAPLGNS_H_
+#define _RMAPLGNS_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IUnknown IUnknown;
+typedef _INTERFACE IRMAObjectConfiguration IRMAObjectConfiguration;
+typedef _INTERFACE IRMAPluginProperties IRMAPluginProperties;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAValues IRMAValues;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAObjectConfiguration
+ *
+ * Purpose:
+ *
+ * Interface for setting context and generic means of plugin
+ * Configuration.
+ *
+ * IRMAObjectConfiguration:
+ *
+ * {0x00002900-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAObjectConfiguration, 0x00002900, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAObjectConfiguration
+
+DECLARE_INTERFACE_(IRMAObjectConfiguration, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAObjectConfiguration::SetContext
+ * Purpose:
+ * This function is called to set the context for the plugin.
+ * Either IRMAPlugin::InitPlugin or this function must be called
+ * before calling any other function on the plugin.
+ * this is intended to be used as a shortcut for the plugin user.
+ * If one needs to use SetConfiguration they only need to query
+ * IRMAObjectConfiguration saving them from also querying for
+ * IRMAPlugin.
+ *
+ */
+ STDMETHOD(SetContext)
+ (
+ THIS_
+ IUnknown* pIUnknownContext
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAObjectConfiguration::SetConfiguration
+ * Purpose:
+ * This allows the user of a plugin to supply configuration
+ * information. This is often a set of CString properties
+ * extracted from a list in the config file. This allows
+ * each plugin within a class (auth plugin, database plugin, etc..)
+ * to require a different set of parameters.
+ *
+ */
+ STDMETHOD(SetConfiguration)
+ (
+ THIS_
+ IRMAValues* pIRMAValuesConfiguration
+ ) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPluginProperties
+ *
+ * Purpose:
+ *
+ * This allows plugins to return whatever properties they want.
+ *
+ * IRMAPluginProperties:
+ *
+ * {0x00002901-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPluginProperties, 0x00002901, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPluginProperties
+
+DECLARE_INTERFACE_(IRMAPluginProperties, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPluginProperties::GetProperties
+ * Purpose:
+ * A plugin will implement this in order to return plugin properties
+ * that will allow it to be identified uniquely. (PluginID,
+ * AuthenticationProtocol, etc..)
+ *
+ */
+ STDMETHOD(GetProperties)
+ (
+ THIS_
+ REF(IRMAValues*) pIRMAValuesProperties
+ ) PURE;
+
+};
+
+#endif /* !_RMAPLGNS_H_ */
diff --git a/include/realmedia/rmaplugn.h b/include/realmedia/rmaplugn.h
new file mode 100644
index 000000000..cac1c90c2
--- /dev/null
+++ b/include/realmedia/rmaplugn.h
@@ -0,0 +1,696 @@
+/****************************************************************************
+ *
+ * $Id: rmaplugn.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ *
+ * Plugin init / inspector interfaces
+ *
+ */
+
+#ifndef _RMAPLUGN_H_
+#define _RMAPLUGN_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IUnknown IUnknown;
+typedef _INTERFACE IRMAPlugin IRMAPlugin;
+typedef _INTERFACE IRMAPluginEnumerator IRMAPluginEnumerator;
+typedef _INTERFACE IRMAPluginChallenger IRMAPluginChallenger;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAValues IRMAValues;
+
+/****************************************************************************
+ *
+ * Function:
+ *
+ * RMACreateInstance()
+ *
+ * Purpose:
+ *
+ * Function implemented by all plugin DLL's to create an instance of
+ * any of the objects supported by the DLL. This method is similar to
+ * Window's CoCreateInstance() in its purpose, except that it only
+ * creates objects from this plugin DLL.
+ *
+ * NOTE: Aggregation is never used. Therefore an outer unknown is
+ * not passed to this function, and you do not need to code for this
+ * situation.
+ *
+ */
+#ifdef _MACINTOSH
+#pragma export on
+#endif
+
+STDAPI RMACreateInstance
+ (
+ IUnknown** /*OUT*/ ppIUnknown
+ );
+
+#ifdef _MACINTOSH
+#pragma export off
+#endif
+
+
+/****************************************************************************
+ *
+ * Function:
+ *
+ * RMAShutdown()
+ *
+ * Purpose:
+ *
+ * Function implemented by all plugin DLL's to free any *global*
+ * resources. This method is called just before the DLL is unloaded.
+ *
+ */
+#ifdef _MACINTOSH
+#pragma export on
+#endif
+
+STDAPI RMAShutdown(void);
+
+#ifdef _MACINTOSH
+#pragma export off
+#endif
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPlugin
+ *
+ * Purpose:
+ *
+ * Interface exposed by a plugin DLL to allow inspection of objects
+ * supported by the plugin DLL.
+ *
+ * IID_IRMAPlugin:
+ *
+ * {00000C00-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPlugin, 0x00000C00, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPlugin
+
+DECLARE_INTERFACE_(IRMAPlugin, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPlugin methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin::GetPluginInfo
+ * Purpose:
+ * Returns the basic information about this plugin. Including:
+ *
+ * bMultipleLoad Whether or not this plugin can be instantiated
+ * multiple times. All File Formats must set
+ * this value to TRUE. The only other type of
+ * plugin that can specify bMultipleLoad=TRUE is
+ * a filesystem plugin. Any plugin that sets
+ * this flag to TRUE must not use global variables
+ * of any type.
+ *
+ * Setting this flag to TRUE implies that you
+ * accept that your plugin may be instantiated
+ * multiple times (possibly in different
+ * address spaces). Plugins are instantiated
+ * multiple times only in the server (for
+ * performance reasons).
+ *
+ * An example of a plugin, that must set this
+ * flag to FALSE is a filesystem plugin that
+ * uses a single TCP connection to communicate
+ * with a database.
+ *
+ * pDescription which is used in about UIs (can be NULL)
+ * pCopyright which is used in about UIs (can be NULL)
+ * pMoreInfoURL which is used in about UIs (can be NULL)
+ * ulVersionNumber The version of this plugin.
+ */
+ STDMETHOD(GetPluginInfo) (THIS_
+ REF(BOOL) /*OUT*/ bMultipleLoad,
+ REF(const char*) /*OUT*/ pDescription,
+ REF(const char*) /*OUT*/ pCopyright,
+ REF(const char*) /*OUT*/ pMoreInfoURL,
+ REF(ULONG32) /*OUT*/ ulVersionNumber) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin::InitPlugin
+ * Purpose:
+ * Initializes the plugin for use. This interface must always be
+ * called before any other method is called. This is primarily needed
+ * so that the plugin can have access to the context for creation of
+ * IRMABuffers and IMalloc.
+ */
+ STDMETHOD(InitPlugin) (THIS_
+ IUnknown* /*IN*/ pContext) PURE;
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPluginEnumerator
+ *
+ * Purpose:
+ *
+ * provide methods to enumerate through all the plugins installed
+ *
+ * IID_IRMAPluginEnumerator:
+ *
+ * {00000C01-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPluginEnumerator, 0x00000C01, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPluginEnumerator
+
+DECLARE_INTERFACE_(IRMAPluginEnumerator, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPluginEnumerator methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPluginEnumerator::GetNumOfPlugins
+ *
+ * Purpose:
+ * return the number of plugins available
+ *
+ */
+ STDMETHOD_(ULONG32,GetNumOfPlugins) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPluginEnumerator::GetPlugin
+ * Purpose:
+ * Return an instance (IUnknown) of the plugin
+ *
+ */
+ STDMETHOD(GetPlugin) (THIS_
+ ULONG32 /*IN*/ ulIndex,
+ REF(IUnknown*) /*OUT*/ pPlugin) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPluginGroupEnumerator
+ *
+ * Purpose:
+ *
+ * Provide a way to enumerate through all of the plugins which
+ * implement a specific interface.
+ *
+ * IID_IRMAPluginGroupEnumerator:
+ *
+ * {00000C02-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPluginGroupEnumerator, 0x00000C02, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPluginGroupEnumerator
+
+#define CLSID_IRMAPluginGroupEnumerator IID_IRMAPluginGroupEnumerator
+
+DECLARE_INTERFACE_(IRMAPluginGroupEnumerator, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+
+ /*
+ * IRMAPluginGroupEnumerator methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /******************************************************************
+ * Method:
+ * IRMAPluginGroupEnumerator::Init
+ *
+ * Purpose:
+ * tell the group enumerator which interface to group the plugins
+ * into, this method must be called before the other methods can
+ * be called.
+ *
+ */
+ STDMETHOD(Init) (THIS_
+ REFIID iid) PURE;
+
+
+ /******************************************************************
+ * Method:
+ * IRMAPluginGroupEnumerator::GetNumOfPlugins
+ *
+ * Purpose:
+ * return the number of plugins available that support a
+particular
+ * interface.
+ *
+ */
+ STDMETHOD_(ULONG32,GetNumOfPlugins) (THIS) PURE;
+
+
+ /******************************************************************
+ * Method:
+ * IRMAPluginGroupEnumerator::GetPlugin
+ * Purpose:
+ * Return an instance (IUnknown) of the plugin
+ *
+ */
+ STDMETHOD(GetPlugin) (THIS_
+ UINT32 /*IN*/ ulIndex,
+ REF(IUnknown*) /*OUT*/ pPlugin) PURE;
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPluginReloader
+ *
+ * Purpose:
+ *
+ * Tells the client core to reload all plugins.
+ *
+ * IID_IRMAPluginReloader:
+ *
+ * {00000C03-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPluginReloader, 0x00000C03, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPluginReloader
+
+DECLARE_INTERFACE_(IRMAPluginReloader, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPluginReloader methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPluginReloader::ReloadPlugins
+ * Purpose:
+ * Causes the client core to reload all plugins.
+ *
+ */
+ STDMETHOD(ReloadPlugins) (THIS) PURE;
+};
+
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPluginFactory
+ *
+ * Purpose:
+ *
+ * This interface is implemented by a plugin in order to have more then
+ * one "RMA plugin" in a single DLL. I.e., a plugin author could
+ * use this interface to have 3 different file format plugins in
+ * a single DLL.
+ *
+ * IID_IRMAPluginFactory:
+ *
+ * {00000C04-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPluginFactory, 0x00000C04, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPluginFactory
+
+DECLARE_INTERFACE_(IRMAPluginFactory, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPluginFactory methods
+ */
+
+ /*****************************************************************
+ * Method:
+ * IRMAPluginFactory::GetNumPlugins
+ * Purpose:
+ * Report the number of Plugins within the DLL.
+ *
+ * Parameters:
+ */
+ STDMETHOD_(UINT16, GetNumPlugins) (THIS) PURE;
+
+ /*****************************************************************
+ * Method:
+ * IRMAPluginFactory::GetPlugin
+ * Purpose:
+ * Returns an IUnknown interface to the requested plugin.
+ *
+ * Parameters:
+ */
+
+ STDMETHOD(GetPlugin) (THIS_
+ UINT16 uIndex,
+ IUnknown** pPlugin) PURE;
+};
+
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAGenericPlugin
+ *
+ * Purpose:
+ *
+ * Interface exposed by a plugin DLL to inform the client / server core
+ * that your plugin wishes to have InitPlugin called immediately.
+ *
+ * IID_IRMAGenericPlugin:
+ *
+ * {00000C09-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAGenericPlugin, 0x00000C09, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAGenericPlugin
+
+DECLARE_INTERFACE_(IRMAGenericPlugin, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAGenericPlugin methods
+ */
+
+ STDMETHOD(IsGeneric) (THIS_
+ REF(BOOL) /*OUT*/ bIsGeneric) PURE;
+};
+
+
+DEFINE_GUID(IID_IRMAPluginHandler, 0x00000200, 0xb4c8, 0x11d0, 0x99, 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
+
+DEFINE_GUID(IID_IRMAPlugin2Handler, 0x00000201, 0xb4c8, 0x11d0, 0x99, 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
+
+#undef INTERFACE
+#define INTERFACE IRMAPlugin2Handler
+
+DECLARE_INTERFACE_(IRMAPlugin2Handler, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPlugin2Handler Methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::Init
+ *
+ * Purpose:
+ * Specifies the context and sets the pluginhandler in motion.
+ *
+ */
+ STDMETHOD(Init) (THIS_ IUnknown* pContext) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::GetNumPlugins2
+ *
+ * Purpose:
+ * Gets the info of a particular plugin.
+ *
+ */
+ STDMETHOD_(ULONG32,GetNumOfPlugins2) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::GetPluginInfo
+ *
+ * Purpose:
+ * Gets the info of a particular plugin.
+ *
+ */
+ STDMETHOD(GetPluginInfo) (THIS_
+ UINT32 unIndex,
+ REF(IRMAValues*) /*OUT*/ Values) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::FlushCache()
+ *
+ * Purpose:
+ * Flushes the LRU cache -- Unloads all DLLs from memory
+ * which currenltly have a refcount of 0.
+ */
+
+ STDMETHOD(FlushCache) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::SetCacheSize
+ *
+ * Purpose:
+ * This function sets the size of the Cache. The cache is
+ * initally set to 1000KB. To disable the cache simply set
+ * the size to 0.If the cache is disabled a DLL will be
+ * unloaded whenever it's refcount becomes zero. Which MAY
+ * cause performance problems.
+ */
+
+ STDMETHOD(SetCacheSize) (THIS_ ULONG32 nSizeKB) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::GetInstance
+ *
+ * Purpose:
+ *
+ * This function will return a plugin instance given a plugin index.
+ *
+ */
+
+ STDMETHOD(GetInstance) (THIS_ UINT32 index, REF(IUnknown*) pUnknown) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::FindIndexUsingValues
+ *
+ * Purpose:
+ * Finds a plugin which matches the set of values given. An index
+ * is returned which can be used to either get the values (using
+ * GetPluginInfo) or an instance can be created using GetPluing().
+ *
+ */
+
+ STDMETHOD(FindIndexUsingValues) (THIS_ IRMAValues*,
+ REF(UINT32) unIndex) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::FindPluginUsingValues
+ *
+ * Purpose:
+ * Finds a plugin which matches the set of values given. A Plugin
+ * instance is returned.
+ *
+ */
+
+ STDMETHOD(FindPluginUsingValues) (THIS_ IRMAValues*,
+ REF(IUnknown*) pUnk) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::FindIndexUsingStrings
+ *
+ * Purpose:
+ * Finds a plugin which matches the set of values given. An index
+ * is returned which can be used to either get the values (using
+ * GetPluginInfo) or an instance can be created using GetPluing().
+ * NOTE: that a max of two values may be given.
+ */
+
+ STDMETHOD(FindIndexUsingStrings) (THIS_ char* PropName1,
+ char* PropVal1,
+ char* PropName2,
+ char* PropVal2,
+ char* PropName3,
+ char* PropVal3,
+ REF(UINT32) unIndex) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::FindPluginUsingStrings
+ *
+ * Purpose:
+ * Finds a plugin which matches the set of values given. A Plugin
+ * instance is returned.
+ * NOTE: that a max of two values may be given.
+ */
+
+ STDMETHOD(FindPluginUsingStrings) (THIS_ char* PropName1,
+ char* PropVal1,
+ char* PropName2,
+ char* PropVal2,
+ char* PropName3,
+ char* PropVal3,
+ REF(IUnknown*) pUnk) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::FindImplementationFromClassID
+ *
+ * Purpose:
+ * Finds a CommonClassFactory plugin which supports the
+ * ClassID given. An instance of the Class is returned.
+ */
+
+ STDMETHOD(FindImplementationFromClassID)
+ (
+ THIS_
+ REFGUID GUIDClassID,
+ REF(IUnknown*) pIUnknownInstance
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::Close
+ *
+ * Purpose:
+ * A function which performs all of the functions of delete.
+ *
+ *
+ */
+
+ STDMETHOD(Close) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlugin2Handler::SetRequiredPlugins
+ *
+ * Purpose:
+ * This function sets the required plugin list
+ *
+ *
+ */
+
+ STDMETHOD(SetRequiredPlugins) (THIS_ const char** ppszRequiredPlugins) PURE;
+
+
+};
+
+
+
+
+
+
+
+
+
+#endif /* _RMAPLUGN_H_ */
diff --git a/include/realmedia/rmappv.h b/include/realmedia/rmappv.h
new file mode 100644
index 000000000..28c5744c4
--- /dev/null
+++ b/include/realmedia/rmappv.h
@@ -0,0 +1,394 @@
+/****************************************************************************
+ *
+ * $Id: rmappv.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
+ *
+ * http://www.real.com/devzone
+ *
+ * This program contains proprietary information of RealNetworks, Inc.,
+ * and is licensed subject to restrictions on use and distribution.
+ *
+ * RealMedia Architecture Interfaces for pay-per-view database plugins
+ *
+ */
+
+#ifndef _RMAPPV_H_
+#define _RMAPPV_H_
+
+#ifdef _MACINTOSH // Unsure whether this should be included on other platforms?
+#include <time.h> // Get definition of time_t.
+#endif
+
+/*
+ * Structures and definitions for PPVPermission
+ */
+
+#define PPV_MAX_URL_LEN 2048
+
+typedef enum _PPVURLType {
+ PPV_URL_TYPE_FILE = 0,
+ PPV_URL_TYPE_DIRECTORY
+} PPVURLType;
+
+typedef enum _PPVPermissionType {
+ PPV_PERMISSION_GENERAL = 0,
+ PPV_PERMISSION_EXPIRES,
+ PPV_PERMISSION_DEBIT,
+ PPV_PERMISSION_CREDIT,
+ PPV_PERMISSION_NONE
+} PPVPermissionType;
+
+typedef struct _PPVPermission
+{
+ char pURL[PPV_MAX_URL_LEN];
+ PPVURLType nURLType;
+ PPVPermissionType nPermissionType;
+ time_t tExpires;
+ UINT32 ulDebitTime;
+} PPVPermission;
+
+
+/*
+ * Structures and definitions for PPVAccessLog
+ */
+
+typedef enum _PPVAccessPermissionOn {
+ PPV_PERMISSION_ON_FILE = 0,
+ PPV_PERMISSION_ON_DIRECTORY,
+ PPV_PERMISSION_ON_NONE
+} PPVAccessPermissionOn;
+
+typedef enum _PPVAccessDisconnectType {
+ PPV_DISCONNECT_CLIENT = 0,
+ PPV_DISCONNECT_TIME_EXPIRED
+} PPVAccessDisconnectType;
+
+typedef struct _PPVAccessLog
+{
+ BOOL bAccessGranted;
+ char* pUserid;
+ char* pGUID;
+ char* pIPAddress;
+ char* pURL;
+ PPVPermissionType nPermissionType;
+ PPVAccessPermissionOn nPermOn;
+ time_t tStartTime;
+ time_t tStopTime;
+ UINT32 lTotalTime;
+ PPVAccessDisconnectType nWhyDisconnect;
+} PPVAccessLog;
+
+
+/*
+ * Structures and definitions for PPVRegLog
+ */
+
+typedef enum _PPVRegStatus
+{
+ PPV_GUID_REG_SUCCESS = 0,
+ PPV_GUID_REG_FAILED_LOCKED,
+ PPV_GUID_REG_FAILED_COLLISION,
+ PPV_GUID_REG_FAILED_OLD_PLAYER,
+ PPV_GUID_REG_FAILED_NO_USER,
+ PPV_GUID_REG_FAILED
+} PPVRegStatus;
+
+typedef struct _PPVRegLog
+{
+ PPVRegStatus nStatus;
+ char* pUserid;
+ char* pGUID;
+ char* pIPAddress;
+ time_t tRequestTime;
+ char* pURLRedirect;
+} PPVRegLog;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPPVDatabase
+ *
+ * Purpose:
+ * This interface provides access to a backend database used to store
+ * information related to the server's pay-per-view feature.
+ *
+ * IID_IRMAPPVDatabase:
+ *
+ * {00001d00-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPPVDatabase, 0x00001d00, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPPVDatabase
+
+DECLARE_INTERFACE_(IRMAPPVDatabase, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPPVDatabase methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::InitPPVDB
+ * Purpose:
+ * Open & Initialize the PPV Database.
+ * This function will called once per instance before any other
+ * methods are called.
+ *
+ * pDBName Name of the database (if supported)
+ * pUserID User ID to access database (if supported)
+ * pPassword Password to access database (if supported)
+ */
+ STDMETHOD(InitPPVDB) (THIS_
+ const char* pDBName,
+ const char* pUserID,
+ const char* pPassword) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::GetPPVDBInfo
+ * Purpose:
+ * Get this databases short name.
+ * This unique identifier is used to identify this database plugin.
+ * It should be unique enough that no other plugin will ever have
+ * the same plugin name.
+ */
+ STDMETHOD(GetPPVDBInfo) (THIS_
+ REF(const char*) /*OUT*/ pShortName) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::InsertUser
+ * Purpose:
+ * Inserts a user into the database (the user should not already
+ * exist).
+ *
+ * pUserid Userid key of the record to insert
+ * pPasswordCipher Optional Password to associate with this user;
+ * The password being passed in is already
+ * encrypted.
+ */
+ STDMETHOD(InsertUser) (THIS_
+ const char* pUserid,
+ const char* pPasswordCipher) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::RemoveUser
+ * Purpose:
+ * Removes a user from the database.
+ *
+ * pUserid Userid key of the record
+ */
+ STDMETHOD(RemoveUser) (THIS_
+ const char* pUserid) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::RegisterGUID
+ * Purpose:
+ * Registers a GUID to be associated with the pUserid
+ *
+ * pUserid Userid key of the record
+ * pGUID GUID to associate with user record
+ * bForce Forces registration of guid, even if
+ * the uuid_writeable flag is set to read only
+ */
+ STDMETHOD(RegisterGUID) (THIS_
+ const char* pUserid,
+ const char* pGUID,
+ BOOL bForce) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::SetPassword
+ * Purpose:
+ * Sets the password for the user associated with pUserid
+ *
+ * pUserid Userid key of the record
+ * pCipherPassword User's Password
+ */
+ STDMETHOD(SetPassword) (THIS_
+ const char* pUserid,
+ const char* pCipherPassword) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::ValidateUser
+ * Purpose:
+ * Sets the password for the user associated with pUserid
+ *
+ * pUserid Userid key of the record
+ * pPPVPermission Permission structure with URL to validate on
+ */
+ STDMETHOD(ValidateUser) (THIS_
+ const char* pUserid,
+ PPVPermission* pPPVPermission) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::GrantPermission
+ * Purpose:
+ * Adds a permission record.
+ *
+ * pUserid Userid key of the record
+ * pPPVPermission Permission structure with URL
+ */
+ STDMETHOD(GrantPermission) (THIS_
+ const char* pUserid,
+ const PPVPermission* pPPVPermission) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::RevokePermission
+ * Purpose:
+ * Removes a permission record.
+ *
+ * pUserid Userid key of the record
+ * pPPVPermission Permission structure with URL
+ */
+ STDMETHOD(RevokePermission) (THIS_
+ const char* pUserid,
+ const PPVPermission* pPPVPermission) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::RevokeAllPermissions
+ * Purpose:
+ * Removes all permission records for a user.
+ *
+ * pUserid Userid key of the record
+ */
+ STDMETHOD(RevokeAllPermissions) (THIS_
+ const char* pUserid) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::GetRedirect
+ * Purpose:
+ * Gets the redirection Url corresponding to the requested Url
+ * from the database.
+ *
+ * pURL Url key of redirect record (In)
+ * pURLRedirect Url to redirect to (Out)
+ * ulURLRedirectLen Maximum length of pURLRedirect (In)
+ */
+ STDMETHOD(GetRedirect) (THIS_
+ const char* pURL,
+ char* pURLRedirect,
+ UINT32 ulURLRedirectLen) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::PutRedirect
+ * Purpose:
+ * Adds a redirection Url to the database to correspond with
+ * the Url key.
+ *
+ *
+ * pURL Url key of redirect record (In)
+ * pURLRedirect Url to redirect to (In)
+ */
+ STDMETHOD(PutRedirect) (THIS_
+ const char* pURL,
+ const char* pURLRedirect) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::GrantTime
+ * Purpose:
+ * Grants a user time to view (specified by pPPVPermission).
+ *
+ * pUserid Userid key of the record
+ * pPPVPermission Permission structure with URL
+ * ulGrant Amount of time to grant
+ */
+ STDMETHOD(GrantTime) (THIS_
+ const char* pUserid,
+ const PPVPermission* pPPVPermission,
+ UINT32 ulGrant) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::DeductTime
+ * Purpose:
+ * Deducts a user time to view (specified by pPPVPermission).
+ *
+ * pUserid Userid key of the record
+ * pPPVPermission Permission structure with URL
+ * ulDeduct Amount of time to deduct
+ */
+ STDMETHOD(DeductTime) (THIS_
+ const char* pUserid,
+ const PPVPermission* pPPVPermission,
+ UINT32 ulDeduct) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::GetPasswordFromUserid
+ * Purpose:
+ * Get's a users password
+ *
+ * pUserid Userid key of the record (In)
+ * pCipherPassword Password to get (Out)
+ * ulCipherPasswordLen Maximum length of pCipherPassword
+ */
+ STDMETHOD(GetPasswordFromUserid) (THIS_
+ const char* pUserid,
+ char* pCipherPassword,
+ UINT32 ulCipherPasswordLen) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::GetUseridFromGUID
+ * Purpose:
+ * Get's a users id
+ *
+ * pGUID GUID of existing user (In)
+ * pUserid Userid key of the record (Out)
+ * ulUseridLen Maximum length of pUserid (In)
+ */
+ STDMETHOD(GetUseridFromGUID) (THIS_
+ const char* pGUID,
+ char* pUserid,
+ UINT32 ulUseridLen) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::LogReg
+ * Purpose:
+ * This function inserts a new record into the data with the logging
+ * information contained in pPPVRegLog
+ */
+ STDMETHOD(LogReg) (THIS_
+ PPVRegLog* pPPVRegLog) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPPVDatabase::LogAccess
+ * Purpose:
+ * This function inserts a new record into the data with the logging
+ * information contained in pPPVAccessLog
+ */
+ STDMETHOD(LogAccess) (THIS_
+ PPVAccessLog* pPPVAccessLog) PURE;
+
+};
+
+#endif /*_RMAPPV_H_*/
diff --git a/include/realmedia/rmaprefs.h b/include/realmedia/rmaprefs.h
new file mode 100644
index 000000000..024e67049
--- /dev/null
+++ b/include/realmedia/rmaprefs.h
@@ -0,0 +1,284 @@
+/****************************************************************************
+ *
+ * $Id: rmaprefs.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ *
+ * Persistent Preferences Interfaces
+ *
+ * Here are the preference entries set by the client core and renderers:
+ * KEY DEFAULT VALUES
+ * ================= ====================
+ * AttemptMulticast 1
+ * AttemptTCP 1
+ * AttemptUDP 1
+ * AudioQuality 0
+ * AutoTransport 1
+ * Bandwidth 28800
+ * BitsPerSample 16
+ * BroadcastPluginInfo {dllpath;description;copyright;moreinfo;loadmultiple;type}{ ... }
+ * ClientLicenseKey 7FF7FF00
+ * EndScan 10000
+ * FactoryPluginInfo
+ * FileFormatPluginInfo {dllpath;description;copyright;moreinfo;loadmultiple;mimetype1|mimetype2;extension1|extension2}{ ... }
+ * FileSystemPluginInfo {dllpath;description;copyright;moreinfo;loadmultiple;protocol;shortname}{ ... }
+ * GeneralPluginInfo {dllpath;description;copyright;moreinfo;loadmultiple}{ ... }
+ * PNAProxyHost
+ * PNAProxyPort 1090
+ * RTSPProxyHost
+ * RTSPProxyPort 554
+ * HTTPProxyHost
+ * HTTPProxyPort 1092
+ * HurledURL 0
+ * InfoandVolume 1
+ * LastURL
+ * MaxClipCount 4
+ * MetaFormatPluginInfo {dllpath;description;copyright;moreinfo;loadmultiple;mimetype1|mimetype2;extension1|extension2}{ ... }
+ * MiscPluginInfo {dllpath;description;copyright;moreinfo;loadmultiple}{ ... }
+ * MulticastTimeout 2000
+ * NotProxy
+ * OnTop 0
+ * PerfectPlayMode 0
+ * PerfectPlayTime 60
+ * PerfPlayEntireClip 1
+ * PluginDirectory
+ * Presets#
+ * ProxySupport 0
+ * RendererPluginInfo {dllpath;description;copyright;moreinfo;loadmultiple;mimetype1|mimetype2}{ ... }
+ * SamplingRate 8000
+ * SeekPage 40
+ * SendStatistics 1
+ * ServerTimeOut 90
+ * ShowPresets 0
+ * StatusBar 1
+ * StreamDescriptionPluginInfo {dllpath;description;copyright;moreinfo;loadmultiple;mimetype}{ ... }
+ * SyncMultimedia 1
+ * UDPPort 7070
+ * UDPTimeout 10000
+ * UpgradeAvailable 0
+ * UseUDPPort 0
+ * Volume 50
+ * x:Pref_windowPositionX
+ * y:Pref_WindowPositionY
+ */
+
+#ifndef _RMAPREFS_H_
+#define _RMAPREFS_H_
+
+#define RMAPNREGISTRY_PREFPROPNAME "ApplicationData"
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IRMABuffer IRMABuffer;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPreferences
+ *
+ * Purpose:
+ *
+ * This interface allows you to store persistant preferences in the
+ * server or player's config / registry.
+ *
+ * IID_IRMAPreferences:
+ *
+ * {00000500-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPreferences, 0x00000500, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPreferences
+
+DECLARE_INTERFACE_(IRMAPreferences, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPreferences methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPreferences::ReadPref
+ * Purpose:
+ * Read a preference from the registry or configuration.
+ */
+ STDMETHOD(ReadPref) (THIS_
+ const char* pPrekKey, REF(IRMABuffer*) pBuffer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPreferences::WritePref
+ * Purpose:
+ * TBD
+ */
+ STDMETHOD(WritePref) (THIS_
+ const char* pPrekKey, IRMABuffer* pBuffer) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPreferenceEnumerator
+ *
+ * Purpose:
+ *
+ * Allows preference Enumeration
+ *
+ *
+ * IRMAPreferenceEnumerator:
+ *
+ * {00000504-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPreferenceEnumerator, 0x00000504, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPreferenceEnumerator
+
+DECLARE_INTERFACE_(IRMAPreferenceEnumerator, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPreferenceEnumerator methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPreferenceEnumerator::EndSubPref
+ * Purpose:
+ * TBD
+ */
+
+ STDMETHOD(BeginSubPref) (THIS_ const char* szSubPref) PURE;
+
+
+ /************************************************************************
+ * Method:
+ * IRMAPreferenceEnumerator::EndSubPref
+ * Purpose:
+ * TBD
+ */
+
+ STDMETHOD(EndSubPref) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPreferenceEnumerator::GetPrefKey
+ * Purpose:
+ * TBD
+ */
+
+ STDMETHOD(GetPrefKey) (THIS_ UINT32 nIndex, REF(IRMABuffer*) pBuffer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPreferenceEnumerator::ReadPref
+ * Purpose:
+ * TBD
+ */
+ STDMETHOD(ReadPref) (THIS_
+ const char* pPrefKey, IRMABuffer*& pBuffer) PURE;
+
+};
+
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPreferences2
+ *
+ * Purpose:
+ *
+ * New interface which gives sub-preference options abilities.
+ *
+ *
+ * IID_IRMAPreferences2:
+ *
+ * {00000503-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPreferences2, 0x00000503, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPreferences2
+
+DECLARE_INTERFACE_(IRMAPreferences2, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPreferences2 methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPreferences2::GetPreferenceEnumerator
+ * Purpose:
+ * Read a preference from the registry or configuration.
+ */
+
+ STDMETHOD(GetPreferenceEnumerator)(THIS_ REF(IRMAPreferenceEnumerator*) /*OUT*/ pEnum) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPreferences2::ResetRoot
+ * Purpose:
+ * Reset the root of the preferences
+ */
+
+ STDMETHOD(ResetRoot)(THIS_ const char* pCompanyName, const char* pProductName,
+ int nProdMajorVer, int nProdMinorVer) PURE;
+};
+
+
+
+#endif /* _RMAPREFS_H_ */
diff --git a/include/realmedia/rmapsink.h b/include/realmedia/rmapsink.h
new file mode 100644
index 000000000..d22ae0c40
--- /dev/null
+++ b/include/realmedia/rmapsink.h
@@ -0,0 +1,147 @@
+/****************************************************************************
+ *
+ * $Id: rmapsink.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 player creation interfaces.
+ *
+ */
+
+#ifndef _RMAPSINK_H_
+#define _RMAPSINK_H_
+
+/*
+ * Forward declarations of some interfaces defined here-in.
+ */
+typedef _INTERFACE IRMAPlayer IRMAPlayer;
+typedef _INTERFACE IRMAPlayerSinkControl IRMAPlayerSinkControl;
+typedef _INTERFACE IRMAPlayerSinkControl IRMAPlayerSinkControl;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPlayerCreationSink
+ *
+ * Purpose:
+ *
+ * PlayerCreation Sink Interface
+ *
+ * IID_IRMAPlayerCreationSink:
+ *
+ * {00002100-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPlayerCreationSink, 0x00002100, 0x901, 0x11d1, 0x8b,
+ 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMAPlayerCreationSink
+
+DECLARE_INTERFACE_(IRMAPlayerCreationSink, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPlayerCreationSink Methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayerCreationSink::PlayerCreated
+ * Purpose:
+ * Notification when a new player is created
+ *
+ */
+ STDMETHOD(PlayerCreated) (THIS_
+ IRMAPlayer* pPlayer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayerCreationSink::PlayerClosed
+ * Purpose:
+ * Notification when an exisitng player is closed
+ *
+ */
+ STDMETHOD(PlayerClosed) (THIS_
+ IRMAPlayer* pPlayer) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPlayerSinkControl
+ *
+ * Purpose:
+ *
+ * Player SinkControl Interface
+ *
+ * IID_IRMAPlayerSinkControl:
+ *
+ * {00002101-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAPlayerSinkControl, 0x00002101, 0x901, 0x11d1, 0x8b,
+ 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#undef INTERFACE
+#define INTERFACE IRMAPlayerSinkControl
+
+DECLARE_INTERFACE_(IRMAPlayerSinkControl, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPlayerSinkControl Methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayerSinkControl::AddSink
+ * Purpose:
+ * Add a new sink
+ *
+ */
+ STDMETHOD(AddSink) (THIS_
+ IRMAPlayerCreationSink* pSink) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAPlayerSinkControl::RemoveSink
+ * Purpose:
+ * Remove an exisitng sink
+ *
+ */
+ STDMETHOD(RemoveSink) (THIS_
+ IRMAPlayerCreationSink* pSink) PURE;
+};
+
+#endif /* _RMAPSINK_H_ */
diff --git a/include/realmedia/rmarendr.h b/include/realmedia/rmarendr.h
new file mode 100644
index 000000000..17784cd1b
--- /dev/null
+++ b/include/realmedia/rmarendr.h
@@ -0,0 +1,247 @@
+/****************************************************************************
+ *
+ * $Id: rmarendr.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Rendering Interfaces.
+ *
+ */
+
+#ifndef _RMARENDR_H_
+#define _RMARENDR_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IRMARenderer IRMARenderer;
+typedef _INTERFACE IRMAStream IRMAStream;
+typedef _INTERFACE IRMAStreamSource IRMAStreamSource;
+typedef _INTERFACE IRMAPlayer IRMAPlayer;
+typedef _INTERFACE IRMAClientEngine IRMAClientEngine;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARenderer
+ *
+ * Purpose:
+ *
+ * Interface implemented by all renderers. Parts of this interface are
+ * called by the client engine to provide data packets to the
+ * individual renderers.
+ *
+ * IID_IRMARenderer:
+ *
+ * {00000300-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARenderer, 0x00000300, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMARenderer
+
+typedef ULONG32 RMA_DISPLAY_TYPE;
+
+#define RMA_DISPLAY_NONE 0x00000000
+#define RMA_DISPLAY_WINDOW 0x00000001
+#define RMA_DISPLAY_SUPPORTS_RESIZE 0x00000002
+#define RMA_DISPLAY_SUPPORTS_FULLSCREEN 0x00000004
+#define RMA_DISPLAY_SUPPORTS_VIDCONTROLS 0x00000008
+
+
+DECLARE_INTERFACE_(IRMARenderer, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMARenderer methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::GetRendererInfo
+ * Purpose:
+ * Returns information vital to the instantiation of rendering
+ * plugins.
+ */
+ STDMETHOD(GetRendererInfo) (THIS_
+ REF(const char**)/*OUT*/ pStreamMimeTypes,
+ REF(UINT32) /*OUT*/ unInitialGranularity
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::StartStream
+ * Purpose:
+ * Called by client engine to inform the renderer of the stream it
+ * will be rendering. The stream interface can provide access to
+ * its source or player. This method also provides access to the
+ * primary client controller interface.
+ *
+ */
+ STDMETHOD(StartStream) (THIS_
+ IRMAStream* pStream,
+ IRMAPlayer* pPlayer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::EndStream
+ * Purpose:
+ * Called by client engine to inform the renderer that the stream
+ * is was rendering is closed.
+ *
+ */
+ STDMETHOD(EndStream) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::OnHeader
+ * Purpose:
+ * Called by client engine when a header for this renderer is
+ * available. The header will arrive before any packets.
+ *
+ */
+ STDMETHOD(OnHeader) (THIS_
+ IRMAValues* pHeader) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::OnPacket
+ * Purpose:
+ * Called by client engine when a packet for this renderer is
+ * due.
+ *
+ */
+ STDMETHOD(OnPacket) (THIS_
+ IRMAPacket* pPacket,
+ LONG32 lTimeOffset) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::OnTimeSync
+ * Purpose:
+ * Called by client engine to inform the renderer of the current
+ * time relative to the streams synchronized time-line. The
+ * renderer should use this time value to update its display or
+ * render it's stream data accordingly.
+ *
+ */
+ STDMETHOD(OnTimeSync) (THIS_
+ ULONG32 ulTime) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::OnPreSeek
+ * Purpose:
+ * Called by client engine to inform the renderer that a seek is
+ * about to occur. The render is informed the last time for the
+ * stream's time line before the seek, as well as the first new
+ * time for the stream's time line after the seek will be completed.
+ *
+ */
+ STDMETHOD(OnPreSeek) (THIS_
+ ULONG32 ulOldTime,
+ ULONG32 ulNewTime) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::OnPostSeek
+ * Purpose:
+ * Called by client engine to inform the renderer that a seek has
+ * just occurred. The render is informed the last time for the
+ * stream's time line before the seek, as well as the first new
+ * time for the stream's time line after the seek.
+ *
+ */
+ STDMETHOD(OnPostSeek) (THIS_
+ ULONG32 ulOldTime,
+ ULONG32 ulNewTime) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::OnPause
+ * Purpose:
+ * Called by client engine to inform the renderer that a pause has
+ * just occurred. The render is informed the last time for the
+ * stream's time line before the pause.
+ *
+ */
+ STDMETHOD(OnPause) (THIS_
+ ULONG32 ulTime) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::OnBegin
+ * Purpose:
+ * Called by client engine to inform the renderer that a begin or
+ * resume has just occurred. The render is informed the first time
+ * for the stream's time line after the resume.
+ *
+ */
+ STDMETHOD(OnBegin) (THIS_
+ ULONG32 ulTime) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::OnBuffering
+ * Purpose:
+ * Called by client engine to inform the renderer that buffering
+ * of data is occuring. The render is informed of the reason for
+ * the buffering (start-up of stream, seek has occurred, network
+ * congestion, etc.), as well as percentage complete of the
+ * buffering process.
+ *
+ */
+ STDMETHOD(OnBuffering) (THIS_
+ ULONG32 ulFlags,
+ UINT16 unPercentComplete) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::GetDisplayType
+ * Purpose:
+ * Called by client engine to ask the renderer for it's preferred
+ * display type. When layout information is not present, the
+ * renderer will be asked for it's prefered display type. Depending
+ * on the display type a buffer of additional information may be
+ * needed. This buffer could contain information about preferred
+ * window size.
+ *
+ */
+ STDMETHOD(GetDisplayType) (THIS_
+ REF(RMA_DISPLAY_TYPE) ulFlags,
+ REF(IRMABuffer*) pBuffer) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMARenderer::OnEndofPackets
+ * Purpose:
+ * Called by client engine to inform the renderer that all the
+ * packets have been delivered. However, if the user seeks before
+ * EndStream() is called, renderer may start getting packets again
+ * and the client engine will eventually call this function again.
+ */
+ STDMETHOD(OnEndofPackets) (THIS) PURE;
+};
+
+#endif /* _RMARENDR_H_ */
diff --git a/include/realmedia/rmasite2.h b/include/realmedia/rmasite2.h
new file mode 100644
index 000000000..00161108a
--- /dev/null
+++ b/include/realmedia/rmasite2.h
@@ -0,0 +1,185 @@
+/****************************************************************************
+ *
+ * $Id: rmasite2.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Simple Window Interfaces.
+ *
+ */
+
+#ifndef _RMASITE2_H_
+#define _RMASITE2_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+
+//typedef _INTERFACE IRMASite2 IRMASite2;
+typedef _INTERFACE IRMAVideoSurface IRMAVideoSurface;
+typedef _INTERFACE IRMAPassiveSiteWatcher IRMAPassiveSiteWatcher;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASite2
+ *
+ * Purpose:
+ *
+ * Interface for IRMASite2 objects.
+ *
+ * IID_IRMASite:
+ *
+ * {0x00000D0A-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASite2, 0x00000D0A, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMASite
+
+DECLARE_INTERFACE_(IRMASite2, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASite2 method usually called by the "context"
+ * when window attributes (like the window handle) have changed.
+ */
+ STDMETHOD(UpdateSiteWindow) (THIS_
+ PNxWindow* /*IN*/ pWindow) PURE;
+
+ /*
+ * IRMASite2 method usually called by the "context" to
+ * to hide/show a site.
+ */
+ STDMETHOD(ShowSite) (THIS_
+ BOOL bShow) PURE;
+
+ STDMETHOD_(BOOL, IsSiteVisible) (THIS) PURE;
+
+ /*
+ * IRMASite2 method usually called by the "context" to
+ * set the site's Z-order
+ */
+ STDMETHOD(SetZOrder) (THIS_
+ INT32 lZOrder
+ ) PURE;
+
+ /*
+ * IRMASite2 method called to get the site's Z-order
+ */
+ STDMETHOD(GetZOrder) (THIS_
+ REF(INT32) lZOrder
+ ) PURE;
+
+ /*
+ * IRMASite2 method called to set the site at the top
+ * of the Z-order
+ */
+ STDMETHOD(MoveSiteToTop) (THIS) PURE;
+
+ /*
+ * IRMASite2 method called to get the site's video surface
+ */
+ STDMETHOD(GetVideoSurface) (THIS_
+ REF(IRMAVideoSurface*) pSurface
+ ) PURE;
+
+ /*
+ * IRMASite2 method called to get the number of child sites.
+ */
+ STDMETHOD_(UINT32,GetNumberOfChildSites) (THIS) PURE;
+
+ /*
+ * IRMASite2 method to add a watcher that does not affect the site
+ */
+ STDMETHOD(AddPassiveSiteWatcher) (THIS_
+ IRMAPassiveSiteWatcher* pWatcher
+ ) PURE;
+
+ /*
+ * IRMASite2 method to remove a watcher that does not affect the site
+ */
+ STDMETHOD(RemovePassiveSiteWatcher) (THIS_
+ IRMAPassiveSiteWatcher* pWatcher
+ ) PURE;
+
+ /*
+ * IRMASite2 method used to do cursor management
+ */
+ STDMETHOD(SetCursor) (THIS_
+ PNxCursor ulCursor,
+ REF(PNxCursor) ulOldCursor
+ ) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAPassiveSiteWatcher
+ *
+ * Purpose:
+ *
+ * Interface for IRMAPassiveSiteWatcher objects.
+ *
+ * IID_IRMAPassiveSiteWatcher:
+ *
+ * {0x00000D0F-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAPassiveSiteWatcher, 0x00000D0F, 0x901, 0x11d1, 0x8b, 0x6,
+ 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAPassiveSiteWatcher
+
+DECLARE_INTERFACE_(IRMAPassiveSiteWatcher, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAPassiveSiteWatcher method used to notify
+ * about position updates
+ */
+ STDMETHOD(PositionChanged) (THIS_
+ PNxPoint* /*IN*/ pPoint) PURE;
+
+ /*
+ * IRMAPassiveSiteWatcher method used to notify
+ * about size updates
+ */
+ STDMETHOD(SizeChanged) (THIS_
+ PNxSize* /*IN*/ pSize) PURE;
+
+};
+
+#endif //_RMASITE2_H_
diff --git a/include/realmedia/rmaslta.h b/include/realmedia/rmaslta.h
new file mode 100644
index 000000000..ab412f37b
--- /dev/null
+++ b/include/realmedia/rmaslta.h
@@ -0,0 +1,191 @@
+/****************************************************************************
+ *
+ * $Id: rmaslta.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
+ *
+ * http://www.real.com/devzone
+ *
+ * This program contains proprietary nformation of RealNetworks, Inc,
+ * and is licensed subject to restrictions on use and distribution.
+ *
+ *
+ * RealMedia Architecture Interfaces for Simulated Live Transfer Agent.
+ *
+ */
+
+#ifndef _RMASLTA_H
+#define _RMASLTA_H
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASLTA
+ *
+ * Purpose:
+ *
+ * Slta that works with RMA. Simulates a live stream from a file.
+ *
+ * IID_IRMASLTA
+ *
+ * {00000D00-b4c8-11d0-9995-00a0248da5f0}
+ *
+ */
+DEFINE_GUID(IID_IRMASLTA, 0x00000D00, 0xb4c8, 0x11d0, 0x99,
+ 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
+
+DECLARE_INTERFACE_(IRMASLTA, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASLTA methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMASLTA::Connect
+ * Purpose:
+ * Connects the slta to a server.
+ */
+ STDMETHOD(Connect) (THIS_
+ const char* host,
+ UINT16 uPort,
+ const char* username,
+ const char* passwd,
+ const char* livefile
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMASLTA::SetTAC
+ * Purpose:
+ * Set the TAC info for the stream. This method MUST be called
+ * before Encode to have any effect.
+ */
+ STDMETHOD(SetTAC) (THIS_
+ const char* Title,
+ const char* Author,
+ const char* Copyright) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMASLTA:Encode
+ * Purpose:
+ * Start encoding the file to the server.
+ */
+ STDMETHOD(Encode)
+ (THIS_
+ const char* filename
+ ) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMASLTA:Disconnect
+ * Purpose:
+ * Disconnect the slta from the server.
+ */
+ STDMETHOD(Disconnect) (THIS) PURE;
+
+
+ /************************************************************************
+ * Method:
+ * IRMASLTA::SetTargetBandwidth
+ * Purpose:
+ * Sets the target bw for rule subscription.
+ */
+ STDMETHOD(SetTargetBandwidth) (THIS_
+ UINT32 ulTargetBW) PURE;
+
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASltaEvent
+ *
+ * Purpose:
+ *
+ * Allows events to be sent through an SLTA stream
+ *
+ * IID_IRMASltaEvent
+ *
+ * {00000D01-b4c8-11d0-9995-00a0248da5f0}
+ *
+ */
+DEFINE_GUID(IID_IRMASltaEvent, 0x00000D01, 0xb4c8, 0x11d0, 0x99,
+ 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
+
+/*
+ * Valid RMA event IDs.
+ */
+
+#define RMA_EVENT_TITLE 0x0000
+#define RMA_EVENT_AUTHOR 0x0001
+#define RMA_EVENT_COPYRIGHT 0x0002
+#define RMA_EVENT_SERVER_ALERT 0x0003
+#define RMA_EVENT_PROGRESS_MESSAGE 0x0004
+#define RMA_EVENT_TEXT_SIZE 0x0010
+#define RMA_EVENT_TEXT 0x0011
+#define RMA_EVENT_TEXT_ANCHOR 0x0012
+#define RMA_EVENT_BROWSER_OPEN_URL 0x0020
+#define RMA_EVENT_TOPIC 0x0030
+#define RMA_EVENT_EMPTY 0x0200
+#define RMA_EVENT_CUSTOM_BEGIN 0x0400
+
+DECLARE_INTERFACE_(IRMASltaEvent, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASltaEvent methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMASltaEvent::SetEvent
+ * Purpose:
+ * Sends an event to the slta stream.
+ * nEventID must be one of the valid event IDs defined above.
+ */
+ STDMETHOD(SetEvent) (THIS_
+ UINT16 nEventID,
+ const char* szEventText) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMASltaEvent::SetRepeatedEvent
+ * Purpose:
+ * Sets an event to be repeated every ulFrequency milliseconds.
+ * nEventID must be one of the valid event IDs defined above.
+ */
+
+ STDMETHOD(SetRepeatedEvent) (THIS_
+ UINT16 nEventID,
+ const char* szEventText,
+ UINT32 ulFrequency) PURE;
+};
+
+#endif
diff --git a/include/realmedia/rmasrc.h b/include/realmedia/rmasrc.h
new file mode 100644
index 000000000..27256af94
--- /dev/null
+++ b/include/realmedia/rmasrc.h
@@ -0,0 +1,254 @@
+/****************************************************************************
+ *
+ * $Id: rmasrc.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * Copyright (C) 1995-1999 RealNetworks, Inc. All rights reserved.
+ *
+ * http://www.real.com/devzone
+ *
+ * This program contains proprietary information of RealNetworks, Inc,
+ * and is licensed subject to restrictions on use and distribution.
+ *
+ *
+ * RealMedia Architecture Packet Source Interfaces.
+ *
+ */
+
+#ifndef _RMASRC_H_
+#define _RMASRC_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IRMARawSourceObject IRMARawSourceObject;
+typedef _INTERFACE IRMARawSinkObject IRMARawSinkObject;
+typedef _INTERFACE IRMASourceFinderObject IRMASourceFinderObject;
+typedef _INTERFACE IRMASourceFinderResponse IRMASourceFinderResponse;
+typedef _INTERFACE IRMARequest IRMARequest;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARawSourceObject
+ *
+ * Purpose:
+ *
+ * Object that serves packets to sinks
+ *
+ * IID_IRMARawSourceObject:
+ *
+ * {00001000-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARawSourceObject, 0x00001000, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMARawSourceObject
+
+DECLARE_INTERFACE_(IRMARawSourceObject, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMARawSourceObject methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMARawSourceObject::Init
+ * Purpose:
+ * Initializes the connection between the source and the sink
+ */
+ STDMETHOD(Init) (THIS_
+ IUnknown* pUnknown) PURE;
+
+ STDMETHOD(Done) (THIS) PURE;
+
+ STDMETHOD(GetFileHeader) (THIS) PURE;
+
+ STDMETHOD(GetStreamHeader) (THIS_
+ UINT16 unStreamNumber) PURE;
+
+ STDMETHOD(StartPackets) (THIS_
+ UINT16 unStreamNumber) PURE;
+
+ STDMETHOD(StopPackets) (THIS_
+ UINT16 unStreamNumber) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMARawSinkObject
+ *
+ * Purpose:
+ *
+ * Object that receives raw packets from a source
+ *
+ * IID_IRMARawSinkObject:
+ *
+ * {00001001-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMARawSinkObject, 0x00001001, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMARawSinkObject
+
+DECLARE_INTERFACE_(IRMARawSinkObject, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMARawSinkObject methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMARawSinkObject::InitDone
+ * Purpose:
+ * Callback after source object has initialized the connection
+ */
+ STDMETHOD(InitDone) (THIS_
+ PN_RESULT status) PURE;
+
+ STDMETHOD(FileHeaderReady) (THIS_
+ PN_RESULT status,
+ IRMAValues* pHeader) PURE;
+
+ STDMETHOD(StreamHeaderReady) (THIS_
+ PN_RESULT status,
+ IRMAValues* pHeader) PURE;
+
+ STDMETHOD(PacketReady) (THIS_
+ PN_RESULT status,
+ IRMAPacket* pPacket) PURE;
+
+ STDMETHOD(StreamDone) (THIS_
+ UINT16 unStreamNumber) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASourceFinderObject
+ *
+ * Purpose:
+ *
+ * Object that allows a sink to search for a raw packet source
+ *
+ * IID_IRMASourceFinderObject:
+ *
+ * {00001002-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASourceFinderObject, 0x00001002, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#define CLSID_IRMASourceFinderObject IID_IRMASourceFinderObject
+
+#undef INTERFACE
+#define INTERFACE IRMASourceFinderObject
+
+#define CLSID_IRMASourceFinderObject IID_IRMASourceFinderObject
+
+DECLARE_INTERFACE_(IRMASourceFinderObject, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASourceFinderObject methods
+ */
+
+ STDMETHOD(Init) (THIS_
+ IUnknown* pUnknown) PURE;
+
+ STDMETHOD(Find) (THIS_
+ IRMARequest* pRequest) PURE;
+
+ STDMETHOD(Done) (THIS) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASourceFinderResponse
+ *
+ * Purpose:
+ *
+ * Object that returns a raw packet source to a sink
+ *
+ * IID_IRMASourceFinderResponse:
+ *
+ * {00001003-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASourceFinderResponse, 0x00001003, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+
+#undef INTERFACE
+#define INTERFACE IRMASourceFinderResponse
+
+DECLARE_INTERFACE_(IRMASourceFinderResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASourceFinderResponse methods
+ */
+
+ STDMETHOD(InitDone) (THIS_
+ PN_RESULT status) PURE;
+
+ STDMETHOD(FindDone) (THIS_
+ PN_RESULT status,
+ IUnknown* pUnknown) PURE;
+
+};
+
+#endif /* _RMASRC_H_ */
diff --git a/include/realmedia/rmaupgrd.h b/include/realmedia/rmaupgrd.h
new file mode 100644
index 000000000..8240112a5
--- /dev/null
+++ b/include/realmedia/rmaupgrd.h
@@ -0,0 +1,178 @@
+/****************************************************************************
+ *
+ * $Id: rmaupgrd.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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.
+ *
+ * Auto Upgrade Interfaces
+ *
+ */
+
+#ifndef _RMAUPGRD_H
+#define _RMAUPGRD_H
+
+
+typedef _INTERFACE IRMABuffer IRMABuffer;
+
+
+/* Enumeration for the upgrade types */
+typedef enum _RMAUpgradeType
+{
+ eUT_Required,
+ eUT_Recommended,
+ eUT_Optional
+} RMAUpgradeType;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAUpgradeCollection
+ *
+ * Purpose:
+ *
+ * Interface provided by the Context. This interface allows collection
+ * of upgrade components by the client core and it's delegates
+ * (i.e. renderer plugins etc.)
+ *
+ * IID_IRMAUpgradeCollection
+ *
+ * {00002500-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAUpgradeCollection,
+ 0x00002500, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAUpgradeCollection
+
+DECLARE_INTERFACE_(IRMAUpgradeCollection, IUnknown)
+{
+ /*
+ * IRMAUpgradeCollection methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAUpgradeCollection::Add
+ * Purpose:
+ * Adds the specified upgrade information to the collection
+ *
+ */
+ STDMETHOD_(UINT32, Add) (THIS_
+ RMAUpgradeType upgradeType,
+ IRMABuffer* pPluginId,
+ UINT32 majorVersion,
+ UINT32 minorVersion) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAUpgradeCollection::Remove
+ * Purpose:
+ * Remove the specified item from the collection
+ *
+ */
+ STDMETHOD(Remove) (THIS_
+ UINT32 index) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAUpgradeCollection::RemoveAll
+ * Purpose:
+ * Remove all items from the collection
+ *
+ */
+ STDMETHOD(RemoveAll) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAUpgradeCollection::GetCount
+ * Purpose:
+ * get the count of the collection
+ *
+ */
+ STDMETHOD_(UINT32, GetCount)(THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAUpgradeCollection::GetAt
+ * Purpose:
+ * get the specified items upgrade information
+ *
+ */
+ STDMETHOD(GetAt) (THIS_
+ UINT32 index,
+ REF(RMAUpgradeType) upgradeType,
+ IRMABuffer* pPluginId,
+ REF(UINT32) majorVersion,
+ REF(UINT32) minorVersion) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAUpgradeHandler
+ *
+ * Purpose:
+ *
+ * Interface provided by the top-level client application. This
+ * interface allows the client core to request an upgrade.
+ *
+ * IID_IRMAUpgradeHandler:
+ *
+ * {00002501-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAUpgradeHandler,
+ 0x00002501, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAUpgradeHandler
+
+DECLARE_INTERFACE_(IRMAUpgradeHandler, IUnknown)
+{
+ /*
+ * IRMAUpgradeHandler methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAUpgradeHandler::RequestUpgrade
+ * Purpose:
+ * Ask if user wants to do an upgrade and start an upgrade
+ *
+ */
+ STDMETHOD(RequestUpgrade) (THIS_ IRMAUpgradeCollection* pComponents,
+ BOOL bBlocking) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAUpgradeHandler::HasComponents
+ * Purpose:
+ * Check if required components are present on the system.
+ * Returns:
+ * PNR_OK - components are here, no upgrade required;
+ * all components are removed from pComponents.
+ * PNR_FAIL - some components are missing;
+ * pComponents contains only those components
+ * that need upgrade.
+ *
+ */
+ STDMETHOD(HasComponents) (THIS_ IRMAUpgradeCollection* pComponents) PURE;
+};
+
+
+
+#endif /* _RMAUPGRD_H */
+
diff --git a/include/realmedia/rmavalue.h b/include/realmedia/rmavalue.h
new file mode 100644
index 000000000..764e133cc
--- /dev/null
+++ b/include/realmedia/rmavalue.h
@@ -0,0 +1,381 @@
+/****************************************************************************
+ *
+ * $Id: rmavalue.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Plug-in Interfaces.
+ *
+ */
+
+#ifndef _RMAVALUE_H_
+#define _RMAVALUE_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IUnknown IUnknown;
+typedef _INTERFACE IRMABuffer IRMABuffer;
+typedef _INTERFACE IRMAKeyValueList IRMAKeyValueList;
+typedef _INTERFACE IRMAKeyValueListIter IRMAKeyValueListIter;
+typedef _INTERFACE IRMAKeyValueListIterOneKey IRMAKeyValueListIterOneKey;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMAOptions IRMAOptions;
+
+/* Note : GUIDS 3101 - 3107 are deprecated. */
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAKeyValueList
+ *
+ * Purpose:
+ *
+ * Stores a list of strings, where strings are keyed by not necessarily
+ * unique keys.
+ *
+ *
+ * IRMAKeyValueList:
+ *
+ * {0x00003108-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAKeyValueList, 0x00003108, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+#define CLSID_IRMAKeyValueList IID_IRMAKeyValueList
+
+#undef INTERFACE
+#define INTERFACE IRMAKeyValueList
+
+DECLARE_INTERFACE_(IRMAKeyValueList, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * Regular methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueList::AddKeyValue
+ * Purpose:
+ * Add a new key/value tuple to our list of strings. You can have
+ * multiple strings for the same key.
+ */
+ STDMETHOD(AddKeyValue) (THIS_
+ const char* pKey,
+ IRMABuffer* pStr) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueList::GetIter
+ * Purpose:
+ * Return an iterator that allows you to iterate through all the
+ * key/value tuples in our list of strings.
+ */
+ STDMETHOD(GetIter) (THIS_
+ REF(IRMAKeyValueListIter*) pIter) PURE;
+
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueList::GetIterOneKey
+ * Purpose:
+ * Return an iterator that allows you to iterate through all the
+ * strings for a particular key.
+ */
+ STDMETHOD(GetIterOneKey) (THIS_
+ const char* pKey,
+ REF(IRMAKeyValueListIterOneKey*) pIter) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueList::AppendAllListItems
+ * Purpose:
+ * Append all the key/string tuples from another list to this list.
+ * (You can have duplicate keys.)
+ */
+ STDMETHOD(AppendAllListItems) (THIS_
+ IRMAKeyValueList* pList) PURE;
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueList::KeyExists
+ * Purpose:
+ * See whether any strings exist for a particular key.
+ */
+ STDMETHOD_(BOOL,KeyExists) (THIS_
+ const char* pKey) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueList::CreateObject
+ * Purpose:
+ * Create an empty object that is the same class as the current object.
+ */
+ STDMETHOD(CreateObject) (THIS_
+ REF(IRMAKeyValueList*) pNewList) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueList::ImportValues.
+ * Purpose:
+ * Import all the strings from an IRMAValues object into this object.
+ * If this object also supports IRMAValues, it should also import the
+ * ULONGs and Buffers. You can have duplicate keys, and old data is
+ * left untouched.
+ */
+ STDMETHOD(ImportValues) (THIS_
+ IRMAValues* pValues) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAKeyValueListIter
+ *
+ * Purpose:
+ *
+ * Iterate over all the items in a CKeyValueList.
+ * Call IRMAKeyValueList::GetIter to create an iterator.
+ *
+ *
+ * IRMAKeyValueListIter:
+ *
+ * {0x00003109-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAKeyValueListIter, 0x00003109, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#define CLSID_IRMAKeyValueListIter IID_IRMAKeyValueListIter
+
+#undef INTERFACE
+#define INTERFACE IRMAKeyValueListIter
+
+DECLARE_INTERFACE_(IRMAKeyValueListIter, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+
+ /*
+ * Regular methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueListIter::GetNextPair
+ * Purpose:
+ * Each call to this method returns one key/value tuple from your
+ * list of strings. Strings are returned in same order that they
+ * were inserted.
+ */
+ STDMETHOD(GetNextPair) (THIS_
+ REF(const char*) pKey,
+ REF(IRMABuffer*) pStr) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueListIter::ReplaceCurr
+ * Purpose:
+ * Replaces the value in the key/value tuple that was returned
+ * in the last call to GetNextPair with a new string.
+ */
+ STDMETHOD(ReplaceCurr) (THIS_
+ IRMABuffer* pStr) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAKeyValueListIterOneKey
+ *
+ * Purpose:
+ *
+ * Iterate over all the items in a CKeyValueList that match a particular key.
+ * Call IRMAKeyValueList::GetIterOneKey to create an iterator.
+ *
+ *
+ * IRMAKeyValueListIterOneKey:
+ *
+ * {0x00003110-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAKeyValueListIterOneKey, 0x00003110, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#define CLSID_IRMAKeyValueListIterOneKey IID_IRMAKeyValueListIterOneKey
+
+#undef INTERFACE
+#define INTERFACE IRMAKeyValueListIterOneKey
+
+DECLARE_INTERFACE_(IRMAKeyValueListIterOneKey, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+
+ /*
+ * Regular methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueListIterOneKey::GetNextString
+ * Purpose:
+ * Each call to this method returns one string that matches the
+ * key for this iterator. Strings are returned in same order that they
+ * were inserted.
+ *
+ */
+ STDMETHOD(GetNextString) (THIS_
+ REF(IRMABuffer*) pStr) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAKeyValueListIterOneKey::ReplaceCurr
+ * Purpose:
+ * Replaces the value in the key/value tuple that was referenced
+ * in the last call to GetNextString with a new string.
+ *
+ */
+ STDMETHOD(ReplaceCurr) (THIS_
+ IRMABuffer* pStr) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAOptions
+ *
+ * Purpose:
+ *
+ * This is a generic options interface, implemented by any object to
+ * allow its options to be read and set by another component of the
+ * system.
+ *
+ *
+ * IRMAOptions:
+ *
+ * {0x00003111-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAOptions, 0x00003111, 0x901, 0x11d1,
+ 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#define CLSID_IRMAOptions IID_IRMAOptions
+
+#undef INTERFACE
+#define INTERFACE IRMAOptions
+
+DECLARE_INTERFACE_(IRMAOptions, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+
+ /*
+ * Regular methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMAOptions::GetOptions
+ * Purpose:
+ * This method returns a list of the options supported by this
+ * particular object, along with the value currently set for each
+ * option. Enumerate the members of the returned IRMAValues object
+ * to discover what options a component supports and the type of
+ * each of those options. The value for each name-value pair is
+ * the current setting for that option.
+ *
+ */
+ STDMETHOD(GetOptions) (THIS_
+ REF(IRMAValues*) pOptions) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAOptions::SetOptionULONG32
+ * Purpose:
+ * Sets the value of a ULONG32 option. The return value indicates
+ * whether or not the SetOptionULONG32 call succeeded.
+ *
+ */
+ STDMETHOD(SetOptionULONG32) (THIS_
+ const char* pName,
+ ULONG32 ulValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAOptions::SetOptionCString
+ * Purpose:
+ * Sets the value of a CString option. The return value indicates
+ * whether or not the SetOptionCString call succeeded.
+ *
+ */
+ STDMETHOD(SetOptionCString) (THIS_
+ const char* pName,
+ IRMABuffer* pValue) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAOptions::SetOptionBuffer
+ * Purpose:
+ * Sets the value of a Buffer option. The return value indicates
+ * whether or not the SetOptionBuffer call succeeded.
+ *
+ */
+ STDMETHOD(SetOptionBuffer) (THIS_
+ const char* pName,
+ IRMABuffer* pValue) PURE;
+};
+
+
+#endif /* !_RMAVALUE_H_ */
diff --git a/include/realmedia/rmavsrc.h b/include/realmedia/rmavsrc.h
new file mode 100644
index 000000000..b96ab6486
--- /dev/null
+++ b/include/realmedia/rmavsrc.h
@@ -0,0 +1,185 @@
+#ifndef _RMAVSRC_H
+#define _RMAVSRC_H
+/****************************************************************************
+ *
+ * $Id: rmavsrc.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * Copyright (C) 1999 RealNetworks, Inc. All rights reserved..
+ *
+ * http://www.real.com/devzone
+ *
+ * This program contains proprietary
+ * information of RealNetworks, Inc, and is licensed
+ * subject to restrictions on use and distribution.
+ *
+ * RealMedia Architecture FileViewSource Interfaces.
+ *
+ */
+
+
+typedef _INTERFACE IRMAStreamSource IRMAStreamSource;
+typedef _INTERFACE IRMAFileObject IRMAFileObject;
+
+// Interfaces definded in this file
+typedef _INTERFACE IRMAFileViewSource IRMAFileViewSource;
+typedef _INTERFACE IRMAFileViewSourceResponse IRMAFileViewSourceResponse;
+typedef _INTERFACE IRMAViewSourceCommand IRMAViewSourceCommand;
+typedef _INTERFACE IRMAViewSourceURLResponse IRMAViewSourceURLResponse;
+
+
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileViewSource
+ *
+ * IID_IRMAFileViewSource:
+ *
+ * {00003500-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+enum SOURCE_TYPE
+{
+ RAW_SOURCE,
+ HTML_SOURCE
+};
+
+DEFINE_GUID(IID_IRMAFileViewSource, 0x00003500, 0x901, 0x11d1, 0x8b, 0x6,
+ 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileViewSource
+
+DECLARE_INTERFACE_(IRMAFileViewSource, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAFileViewSource
+ */
+ STDMETHOD(InitViewSource) (THIS_
+ IRMAFileObject* /*IN*/ pFileObject,
+ IRMAFileViewSourceResponse* /*IN*/ pResp,
+ SOURCE_TYPE /*IN*/ sourceType,
+ IRMAValues* /*IN*/ pOptions) PURE;
+ STDMETHOD(GetSource) (THIS) PURE;
+ STDMETHOD(Close) (THIS) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAFileViewSourceResponse
+ *
+ * IID_IRMAFileViewSourceResponse:
+ *
+ * {00003501-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAFileViewSourceResponse, 0x00003501, 0x901, 0x11d1, 0x8b,
+ 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAFileViewSourceResponse
+
+DECLARE_INTERFACE_(IRMAFileViewSourceResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAFileViewSourceResoponse
+ */
+ STDMETHOD(InitDone) (THIS_ PN_RESULT status ) PURE;
+ STDMETHOD(SourceReady) (THIS_ PN_RESULT status,
+ IRMABuffer* pSource ) PURE;
+ STDMETHOD(CloseDone) (THIS_ PN_RESULT) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAViewSourceCommand
+ *
+ * IID_IRMAViewSourceCommand:
+ *
+ * {00003504-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAViewSourceCommand, 0x00003504, 0x901, 0x11d1, 0x8b, 0x6,
+ 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAViewSourceCommand
+
+DECLARE_INTERFACE_(IRMAViewSourceCommand, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAViewSourceCommand
+ */
+ STDMETHOD_(BOOL, CanViewSource) (THIS_
+ IRMAStreamSource* pStream) PURE;
+ STDMETHOD(DoViewSource) (THIS_
+ IRMAStreamSource* pStream) PURE;
+ STDMETHOD(GetViewSourceURL) (THIS_
+ IRMAStreamSource* pSource,
+ IRMAViewSourceURLResponse* pResp) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAViewSourceURLResponse
+ *
+ * IID_IRMAViewSourceURLResponse:
+ *
+ * {00003505-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAViewSourceURLResponse, 0x00003505, 0x901, 0x11d1, 0x8b, 0x6,
+ 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAViewSourceURLResponse
+
+DECLARE_INTERFACE_(IRMAViewSourceURLResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAViewSourceURLResponse
+ */
+ STDMETHOD(ViewSourceURLReady) (THIS_
+ const char* /*out*/ pUrl) PURE;
+};
+
+
+#endif
diff --git a/include/realmedia/rmavsurf.h b/include/realmedia/rmavsurf.h
new file mode 100644
index 000000000..e3460126a
--- /dev/null
+++ b/include/realmedia/rmavsurf.h
@@ -0,0 +1,216 @@
+/****************************************************************************
+ *
+ * $Id: rmavsurf.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * Copyright (C) 1995,1996,1997 Progressive Networks.
+ * 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 Video Surface Interfaces.
+ *
+ */
+
+#ifndef _RMAVSURF_H_
+#define _RMAVSURF_H_
+
+/****************************************************************************
+ *
+ * Video Surface Data Structures and Constants
+ */
+typedef struct _RMABitmapInfoHeader
+{
+ UINT32 biSize;
+ INT32 biWidth;
+ INT32 biHeight;
+ UINT16 biPlanes;
+ UINT16 biBitCount;
+ UINT32 biCompression;
+ UINT32 biSizeImage;
+ INT32 biXPelsPerMeter;
+ INT32 biYPelsPerMeter;
+ UINT32 biClrUsed;
+ UINT32 biClrImportant;
+ UINT32 rcolor;
+ UINT32 gcolor;
+ UINT32 bcolor;
+
+} RMABitmapInfoHeader;
+
+/*
+ * RMABitmapInfo structure.
+ */
+typedef struct _RMABitmapInfo
+{
+ struct
+ {
+ UINT32 biSize; /* use OFFSETOF(dwBitMask) here */
+ INT32 biWidth; /* image width (in pixels) */
+ INT32 biHeight; /* image height */
+ UINT16 biPlanes; /* # of bitplanes; always use 1 */
+ UINT16 biBitCount; /* average # bits/pixel */
+ UINT32 biCompression; /* one of the RMA_... FOURCC codes */
+ UINT32 biSizeImage; /* = width * height * bitCount / 8 */
+ INT32 biXPelsPerMeter;/* always 0 */
+ INT32 biYPelsPerMeter;/* always 0 */
+ UINT32 biClrUsed; /* !0, if 8-bit RGB; 0, otherwise */
+ UINT32 biClrImportant; /* !0, if 8-bit RGB; 0, otherwise */
+
+ } bmiHeader;
+
+ union
+ {
+ UINT32 dwBitMask[3]; /* color masks (for BI_BITFIELDS) */
+ UINT32 dwPalette[256]; /* palette (for 8-bit RGB image) */
+ } un;
+
+} RMABitmapInfo;
+
+typedef UINT32 RMA_COMPRESSION_TYPE;
+
+/*
+ * Windows DIB formats & MKFOURCC() macro:
+ */
+#ifndef BI_RGB
+#define BI_RGB 0L /* RGB-8, 16, 24, or 32 */
+#define BI_RLE8 1L /* 8-bit RLE compressed image */
+#define BI_RLE4 2L /* 4-bit RLE compressed image */
+#define BI_BITFIELDS 3L /* RGB 555, 565, etc. */
+#endif
+#ifndef MKFOURCC
+#define MKFOURCC(c0,c1,c2,c3) \
+ ((UINT32)(BYTE)(c0) | ((UINT32)(BYTE)(c1) << 8) | \
+ ((UINT32)(BYTE)(c2) << 16) | ((UINT32)(BYTE)(c3) << 24))
+#endif
+
+/*
+ * RMA image formats:
+ */
+#define RMA_RGB BI_RGB /* Windows-compatible RGB formats: */
+#define RMA_RLE8 BI_RLE8
+#define RMA_RLE4 BI_RLE4
+#define RMA_BITFIELDS BI_BITFIELDS
+#define RMA_I420 MKFOURCC('I','4','2','0') /* planar YCrCb */
+#define RMA_YV12 MKFOURCC('Y','V','1','2') /* planar YVU420 */
+#define RMA_YUY2 MKFOURCC('Y','U','Y','2') /* packed YUV422 */
+#define RMA_UYVY MKFOURCC('U','Y','V','Y') /* packed YUV422 */
+#define RMA_YVU9 MKFOURCC('Y','V','U','9') /* Intel YVU9 */
+
+/*
+ * Non-standard FOURCC formats (these are just few aliases to what can be
+ * represented by the standard formats, and they are left for backward
+ * compatibility only).
+ */
+#define RMA_RGB3_ID MKFOURCC('3','B','G','R') /* RGB-32 ?? */
+#define RMA_RGB24_ID MKFOURCC('B','G','R',' ') /* top-down RGB-24*/
+#define RMA_RGB565_ID MKFOURCC('6','B','G','R') /* RGB-16 565 */
+#define RMA_RGB555_ID MKFOURCC('5','B','G','R') /* RGB-16 555 */
+#define RMA_8BIT_ID MKFOURCC('T','I','B','8') /* RGB-8 w. pal-e */
+#define RMA_YUV420_ID MKFOURCC('2','V','U','Y') /* planar YCrCb */
+#define RMA_YUV411_ID MKFOURCC('1','V','U','Y') /* ??? */
+#define RMA_YUVRAW_ID MKFOURCC('R','V','U','Y') /* ??? */
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAVideoSurface
+ *
+ * Purpose:
+ *
+ * Interface for IRMAVideoSurface objects.
+ *
+ * IID_IRMAVideoSurface:
+ *
+ * {00002200-0901-11d1-8B06-00A024406D59}
+ *
+ */
+
+DEFINE_GUID(IID_IRMAVideoSurface, 0x00002200, 0x901, 0x11d1, 0x8b,
+ 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAVideoSurface
+
+DECLARE_INTERFACE_(IRMAVideoSurface, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAVideoSurface methods usually called by renderers to
+ * Draw on the surface
+ */
+ STDMETHOD(Blt) (THIS_
+ UCHAR* /*IN*/ pImageBits,
+ RMABitmapInfoHeader* /*IN*/ pBitmapInfo,
+ REF(PNxRect) /*IN*/ rDestRect,
+ REF(PNxRect) /*IN*/ rSrcRect) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVideoSurface::BeginOptimizedBlt
+ * Purpose:
+ * Called by renderer to commit to a bitmap format for all future
+ * OptimizedBlt calls.
+ */
+ STDMETHOD(BeginOptimizedBlt)(THIS_
+ RMABitmapInfoHeader* /*IN*/ pBitmapInfo) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVideoSurface::OptimizedBlt
+ * Purpose:
+ * Called by renderer to draw to the video surface, in the format
+ * previously specified by calling BeginOptimizedBlt.
+ */
+ STDMETHOD(OptimizedBlt) (THIS_
+ UCHAR* /*IN*/ pImageBits,
+ REF(PNxRect) /*IN*/ rDestRect,
+ REF(PNxRect) /*IN*/ rSrcRect) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVideoSurface::EndOptimizedBlt
+ * Purpose:
+ * Called by renderer allow the video surface to cleanup after all
+ * OptimizedBlt calls have been made.
+ */
+ STDMETHOD(EndOptimizedBlt) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVideoSurface::GetOptimizedFormat
+ * Purpose:
+ * Called by the client to find out what compression type the
+ * renderer committed to when it called BeginOptimizedBlt.
+ */
+ STDMETHOD(GetOptimizedFormat)(THIS_
+ REF(RMA_COMPRESSION_TYPE) /*OUT*/ ulType) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMAVideoSurface::GetPreferredFormat
+ * Purpose:
+ * Called by renderer to find out what compression type the video
+ * surface would prefer to be given in BeginOptimizedBlt.
+ */
+ STDMETHOD(GetPreferredFormat)(THIS_
+ REF(RMA_COMPRESSION_TYPE) /*OUT*/ ulType) PURE;
+};
+
+#endif /* _RMAVSURF_H_ */
diff --git a/include/realmedia/rmawin.h b/include/realmedia/rmawin.h
new file mode 100644
index 000000000..6bbcfb940
--- /dev/null
+++ b/include/realmedia/rmawin.h
@@ -0,0 +1,811 @@
+/****************************************************************************
+ *
+ * $Id: rmawin.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 Simple Window Interfaces.
+ *
+ */
+
+#ifndef _RMAWIN_H_
+#define _RMAWIN_H_
+
+/*
+ * Forward declarations of some interfaces defined or used here-in.
+ */
+typedef _INTERFACE IRMASite IRMASite;
+typedef _INTERFACE IRMASiteUser IRMASiteUser;
+typedef _INTERFACE IRMASiteWindowed IRMASiteWindowed;
+typedef _INTERFACE IRMASiteEventHandler IRMASiteEventHandler;
+typedef _INTERFACE IRMASiteWindowless IRMASiteWindowless;
+typedef _INTERFACE IRMASiteWatcher IRMASiteWatcher;
+typedef _INTERFACE IRMAValues IRMAValues;
+typedef _INTERFACE IRMASiteFullScreen IRMASiteFullScreen;
+typedef _INTERFACE IRMALayoutSiteGroupManager IRMALayoutSiteGroupManager;
+typedef _INTERFACE IRMAEventHook IRMAEventHook;
+
+typedef struct _PNxWindow PNxWindow;
+typedef struct _PNxSize PNxSize;
+typedef struct _PNxPoint PNxPoint;
+typedef struct _PNxRect PNxRect;
+typedef void* PNxRegion;
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASiteWindowed
+ *
+ * Purpose:
+ *
+ * Interface for IRMASite objects which are associated with platform
+ * specific window objects on Microsoft Windows and X-Windows.
+ *
+ * IID_IRMASiteWindowed:
+ *
+ * {00000D01-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASiteWindowed, 0x00000D01, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#define CLSID_IRMASiteWindowed IID_IRMASiteWindowed
+
+
+#undef INTERFACE
+#define INTERFACE IRMASiteWindowed
+
+DECLARE_INTERFACE_(IRMASiteWindowed, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASiteWindowed methods called by site suppliers
+ * when they want the site associated with a
+ * previously created (and externally managed) window.
+ * This method will "sub-class" that window (Win32).
+ * On Unix, the site supplier must pass events from
+ * the externally managed window to the core via
+ * IRMAClientEngine::EventOccurred(). Please note that
+ * The PNxWindow ptr must remain in scope for the life
+ * of Site.
+ *
+ */
+ STDMETHOD(AttachWindow) (THIS_
+ PNxWindow* /*IN*/ pWindow) PURE;
+
+ STDMETHOD(DetachWindow) (THIS) PURE;
+
+ /*
+ * IRMASiteWindowed methods called by Owners of the site
+ * in the event that want a default top level window created
+ * for the site.
+ */
+ STDMETHOD(Create) (THIS_
+ void* ParentWindow,
+ UINT32 style) PURE;
+
+ STDMETHOD(Destroy) (THIS) PURE;
+
+ /*
+ * IRMASiteWindowed method. Returns actual window of the site.
+ */
+ STDMETHOD_(PNxWindow*,GetWindow)(THIS) PURE;
+};
+
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASiteWindowless
+ *
+ * Purpose:
+ *
+ * Interface for IRMASite objects which are "windowless" or not
+ * associated with platform specific window objects.
+ *
+ * IID_IRMASiteWindowless:
+ *
+ * {00000D02-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASiteWindowless, 0x00000D02, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMASiteWindowless
+
+#define CLSID_IRMASiteWindowless IID_IRMASiteWindowless
+
+DECLARE_INTERFACE_(IRMASiteWindowless, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASiteWindowless methods called by owners of the site.
+ */
+ STDMETHOD(EventOccurred) (THIS_
+ PNxEvent* /*IN*/ pEvent) PURE;
+
+ /*
+ * IRMASiteWindowless method. Returns some parent window that
+ * owns the windowless site. Useful for right-click menus and
+ * dialog box calls.
+ */
+ STDMETHOD_(PNxWindow*,GetParentWindow)(THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASite
+ *
+ * Purpose:
+ *
+ * Interface for IRMASite objects.
+ *
+ * IID_IRMASite:
+ *
+ * {00000D03-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASite, 0x00000D03, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMASite
+
+DECLARE_INTERFACE_(IRMASite, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASite methods usually called by the "context" to
+ * associate users with the site, and to create child sites
+ * as appropriate.
+ */
+ STDMETHOD(AttachUser) (THIS_
+ IRMASiteUser* /*IN*/ pUser) PURE;
+
+ STDMETHOD(DetachUser) (THIS) PURE;
+
+
+ STDMETHOD(GetUser) (THIS_
+ REF(IRMASiteUser*) /*OUT*/ pUser) PURE;
+
+ STDMETHOD(CreateChild) (THIS_
+ REF(IRMASite*) /*OUT*/ pChildSite) PURE;
+
+ STDMETHOD(DestroyChild) (THIS_
+ IRMASite* /*IN*/ pChildSite) PURE;
+
+ /*
+ * IRMASite methods called by the the "context" in which the site
+ * is displayed in order to manage its position. Site users should
+ * not generally call these methods.
+ */
+ STDMETHOD(AttachWatcher) (THIS_
+ IRMASiteWatcher* /*IN*/ pWatcher) PURE;
+
+ STDMETHOD(DetachWatcher) (THIS) PURE;
+
+ STDMETHOD(SetPosition) (THIS_
+ PNxPoint position) PURE;
+
+ STDMETHOD(GetPosition) (THIS_
+ REF(PNxPoint) position) PURE;
+
+ /*
+ * IRMASite methods called by the user of the site to get
+ * information about the site, and to manipulate the site.
+ */
+ STDMETHOD(SetSize) (THIS_
+ PNxSize size) PURE;
+
+ STDMETHOD(GetSize) (THIS_
+ REF(PNxSize) size) PURE;
+
+ STDMETHOD(DamageRect) (THIS_
+ PNxRect rect) PURE;
+
+ STDMETHOD(DamageRegion) (THIS_
+ PNxRegion region) PURE;
+
+ STDMETHOD(ForceRedraw) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASiteUser
+ *
+ * Purpose:
+ *
+ * Interface for the user of the IRMASite objects.
+ *
+ * IID_IRMASiteUser:
+ *
+ * {00000D04-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASiteUser, 0x00000D04, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMASiteUser
+
+DECLARE_INTERFACE_(IRMASiteUser, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASiteUser methods usually called by the "context" to
+ * associate users with the site.
+ */
+ STDMETHOD(AttachSite) (THIS_
+ IRMASite* /*IN*/ pSite) PURE;
+
+ STDMETHOD(DetachSite) (THIS) PURE;
+
+ /*
+ * IRMASiteUser methods called to inform user of an event.
+ */
+ STDMETHOD(HandleEvent) (THIS_
+ PNxEvent* /*IN*/ pEvent) PURE;
+
+ STDMETHOD_(BOOL,NeedsWindowedSites) (THIS) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASiteWatcher
+ *
+ * Purpose:
+ *
+ * Interface for IRMASiteWatcher objects.
+ *
+ * IID_IRMASite:
+ *
+ * {00000D05-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASiteWatcher, 0x00000D05, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMASiteWatcher
+
+DECLARE_INTERFACE_(IRMASiteWatcher, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASiteWatcher methods called by the site when a watcher
+ * is attached to or detached from it.
+ */
+ STDMETHOD(AttachSite) (THIS_
+ IRMASite* /*IN*/ pSite) PURE;
+
+ STDMETHOD(DetachSite) (THIS) PURE;
+
+ /*
+ * IRMASiteWatcher methods called by the site an attempt is
+ * made to change it's position or size. The site watcher must
+ * return PNR_OK for the change to occur. If the site watcher
+ * returns any value other than PNR_OK then the size or position
+ * will not change. The site watcher can also modify the new
+ * size of position.
+ */
+ STDMETHOD(ChangingPosition) (THIS_
+ PNxPoint posOld,
+ REF(PNxPoint)/*IN-OUT*/ posNew) PURE;
+
+ STDMETHOD(ChangingSize) (THIS_
+ PNxSize sizeOld,
+ REF(PNxSize) /*IN-OUT*/ sizeNew) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASiteUserSupplier
+ *
+ * Purpose:
+ *
+ * Interface implemented by renderers and objects with provide layouts to
+ * the client core. This interface is called by the core when it needs a
+ * new IRMASiteUser, or when it is done using an IRMASiteUser.
+ *
+ * IID_IRMASiteUserSupplier:
+ *
+ * {00000D06-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASiteUserSupplier, 0x00000D06, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMASiteUserSupplier
+
+DECLARE_INTERFACE_(IRMASiteUserSupplier, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASiteUserSupplier methods usually called by the
+ * "context" to ask for additional or to release previously
+ * created site users.
+ */
+ STDMETHOD(CreateSiteUser) (THIS_
+ REF(IRMASiteUser*)/*OUT*/ pSiteUser) PURE;
+
+ STDMETHOD(DestroySiteUser) (THIS_
+ IRMASiteUser* /*IN*/ pSiteUser) PURE;
+
+ STDMETHOD_(BOOL,NeedsWindowedSites) (THIS) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASiteSupplier
+ *
+ * Purpose:
+ *
+ * Interface implemented by users of the client core. This interface is
+ * called by the core when it needs a new IRMASite, or when it is done
+ * using an IRMASite.
+ *
+ * IID_IRMASiteSupplier:
+ *
+ * {00000D07-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASiteSupplier, 0x00000D07, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMASiteSupplier
+
+DECLARE_INTERFACE_(IRMASiteSupplier, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASiteSupplier methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMASiteSupplier::SitesNeeded
+ * Purpose:
+ * Called to inform the site supplier that a site with a particular
+ * set of characteristics is needed. If the site supplier can
+ * fulfill the request it should call the site manager and add one
+ * or more new sites.
+ * Note that the request for sites is associated with a Request ID
+ * the client core will inform the site supplier when this requested
+ * site is no longer needed.
+ */
+ STDMETHOD(SitesNeeded) (THIS_
+ UINT32 uReqestID,
+ IRMAValues* pSiteProps) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMASiteSupplier::SitesNotNeeded
+ * Purpose:
+ * Called to inform the site supplier that all sites from a previos
+ * site request are no longer needed. If the site supplier had
+ * previously created non-persistant sites (like popup windows)
+ * to fulfill a request for sites it should call the site manager
+ * and remove those sites.
+ */
+ STDMETHOD(SitesNotNeeded) (THIS_
+ UINT32 uReqestID) PURE;
+
+
+ /************************************************************************
+ * Method:
+ * IRMASiteSupplier::BeginChangeLayout
+ * Purpose:
+ * Called to inform the site supplier a layout change has beginning
+ * it can expect to recieve SitesNeeded() and SitesNotNeeded() calls
+ * while a layout change is in progress,
+ */
+ STDMETHOD(BeginChangeLayout) (THIS) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMASiteSupplier::DoneChangeLayout
+ * Purpose:
+ * Called to inform the site supplier the layout change has been
+ * completed.
+ */
+ STDMETHOD(DoneChangeLayout) (THIS) PURE;
+
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMASiteManager
+ *
+ * Purpose:
+ *
+ * Interface implemented by the client core. This interface is called
+ * by users of the client core to inform it of IRMASite's which are
+ * available for layout of renderers
+ *
+ * IID_IRMASiteManager:
+ *
+ * {00000D08-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASiteManager, 0x00000D08, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMASiteManager
+
+DECLARE_INTERFACE_(IRMASiteManager, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASiteManager methods
+ */
+
+ /************************************************************************
+ * Method:
+ * IRMASiteManager::AddSite
+ * Purpose:
+ * Called to inform the site manager of the existance of a site.
+ */
+ STDMETHOD(AddSite) (THIS_
+ IRMASite* pSite) PURE;
+
+ /************************************************************************
+ * Method:
+ * IRMASiteManager::RemoveSite
+ * Purpose:
+ * Called to inform the site manager that a site is no longer
+ * available.
+ */
+ STDMETHOD(RemoveSite) (THIS_
+ IRMASite* pSite) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAMultiInstanceSiteUserSupplier
+ *
+ * Purpose:
+ *
+ * This is the interface for a special default object which is available
+ * from the common class factory. This object will act as a site user
+ * supplier for any renderer (or other site user object) that wants
+ * default support for multiple instances. The site user must work as
+ * a windowless site for this default implementation to work. The
+ * default object also implements the IRMASite interfave to allow
+ * the site user object to control all the sites through a single
+ * interface instance.
+ *
+ * IID_IRMAMultiInstanceSiteUserSupplier:
+ *
+ * {00000D09-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAMultiInstanceSiteUserSupplier, 0x00000D09, 0x901,
+ 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#define CLSID_IRMAMultiInstanceSiteUserSupplier \
+ IID_IRMAMultiInstanceSiteUserSupplier
+
+#undef INTERFACE
+#define INTERFACE IRMAMultiInstanceSiteUserSupplier
+
+DECLARE_INTERFACE_(IRMAMultiInstanceSiteUserSupplier, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAMultiInstanceSiteUserSupplier methods called by site users.
+ */
+ STDMETHOD(SetSingleSiteUser) (THIS_
+ IUnknown* pUnknown) PURE;
+
+ STDMETHOD(ReleaseSingleSiteUser) (THIS) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ * IRMASiteFullScreen
+ *
+ * Purpose:
+ *
+ * This is the interface for turning on/off the full screen mode
+ *
+ * IID_IRMASiteFullScreen:
+ *
+ * {00000D0B-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMASiteFullScreen, 0x00000D0B, 0x901,
+ 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMASiteFullScreen
+
+DECLARE_INTERFACE_(IRMASiteFullScreen, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMASiteFullScreen methods
+ */
+ STDMETHOD(EnterFullScreen) (THIS) PURE;
+
+ STDMETHOD(ExitFullScreen) (THIS) PURE;
+
+ STDMETHOD(TestFullScreen) (THIS_
+ void* hTestBitmap,const char* pszStatusText) PURE;
+
+ STDMETHOD_(BOOL, IsFullScreen) (THIS) PURE;
+};
+
+
+
+
+/****************************************************************************
+ *
+ * Interface:
+ * IRMAEventHookMgr
+ *
+ * Purpose:
+ *
+ * Add ability to hook events from a named region
+ *
+ * IID_IRMAEventHookMgr:
+ *
+ * {00000D0D-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAEventHookMgr, 0x00000D0D, 0x901,
+ 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAEventHookMgr
+
+DECLARE_INTERFACE_(IRMAEventHookMgr, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAEventHookMgr methods
+ */
+ STDMETHOD(AddHook) (THIS_
+ IRMAEventHook* pHook,
+ const char* pRegionName,
+ UINT16 uLayer) PURE;
+
+ STDMETHOD(RemoveHook) (THIS_
+ IRMAEventHook* pHook,
+ const char* pRegionName,
+ UINT16 uLayer) PURE;
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ * IRMAEventHook
+ *
+ * Purpose:
+ *
+ * Object that gets hooked events sent by IRMAEventHookMgr
+ *
+ * IID_IRMAEventHookMgr:
+ *
+ * {00000D0E-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAEventHook, 0x00000D0E, 0x901,
+ 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAEventHook
+
+DECLARE_INTERFACE_(IRMAEventHook, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAEventHook methods
+ */
+ STDMETHOD(SiteAdded) (THIS_
+ IRMASite* pSite) PURE;
+ STDMETHOD(HandleEvent) (THIS_
+ IRMASite* pSite,
+ PNxEvent* pEvent) PURE;
+ STDMETHOD(SiteRemoved) (THIS_
+ IRMASite* pSite) PURE;
+};
+
+
+/****************************************************************************
+ *
+ * Interface:
+ * IRMAStatusMessage
+ *
+ * Purpose:
+ *
+ * This is the interface for setting the status text.
+ *
+ * IID_IRMAStatusMessage:
+ *
+ * {00000D10-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAStatusMessage, 0x00000D10, 0x901,
+ 0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAStatusMessage
+
+DECLARE_INTERFACE_(IRMAStatusMessage, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /*
+ * IRMAStatusMessage methods
+ */
+
+ STDMETHOD(SetStatus) (THIS_ const char* pText) PURE;
+};
+
+
+#endif /* _RMAWIN_H_ */
diff --git a/include/realmedia/rmaxmltg.h b/include/realmedia/rmaxmltg.h
new file mode 100644
index 000000000..00579c548
--- /dev/null
+++ b/include/realmedia/rmaxmltg.h
@@ -0,0 +1,146 @@
+/****************************************************************************
+ *
+ * $Id: rmaxmltg.h 7 2003-05-30 02:18:02Z gabest $
+ *
+ * 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 XMLTag Object Interfaces.
+ *
+ */
+
+
+#ifndef _RMAXMLTG_H
+#define _RMAXMLTG_H
+
+
+typedef _INTERFACE IRMAXMLTagObject IRMAXMLTagObject;
+typedef _INTERFACE IRMAXMLTagObjectResponse IRMAXMLTagObjectResponse;
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAXMLTagObjectResponse
+ *
+ * IID_IRMAXMLTagObjectResponse:
+ *
+ * {00002C02-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAXMLTagObjectResponse, 0x00002C02, 0x901, 0x11d1, 0x8b, 0x6,
+ 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAXMLTagObjectResponse
+
+DECLARE_INTERFACE_(IRMAXMLTagObjectResponse, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAXMLTagObjectResponse
+ */
+ STDMETHOD(OnTagDone) (THIS_ UINT32 ulInstance, IRMABuffer* pTag) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAXMLTagHandler
+ *
+ * IID_IRMAXMLTagHandler:
+ *
+ * {00002C00-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAXMLTagHandler, 0x00002C03, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAXMLTagHandler
+
+DECLARE_INTERFACE_(IRMAXMLTagHandler, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAXMLTagHandler
+ */
+ STDMETHOD(InitTagHandler) (THIS_ IRMAValues* pOptions) PURE;
+ STDMETHOD(CreateTagObject) (THIS_ IRMAXMLTagObject** ppObj) PURE;
+ STDMETHOD(GetTagHandlerInfo) (THIS_
+ REF(const char*) /*OUT*/ pShortName,
+ REF(const char**) /*OUT*/ pTag,
+ REF(BOOL) /*OUT*/ bCanHandleAsync) PURE;
+
+};
+
+/****************************************************************************
+ *
+ * Interface:
+ *
+ * IRMAXMLTagObject
+ *
+ * IID_IRMAXMLTagObject:
+ *
+ * {00002C01-0901-11d1-8B06-00A024406D59}
+ *
+ */
+DEFINE_GUID(IID_IRMAXMLTagObject, 0x00002C04, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
+ 0xa0, 0x24, 0x40, 0x6d, 0x59);
+
+#undef INTERFACE
+#define INTERFACE IRMAXMLTagObject
+
+DECLARE_INTERFACE_(IRMAXMLTagObject, IUnknown)
+{
+ /*
+ * IUnknown methods
+ */
+ STDMETHOD(QueryInterface) (THIS_
+ REFIID riid,
+ void** ppvObj) PURE;
+
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /************************************************************************
+ * IRMAXMLTagObject
+ */
+ STDMETHOD(InitTagObject) (IRMAXMLTagObjectResponse* pResp) PURE;
+ STDMETHOD(OnTag) (THIS_ UINT32 ulInstance, IRMABuffer* pTag) PURE;
+ STDMETHOD(Close) (THIS) PURE;
+
+};
+
+
+
+#endif