Remove stale HPC Pack 2008 Beta 1 objects
[mirror/winof/.git] / ulp / nd / user / NdConnector.h
1 /*\r
2  * Copyright (c) 2008 Microsoft Corporation.  All rights reserved.\r
3  *\r
4  * This software is available to you under the OpenIB.org BSD license\r
5  * below:\r
6  *\r
7  *     Redistribution and use in source and binary forms, with or\r
8  *     without modification, are permitted provided that the following\r
9  *     conditions are met:\r
10  *\r
11  *      - Redistributions of source code must retain the above\r
12  *        copyright notice, this list of conditions and the following\r
13  *        disclaimer.\r
14  *\r
15  *      - Redistributions in binary form must reproduce the above\r
16  *        copyright notice, this list of conditions and the following\r
17  *        disclaimer in the documentation and/or other materials\r
18  *        provided with the distribution.\r
19  *\r
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
24  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
25  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
26  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
27  * SOFTWARE.\r
28  *\r
29  * $Id:$\r
30  */\r
31 \r
32 #pragma once\r
33 \r
34 #include "ndspi.h"\r
35 #include "nddebug.h"\r
36 #include <iba/ib_al.h>\r
37 #include <iba/ib_at_ioctl.h>\r
38 #include <ws2tcpip.h>\r
39 #include "ual_ci_ca.h"\r
40 \r
41 \r
42 namespace NetworkDirect\r
43 {\r
44 \r
45 class CConnector :\r
46     public INDConnector\r
47 {\r
48     friend class CListen;\r
49 \r
50 private:\r
51     CConnector(void);\r
52     ~CConnector(void);\r
53     void FreeCid(void);\r
54 \r
55 public:\r
56     static HRESULT Create(\r
57         __in CAdapter* pParent,\r
58         __deref_out INDConnector** ppConnector\r
59         );\r
60 \r
61     // *** IUnknown methods ***\r
62     HRESULT STDMETHODCALLTYPE QueryInterface(\r
63         REFIID riid,\r
64         LPVOID FAR* ppvObj\r
65         );\r
66 \r
67     ULONG STDMETHODCALLTYPE AddRef(void);\r
68 \r
69     ULONG STDMETHODCALLTYPE Release(void);\r
70 \r
71     // *** INDOverlapped methods ***\r
72     HRESULT STDMETHODCALLTYPE CancelOverlappedRequests(void);\r
73 \r
74     HRESULT STDMETHODCALLTYPE GetOverlappedResult(\r
75         __inout OVERLAPPED *pOverlapped,\r
76         __out SIZE_T *pNumberOfBytesTransferred,\r
77         __in BOOL bWait\r
78         );\r
79 \r
80     // *** INDConnector methods ***\r
81     HRESULT STDMETHODCALLTYPE CreateEndpoint(\r
82         __in INDCompletionQueue* pInboundCq,\r
83         __in INDCompletionQueue* pOutboundCq,\r
84         __in SIZE_T nInboundEntries,\r
85         __in SIZE_T nOutboundEntries,\r
86         __in SIZE_T nInboundSge,\r
87         __in SIZE_T nOutboundSge,\r
88         __in SIZE_T InboundReadLimit,\r
89         __in SIZE_T OutboundReadLimit,\r
90         __out_opt SIZE_T* pMaxInlineData,\r
91         __deref_out INDEndpoint** ppEndpoint\r
92         );\r
93 \r
94     HRESULT STDMETHODCALLTYPE Connect(\r
95         __in INDEndpoint* pEndpoint,\r
96         __in_bcount(AddressLength) const struct sockaddr* pAddress,\r
97         __in SIZE_T AddressLength,\r
98         __in INT Protocol,\r
99         __in_opt USHORT LocalPort,\r
100         __in_bcount_opt(PrivateDataLength) const void* pPrivateData,\r
101         __in SIZE_T PrivateDataLength,\r
102         __inout OVERLAPPED* pOverlapped\r
103         );\r
104 \r
105     HRESULT STDMETHODCALLTYPE CompleteConnect(\r
106         __inout OVERLAPPED* pOverlapped\r
107         );\r
108 \r
109     HRESULT STDMETHODCALLTYPE Accept(\r
110         __in INDEndpoint* pEndpoint,\r
111         __in_bcount_opt(PrivateDataLength) const void* pPrivateData,\r
112         __in SIZE_T PrivateDataLength,\r
113         __inout OVERLAPPED* pOverlapped\r
114         );\r
115 \r
116     HRESULT STDMETHODCALLTYPE Reject(\r
117         __in_bcount_opt(PrivateDataLength) const void* pPrivateData,\r
118         __in SIZE_T PrivateDataLength\r
119         );\r
120 \r
121     HRESULT STDMETHODCALLTYPE GetConnectionData(\r
122         __out_opt SIZE_T* pInboundReadLimit,\r
123         __out_opt SIZE_T* pOutboundReadLimit,\r
124         __out_bcount_part_opt(*pPrivateDataLength, *pPrivateDataLength) void* pPrivateData,\r
125         __inout SIZE_T* pPrivateDataLength\r
126         );\r
127 \r
128     HRESULT STDMETHODCALLTYPE GetLocalAddress(\r
129         __out_bcount_part_opt(*pAddressLength, *pAddressLength) struct sockaddr* pAddress,\r
130         __inout SIZE_T* pAddressLength\r
131         );\r
132 \r
133     HRESULT STDMETHODCALLTYPE GetPeerAddress(\r
134         __out_bcount_part_opt(*pAddressLength, *pAddressLength) struct sockaddr* pAddress,\r
135         __inout SIZE_T* pAddressLength\r
136         );\r
137 \r
138     HRESULT STDMETHODCALLTYPE NotifyDisconnect(\r
139         __inout_opt OVERLAPPED* pOverlapped\r
140         );\r
141 \r
142     HRESULT STDMETHODCALLTYPE Disconnect(\r
143         __inout OVERLAPPED* pOverlapped\r
144         );\r
145 \r
146 private:\r
147     HRESULT GetAddressFromPdata(\r
148         __out_bcount_part(*pAddressLength, *pAddressLength) struct sockaddr* pAddress,\r
149         __inout SIZE_T* pAddressLength\r
150         );\r
151 \r
152 protected:\r
153         volatile LONG m_nRef;\r
154 \r
155         CAdapter* m_pParent;\r
156 \r
157         CEndpoint* m_pEndpoint;\r
158 \r
159         UINT8 m_Protocol;\r
160         USHORT m_LocalPort;\r
161         net32_t m_cid;\r
162         bool m_fActive;\r
163 \r
164         union _addr\r
165         {\r
166             struct sockaddr_in v4;\r
167             struct sockaddr_in6 v6;\r
168 \r
169         } m_PeerAddr;\r
170 };\r
171 \r
172 }\r