RPC_STATUS RPCRT4_DestroyConnection(RpcConnection* Connection) { TRACE("connection: %p\n", Connection); RPCRT4_CloseConnection(Connection); RPCRT4_strfree(Connection->Endpoint); RPCRT4_strfree(Connection->NetworkAddr); HeapFree(GetProcessHeap(), 0, Connection->NetworkOptions); if (Connection->AuthInfo) RpcAuthInfo_Release(Connection->AuthInfo); if (Connection->QOS) RpcQualityOfService_Release(Connection->QOS); /* server-only */ if (Connection->server_binding) RPCRT4_ReleaseBinding(Connection->server_binding); HeapFree(GetProcessHeap(), 0, Connection); return RPC_S_OK; }
static RPC_STATUS get_epm_handle_client(RPC_BINDING_HANDLE handle, RPC_BINDING_HANDLE *epm_handle) { RpcBinding *bind = handle; const char * pszEndpoint = NULL; RPC_STATUS status; RpcBinding* epm_bind; unsigned int i; if (bind->server) return RPC_S_INVALID_BINDING; for (i = 0; i < sizeof(epm_endpoints)/sizeof(epm_endpoints[0]); i++) if (!strcmp(bind->Protseq, epm_endpoints[i].protseq)) pszEndpoint = epm_endpoints[i].endpoint; if (!pszEndpoint) { FIXME("no endpoint for the endpoint-mapper found for protseq %s\n", debugstr_a(bind->Protseq)); return RPC_S_PROTSEQ_NOT_SUPPORTED; } status = RpcBindingCopy(handle, epm_handle); if (status != RPC_S_OK) return status; epm_bind = *epm_handle; if (epm_bind->AuthInfo) { /* don't bother with authenticating against the EPM by default * (see EnableAuthEpResolution registry value) */ RpcAuthInfo_Release(epm_bind->AuthInfo); epm_bind->AuthInfo = NULL; } RPCRT4_ResolveBinding(epm_bind, pszEndpoint); TRACE("RPC_S_OK\n"); return RPC_S_OK; }