Commit 9208eef5 authored by Rob Shearman's avatar Rob Shearman Committed by Alexandre Julliard

ole32: Call the message filter for incoming calls.

parent c0a25d35
...@@ -931,13 +931,15 @@ static HRESULT unmarshal_ORPCTHIS(RPC_MESSAGE *msg, ORPCTHIS *orpcthis, ...@@ -931,13 +931,15 @@ static HRESULT unmarshal_ORPCTHIS(RPC_MESSAGE *msg, ORPCTHIS *orpcthis,
void RPC_ExecuteCall(struct dispatch_params *params) void RPC_ExecuteCall(struct dispatch_params *params)
{ {
struct message_state *message_state; struct message_state *message_state = NULL;
RPC_MESSAGE *msg = (RPC_MESSAGE *)params->msg; RPC_MESSAGE *msg = (RPC_MESSAGE *)params->msg;
char *original_buffer = msg->Buffer; char *original_buffer = msg->Buffer;
ORPCTHIS orpcthis; ORPCTHIS orpcthis;
ORPC_EXTENT_ARRAY orpc_ext_array; ORPC_EXTENT_ARRAY orpc_ext_array;
WIRE_ORPC_EXTENT *first_wire_orpc_extent; WIRE_ORPC_EXTENT *first_wire_orpc_extent;
/* handle ORPCTHIS and server extensions */
params->hr = unmarshal_ORPCTHIS(msg, &orpcthis, &orpc_ext_array, &first_wire_orpc_extent); params->hr = unmarshal_ORPCTHIS(msg, &orpcthis, &orpc_ext_array, &first_wire_orpc_extent);
if (params->hr != S_OK) if (params->hr != S_OK)
goto exit; goto exit;
...@@ -966,6 +968,41 @@ void RPC_ExecuteCall(struct dispatch_params *params) ...@@ -966,6 +968,41 @@ void RPC_ExecuteCall(struct dispatch_params *params)
msg->Handle = message_state; msg->Handle = message_state;
msg->BufferLength -= message_state->prefix_data_len; msg->BufferLength -= message_state->prefix_data_len;
/* call message filter */
if (COM_CurrentApt()->filter)
{
DWORD handlecall;
INTERFACEINFO interface_info;
interface_info.pUnk = NULL; /* FIXME */
interface_info.iid = IID_NULL; /* FIXME */
interface_info.wMethod = msg->ProcNum;
handlecall = IMessageFilter_HandleInComingCall(COM_CurrentApt()->filter,
CALLTYPE_TOPLEVEL /* FIXME */,
(HTASK)GetCurrentProcessId(),
0 /* FIXME */,
&interface_info);
TRACE("IMessageFilter_HandleInComingCall returned %d\n", handlecall);
switch (handlecall)
{
case SERVERCALL_REJECTED:
params->hr = RPC_E_CALL_REJECTED;
goto exit;
case SERVERCALL_RETRYLATER:
#if 0 /* FIXME: handle retries on the client side before enabling this code */
params->hr = RPC_E_RETRY;
goto exit;
#else
FIXME("retry call later not implemented\n");
break;
#endif
case SERVERCALL_ISHANDLED:
default:
break;
}
}
/* invoke the method */ /* invoke the method */
params->hr = IRpcStubBuffer_Invoke(params->stub, params->msg, params->chan); params->hr = IRpcStubBuffer_Invoke(params->stub, params->msg, params->chan);
...@@ -974,9 +1011,9 @@ void RPC_ExecuteCall(struct dispatch_params *params) ...@@ -974,9 +1011,9 @@ void RPC_ExecuteCall(struct dispatch_params *params)
msg->Handle = message_state->binding_handle; msg->Handle = message_state->binding_handle;
msg->Buffer = (char *)msg->Buffer - message_state->prefix_data_len; msg->Buffer = (char *)msg->Buffer - message_state->prefix_data_len;
msg->BufferLength += message_state->prefix_data_len; msg->BufferLength += message_state->prefix_data_len;
HeapFree(GetProcessHeap(), 0, message_state);
exit: exit:
HeapFree(GetProcessHeap(), 0, message_state);
IRpcStubBuffer_Release(params->stub); IRpcStubBuffer_Release(params->stub);
IRpcChannelBuffer_Release(params->chan); IRpcChannelBuffer_Release(params->chan);
if (params->handle) SetEvent(params->handle); if (params->handle) SetEvent(params->handle);
......
...@@ -1290,7 +1290,7 @@ static void test_message_filter(void) ...@@ -1290,7 +1290,7 @@ static void test_message_filter(void)
ok_more_than_one_lock(); ok_more_than_one_lock();
hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (LPVOID*)&proxy); hr = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (LPVOID*)&proxy);
todo_wine { ok(hr == RPC_E_CALL_REJECTED, "Call should have returned RPC_E_CALL_REJECTED, but return 0x%08x instead\n", hr); } ok(hr == RPC_E_CALL_REJECTED, "Call should have returned RPC_E_CALL_REJECTED, but return 0x%08x instead\n", hr);
if (proxy) IUnknown_Release(proxy); if (proxy) IUnknown_Release(proxy);
proxy = NULL; proxy = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment