From ec2f51369092c5bce9093a0f8dc342d4889896f4 Mon Sep 17 00:00:00 2001 From: Damjan Jovanovic Date: Thu, 23 Jun 2011 07:15:40 +0200 Subject: [PATCH] rpcrt4: Implement RpcNetworkInqProtseqs. --- dlls/rpcrt4/rpc_server.c | 18 ------------- dlls/rpcrt4/rpc_transport.c | 65 +++++++++++++++++++++++++++++++++++++++++++++ include/rpcdce.h | 6 +++++ 3 files changed, 71 insertions(+), 18 deletions(-) diff --git a/dlls/rpcrt4/rpc_server.c b/dlls/rpcrt4/rpc_server.c index 3a9ecf81de3..9fd4cf6696b 100644 --- a/dlls/rpcrt4/rpc_server.c +++ b/dlls/rpcrt4/rpc_server.c @@ -825,24 +825,6 @@ static RPC_STATUS RPCRT4_use_protseq(RpcServerProtseq* ps, const char *endpoint) } /*********************************************************************** - * RpcNetworkInqProtseqsA (RPCRT4.@) - */ -RPC_STATUS WINAPI RpcNetworkInqProtseqsA( RPC_PROTSEQ_VECTORA* ProtSeqVector ) -{ - FIXME("(%p): stub\n", ProtSeqVector); - return RPC_S_NO_PROTSEQS_REGISTERED; -} - -/*********************************************************************** - * RpcNetworkInqProtseqsW (RPCRT4.@) - */ -RPC_STATUS WINAPI RpcNetworkInqProtseqsW( RPC_PROTSEQ_VECTORW* ProtSeqVector ) -{ - FIXME("(%p): stub\n", ProtSeqVector); - return RPC_S_NO_PROTSEQS_REGISTERED; -} - -/*********************************************************************** * RpcServerInqBindings (RPCRT4.@) */ RPC_STATUS WINAPI RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector ) diff --git a/dlls/rpcrt4/rpc_transport.c b/dlls/rpcrt4/rpc_transport.c index 0ba97202850..467c3050f1b 100644 --- a/dlls/rpcrt4/rpc_transport.c +++ b/dlls/rpcrt4/rpc_transport.c @@ -3160,3 +3160,68 @@ RPC_STATUS WINAPI RpcProtseqVectorFreeW(RPC_PROTSEQ_VECTORW **protseqs) } return RPC_S_OK; } + +/*********************************************************************** + * RpcNetworkInqProtseqsW (RPCRT4.@) + */ +RPC_STATUS WINAPI RpcNetworkInqProtseqsW( RPC_PROTSEQ_VECTORW** protseqs ) +{ + RPC_PROTSEQ_VECTORW *pvector; + int i = 0; + RPC_STATUS status = RPC_S_OUT_OF_MEMORY; + + TRACE("(%p)\n", protseqs); + + *protseqs = HeapAlloc(GetProcessHeap(), 0, sizeof(RPC_PROTSEQ_VECTORW)+(sizeof(unsigned short*)*ARRAYSIZE(protseq_list))); + if (!*protseqs) + goto end; + pvector = *protseqs; + pvector->Count = 0; + for (i = 0; i < ARRAYSIZE(protseq_list); i++) + { + pvector->Protseq[i] = HeapAlloc(GetProcessHeap(), 0, (strlen(protseq_list[i].name)+1)*sizeof(unsigned short)); + if (pvector->Protseq[i] == NULL) + goto end; + MultiByteToWideChar(CP_ACP, 0, (CHAR*)protseq_list[i].name, -1, + (WCHAR*)pvector->Protseq[i], strlen(protseq_list[i].name) + 1); + pvector->Count++; + } + status = RPC_S_OK; + +end: + if (status != RPC_S_OK) + RpcProtseqVectorFreeW(protseqs); + return status; +} + +/*********************************************************************** + * RpcNetworkInqProtseqsA (RPCRT4.@) + */ +RPC_STATUS WINAPI RpcNetworkInqProtseqsA(RPC_PROTSEQ_VECTORA** protseqs) +{ + RPC_PROTSEQ_VECTORA *pvector; + int i = 0; + RPC_STATUS status = RPC_S_OUT_OF_MEMORY; + + TRACE("(%p)\n", protseqs); + + *protseqs = HeapAlloc(GetProcessHeap(), 0, sizeof(RPC_PROTSEQ_VECTORW)+(sizeof(unsigned char*)*ARRAYSIZE(protseq_list))); + if (!*protseqs) + goto end; + pvector = *protseqs; + pvector->Count = 0; + for (i = 0; i < ARRAYSIZE(protseq_list); i++) + { + pvector->Protseq[i] = HeapAlloc(GetProcessHeap(), 0, strlen(protseq_list[i].name)+1); + if (pvector->Protseq[i] == NULL) + goto end; + strcpy((char*)pvector->Protseq[i], protseq_list[i].name); + pvector->Count++; + } + status = RPC_S_OK; + +end: + if (status != RPC_S_OK) + RpcProtseqVectorFreeA(protseqs); + return status; +} diff --git a/include/rpcdce.h b/include/rpcdce.h index 76994dfdfdb..bbdc42f9aa0 100644 --- a/include/rpcdce.h +++ b/include/rpcdce.h @@ -562,6 +562,12 @@ RPCRTAPI RPC_STATUS RPC_ENTRY #define RpcNetworkIsProtseqValid WINELIB_NAME_AW(RpcNetworkIsProtseqValid) RPCRTAPI RPC_STATUS RPC_ENTRY + RpcNetworkInqProtseqsA( RPC_PROTSEQ_VECTORA** protseqs ); +RPCRTAPI RPC_STATUS RPC_ENTRY + RpcNetworkInqProtseqsW( RPC_PROTSEQ_VECTORW** protseqs ); +#define RpcNetworkInqProtseqs WINELIB_NAME_AW(RpcNetworkInqProtseqs) + +RPCRTAPI RPC_STATUS RPC_ENTRY RpcProtseqVectorFreeA( RPC_PROTSEQ_VECTORA** protseqs ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcProtseqVectorFreeW( RPC_PROTSEQ_VECTORW** protseqs ); -- 2.11.4.GIT