/*
 * Copyright 2003 Ove Kåven, TransGaming Technologies
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

/* see the official DCOM specification
 * (there's a copy at http://www.grimes.demon.co.uk/DCOM/DCOMSpec.htm) */

import "unknwn.idl";

[
  uuid(99fcfe60-5260-101b-bbcb-00aa0021347a),
  pointer_default(unique)
]
interface ObjectRpcBaseTypes
{
  typedef unsigned hyper ID;
  typedef ID MID;
  typedef ID OXID;
  typedef ID OID;
  typedef ID SETID;
  typedef GUID IPID;
  typedef GUID CID;
  typedef REFGUID REFIPID;

  const unsigned short COM_MINOR_VERSION_1 = 1;
  const unsigned short COM_MINOR_VERSION_2 = 2;

  const unsigned short COM_MAJOR_VERSION = 5;
  const unsigned short COM_MINOR_VERSION = 3;

  typedef struct tagCOMVERSION {
    unsigned short MajorVersion;
    unsigned short MinorVersion;
  } COMVERSION;

  const unsigned long ORPCF_NULL = 0;
  const unsigned long ORPCF_LOCAL = 1;
  const unsigned long ORPCF_RESERVED1 = 2;
  const unsigned long ORPCF_RESERVED2 = 4;
  const unsigned long ORPCF_RESERVED3 = 8;
  const unsigned long ORPCF_RESERVED4 = 16;

  typedef struct tagORPC_EXTENT {
    GUID id;
    unsigned long size;
    [size_is((size+7)&~7)] byte data[];
  } ORPC_EXTENT;

  typedef struct tagORPC_EXTENT_ARRAY {
    unsigned long size;
    unsigned long reserved;
    [size_is((size+1)&~1,), unique] ORPC_EXTENT **extent;
  } ORPC_EXTENT_ARRAY;

  typedef struct tagORPCTHIS {
    COMVERSION version;
    unsigned long flags;
    unsigned long reserved1;
    CID cid;
    [unique] ORPC_EXTENT_ARRAY *extensions;
  } ORPCTHIS;

  typedef struct tagORPCTHAT {
    unsigned long flags;
    [unique] ORPC_EXTENT_ARRAY *extensions;
  } ORPCTHAT;

  const unsigned short NCADG_IP_UDP = 0x08;
  const unsigned short NCACN_IP_TCP = 0x07;
  const unsigned short NCADG_IPX = 0x0E;
  const unsigned short NCACN_SPX = 0x0C;
  const unsigned short NCACN_NB_NB = 0x12;
  const unsigned short NCACN_NB_IPX = 0x0D;
  const unsigned short NCACN_DNET_NSP = 0x04;
  const unsigned short NCACN_HTTP = 0x1F;

  typedef struct tagSTRINGBINDING {
    unsigned short wTowerId;
    [string] WCHAR aNetworkAddr[];
  } STRINGBINDING;

  const unsigned short COM_C_AUTHZ_NONE = 0xffff;

  typedef struct tagSECURITYBINDING {
    unsigned short wAuthnSvc;
    unsigned short wAuthzSvc;
    [string] WCHAR aPrincName[];
  } SECURITYBINDING;

  typedef struct tagDUALSTRINGARRAY {
    unsigned short wNumEntries;
    unsigned short wSecurityOffset;
    [size_is(wNumEntries)] unsigned short aStringArray[];
  } DUALSTRINGARRAY;

  typedef struct tagOXID_INFO {
    DWORD dwTid;
    DWORD dwPid;
    IPID ipidRemUnknown;
    DWORD dwAuthnHint;
    DUALSTRINGARRAY *psa;
  } OXID_INFO;

  const unsigned long OBJREF_SIGNATURE = 0x574f454d; /* "MEOW" */
  const unsigned long OBJREF_STANDARD = 0x1;
  const unsigned long OBJREF_HANDLER = 0x2;
  const unsigned long OBJREF_CUSTOM = 0x4;
  const unsigned long SORF_OXRES1 = 0x1;
  const unsigned long SORF_OXRES2 = 0x20;
  const unsigned long SORF_OXRES3 = 0x40;
  const unsigned long SORF_OXRES4 = 0x80;
  const unsigned long SORF_OXRES5 = 0x100;
  const unsigned long SORF_OXRES6 = 0x200;
  const unsigned long SORF_OXRES7 = 0x400;
  const unsigned long SORF_OXRES8 = 0x800;
  const unsigned long SORF_NULL = 0x0;
  const unsigned long SORF_NOPING = 0x1000;

  typedef struct tagSTDOBJREF {
    unsigned long flags;
    unsigned long cPublicRefs;
    OXID oxid;
    OID oid;
    IPID ipid;
  } STDOBJREF;

  typedef struct tagOBJREF {
    unsigned long signature;
    unsigned long flags;
    GUID iid;
    [switch_is(flags)] union {
    [case(OBJREF_STANDARD)] struct OR_STANDARD {
        STDOBJREF std;
        DUALSTRINGARRAY saResAddr;
      } u_standard;
    [case(OBJREF_HANDLER)] struct OR_HANDLER {
        STDOBJREF std;
        CLSID clsid;
        DUALSTRINGARRAY saResAddr;
      } u_handler;
    [case(OBJREF_CUSTOM)] struct OR_CUSTOM {
        CLSID clsid;
        unsigned long cbExtension;
        ULONG size;
        [size_is(size), ref] byte *pData;
      } u_custom;
    } u_objref;
  } OBJREF;

