From 8c2e179d477c99ab9c52e6b9af19a86d553d10b5 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 8 Nov 2004 02:12:15 +0000 Subject: r3611: DCOM client support works!! The torture test DCOM-SIMPLE now successfully does an IStream_Read and a IStream_Write call. This test can now be run successfully against the "Simple DCOM" Visual Studio example. (You have to quote out line 337 in pidl. pidl complains if the variable that contains the array size follows the array. I still need to fix this properly) Next goals: - Clean up code - Server side support - Support custom marshalling - Support DCOM interfaces in files other then dcom.idl (This used to be commit 8693344772a9b700533179f4bacfe27ec27dfcfe) --- source4/librpc/idl/dcerpc.idl | 17 +++++++++-------- source4/librpc/idl/dcom.idl | 20 ++++++++++++-------- 2 files changed, 21 insertions(+), 16 deletions(-) (limited to 'source4/librpc/idl') diff --git a/source4/librpc/idl/dcerpc.idl b/source4/librpc/idl/dcerpc.idl index cd87539589..1b8add3e79 100644 --- a/source4/librpc/idl/dcerpc.idl +++ b/source4/librpc/idl/dcerpc.idl @@ -36,10 +36,19 @@ interface dcerpc const uint8 DCERPC_REQUEST_LENGTH = 24; const uint8 DCERPC_MAX_SIGN_SIZE = 32; + typedef struct { + } dcerpc_empty; + + typedef [nodiscriminant] union { + [default] dcerpc_empty empty; + [case(LIBNDR_FLAG_OBJECT_PRESENT)] GUID object; + } dcerpc_object; + typedef struct { uint32 alloc_hint; uint16 context_id; uint16 opnum; + [switch_is(ndr->flags & LIBNDR_FLAG_OBJECT_PRESENT)] dcerpc_object object; [flag(NDR_ALIGN8)] DATA_BLOB _pad; [flag(NDR_REMAINING)] DATA_BLOB stub_and_verifier; } dcerpc_request; @@ -170,13 +179,6 @@ interface dcerpc [case(DCERPC_PKT_BIND_NAK)] dcerpc_bind_nak bind_nak; } dcerpc_payload; - typedef struct { - } dcerpc_empty; - - typedef [nodiscriminant] union { - [default] dcerpc_empty empty; - [case(DCERPC_PFC_FLAG_ORPC)] GUID object; - } dcerpc_object; /* pfc_flags values */ const uint8 DCERPC_PFC_FLAG_FIRST = 0x01; @@ -201,7 +203,6 @@ interface dcerpc uint16 frag_length; /* Total length of fragment */ uint16 auth_length; /* authenticator length */ uint32 call_id; /* Call identifier */ - [switch_is(pfc_flags & DCERPC_PFC_FLAG_ORPC)] dcerpc_object object; [switch_is(ptype)] dcerpc_payload u; } dcerpc_packet; } diff --git a/source4/librpc/idl/dcom.idl b/source4/librpc/idl/dcom.idl index 912902a29a..10e63772dd 100644 --- a/source4/librpc/idl/dcom.idl +++ b/source4/librpc/idl/dcom.idl @@ -200,7 +200,7 @@ interface ObjectRpcBaseTypes uint32 cPublicRefs; /* count of references passed */ OXID oxid; /* oxid of server with this oid */ OID oid; /* oid of object with this ipid */ - IPID ipid; /* ipid of Interface */ + IPID ipid; /* ipid of interface pointer to this object */ } STDOBJREF; typedef struct @@ -249,7 +249,7 @@ interface ObjectRpcBaseTypes typedef [public] struct { uint32 size; - [subcontext(4),align(4)] OBJREF obj; + [subcontext(4)] OBJREF obj; } MInterfacePointer; } @@ -501,11 +501,15 @@ uuid(DB7C21F8-FE33-4C11-AEA5-CEB56F076FBB), ] interface IStream : IUnknown { - WERROR IStream_Read([in] uint32 num_requested, - [out,size_is(*num_read)] uint8 *data, - [out] uint32 *num_read); - - WERROR IStream_Write([in,size_is(num_requested)] uint8 *data, + WERROR IStream_Read( + [out, size_is(num_requested), length_is(num_read)] uint8 pv[], + [in] uint32 num_requested, + [in] uint32 *num_readx, + [out] uint32 num_read + ); + + WERROR IStream_Write( + [in,size_is(num_requested)] uint8 *data, [in] uint32 num_requested, - [out] uint32 *num_written); + [out] uint32 num_written); } -- cgit