]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
netdirect/winverbs: add IClassfactory and DLL interfaces
authorshefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 11 Jun 2009 22:28:39 +0000 (22:28 +0000)
committershefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 11 Jun 2009 22:28:39 +0000 (22:28 +0000)
Add missing interfaces needed to plug in as a WSD provider.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1@2251 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

branches/winverbs/ulp/netdirect/user/nd_export.def
branches/winverbs/ulp/netdirect/user/nd_main.cpp
branches/winverbs/ulp/netdirect/user/nd_provider.cpp
branches/winverbs/ulp/netdirect/user/nd_provider.h

index a436958ee136996b5aae7540c6c16c211d9981d2..920a72bab9c556668d7406f91ba10b064bd5b72d 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * Copyright (c) 2008 Intel Corporation. All rights reserved.\r
+ * Copyright (c) 2009 Intel Corporation. All rights reserved.\r
  *\r
  * This software is available to you under the OpenIB.org BSD license\r
  * below:\r
@@ -32,3 +32,4 @@ LIBRARY       WVNDPROV.DLL
 EXPORTS\r
        DllCanUnloadNow         PRIVATE\r
        DllGetClassObject       PRIVATE\r
+       WSPStartup\r
index c1042ca6f4ef8c6f123ef6b9447ff0baa22a1029..3c9e071e50b1faea23c14fad90bf4382bd940ed1 100644 (file)
  */\r
 \r
 #include <windows.h>\r
+#include <ws2spi.h>\r
 #include "..\..\..\etc\user\dlist.c"\r
+#include "nd_provider.h"\r
 \r
 \r
+extern "C" {\r
+\r
 BOOLEAN WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)\r
 {\r
        UNREFERENCED_PARAMETER(hInstance);\r
@@ -39,3 +43,35 @@ BOOLEAN WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 \r
        return TRUE;\r
 }\r
+\r
+STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void** ppv)\r
+{\r
+       UNREFERENCED_PARAMETER(rclsid);\r
+\r
+       if (riid != IID_IClassFactory) {\r
+               *ppv = NULL;\r
+               return E_NOINTERFACE;\r
+       }\r
+\r
+       *ppv = new CNDClassFactory();\r
+       if (*ppv == NULL) {\r
+               return E_OUTOFMEMORY;\r
+       }\r
+\r
+       return S_OK;\r
+}\r
+\r
+int WSPAPI WSPStartup(WORD wVersionRequested, LPWSPDATA lpWSPData,\r
+                                         LPWSAPROTOCOL_INFOW lpProtocolInfo,\r
+                                         WSPUPCALLTABLE UpcallTable, LPWSPPROC_TABLE lpProcTable)\r
+{\r
+       UNREFERENCED_PARAMETER(wVersionRequested);\r
+       UNREFERENCED_PARAMETER(lpWSPData);\r
+       UNREFERENCED_PARAMETER(lpProtocolInfo);\r
+       UNREFERENCED_PARAMETER(UpcallTable);\r
+       UNREFERENCED_PARAMETER(lpProcTable);\r
+\r
+       return WSASYSNOTREADY;\r
+}\r
+\r
+} // extern "C"
\ No newline at end of file
index 51962652251b55705262039802aac2f4b1e1eae6..213fa53f3533909aade2dd3905a5e6f89f6e4799 100644 (file)
@@ -120,3 +120,60 @@ OpenAdapter(const struct sockaddr* pAddress, SIZE_T AddressLength,
 {\r
        return CNDAdapter::CreateInstance(this, pAddress, AddressLength, ppAdapter);\r
 }\r
+\r
+\r
+//-------------------------\r
+// CNDClassFactory routines\r
+//-------------------------\r
+\r
+STDMETHODIMP CNDClassFactory::\r
+QueryInterface(REFIID riid, LPVOID FAR* ppvObj)\r
+{\r
+       if (riid != IID_IUnknown && riid != IID_IClassFactory) {\r
+               *ppvObj = NULL;\r
+               return E_NOINTERFACE;\r
+       }\r
+\r
+       *ppvObj = this;\r
+       AddRef();\r
+       return ND_SUCCESS;\r
+}\r
+\r
+STDMETHODIMP_(ULONG) CNDClassFactory::\r
+AddRef(void)\r
+{\r
+       return CNDBase::AddRef();\r
+}\r
+\r
+STDMETHODIMP_(ULONG) CNDClassFactory::\r
+Release(void)\r
+{\r
+       return CNDBase::Release();\r
+}\r
+\r
+STDMETHODIMP CNDClassFactory::\r
+CreateInstance(IUnknown* pUnkOuter, REFIID riid, void** ppObject)\r
+{\r
+       if (pUnkOuter != NULL) {\r
+               return CLASS_E_NOAGGREGATION;\r
+       }\r
+\r
+       if (riid != IID_INDProvider) {\r
+               *ppObject = NULL;\r
+               return E_NOINTERFACE;\r
+       }\r
+\r
+       *ppObject = new CNDProvider();\r
+       if (*ppObject == NULL) {\r
+               return E_OUTOFMEMORY;\r
+       }\r
+\r
+       return S_OK;\r
+}\r
+\r
+STDMETHODIMP CNDClassFactory::\r
+LockServer(BOOL fLock)\r
+{\r
+       UNREFERENCED_PARAMETER(fLock);\r
+       return S_OK;\r
+}\r
index d08c6b64f74a8e30bf851f16b9cd17595b39e489..7bf23ed941bdbf05ad559b4893001c80823292fd 100644 (file)
@@ -55,4 +55,22 @@ public:
        void Delete() {delete this;}\r
 };\r
 \r
+\r
+class CNDClassFactory : public IClassFactory, public CNDBase\r
+{\r
+public:\r
+       // IUnknown methods\r
+       STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR* ppvObj);\r
+       STDMETHODIMP_(ULONG) AddRef();\r
+       STDMETHODIMP_(ULONG) Release();\r
+\r
+       // IClassFactory methods\r
+       STDMETHODIMP CreateInstance(IUnknown* pUnkOuter, REFIID riid, void** ppObject);\r
+       STDMETHODIMP LockServer(BOOL fLock);\r
+\r
+       CNDClassFactory() {};\r
+       ~CNDClassFactory() {};\r
+       void Delete() {delete this;}\r
+};\r
+\r
 #endif // _ND_PROVIDER_H_
\ No newline at end of file