  typedef struct tagMInterfacePointer {
    ULONG ulCntData;
    [size_is(ulCntData)] BYTE abData[];
  } MInterfacePointer;

  typedef [unique] MInterfacePointer *PMInterfacePointer;

} /* interface ObjectRpcBaseTypes */

[
  object,
  uuid(00000131-0000-0000-C000-000000000046)
]
interface IRemUnknown : IUnknown
{
  typedef [unique] IRemUnknown *LPREMUNKNOWN;

  typedef struct tagREMQIRESULT {
    HRESULT hResult;
    STDOBJREF std;
  } REMQIRESULT;

  typedef struct tagREMINTERFACEREF {
    IPID ipid;
    unsigned long cPublicRefs;
    unsigned long cPrivateRefs;
  } REMINTERFACEREF; 

  HRESULT RemQueryInterface(
    [in] REFIPID ripid,
    [in] ULONG cRefs,
    [in] unsigned short cIids,
    [in, size_is(cIids)] IID *iids,
    [out, size_is(,cIids)] REMQIRESULT **ppQIResults);

  HRESULT RemAddRef(
    [in] unsigned short cInterfaceRefs,
    [in, size_is(cInterfaceRefs)] REMINTERFACEREF* InterfaceRefs,
    [out, size_is(cInterfaceRefs)] HRESULT *pResults);

  HRESULT RemRelease(
    [in] unsigned short cInterfaceRefs,
    [in, size_is(cInterfaceRefs)] REMINTERFACEREF* InterfaceRefs);
}

[
  object,
  uuid(00000142-0000-0000-C000-000000000046)
]
interface IRemUnknown2 : IRemUnknown
{
  typedef [unique] IRemUnknown2 *LPREMUNKNOWN2;

  HRESULT RemQueryInterface2(
    [in] REFIPID ripid,
    [in] unsigned short cIids,
    [in, size_is(cIids)] IID *iids,
    [out, size_is(cIids)] HRESULT *phr,
    [out, size_is(cIids)] MInterfacePointer **ppMIF);
}

[
  uuid(99fcfec4-5260-101b-bbcb-00aa0021347a),
  pointer_default(unique)
]
interface IOXIDResolver
{
  [idempotent] error_status_t ResolveOxid(
    [in] handle_t hRpc,
    [in] OXID *pOxid,
    [in] unsigned short cRequestedProtseqs,
    [in, ref, size_is(cRequestedProtseqs)] unsigned short arRequestedProtseqs[],
    [out, ref] DUALSTRINGARRAY **ppdsaOxidBindings,
    [out, ref] IPID *pipidRemUnknown,
    [out, ref] DWORD *pAuthnHint);

  [idempotent] error_status_t SimplePing(
    [in] handle_t hRpc,
    [in] SETID *pSetId);

  [idempotent] error_status_t ComplexPing(
    [in] handle_t hRpc,
    [in, out] SETID *pSetId,
    [in] unsigned short SequenceNum,
    [in] unsigned short cAddToSet,
    [in] unsigned short cDelFromSet,
    [in, unique, size_is(cAddToSet)] OID AddToSet[],
    [in, unique, size_is(cDelFromSet)] OID DelFromSet[],
    [out] unsigned short *pPingBackoffFactor);

  [idempotent] error_status_t ServerAlive(
    [in] handle_t hRpc);

  [idempotent] error_status_t ResolveOxid2(
    [in] handle_t hRpc,
    [in] OXID *pOxid,
    [in] unsigned short cRequestedProtseqs,
    [in, ref, size_is(cRequestedProtseqs)] unsigned short arRequestedProtseqs[],
    [out, ref] DUALSTRINGARRAY **ppdsaOxidBindings,
    [out, ref] IPID *pipidRemUnknown,
    [out, ref] DWORD *pAuthnHint,
    [out, ref] COMVERSION *pComVersion); 
}

[
  uuid(4d9f4ab8-7d1c-11cf-861e-0020af6e7c57),
  pointer_default(unique)
]
interface IRemoteActivation
{
  const unsigned long MODE_GET_CLASS_OBJECT = 0xffffffff;

  HRESULT RemoteActivation(
    [in] handle_t hRpc,
    [in] ORPCTHIS *ORPCthis,
    [out] ORPCTHAT *ORPCthat,
    [in] GUID *Clsid,
    [in, string, unique] WCHAR *pwszObjectName,
    [in, unique] MInterfacePointer *pObjectStorage,
    [in] DWORD ClientImpLevel,
    [in] DWORD Mode,
    [in] DWORD Interfaces,
    [in, unique, size_is(Interfaces)] IID *pIIDs,
    [in] unsigned short cRequestedProtseqs,
    [in, size_is(cRequestedProtseqs)] unsigned short RequestedProtseqs[],
    [out] OXID *pOxid,
    [out] DUALSTRINGARRAY **ppdsaOxidBindings,
    [out] IPID *pipidRemUnknown,
    [out] DWORD *pAuthnHint,
    [out] COMVERSION *pServerVersion,
    [out] HRESULT *phr,
    [out,size_is(Interfaces)] MInterfacePointer **ppInterfaceData,
    [out,size_is(Interfaces)] HRESULT *pResults);
}
