ULONG VmDirRpcServerUseProtSeq( PCSTR pszProtSeq ) { DWORD dwError = 0; dwError = RpcServerUseProtseqA( (unsigned char*)pszProtSeq, RPC_C_PROTSEQ_MAX_REQS_DEFAULT, NULL ); BAIL_ON_VMDIR_ERROR(dwError); error: return dwError; }
static void test_RpcServerUseProtseq(void) { RPC_STATUS status; RPC_BINDING_VECTOR *bindings; ULONG i; ULONG binding_count_before; ULONG binding_count_after1; ULONG binding_count_after2; ULONG endpoints_registered = 0; static unsigned char iptcp[] = "ncacn_ip_tcp"; static unsigned char np[] = "ncacn_np"; static unsigned char ncalrpc[] = "ncalrpc"; status = RpcServerInqBindings(&bindings); if (status == RPC_S_NO_BINDINGS) binding_count_before = 0; else { binding_count_before = bindings->Count; ok(status == RPC_S_OK, "RpcServerInqBindings failed with status %d\n", status); RpcBindingVectorFree(&bindings); } /* show that RpcServerUseProtseqEp(..., NULL, ...) is the same as * RpcServerUseProtseq(...) */ status = RpcServerUseProtseqEpA(ncalrpc, 0, NULL, NULL); ok(status == RPC_S_OK || broken(status == RPC_S_INVALID_ENDPOINT_FORMAT), "RpcServerUseProtseqEp with NULL endpoint failed with status %d\n", status); /* register protocol sequences without explicit endpoints */ status = RpcServerUseProtseqA(np, 0, NULL); if (status == RPC_S_PROTSEQ_NOT_SUPPORTED) win_skip("ncacn_np not supported\n"); else ok(status == RPC_S_OK, "RpcServerUseProtseq(ncacn_np) failed with status %d\n", status); if (status == RPC_S_OK) endpoints_registered++; status = RpcServerUseProtseqA(iptcp, 0, NULL); ok(status == RPC_S_OK, "RpcServerUseProtseq(ncacn_ip_tcp) failed with status %d\n", status); if (status == RPC_S_OK) endpoints_registered++; status = RpcServerUseProtseqA(ncalrpc, 0, NULL); ok(status == RPC_S_OK, "RpcServerUseProtseqEp(ncalrpc) failed with status %d\n", status); if (status == RPC_S_OK) endpoints_registered++; status = RpcServerInqBindings(&bindings); ok(status == RPC_S_OK, "RpcServerInqBindings failed with status %d\n", status); binding_count_after1 = bindings->Count; ok(binding_count_after1 == binding_count_before + endpoints_registered, "wrong binding count - before: %u, after %u, endpoints registered %u\n", binding_count_before, binding_count_after1, endpoints_registered); for (i = 0; i < bindings->Count; i++) { RPC_CSTR str_bind; status = RpcBindingToStringBindingA(bindings->BindingH[i], &str_bind); ok(status == RPC_S_OK, "RpcBindingToStringBinding failed with status %d\n", status); trace("string binding: %s\n", str_bind); RpcStringFreeA(&str_bind); } RpcBindingVectorFree(&bindings); /* re-register - endpoints should be reused */ status = RpcServerUseProtseqA(np, 0, NULL); if (status == RPC_S_PROTSEQ_NOT_SUPPORTED) win_skip("ncacn_np not supported\n"); else ok(status == RPC_S_OK, "RpcServerUseProtseq(ncacn_np) failed with status %d\n", status); status = RpcServerUseProtseqA(iptcp, 0, NULL); ok(status == RPC_S_OK, "RpcServerUseProtseq(ncacn_ip_tcp) failed with status %d\n", status); status = RpcServerUseProtseqA(ncalrpc, 0, NULL); ok(status == RPC_S_OK, "RpcServerUseProtseqEp(ncalrpc) failed with status %d\n", status); status = RpcServerInqBindings(&bindings); ok(status == RPC_S_OK, "RpcServerInqBindings failed with status %d\n", status); binding_count_after2 = bindings->Count; ok(binding_count_after2 == binding_count_after1, "bindings should have been re-used - after1: %u after2: %u\n", binding_count_after1, binding_count_after2); RpcBindingVectorFree(&bindings); }