//+---------------------------------------------------------------------------
//
//  Copyright (C) 1992, Microsoft Corporation.
//
//  File:	iface.idl
//
//  Contents:	Public definitions used for xmiting interfaces via RPC
//
//  History:	28-Jan-93   Ricksa	Created.
//
//  Notes:	These definitions are used for transmitting interfaces
//		via RPC.
//
//----------------------------------------------------------------------------
[ uuid(5C0EB534-BF9F-101A-8818-02608C4D2359),
  version(0.1),
  pointer_default(unique)
]

interface XmitDefs
{
    import "wtypes.idl";

    typedef struct
    {
       DWORD         callcat; // CALLCATEGORY
       DWORD         dwClientThread;
    } LOCALTHIS;

    // CALLCATEGORY is used internally and represents the categories of calls
    // that can be made.

    // DCOMWORK - Get rid of the unused internal types.
    typedef enum tagCALLCATEGORY
    {
	CALLCAT_NOCALL		    = 0,    // no call in progress
	CALLCAT_SYNCHRONOUS	    = 1,    // normal sychornous call
	CALLCAT_ASYNC		    = 2,    // asynchronous call
	CALLCAT_INPUTSYNC	    = 3,    // input-synchronous call
	CALLCAT_INTERNALSYNC	    = 4,    // internal ssync call
	CALLCAT_INTERNALINPUTSYNC   = 5,    // internal inputssync call
	CALLCAT_SCMCALL 	    = 6     // important scm call
    } CALLCATEGORY;


    //	wire representation of an entire interface. used for wrapping a
    //	marshalled interface in a stream representation CXmitRpcStream.
    typedef struct tagInterfaceData
    {
	ULONG		ulCntData;		    //	size of data
	[length_is(ulCntData)] BYTE abData[1024];   //	data  BUGBUG: sizeis()
    } InterfaceData;

    typedef [unique] InterfaceData * PInterfaceData;

#pragma midl_echo("//  BUGBUG: until the length_is midl option is fixed, we ")
#pragma midl_echo("//  have a different computation for the size of the IFD.")
#pragma midl_echo("#define IFD_SIZE(pIFD) (sizeof(InterfaceData) + pIFD->ulCntData - 1024)")
}
