From 0c9960a24e534444592b2bc0473152ff992443db Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Mon, 8 Mar 2010 17:11:13 -0800 Subject: [PATCH] Refresh of nd-con --- trunk/ulp/netdirect/user/nd_connect.cpp | 22 ++++++++++++++++++++-- trunk/ulp/netdirect/user/nd_connect.h | 1 + 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/trunk/ulp/netdirect/user/nd_connect.cpp b/trunk/ulp/netdirect/user/nd_connect.cpp index 81d5f7bd..26524d36 100644 --- a/trunk/ulp/netdirect/user/nd_connect.cpp +++ b/trunk/ulp/netdirect/user/nd_connect.cpp @@ -37,15 +37,26 @@ CNDConnector::CNDConnector(CNDAdapter *pAdapter) pAdapter->AddRef(); m_pAdapter = pAdapter; m_pWvConnEp = NULL; + m_Connects = 0; } STDMETHODIMP CNDConnector:: Init(void) { + IWVConnectEndpoint *ep; HRESULT hr; - hr = m_pAdapter->m_pWvProvider->CreateConnectEndpoint(&m_pWvConnEp); - return NDConvertWVStatus(hr); + hr = m_pAdapter->m_pWvProvider->CreateConnectEndpoint(&ep); + if (FAILED(hr)) { + return NDConvertWVStatus(hr); + } + + if (m_pWvConnEp != NULL) { + m_pWvConnEp->Release(); + m_pWvConnEp = ep; + } + + return ND_SUCCESS; } CNDConnector::~CNDConnector() @@ -132,6 +143,13 @@ Connect(INDEndpoint* pEndpoint, IBAT_PATH_BLOB path; HRESULT hr; + if (m_Connects++ > 0) { + hr = Init(); + if (FAILED(hr)) { + goto out; + } + } + RtlCopyMemory(&addr, &m_pAdapter->m_Address, AddressLength); if (addr.Sa.sa_family == AF_INET) { addr.Sin.sin_port = LocalPort; diff --git a/trunk/ulp/netdirect/user/nd_connect.h b/trunk/ulp/netdirect/user/nd_connect.h index 2da2f222..688fedc7 100644 --- a/trunk/ulp/netdirect/user/nd_connect.h +++ b/trunk/ulp/netdirect/user/nd_connect.h @@ -114,6 +114,7 @@ public: protected: STDMETHODIMP Init(); + int m_Connects; }; #endif // _ND_CONNECTOR_H_ -- 2.46.0