Module: wine Branch: refs/heads/master Commit: 7406cc210bd27015629d781bacb63c91bacd5872 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=7406cc210bd27015629d781b...
Author: Robert Shearman rob@codeweavers.com Date: Sun Mar 5 13:37:34 2006 +0000
ole: Implement IRpcChannelBuffer::GetDestCtx on the client side.
---
dlls/ole32/compobj_private.h | 4 +++- dlls/ole32/marshal.c | 5 ++++- dlls/ole32/rpc.c | 26 ++++++++++++++++++++++---- 3 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/dlls/ole32/compobj_private.h b/dlls/ole32/compobj_private.h index 8aeb0e0..66a7c1c 100644 --- a/dlls/ole32/compobj_private.h +++ b/dlls/ole32/compobj_private.h @@ -201,7 +201,9 @@ HRESULT marshal_object(APARTMENT *apt, S struct dispatch_params;
void RPC_StartRemoting(struct apartment *apt); -HRESULT RPC_CreateClientChannel(const OXID *oxid, const IPID *ipid, IRpcChannelBuffer **pipebuf); +HRESULT RPC_CreateClientChannel(const OXID *oxid, const IPID *ipid, + DWORD dest_context, void *dest_context_data, + IRpcChannelBuffer **chan); HRESULT RPC_CreateServerChannel(IRpcChannelBuffer **chan); void RPC_ExecuteCall(struct dispatch_params *params); HRESULT RPC_RegisterInterface(REFIID riid); diff --git a/dlls/ole32/marshal.c b/dlls/ole32/marshal.c index 95ff257..684d93d 100644 --- a/dlls/ole32/marshal.c +++ b/dlls/ole32/marshal.c @@ -1094,7 +1094,10 @@ static HRESULT unmarshal_object(const ST if (hr == E_NOINTERFACE) { IRpcChannelBuffer *chanbuf; - hr = RPC_CreateClientChannel(&stdobjref->oxid, &stdobjref->ipid, &chanbuf); + hr = RPC_CreateClientChannel(&stdobjref->oxid, &stdobjref->ipid, + proxy_manager->dest_context, + proxy_manager->dest_context_data, + &chanbuf); if (hr == S_OK) hr = proxy_manager_create_ifproxy(proxy_manager, stdobjref, riid, chanbuf, &ifproxy); diff --git a/dlls/ole32/rpc.c b/dlls/ole32/rpc.c index 806c323..3c5f3ea 100644 --- a/dlls/ole32/rpc.c +++ b/dlls/ole32/rpc.c @@ -100,6 +100,8 @@ typedef struct
RPC_BINDING_HANDLE bind; /* handle to the remote server */ OXID oxid; /* apartment in which the channel is valid */ + DWORD dest_context; /* returned from GetDestCtx */ + LPVOID dest_context_data; /* returned from GetDestCtx */ } ClientRpcChannelBuffer;
struct dispatch_params @@ -379,7 +381,19 @@ static HRESULT WINAPI ClientRpcChannelBu return HRESULT_FROM_WIN32(status); }
-static HRESULT WINAPI RpcChannelBuffer_GetDestCtx(LPRPCCHANNELBUFFER iface, DWORD* pdwDestContext, void** ppvDestContext) +static HRESULT WINAPI ClientRpcChannelBuffer_GetDestCtx(LPRPCCHANNELBUFFER iface, DWORD* pdwDestContext, void** ppvDestContext) +{ + ClientRpcChannelBuffer *This = (ClientRpcChannelBuffer *)iface; + + TRACE("(%p,%p)\n", pdwDestContext, ppvDestContext); + + *pdwDestContext = This->dest_context; + *ppvDestContext = This->dest_context_data; + + return S_OK; +} + +static HRESULT WINAPI ServerRpcChannelBuffer_GetDestCtx(LPRPCCHANNELBUFFER iface, DWORD* pdwDestContext, void** ppvDestContext) { FIXME("(%p,%p), stub!\n", pdwDestContext, ppvDestContext); return E_FAIL; @@ -400,7 +414,7 @@ static const IRpcChannelBufferVtbl Clien ClientRpcChannelBuffer_GetBuffer, ClientRpcChannelBuffer_SendReceive, ClientRpcChannelBuffer_FreeBuffer, - RpcChannelBuffer_GetDestCtx, + ClientRpcChannelBuffer_GetDestCtx, RpcChannelBuffer_IsConnected };
@@ -412,12 +426,14 @@ static const IRpcChannelBufferVtbl Serve ServerRpcChannelBuffer_GetBuffer, ServerRpcChannelBuffer_SendReceive, ServerRpcChannelBuffer_FreeBuffer, - RpcChannelBuffer_GetDestCtx, + ServerRpcChannelBuffer_GetDestCtx, RpcChannelBuffer_IsConnected };
/* returns a channel buffer for proxies */ -HRESULT RPC_CreateClientChannel(const OXID *oxid, const IPID *ipid, IRpcChannelBuffer **chan) +HRESULT RPC_CreateClientChannel(const OXID *oxid, const IPID *ipid, + DWORD dest_context, void *dest_context_data, + IRpcChannelBuffer **chan) { ClientRpcChannelBuffer *This; WCHAR endpoint[200]; @@ -470,6 +486,8 @@ HRESULT RPC_CreateClientChannel(const OX This->super.refs = 1; This->bind = bind; apartment_getoxid(COM_CurrentApt(), &This->oxid); + This->dest_context = dest_context; + This->dest_context_data = dest_context_data;
*chan = (IRpcChannelBuffer*)This;