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

#pragma makedep proxy
#pragma makedep register

import "unknwn.idl";

[
    threading(both),
    uuid(00000320-0000-0000-c000-000000000046)
]
coclass PSFactoryBuffer { interface IFactoryBuffer; }

[
  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);
}
