rpcrt4: Convert the server interfaces list into a standard Wine list.

This commit is contained in:
Rob Shearman 2006-11-13 11:45:57 +00:00 committed by Alexandre Julliard
parent 59a90143bf
commit 0b1cc1061b
2 changed files with 8 additions and 9 deletions

View File

@ -68,7 +68,7 @@ static RpcObjTypeMap *RpcObjTypeMaps;
/* list of type RpcServerProtseq */ /* list of type RpcServerProtseq */
static struct list protseqs = LIST_INIT(protseqs); static struct list protseqs = LIST_INIT(protseqs);
static RpcServerInterface* ifs; static struct list server_interfaces = LIST_INIT(server_interfaces);
static CRITICAL_SECTION server_cs; static CRITICAL_SECTION server_cs;
static CRITICAL_SECTION_DEBUG server_cs_debug = static CRITICAL_SECTION_DEBUG server_cs_debug =
@ -124,20 +124,19 @@ static RpcServerInterface* RPCRT4_find_interface(UUID* object,
BOOL check_object) BOOL check_object)
{ {
UUID* MgrType = NULL; UUID* MgrType = NULL;
RpcServerInterface* cif = NULL; RpcServerInterface* cif;
RPC_STATUS status; RPC_STATUS status;
if (check_object) if (check_object)
MgrType = LookupObjType(object); MgrType = LookupObjType(object);
EnterCriticalSection(&server_cs); EnterCriticalSection(&server_cs);
cif = ifs; LIST_FOR_EACH_ENTRY(cif, &server_interfaces, RpcServerInterface, entry) {
while (cif) {
if (!memcmp(if_id, &cif->If->InterfaceId, sizeof(RPC_SYNTAX_IDENTIFIER)) && if (!memcmp(if_id, &cif->If->InterfaceId, sizeof(RPC_SYNTAX_IDENTIFIER)) &&
(check_object == FALSE || UuidEqual(MgrType, &cif->MgrTypeUuid, &status)) && (check_object == FALSE || UuidEqual(MgrType, &cif->MgrTypeUuid, &status)) &&
std_listen) break; std_listen) break;
cif = cif->Next;
} }
LeaveCriticalSection(&server_cs); LeaveCriticalSection(&server_cs);
if (&cif->entry == &server_interfaces) cif = NULL;
TRACE("returning %p for %s\n", cif, debugstr_guid(object)); TRACE("returning %p for %s\n", cif, debugstr_guid(object));
return cif; return cif;
} }
@ -177,7 +176,8 @@ static void RPCRT4_process_packet(RpcConnection* conn, RpcPktHdr* hdr, RPC_MESSA
response = RPCRT4_BuildBindNackHeader(NDR_LOCAL_DATA_REPRESENTATION, response = RPCRT4_BuildBindNackHeader(NDR_LOCAL_DATA_REPRESENTATION,
RPC_VER_MAJOR, RPC_VER_MINOR); RPC_VER_MAJOR, RPC_VER_MINOR);
} else { } else {
TRACE("accepting bind request on connection %p\n", conn); TRACE("accepting bind request on connection %p for %s\n", conn,
debugstr_guid(&hdr->bind.abstract.SyntaxGUID));
/* accept. */ /* accept. */
response = RPCRT4_BuildBindAckHeader(NDR_LOCAL_DATA_REPRESENTATION, response = RPCRT4_BuildBindAckHeader(NDR_LOCAL_DATA_REPRESENTATION,
@ -784,8 +784,7 @@ RPC_STATUS WINAPI RpcServerRegisterIf2( RPC_IF_HANDLE IfSpec, UUID* MgrTypeUuid,
sif->IfCallbackFn = IfCallbackFn; sif->IfCallbackFn = IfCallbackFn;
EnterCriticalSection(&server_cs); EnterCriticalSection(&server_cs);
sif->Next = ifs; list_add_head(&server_interfaces, &sif->entry);
ifs = sif;
LeaveCriticalSection(&server_cs); LeaveCriticalSection(&server_cs);
if (sif->Flags & RPC_IF_AUTOLISTEN) if (sif->Flags & RPC_IF_AUTOLISTEN)

View File

@ -61,7 +61,7 @@ struct protseq_ops
typedef struct _RpcServerInterface typedef struct _RpcServerInterface
{ {
struct _RpcServerInterface* Next; struct list entry;
RPC_SERVER_INTERFACE* If; RPC_SERVER_INTERFACE* If;
UUID MgrTypeUuid; UUID MgrTypeUuid;
RPC_MGR_EPV* MgrEpv; RPC_MGR_EPV* MgrEpv;