Update_20100628
@@ -18,7 +18,7 @@ | ||
18 | 18 | |
19 | 19 | BOOL CRawSocket::Initialize(SOCKMSG SockMsg, DWORD dwLocalAddress, WORD wPort) |
20 | 20 | { |
21 | - SOCKADDR_IN siAddr; | |
21 | + SOCKADDR_IN sAddrIn; | |
22 | 22 | |
23 | 23 | if (!CreateSocket(SockMsg)) |
24 | 24 | { |
@@ -31,16 +31,16 @@ | ||
31 | 31 | return FALSE; |
32 | 32 | } |
33 | 33 | |
34 | - if (!(SetSendBufferSize(SX_UDP_BUFSIZE) && SetSendBufferSize(SX_UDP_BUFSIZE))) | |
34 | + if (!SetBufferSize(SX_UDP_BUFSIZE)) | |
35 | 35 | { |
36 | 36 | CloseSocket(); |
37 | 37 | return FALSE; |
38 | 38 | } |
39 | 39 | |
40 | - siAddr.sin_family = AF_INET; | |
41 | - siAddr.sin_port = htons(wPort); | |
42 | - siAddr.sin_addr.s_addr = dwLocalAddress; | |
43 | - CopyMemory(&m_LocalAddr, &siAddr, sizeof(m_LocalAddr)); | |
40 | + sAddrIn.sin_family = AF_INET; | |
41 | + sAddrIn.sin_port = htons(wPort); | |
42 | + sAddrIn.sin_addr.s_addr = dwLocalAddress; | |
43 | + CopyMemory(&m_LocalAddr, &sAddrIn, sizeof(m_LocalAddr)); | |
44 | 44 | |
45 | 45 | m_fInit = TRUE; |
46 | 46 |
@@ -49,26 +49,7 @@ | ||
49 | 49 | |
50 | 50 | BOOL CRawSocket::CreateSocket(SOCKMSG SockMsg) |
51 | 51 | { |
52 | - if (!IBaseSocket::CreateSocketWindow()) | |
53 | - { | |
54 | - return FALSE; | |
55 | - } | |
56 | - | |
57 | - SetTargetWnd(SockMsg); | |
58 | - | |
59 | - m_hSocket = socket(AF_INET, SOCK_RAW, IPPROTO_IP); | |
60 | - | |
61 | - if (m_hSocket == INVALID_SOCKET) | |
62 | - { | |
63 | - TRACE1("***** ERROR: socket(%d) *****\n", GetLastError()); | |
64 | - m_dwError = GetLastError(); | |
65 | - return FALSE; | |
66 | - } | |
67 | - | |
68 | - SetSendTimeout(m_dwSendTimeout); | |
69 | - SetRecieveTimeout(m_dwReceiveTimeout); | |
70 | - | |
71 | - return TRUE; | |
52 | + return doCreateSocket(SockMsg, SOCK_RAW, IPPROTO_IP); | |
72 | 53 | } |
73 | 54 | |
74 | 55 | BOOL CRawSocket::SetPromiscuous(BOOL flag) |
@@ -17,26 +17,7 @@ | ||
17 | 17 | |
18 | 18 | BOOL CPeerSocket::CreateSocket(SOCKMSG SockMsg) |
19 | 19 | { |
20 | - if (!IBaseSocket::CreateSocketWindow()) | |
21 | - { | |
22 | - return FALSE; | |
23 | - } | |
24 | - | |
25 | - SetTargetWnd(SockMsg); | |
26 | - | |
27 | - m_hSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); | |
28 | - | |
29 | - if (m_hSocket == INVALID_SOCKET) | |
30 | - { | |
31 | - TRACE1("***** ERROR: socket(%d) *****\n", GetLastError()); | |
32 | - m_dwError = GetLastError(); | |
33 | - return FALSE; | |
34 | - } | |
35 | - | |
36 | - SetSendTimeout(m_dwSendTimeout); | |
37 | - SetRecieveTimeout(m_dwReceiveTimeout); | |
38 | - | |
39 | - return TRUE; | |
20 | + return doCreateSocket(SockMsg, SOCK_DGRAM, IPPROTO_UDP); | |
40 | 21 | } |
41 | 22 | |
42 | 23 | void CPeerSocket::OnClose(SOCKET hSocket, int nErrorCode) |
@@ -52,7 +33,7 @@ | ||
52 | 33 | if (CloseSocket()) |
53 | 34 | { |
54 | 35 | ConvertSockAddrToNetAddr(&m_PeerAddr, NetAddr); |
55 | - m_SockMsg.pTgtObj->OnSocketCloseMessage(m_SockMsg.dwSocketID, NetAddr); | |
36 | + m_SockMsg.pCallback->OnSocketCloseMessage(m_SockMsg.dwSocketID, NetAddr); | |
56 | 37 | } |
57 | 38 | } |
58 | 39 |
@@ -64,13 +45,13 @@ | ||
64 | 45 | return; |
65 | 46 | } |
66 | 47 | |
67 | - m_SockMsg.pTgtObj->OnSocketSendMessage(m_SockMsg.dwSocketID); | |
48 | + m_SockMsg.pCallback->OnSocketSendMessage(m_SockMsg.dwSocketID); | |
68 | 49 | } |
69 | 50 | |
70 | 51 | void CPeerSocket::OnReceive(SOCKET hSocket, int nErrorCode) |
71 | 52 | { |
72 | 53 | CByteArray data; |
73 | - SOCKADDR SockAddr; | |
54 | + SOCKADDR sAddr; | |
74 | 55 | NETADDR NetAddr; |
75 | 56 | int nLenSA = sizeof(SOCKADDR); |
76 | 57 |
@@ -80,18 +61,18 @@ | ||
80 | 61 | return; |
81 | 62 | } |
82 | 63 | |
83 | - if (!doReceiveFrom(hSocket, data, &SockAddr, &nLenSA)) | |
64 | + if (!doReceiveFrom(hSocket, data, &sAddr, &nLenSA)) | |
84 | 65 | { |
85 | 66 | return; |
86 | 67 | } |
87 | 68 | |
88 | - ConvertSockAddrToNetAddr(&SockAddr, NetAddr); | |
89 | - m_SockMsg.pTgtObj->OnSocketReceiveFromMessage(m_SockMsg.dwSocketID, NetAddr, data); | |
69 | + ConvertSockAddrToNetAddr(&sAddr, NetAddr); | |
70 | + m_SockMsg.pCallback->OnSocketReceiveFromMessage(m_SockMsg.dwSocketID, NetAddr, data); | |
90 | 71 | } |
91 | 72 | |
92 | 73 | BOOL CPeerSocket::Initialize(SOCKMSG SockMsg, DWORD dwLocalAddress, WORD wPort) |
93 | 74 | { |
94 | - SOCKADDR_IN siAddr; | |
75 | + SOCKADDR_IN sAddrIn; | |
95 | 76 | |
96 | 77 | if (!CreateSocket(SockMsg)) |
97 | 78 | { |
@@ -104,16 +85,16 @@ | ||
104 | 85 | return FALSE; |
105 | 86 | } |
106 | 87 | |
107 | - if (!(SetSendBufferSize(SX_UDP_BUFSIZE) && SetSendBufferSize(SX_UDP_BUFSIZE))) | |
88 | + if (!(SetSendBufferSize(SX_UDP_BUFSIZE) && SetReceiveBufferSize(SX_UDP_BUFSIZE))) | |
108 | 89 | { |
109 | 90 | CloseSocket(); |
110 | 91 | return FALSE; |
111 | 92 | } |
112 | 93 | |
113 | - siAddr.sin_family = AF_INET; | |
114 | - siAddr.sin_port = htons(wPort); | |
115 | - siAddr.sin_addr.s_addr = dwLocalAddress; | |
116 | - CopyMemory(&m_LocalAddr, &siAddr, sizeof(m_LocalAddr)); | |
94 | + sAddrIn.sin_family = AF_INET; | |
95 | + sAddrIn.sin_port = htons(wPort); | |
96 | + sAddrIn.sin_addr.s_addr = dwLocalAddress; | |
97 | + CopyMemory(&m_LocalAddr, &sAddrIn, sizeof(m_LocalAddr)); | |
117 | 98 | |
118 | 99 | m_fInit = TRUE; |
119 | 100 |
@@ -24,7 +24,7 @@ | ||
24 | 24 | |
25 | 25 | BOOL CBcastSocket::SetBroadcast(DWORD dwBcastAddress, WORD wPort) |
26 | 26 | { |
27 | - SOCKADDR_IN siAddr; | |
27 | + SOCKADDR_IN sAddrIn; | |
28 | 28 | BOOL flag = TRUE; |
29 | 29 | |
30 | 30 | if (!SetSockOpt(SO_BROADCAST, (LPSTR)&flag, sizeof(flag))) |
@@ -32,11 +32,11 @@ | ||
32 | 32 | return FALSE; |
33 | 33 | } |
34 | 34 | |
35 | - siAddr.sin_family = AF_INET; | |
36 | - siAddr.sin_port = htons(wPort); | |
37 | - siAddr.sin_addr.s_addr = dwBcastAddress; | |
35 | + sAddrIn.sin_family = AF_INET; | |
36 | + sAddrIn.sin_port = htons(wPort); | |
37 | + sAddrIn.sin_addr.s_addr = dwBcastAddress; | |
38 | 38 | |
39 | - CopyMemory(&m_BcastAddr, &siAddr, sizeof(m_BcastAddr)); | |
39 | + CopyMemory(&m_BcastAddr, &sAddrIn, sizeof(m_BcastAddr)); | |
40 | 40 | m_fBcast = TRUE; |
41 | 41 | |
42 | 42 | return TRUE; |
@@ -26,13 +26,13 @@ | ||
26 | 26 | return; |
27 | 27 | } |
28 | 28 | |
29 | - m_SockMsg.pTgtObj->OnSocketSendMessage(m_SockMsg.dwSocketID); | |
29 | + m_SockMsg.pCallback->OnSocketSendMessage(m_SockMsg.dwSocketID); | |
30 | 30 | } |
31 | 31 | |
32 | 32 | void CServerSocket::OnReceive(SOCKET hSocket, int nErrorCode) |
33 | 33 | { |
34 | 34 | CByteArray data, buf; |
35 | - SOCKADDR SockAddr; | |
35 | + SOCKADDR sAddr; | |
36 | 36 | NETADDR NetAddr; |
37 | 37 | int nRet, nIndex; |
38 | 38 |
@@ -58,18 +58,18 @@ | ||
58 | 58 | return; |
59 | 59 | } |
60 | 60 | |
61 | - if (!doGetPeerName(hSocket, &SockAddr) || !doReceive(hSocket, data)) | |
61 | + if (!doGetPeerName(hSocket, &sAddr) || !doReceive(hSocket, data)) | |
62 | 62 | { |
63 | 63 | return; |
64 | 64 | } |
65 | 65 | |
66 | - ConvertSockAddrToNetAddr(&SockAddr, NetAddr); | |
67 | - m_SockMsg.pTgtObj->OnSocketReceiveMessage(m_SockMsg.dwSocketID, NetAddr, data); | |
66 | + ConvertSockAddrToNetAddr(&sAddr, NetAddr); | |
67 | + m_SockMsg.pCallback->OnSocketReceiveMessage(m_SockMsg.dwSocketID, NetAddr, data); | |
68 | 68 | } |
69 | 69 | |
70 | 70 | void CServerSocket::OnAccept(SOCKET hSocket, int nErrorCode) |
71 | 71 | { |
72 | - SOCKADDR SockAddr; | |
72 | + SOCKADDR sAddr; | |
73 | 73 | NETADDR NetAddr; |
74 | 74 | int nSockLen = sizeof(SOCKADDR); |
75 | 75 |
@@ -79,7 +79,7 @@ | ||
79 | 79 | return; |
80 | 80 | } |
81 | 81 | |
82 | - if (!Accept(&SockAddr, &nSockLen)) | |
82 | + if (!Accept(&sAddr, &nSockLen)) | |
83 | 83 | { |
84 | 84 | return; |
85 | 85 | } |
@@ -90,8 +90,8 @@ | ||
90 | 90 | return; |
91 | 91 | } |
92 | 92 | |
93 | - ConvertSockAddrToNetAddr(&SockAddr, NetAddr); | |
94 | - m_SockMsg.pTgtObj->OnSocketAcceptMessage(m_SockMsg.dwSocketID, NetAddr); | |
93 | + ConvertSockAddrToNetAddr(&sAddr, NetAddr); | |
94 | + m_SockMsg.pCallback->OnSocketAcceptMessage(m_SockMsg.dwSocketID, NetAddr); | |
95 | 95 | } |
96 | 96 | |
97 | 97 | void CServerSocket::OnClose(SOCKET hSocket, int nErrorCode) |
@@ -111,36 +111,12 @@ | ||
111 | 111 | return; |
112 | 112 | } |
113 | 113 | |
114 | - m_SockMsg.pTgtObj->OnSocketCloseMessage(m_SockMsg.dwSocketID, NetAddr); | |
114 | + m_SockMsg.pCallback->OnSocketCloseMessage(m_SockMsg.dwSocketID, NetAddr); | |
115 | 115 | } |
116 | 116 | |
117 | 117 | BOOL CServerSocket::CreateSocket(SOCKMSG SockMsg) |
118 | 118 | { |
119 | - if (!IBaseSocket::CreateSocketWindow()) | |
120 | - { | |
121 | - return FALSE; | |
122 | - } | |
123 | - | |
124 | - SetTargetWnd(SockMsg); | |
125 | - | |
126 | - m_hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); | |
127 | - | |
128 | - if (m_hSocket == INVALID_SOCKET) | |
129 | - { | |
130 | - TRACE1("***** ERROR: socket(%d) *****\n", GetLastError()); | |
131 | - m_dwError = GetLastError(); | |
132 | - return FALSE; | |
133 | - } | |
134 | - | |
135 | - if (!AsyncSelect(FD_SERVER)) | |
136 | - { | |
137 | - return FALSE; | |
138 | - } | |
139 | - | |
140 | - SetSendTimeout(m_dwSendTimeout); | |
141 | - SetRecieveTimeout(m_dwReceiveTimeout); | |
142 | - | |
143 | - return TRUE; | |
119 | + return (doCreateSocket(SockMsg, SOCK_STREAM, IPPROTO_TCP) && AsyncSelect(FD_SERVER)); | |
144 | 120 | } |
145 | 121 | |
146 | 122 | BOOL CServerSocket::Initialize(SOCKMSG SockMsg, WORD wPort, DWORD dwBindAddress, int nBacklog) |
@@ -204,13 +180,13 @@ | ||
204 | 180 | return TRUE; |
205 | 181 | } |
206 | 182 | |
207 | -BOOL CServerSocket::Accept(LPSOCKADDR lpSockAddr, int *lpSockAddrLen) | |
183 | +BOOL CServerSocket::Accept(LPSOCKADDR lpsAddr, int *lpsAddrLen) | |
208 | 184 | { |
209 | 185 | SOCKET hSocket; |
210 | 186 | BOOL flag = TRUE; |
211 | 187 | BOOL fSend, fReceive; |
212 | 188 | |
213 | - hSocket = accept(m_hSocket, lpSockAddr, lpSockAddrLen); | |
189 | + hSocket = accept(m_hSocket, lpsAddr, lpsAddrLen); | |
214 | 190 | |
215 | 191 | if (hSocket == INVALID_SOCKET) |
216 | 192 | { |
@@ -219,7 +195,7 @@ | ||
219 | 195 | return FALSE; |
220 | 196 | } |
221 | 197 | |
222 | - if (!m_fInternet && !IsLANConnection(lpSockAddr)) | |
198 | + if (!m_fInternet && !IsLANConnection(lpsAddr)) | |
223 | 199 | { |
224 | 200 | doCloseSocket(hSocket); |
225 | 201 | return FALSE; |
@@ -261,17 +237,17 @@ | ||
261 | 237 | return FALSE; |
262 | 238 | } |
263 | 239 | |
264 | - AddConnection(hSocket, lpSockAddr, *lpSockAddrLen); | |
240 | + AddConnection(hSocket, lpsAddr, *lpsAddrLen); | |
265 | 241 | |
266 | 242 | return TRUE; |
267 | 243 | } |
268 | 244 | |
269 | -void CServerSocket::AddConnection(SOCKET hSocket, const LPSOCKADDR lpSockAddr, int nSockAddrLen) | |
245 | +void CServerSocket::AddConnection(SOCKET hSocket, const LPSOCKADDR lpsAddr, int nSockAddrLen) | |
270 | 246 | { |
271 | 247 | SOCKETDATA sd; |
272 | 248 | ZeroMemory(&sd, sizeof(sd)); |
273 | 249 | sd.hSocket = hSocket; |
274 | - ConvertSockAddrToNetAddr(lpSockAddr, sd.NetAddr); | |
250 | + ConvertSockAddrToNetAddr(lpsAddr, sd.NetAddr); | |
275 | 251 | CSingleLock cl(&m_sdList.cs, TRUE); |
276 | 252 | m_sdList.list.Add(sd); |
277 | 253 | } |
@@ -19,12 +19,12 @@ | ||
19 | 19 | |
20 | 20 | BOOL CMcastSocket::SetReceiveMulticast(DWORD dwMcastAddress) |
21 | 21 | { |
22 | - SOCKADDR_IN siAddr; | |
22 | + SOCKADDR_IN sAddrIn; | |
23 | 23 | IP_MREQ im; |
24 | 24 | |
25 | - CopyMemory(&siAddr, &m_LocalAddr, sizeof(siAddr)); | |
25 | + CopyMemory(&sAddrIn, &m_LocalAddr, sizeof(sAddrIn)); | |
26 | 26 | ZeroMemory(&im, sizeof(im)); |
27 | - im.imr_interface.s_addr = siAddr.sin_addr.s_addr; | |
27 | + im.imr_interface.s_addr = sAddrIn.sin_addr.s_addr; | |
28 | 28 | im.imr_multiaddr.s_addr = dwMcastAddress; |
29 | 29 | |
30 | 30 | if (!doSetSockOpt(m_hSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (LPSTR)&im, sizeof(im))) |
@@ -36,7 +36,7 @@ | ||
36 | 36 | return TRUE; |
37 | 37 | } |
38 | 38 | |
39 | -BOOL CMcastSocket::JoinMulticastGroup(DWORD dwMcastAddress, WORD wPort) | |
39 | +BOOL CMcastSocket::AddMembership(DWORD dwMcastAddress, WORD wPort) | |
40 | 40 | { |
41 | 41 | NETADDR NetAddr; |
42 | 42 |
@@ -55,7 +55,7 @@ | ||
55 | 55 | return TRUE; |
56 | 56 | } |
57 | 57 | |
58 | -BOOL CMcastSocket::LeaveMulticastGroup() | |
58 | +BOOL CMcastSocket::DropMembership() | |
59 | 59 | { |
60 | 60 | NETADDR NetAddr; |
61 | 61 |
@@ -157,33 +157,40 @@ | ||
157 | 157 | |
158 | 158 | BOOL IBaseSocket::CloseSocket() |
159 | 159 | { |
160 | - m_fInit = !doCloseSocket(m_hSocket); | |
161 | - return m_fInit; | |
160 | + if (!doCloseSocket(m_hSocket)) | |
161 | + { | |
162 | + return FALSE; | |
163 | + } | |
164 | + | |
165 | + m_lEvent = 0; | |
166 | + m_fInit = FALSE; | |
167 | + | |
168 | + return TRUE; | |
162 | 169 | } |
163 | 170 | |
164 | -BOOL IBaseSocket::IsLANConnection(const LPSOCKADDR lpSockAddr) | |
171 | +BOOL IBaseSocket::IsLANConnection(const LPSOCKADDR lpsAddr) | |
165 | 172 | { |
166 | - SOCKADDR_IN siAddr; | |
167 | - CopyMemory(&siAddr, lpSockAddr, sizeof(siAddr)); | |
168 | - return (m_LocalNet.dwNet == (m_LocalNet.dwMask & siAddr.sin_addr.s_addr)); | |
173 | + SOCKADDR_IN sAddrIn; | |
174 | + CopyMemory(&sAddrIn, lpsAddr, sizeof(sAddrIn)); | |
175 | + return (m_LocalNet.dwNet == (m_LocalNet.dwMask & sAddrIn.sin_addr.s_addr)); | |
169 | 176 | } |
170 | 177 | |
171 | -void IBaseSocket::MakeSockAddrIN(LPSOCKADDR_IN lpSockAddrIN, DWORD dwAddress, | |
172 | - WORD wPort, UINT nAF) | |
178 | +void IBaseSocket::MakeSockAddrIN(LPSOCKADDR_IN lpsAddrIn, DWORD dwAddress, | |
179 | + WORD wPort, UINT nFamily) | |
173 | 180 | { |
174 | - ZeroMemory(lpSockAddrIN, sizeof(LPSOCKADDR_IN)); | |
175 | - lpSockAddrIN->sin_port = htons(wPort); | |
176 | - lpSockAddrIN->sin_family = nAF; | |
177 | - lpSockAddrIN->sin_addr.s_addr = dwAddress; | |
181 | + ZeroMemory(lpsAddrIn, sizeof(SOCKADDR_IN)); | |
182 | + lpsAddrIn->sin_port = htons(wPort); | |
183 | + lpsAddrIn->sin_family = nFamily; | |
184 | + lpsAddrIn->sin_addr.s_addr = dwAddress; | |
178 | 185 | } |
179 | 186 | |
180 | -void IBaseSocket::ConvertSockAddrToNetAddr(const LPSOCKADDR lpSockAddr, NETADDR &NetAddr) | |
187 | +void IBaseSocket::ConvertSockAddrToNetAddr(const LPSOCKADDR lpsAddr, NETADDR &NetAddr) | |
181 | 188 | { |
182 | - SOCKADDR_IN siAddr; | |
183 | - CopyMemory(&siAddr, lpSockAddr, sizeof(siAddr)); | |
184 | - NetAddr.wPort = ntohs(siAddr.sin_port); | |
185 | - NetAddr.nAF = siAddr.sin_family; | |
186 | - NetAddr.dwAddress = siAddr.sin_addr.s_addr; | |
189 | + SOCKADDR_IN sAddrIn; | |
190 | + CopyMemory(&sAddrIn, lpsAddr, sizeof(sAddrIn)); | |
191 | + NetAddr.wPort = ntohs(sAddrIn.sin_port); | |
192 | + NetAddr.nFamily = sAddrIn.sin_family; | |
193 | + NetAddr.dwAddress = sAddrIn.sin_addr.s_addr; | |
187 | 194 | } |
188 | 195 | |
189 | 196 | BOOL IBaseSocket::Shutdown(int nFlag) |
@@ -228,17 +235,24 @@ | ||
228 | 235 | |
229 | 236 | BOOL IBaseSocket::Bind(WORD wPort, DWORD dwAddress) |
230 | 237 | { |
231 | - return doBind(m_hSocket, wPort, dwAddress); | |
238 | + if (!doBind(m_hSocket, wPort, dwAddress)) | |
239 | + { | |
240 | + return FALSE; | |
241 | + } | |
242 | + | |
243 | + m_wBindPort = wPort; | |
244 | + | |
245 | + return TRUE; | |
232 | 246 | } |
233 | 247 | |
234 | -BOOL IBaseSocket::GetSockName(LPSOCKADDR lpSockAddr) | |
248 | +BOOL IBaseSocket::GetSockName(LPSOCKADDR lpsAddr) | |
235 | 249 | { |
236 | - return doGetSockName(m_hSocket, lpSockAddr); | |
250 | + return doGetSockName(m_hSocket, lpsAddr); | |
237 | 251 | } |
238 | 252 | |
239 | -BOOL IBaseSocket::GetPeerName(LPSOCKADDR lpSockAddr) | |
253 | +BOOL IBaseSocket::GetPeerName(LPSOCKADDR lpsAddr) | |
240 | 254 | { |
241 | - return doGetPeerName(m_hSocket, lpSockAddr); | |
255 | + return doGetPeerName(m_hSocket, lpsAddr); | |
242 | 256 | } |
243 | 257 | |
244 | 258 | BOOL IBaseSocket::SetSockOpt(int nOptionName, LPCSTR lpOptionValue, |
@@ -265,14 +279,33 @@ | ||
265 | 279 | |
266 | 280 | BOOL IBaseSocket::SetSendBufferSize(DWORD dwBufSize) |
267 | 281 | { |
268 | - return doSetSendBufferSize(m_hSocket, dwBufSize); | |
282 | + if (!doSetSendBufferSize(m_hSocket, dwBufSize)) | |
283 | + { | |
284 | + return FALSE; | |
285 | + } | |
286 | + | |
287 | + m_dwSendBufSize = dwBufSize; | |
288 | + | |
289 | + return TRUE; | |
269 | 290 | } |
270 | 291 | |
271 | 292 | BOOL IBaseSocket::SetReceiveBufferSize(DWORD dwBufSize) |
272 | 293 | { |
273 | - return doSetReceiveBufferSize(m_hSocket, dwBufSize); | |
294 | + if (!doSetReceiveBufferSize(m_hSocket, dwBufSize)) | |
295 | + { | |
296 | + return FALSE; | |
297 | + } | |
298 | + | |
299 | + m_dwReceiveBufSize = dwBufSize; | |
300 | + | |
301 | + return TRUE; | |
274 | 302 | } |
275 | 303 | |
304 | +BOOL IBaseSocket::SetBufferSize(DWORD dwBufSize) | |
305 | +{ | |
306 | + return (SetSendBufferSize(dwBufSize) && SetReceiveBufferSize(dwBufSize)); | |
307 | +} | |
308 | + | |
276 | 309 | BOOL IBaseSocket::SetKeepAlive(DWORD dwTime, DWORD dwInterval) |
277 | 310 | { |
278 | 311 | return doSetKeepAlive(m_hSocket, dwTime, dwInterval); |
@@ -317,14 +350,14 @@ | ||
317 | 350 | return doReceive(m_hSocket, data); |
318 | 351 | } |
319 | 352 | |
320 | -BOOL IBaseSocket::SendTo(const CByteArray &data, const LPSOCKADDR lpSockAddr, int nSockAddrLen) | |
353 | +BOOL IBaseSocket::SendTo(const CByteArray &data, const LPSOCKADDR lpsAddr, int nSockAddrLen) | |
321 | 354 | { |
322 | - return doSendTo(m_hSocket, data, lpSockAddr, nSockAddrLen); | |
355 | + return doSendTo(m_hSocket, data, lpsAddr, nSockAddrLen); | |
323 | 356 | } |
324 | 357 | |
325 | -BOOL IBaseSocket::ReceiveFrom(CByteArray &data, LPSOCKADDR lpSockAddr, int *lpSockAddrLen) | |
358 | +BOOL IBaseSocket::ReceiveFrom(CByteArray &data, LPSOCKADDR lpsAddr, int *lpsAddrLen) | |
326 | 359 | { |
327 | - return doReceiveFrom(m_hSocket, data, lpSockAddr, lpSockAddrLen); | |
360 | + return doReceiveFrom(m_hSocket, data, lpsAddr, lpsAddrLen); | |
328 | 361 | } |
329 | 362 | |
330 | 363 | ////////////////////////////////////////////////////////////////////////// |
@@ -339,11 +372,35 @@ | ||
339 | 372 | return FALSE; |
340 | 373 | } |
341 | 374 | |
342 | - m_SockMsg.pTgtObj->OnGetHostByNameMessage(lpHostEnt); | |
375 | + m_SockMsg.pCallback->OnGetHostByNameMessage(lpHostEnt); | |
343 | 376 | |
344 | 377 | return TRUE; |
345 | 378 | } |
346 | 379 | |
380 | +BOOL IBaseSocket::doCreateSocket(SOCKMSG SockMsg, int nType, int nProtocol) | |
381 | +{ | |
382 | + if (!IBaseSocket::CreateSocketWindow()) | |
383 | + { | |
384 | + return FALSE; | |
385 | + } | |
386 | + | |
387 | + SetCallback(SockMsg); | |
388 | + | |
389 | + m_hSocket = socket(AF_INET, nType, nProtocol); | |
390 | + | |
391 | + if (m_hSocket == INVALID_SOCKET) | |
392 | + { | |
393 | + TRACE1("***** ERROR: socket(%d) *****\n", GetLastError()); | |
394 | + m_dwError = GetLastError(); | |
395 | + return FALSE; | |
396 | + } | |
397 | + | |
398 | + SetSendTimeout(m_dwSendTimeout); | |
399 | + SetRecieveTimeout(m_dwReceiveTimeout); | |
400 | + | |
401 | + return TRUE; | |
402 | +} | |
403 | + | |
347 | 404 | BOOL IBaseSocket::doCloseSocket(SOCKET hSocket) |
348 | 405 | { |
349 | 406 | if (closesocket(hSocket) != 0) |
@@ -354,7 +411,6 @@ | ||
354 | 411 | } |
355 | 412 | |
356 | 413 | hSocket = INVALID_SOCKET; |
357 | - m_lEvent = 0; | |
358 | 414 | |
359 | 415 | return TRUE; |
360 | 416 | } |
@@ -407,11 +463,11 @@ | ||
407 | 463 | |
408 | 464 | BOOL IBaseSocket::doBind(SOCKET hSocket, WORD wPort, DWORD dwAddress) |
409 | 465 | { |
410 | - SOCKADDR_IN siAddr; | |
466 | + SOCKADDR_IN sAddrIn; | |
411 | 467 | |
412 | - MakeSockAddrIN(&siAddr, dwAddress, wPort); | |
468 | + MakeSockAddrIN(&sAddrIn, dwAddress, wPort); | |
413 | 469 | |
414 | - if (bind(hSocket, (LPSOCKADDR)&siAddr, sizeof(siAddr)) == SOCKET_ERROR) | |
470 | + if (bind(hSocket, (LPSOCKADDR)&sAddrIn, sizeof(sAddrIn)) == SOCKET_ERROR) | |
415 | 471 | { |
416 | 472 | TRACE1("***** ERROR: bind(%d) *****\n", GetLastError()); |
417 | 473 | m_dwError = GetLastError(); |
@@ -418,16 +474,14 @@ | ||
418 | 474 | return FALSE; |
419 | 475 | } |
420 | 476 | |
421 | - m_wBindPort = wPort; | |
422 | - | |
423 | 477 | return TRUE; |
424 | 478 | } |
425 | 479 | |
426 | -BOOL IBaseSocket::doGetSockName(SOCKET hSocket, LPSOCKADDR lpSockAddr) | |
480 | +BOOL IBaseSocket::doGetSockName(SOCKET hSocket, LPSOCKADDR lpsAddr) | |
427 | 481 | { |
428 | 482 | int nLenSA = sizeof(SOCKADDR); |
429 | 483 | |
430 | - if (getsockname(hSocket, lpSockAddr, &nLenSA) != 0) | |
484 | + if (getsockname(hSocket, lpsAddr, &nLenSA) != 0) | |
431 | 485 | { |
432 | 486 | TRACE1("***** ERROR: getsockname(%d) *****\n", GetLastError()); |
433 | 487 | m_dwError = GetLastError(); |
@@ -437,11 +491,11 @@ | ||
437 | 491 | return TRUE; |
438 | 492 | } |
439 | 493 | |
440 | -BOOL IBaseSocket::doGetPeerName(SOCKET hSocket, LPSOCKADDR lpSockAddr) | |
494 | +BOOL IBaseSocket::doGetPeerName(SOCKET hSocket, LPSOCKADDR lpsAddr) | |
441 | 495 | { |
442 | 496 | int nLenSA = sizeof(SOCKADDR); |
443 | 497 | |
444 | - if (getpeername(hSocket, lpSockAddr, &nLenSA) != 0) | |
498 | + if (getpeername(hSocket, lpsAddr, &nLenSA) != 0) | |
445 | 499 | { |
446 | 500 | TRACE1("***** ERROR: getpeername(%d) *****\n", GetLastError()); |
447 | 501 | m_dwError = GetLastError(); |
@@ -581,8 +635,8 @@ | ||
581 | 635 | |
582 | 636 | header.size = dataSize; |
583 | 637 | snd.SetSize(hdrSize); |
638 | + snd.FreeExtra(); | |
584 | 639 | CopyMemory(snd.GetData(), &header, hdrSize); |
585 | - snd.FreeExtra(); | |
586 | 640 | |
587 | 641 | do |
588 | 642 | { |
@@ -733,12 +787,13 @@ | ||
733 | 787 | return fResult; |
734 | 788 | } |
735 | 789 | |
736 | -BOOL IBaseSocket::doSendTo(SOCKET hSocket, const CByteArray &data, const LPSOCKADDR lpSockAddr, int nSockAddrLen) | |
790 | +BOOL IBaseSocket::doSendTo(SOCKET hSocket, const CByteArray &data, const LPSOCKADDR lpsAddr, int nSockAddrLen) | |
737 | 791 | { |
738 | - int nRet; | |
792 | + int nRet; | |
793 | + DWORD dwBufSize = min(m_dwSendBufSize, static_cast<DWORD>(data.GetSize())); | |
739 | 794 | |
740 | 795 | nRet = sendto(hSocket, reinterpret_cast<LPSTR>(const_cast<BYTE *>(data.GetData())), |
741 | - SX_UDP_BUFSIZE, 0, lpSockAddr, nSockAddrLen); | |
796 | + dwBufSize, 0, lpsAddr, nSockAddrLen); | |
742 | 797 | |
743 | 798 | if (nRet == SOCKET_ERROR) |
744 | 799 | { |
@@ -750,19 +805,16 @@ | ||
750 | 805 | return TRUE; |
751 | 806 | } |
752 | 807 | |
753 | -BOOL IBaseSocket::doReceiveFrom(SOCKET hSocket, CByteArray &data, LPSOCKADDR lpSockAddr, int *lpSockAddrLen) | |
808 | +BOOL IBaseSocket::doReceiveFrom(SOCKET hSocket, CByteArray &data, LPSOCKADDR lpsAddr, int *lpsAddrLen) | |
754 | 809 | { |
755 | 810 | int nRet; |
756 | 811 | int nLenSA = sizeof(SOCKADDR); |
757 | 812 | |
758 | - if (data.GetSize() != SX_UDP_BUFSIZE) | |
759 | - { | |
760 | - data.RemoveAll(); | |
761 | - data.SetSize(SX_UDP_BUFSIZE); | |
762 | - } | |
813 | + data.SetSize(m_dwReceiveBufSize); | |
814 | + data.FreeExtra(); | |
763 | 815 | |
764 | 816 | nRet = recvfrom(hSocket, reinterpret_cast<LPSTR>(data.GetData()), |
765 | - SX_UDP_BUFSIZE, 0, lpSockAddr, lpSockAddrLen); | |
817 | + m_dwReceiveBufSize, 0, lpsAddr, lpsAddrLen); | |
766 | 818 | |
767 | 819 | if (nRet == SOCKET_ERROR) |
768 | 820 | { |
@@ -771,8 +823,6 @@ | ||
771 | 823 | return FALSE; |
772 | 824 | } |
773 | 825 | |
774 | - data.FreeExtra(); | |
775 | - | |
776 | 826 | return TRUE; |
777 | 827 | } |
778 | 828 |
@@ -43,7 +43,7 @@ | ||
43 | 43 | |
44 | 44 | BOOL SocketXInitialize(); |
45 | 45 | |
46 | -class ISocketMessage; | |
46 | +class ISocketCallback; | |
47 | 47 | class IBaseSocket; |
48 | 48 | class CServerSocket; |
49 | 49 | class CClientSocket; |
@@ -63,7 +63,7 @@ | ||
63 | 63 | { |
64 | 64 | DWORD dwAddress; |
65 | 65 | WORD wPort; |
66 | - UINT nAF; | |
66 | + UINT nFamily; | |
67 | 67 | } |
68 | 68 | NETADDR, *LPNETADDR; |
69 | 69 |
@@ -86,18 +86,18 @@ | ||
86 | 86 | |
87 | 87 | typedef struct _SOCKMSG |
88 | 88 | { |
89 | - ISocketMessage *pTgtObj; | |
90 | - DWORD dwSocketID; | |
89 | + ISocketCallback *pCallback; | |
90 | + DWORD dwSocketID; | |
91 | 91 | } |
92 | 92 | SOCKMSG, *LPSOCKMSG; |
93 | 93 | |
94 | 94 | ////////////////////////////////////////////////////////////////////////// |
95 | 95 | |
96 | -class ISocketMessage | |
96 | +class ISocketCallback | |
97 | 97 | { |
98 | 98 | public: |
99 | - ISocketMessage() {} | |
100 | - virtual ~ISocketMessage() {} | |
99 | + ISocketCallback() {} | |
100 | + virtual ~ISocketCallback() {} | |
101 | 101 | |
102 | 102 | // Message function |
103 | 103 | virtual void OnSocketSendMessage(DWORD dwSocketID) {} |
@@ -151,20 +151,20 @@ | ||
151 | 151 | virtual void OnSend(SOCKET hSocket, int nErrorCode) {} |
152 | 152 | virtual void OnReceive(SOCKET hSocket, int nErrorCode) {} |
153 | 153 | |
154 | - void SetTargetWnd(SOCKMSG SockMsg) { m_SockMsg = SockMsg; } | |
155 | - void ConvertSockAddrToNetAddr(const LPSOCKADDR lpSockAddr, NETADDR &NetAddr); | |
154 | + void SetCallback(SOCKMSG SockMsg) { m_SockMsg = SockMsg; } | |
155 | + void ConvertSockAddrToNetAddr(const LPSOCKADDR lpsAddr, NETADDR &NetAddr); | |
156 | 156 | BOOL CloseSocket(); |
157 | 157 | BOOL Send(const CByteArray &data); |
158 | 158 | BOOL Receive(CByteArray &data); |
159 | - BOOL SendTo(const CByteArray &data, const LPSOCKADDR lpSockAddr, int nSockAddrLen); | |
160 | - BOOL ReceiveFrom(CByteArray &data, LPSOCKADDR lpSockAddr, int *lpSockAddrLen); | |
159 | + BOOL SendTo(const CByteArray &data, const LPSOCKADDR lpsAddr, int nSockAddrLen); | |
160 | + BOOL ReceiveFrom(CByteArray &data, LPSOCKADDR lpsAddr, int *lpsAddrLen); | |
161 | 161 | BOOL Shutdown(int nFlag); |
162 | 162 | BOOL AsyncSelect(LONG lEvent); |
163 | 163 | BOOL AsyncGetHostByName(const LPCSTR szHostName); |
164 | 164 | BOOL SetBlocking(); |
165 | 165 | BOOL Bind(WORD wPort, DWORD dwAddress = INADDR_ANY); |
166 | - BOOL GetSockName(LPSOCKADDR lpSockAddr); | |
167 | - BOOL GetPeerName(LPSOCKADDR lpSockAddr); | |
166 | + BOOL GetSockName(LPSOCKADDR lpsAddr); | |
167 | + BOOL GetPeerName(LPSOCKADDR lpsAddr); | |
168 | 168 | BOOL SetSockOpt(int nOptionName, LPCSTR lpOptionValue, int nOptionLen, int nLevel = SOL_SOCKET); |
169 | 169 | BOOL GetSockOpt(int nOptionName, LPSTR lpOptionValue, int *lpOptionLen, int nLevel = SOL_SOCKET); |
170 | 170 | BOOL SetSendTimeout(DWORD dwTimeout); |
@@ -171,6 +171,7 @@ | ||
171 | 171 | BOOL SetRecieveTimeout(DWORD dwTimeout); |
172 | 172 | BOOL SetSendBufferSize(DWORD dwBufSize); |
173 | 173 | BOOL SetReceiveBufferSize(DWORD dwBufSize); |
174 | + BOOL SetBufferSize(DWORD dwBufSize); | |
174 | 175 | BOOL SetKeepAlive(DWORD dwTime = SX_KA_TIME, DWORD dwInterval = SX_KA_INTERVAL); |
175 | 176 | BOOL SetReuseAddr(BOOL flag); |
176 | 177 | BOOL IOCtlSocket(LONG lCommand, DWORD *lpArgument); |
@@ -196,15 +197,16 @@ | ||
196 | 197 | virtual BOOL CreateSocket(SOCKMSG SockMsg) = 0; |
197 | 198 | |
198 | 199 | BOOL CreateSocketWindow(); |
199 | - BOOL IsLANConnection(const LPSOCKADDR lpSockAddr); | |
200 | - void MakeSockAddrIN(LPSOCKADDR_IN lpSockAddrIN, DWORD dwAddress, WORD wPort, UINT nAF = AF_INET); | |
200 | + BOOL IsLANConnection(const LPSOCKADDR lpsAddr); | |
201 | + void MakeSockAddrIN(LPSOCKADDR_IN lpsAddrIn, DWORD dwAddress, WORD wPort, UINT nFamily = AF_INET); | |
201 | 202 | |
203 | + BOOL doCreateSocket(SOCKMSG SockMsg, int nType, int nProtocol); | |
202 | 204 | BOOL doCloseSocket(SOCKET hSocket); |
203 | 205 | BOOL doGetHostByName(HANDLE hTask, int nErrorCode); |
204 | 206 | BOOL doSend(SOCKET hSocket, const CByteArray &data); |
205 | - BOOL doSendTo(SOCKET hSocket, const CByteArray &data, const LPSOCKADDR lpSockAddr, int nSockAddrLen); | |
207 | + BOOL doSendTo(SOCKET hSocket, const CByteArray &data, const LPSOCKADDR lpsAddr, int nSockAddrLen); | |
206 | 208 | BOOL doReceive(SOCKET hSocket, CByteArray &data); |
207 | - BOOL doReceiveFrom(SOCKET hSocket, CByteArray &data, LPSOCKADDR lpSockAddr, int *lpSockAddrLen); | |
209 | + BOOL doReceiveFrom(SOCKET hSocket, CByteArray &data, LPSOCKADDR lpsAddr, int *lpsAddrLen); | |
208 | 210 | BOOL doSetSendTimeout(SOCKET hSocket, DWORD dwTimeout); |
209 | 211 | BOOL doSetReceiveTimeout(SOCKET hSocket, DWORD dwTimeout); |
210 | 212 | BOOL doSetSendBufferSize(SOCKET hSocket, DWORD dwBufSize); |
@@ -217,8 +219,8 @@ | ||
217 | 219 | BOOL doSetBlocking(SOCKET hSocket); |
218 | 220 | BOOL doSetKeepAlive(SOCKET hSocket, DWORD dwKaTime, DWORD dwInterval); |
219 | 221 | BOOL doBind(SOCKET hSocket, WORD wPort, DWORD dwAddress); |
220 | - BOOL doGetSockName(SOCKET hSocket, LPSOCKADDR lpSockAddr); | |
221 | - BOOL doGetPeerName(SOCKET hSocket, LPSOCKADDR lpSockAddr); | |
222 | + BOOL doGetSockName(SOCKET hSocket, LPSOCKADDR lpsAddr); | |
223 | + BOOL doGetPeerName(SOCKET hSocket, LPSOCKADDR lpsAddr); | |
222 | 224 | BOOL doSetReuseAddr(SOCKET hSocket, BOOL flag); |
223 | 225 | BOOL doIOCtlSocket(SOCKET hSocket, LONG lCommand, DWORD *lpArgument); |
224 | 226 | BOOL doWSAIOCtl(SOCKET hSocket, DWORD dwIoCtlCode, LPVOID lpInBuf, DWORD dwInBuf, LPVOID lpOutBuf, |
@@ -272,6 +274,8 @@ | ||
272 | 274 | DWORD m_dwError; |
273 | 275 | DWORD m_dwSendTimeout; |
274 | 276 | DWORD m_dwReceiveTimeout; |
277 | + DWORD m_dwSendBufSize; | |
278 | + DWORD m_dwReceiveBufSize; | |
275 | 279 | LONG m_lEvent; |
276 | 280 | WORD m_wBindPort; |
277 | 281 | BOOL m_fBlocking; |
@@ -295,7 +299,7 @@ | ||
295 | 299 | virtual void OnReceive(SOCKET hSocket, int nErrorCode); |
296 | 300 | |
297 | 301 | BOOL Initialize(SOCKMSG SockMsg, WORD wPort, DWORD dwBindAddress = INADDR_ANY, int nBacklog = 5); |
298 | - BOOL Accept(LPSOCKADDR lpSockAddr, int *lpSockAddrLen); | |
302 | + BOOL Accept(LPSOCKADDR lpsAddr, int *lpsAddrLen); | |
299 | 303 | BOOL Listen(int nBacklog = 5); |
300 | 304 | BOOL Broadcast(const CByteArray &data); |
301 | 305 | BOOL SendToClient(const CByteArray &data, DWORD dwAddress, WORD wPort); |
@@ -309,7 +313,7 @@ | ||
309 | 313 | virtual BOOL CreateSocket(SOCKMSG SockMsg); |
310 | 314 | |
311 | 315 | int SearchSocketConnection(SOCKET hSocket); |
312 | - void AddConnection(SOCKET hSocket, const LPSOCKADDR lpSockAddr, int nSockAddrLen); | |
316 | + void AddConnection(SOCKET hSocket, const LPSOCKADDR lpsAddr, int nSockAddrLen); | |
313 | 317 | void CloseAllSocketConnection(); |
314 | 318 | BOOL ServerReceive(SOCKET hSocket); |
315 | 319 | BOOL CloseSocketConnection(SOCKET hSocket, LPNETADDR lpNetAddr); |
@@ -405,8 +409,8 @@ | ||
405 | 409 | virtual ~CMcastSocket(); |
406 | 410 | |
407 | 411 | BOOL SetReceiveMulticast(DWORD dwMcastAddress); |
408 | - BOOL JoinMulticastGroup(DWORD dwMcastAddress, WORD wPort); | |
409 | - BOOL LeaveMulticastGroup(); | |
412 | + BOOL AddMembership(DWORD dwMcastAddress, WORD wPort); | |
413 | + BOOL DropMembership(); | |
410 | 414 | BOOL SetTTL(DWORD dwTTL); |
411 | 415 | BOOL Multicast(const CByteArray &data); |
412 | 416 |
@@ -18,7 +18,7 @@ | ||
18 | 18 | |
19 | 19 | void CClientSocket::OnConnect(SOCKET hSocket, int nErrorCode) |
20 | 20 | { |
21 | - SOCKADDR SockAddr; | |
21 | + SOCKADDR sAddr; | |
22 | 22 | NETADDR NetAddr; |
23 | 23 | |
24 | 24 | if (nErrorCode != 0) |
@@ -27,21 +27,21 @@ | ||
27 | 27 | return; |
28 | 28 | } |
29 | 29 | |
30 | - if (!doGetPeerName(hSocket, &SockAddr) || !AsyncSelect(FD_CLIENT)) | |
30 | + if (!doGetPeerName(hSocket, &sAddr) || !AsyncSelect(FD_CLIENT)) | |
31 | 31 | { |
32 | 32 | return; |
33 | 33 | } |
34 | 34 | |
35 | - CopyMemory(&m_PeerAddr, &SockAddr, sizeof(m_PeerAddr)); | |
35 | + CopyMemory(&m_PeerAddr, &sAddr, sizeof(m_PeerAddr)); | |
36 | 36 | |
37 | - ConvertSockAddrToNetAddr(&SockAddr, NetAddr); | |
38 | - m_SockMsg.pTgtObj->OnSocketConnectMessage(m_SockMsg.dwSocketID, NetAddr); | |
37 | + ConvertSockAddrToNetAddr(&sAddr, NetAddr); | |
38 | + m_SockMsg.pCallback->OnSocketConnectMessage(m_SockMsg.dwSocketID, NetAddr); | |
39 | 39 | } |
40 | 40 | |
41 | 41 | void CClientSocket::OnReceive(SOCKET hSocket, int nErrorCode) |
42 | 42 | { |
43 | 43 | CByteArray data; |
44 | - SOCKADDR SockAddr; | |
44 | + SOCKADDR sAddr; | |
45 | 45 | NETADDR NetAddr; |
46 | 46 | |
47 | 47 | if (nErrorCode != 0) |
@@ -50,13 +50,13 @@ | ||
50 | 50 | return; |
51 | 51 | } |
52 | 52 | |
53 | - if (!doGetPeerName(hSocket, &SockAddr) || !doReceive(hSocket, data)) | |
53 | + if (!doGetPeerName(hSocket, &sAddr) || !doReceive(hSocket, data)) | |
54 | 54 | { |
55 | 55 | return; |
56 | 56 | } |
57 | 57 | |
58 | - ConvertSockAddrToNetAddr(&SockAddr, NetAddr); | |
59 | - m_SockMsg.pTgtObj->OnSocketReceiveMessage(m_SockMsg.dwSocketID, NetAddr, data); | |
58 | + ConvertSockAddrToNetAddr(&sAddr, NetAddr); | |
59 | + m_SockMsg.pCallback->OnSocketReceiveMessage(m_SockMsg.dwSocketID, NetAddr, data); | |
60 | 60 | } |
61 | 61 | |
62 | 62 | void CClientSocket::OnSend(SOCKET hSocket, int nErrorCode) |
@@ -67,7 +67,7 @@ | ||
67 | 67 | return; |
68 | 68 | } |
69 | 69 | |
70 | - m_SockMsg.pTgtObj->OnSocketSendMessage(m_SockMsg.dwSocketID); | |
70 | + m_SockMsg.pCallback->OnSocketSendMessage(m_SockMsg.dwSocketID); | |
71 | 71 | } |
72 | 72 | |
73 | 73 | void CClientSocket::OnClose(SOCKET hSocket, int nErrorCode) |
@@ -82,31 +82,12 @@ | ||
82 | 82 | } |
83 | 83 | |
84 | 84 | ConvertSockAddrToNetAddr(&m_PeerAddr, NetAddr); |
85 | - m_SockMsg.pTgtObj->OnSocketCloseMessage(m_SockMsg.dwSocketID, NetAddr); | |
85 | + m_SockMsg.pCallback->OnSocketCloseMessage(m_SockMsg.dwSocketID, NetAddr); | |
86 | 86 | } |
87 | 87 | |
88 | 88 | BOOL CClientSocket::CreateSocket(SOCKMSG SockMsg) |
89 | 89 | { |
90 | - if (!IBaseSocket::CreateSocketWindow()) | |
91 | - { | |
92 | - return FALSE; | |
93 | - } | |
94 | - | |
95 | - SetTargetWnd(SockMsg); | |
96 | - | |
97 | - m_hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); | |
98 | - | |
99 | - if (m_hSocket == INVALID_SOCKET) | |
100 | - { | |
101 | - TRACE1("***** ERROR: socket(%d) *****\n", GetLastError()); | |
102 | - m_dwError = GetLastError(); | |
103 | - return FALSE; | |
104 | - } | |
105 | - | |
106 | - SetSendTimeout(m_dwSendTimeout); | |
107 | - SetRecieveTimeout(m_dwReceiveTimeout); | |
108 | - | |
109 | - return TRUE; | |
90 | + return doCreateSocket(SockMsg, SOCK_STREAM, IPPROTO_TCP); | |
110 | 91 | } |
111 | 92 | |
112 | 93 | BOOL CClientSocket::Initialize(SOCKMSG SockMsg) |
@@ -231,9 +212,9 @@ | ||
231 | 212 | |
232 | 213 | BOOL CClientSocket::SyncConnect(const LPCSTR lpDstAddr, WORD wPort, int nLength, DWORD dwTimeout) |
233 | 214 | { |
234 | - SOCKADDR_IN siAddr; | |
235 | - MakeSockAddrIN(&siAddr, inet_addr(lpDstAddr), wPort); | |
236 | - return SyncConnect((LPSOCKADDR)&siAddr, sizeof(siAddr), dwTimeout); | |
215 | + SOCKADDR_IN sAddrIn; | |
216 | + MakeSockAddrIN(&sAddrIn, inet_addr(lpDstAddr), wPort); | |
217 | + return SyncConnect((LPSOCKADDR)&sAddrIn, sizeof(sAddrIn), dwTimeout); | |
237 | 218 | } |
238 | 219 | |
239 | 220 | BOOL CClientSocket::AsyncConnect(const LPSOCKADDR lpDstAddr, int nLength) |
@@ -259,9 +240,9 @@ | ||
259 | 240 | |
260 | 241 | BOOL CClientSocket::AsyncConnect(const LPCSTR lpDstAddr, WORD wPort, int nLength) |
261 | 242 | { |
262 | - SOCKADDR_IN siAddr; | |
263 | - MakeSockAddrIN(&siAddr, inet_addr(lpDstAddr), wPort); | |
264 | - return AsyncConnect((LPSOCKADDR)&siAddr, sizeof(siAddr)); | |
243 | + SOCKADDR_IN sAddrIn; | |
244 | + MakeSockAddrIN(&sAddrIn, inet_addr(lpDstAddr), wPort); | |
245 | + return AsyncConnect((LPSOCKADDR)&sAddrIn, sizeof(sAddrIn)); | |
265 | 246 | } |
266 | 247 | |
267 | 248 | ////////////////////////////////////////////////////////////////////////// |
\ No newline at end of file |
@@ -25,14 +25,15 @@ | ||
25 | 25 | |
26 | 26 | lpData = reinterpret_cast<LPBYTE>(static_cast<LPTSTR>(cs.GetBuffer())); |
27 | 27 | dst.SetSize(cs.GetLength() * sizeof(TCHAR)); |
28 | + dst.FreeExtra(); | |
28 | 29 | CopyMemory(dst.GetData(), lpData, dst.GetSize()); |
29 | 30 | cs.ReleaseBuffer(); |
30 | - dst.FreeExtra(); | |
31 | 31 | } |
32 | 32 | |
33 | 33 | void CSocketHelper::Serialize(CByteArray &dst, const LPVOID src, DWORD dwSize) |
34 | 34 | { |
35 | 35 | dst.SetSize(dwSize); |
36 | + dst.FreeExtra(); | |
36 | 37 | CopyMemory(dst.GetData(), src, dwSize); |
37 | 38 | } |
38 | 39 |
@@ -18,7 +18,7 @@ | ||
18 | 18 | void SetPlugin(const CString &cs) { m_xEditPlugin.SetWindowText(cs); } |
19 | 19 | void SetSendToSlave(WORD wNodeID, DWORD dwAddress); |
20 | 20 | void SetProgress(int nPoint); |
21 | - void SetTargetWnd(CWnd *wnd) { m_pTgtWnd = wnd; } | |
21 | + void SetCallback(CWnd *wnd) { m_pTgtWnd = wnd; } | |
22 | 22 | void GetSendList(IntList &list) { list.Copy(m_SendList); } |
23 | 23 | BOOL IsSending() { return m_fSending; } |
24 | 24 |
@@ -1359,7 +1359,7 @@ | ||
1359 | 1359 | m_dlgTransfer.SetPluginList(m_PluginList.list); |
1360 | 1360 | m_PluginList.cs.Unlock(); |
1361 | 1361 | |
1362 | - m_dlgTransfer.SetTargetWnd(this); | |
1362 | + m_dlgTransfer.SetCallback(this); | |
1363 | 1363 | m_dlgTransfer.DoModal(); |
1364 | 1364 | } |
1365 | 1365 | else |
@@ -1476,7 +1476,7 @@ | ||
1476 | 1476 | { |
1477 | 1477 | CByteArray data; |
1478 | 1478 | UDP_DATA uReply; |
1479 | - SOCKADDR SockAddr; | |
1479 | + SOCKADDR sAddr; | |
1480 | 1480 | int nLenSA = sizeof(SOCKADDR); |
1481 | 1481 | |
1482 | 1482 | ZeroMemory(&uReply, sizeof(uReply)); |
@@ -1495,8 +1495,8 @@ | ||
1495 | 1495 | uReply.wSrcNodeID = m_wcsStatus.wNodeID; |
1496 | 1496 | uReply.wDstNodeID = WCS_DEFAULT_NODE_ID; |
1497 | 1497 | CopyMemory(data.GetData(), &uReply, data.GetSize()); |
1498 | - MakeSockAddr(&SockAddr, NetAddr.dwAddress, NetAddr.wPort); | |
1499 | - m_pServerPeerSocket->SendTo(data, &SockAddr, nLenSA); | |
1498 | + MakeSockAddr(&sAddr, NetAddr.dwAddress, NetAddr.wPort); | |
1499 | + m_pServerPeerSocket->SendTo(data, &sAddr, nLenSA); | |
1500 | 1500 | break; |
1501 | 1501 | } |
1502 | 1502 | } |
@@ -2045,18 +2045,18 @@ | ||
2045 | 2045 | return wNodeID; |
2046 | 2046 | } |
2047 | 2047 | |
2048 | -DWORD CWinCSDlg::GetSAddrBySockAddr(const LPSOCKADDR lpSockAddr) | |
2048 | +DWORD CWinCSDlg::GetSAddrBySockAddr(const LPSOCKADDR lpsAddr) | |
2049 | 2049 | { |
2050 | - SOCKADDR_IN siAddr; | |
2051 | - CopyMemory(&siAddr, lpSockAddr, sizeof(siAddr)); | |
2052 | - return siAddr.sin_addr.s_addr; | |
2050 | + SOCKADDR_IN sAddrIn; | |
2051 | + CopyMemory(&sAddrIn, lpsAddr, sizeof(sAddrIn)); | |
2052 | + return sAddrIn.sin_addr.s_addr; | |
2053 | 2053 | } |
2054 | 2054 | |
2055 | -WORD CWinCSDlg::GetPortBySockAddr(const LPSOCKADDR lpSockAddr) | |
2055 | +WORD CWinCSDlg::GetPortBySockAddr(const LPSOCKADDR lpsAddr) | |
2056 | 2056 | { |
2057 | - SOCKADDR_IN siAddr; | |
2058 | - CopyMemory(&siAddr, lpSockAddr, sizeof(siAddr)); | |
2059 | - return ntohs(siAddr.sin_port); | |
2057 | + SOCKADDR_IN sAddrIn; | |
2058 | + CopyMemory(&sAddrIn, lpsAddr, sizeof(sAddrIn)); | |
2059 | + return ntohs(sAddrIn.sin_port); | |
2060 | 2060 | } |
2061 | 2061 | |
2062 | 2062 | ////////////////////////////////////////////////////////////////////////// |
@@ -2445,16 +2445,16 @@ | ||
2445 | 2445 | |
2446 | 2446 | BOOL CWinCSDlg::StartMaster() |
2447 | 2447 | { |
2448 | - SOCKADDR_IN siAddr; | |
2448 | + SOCKADDR_IN sAddrIn; | |
2449 | 2449 | LOCALNET net; |
2450 | 2450 | SOCKMSG SockMsg; |
2451 | 2451 | CString cs, csIP; |
2452 | 2452 | int nLenSA = sizeof(SOCKADDR); |
2453 | 2453 | |
2454 | - if (SearchMaster((LPSOCKADDR)&siAddr, &nLenSA)) | |
2454 | + if (SearchMaster((LPSOCKADDR)&sAddrIn, &nLenSA)) | |
2455 | 2455 | { |
2456 | 2456 | cs.LoadString(IDS_WCS_ERROR_MASTER_DUPLICATED); |
2457 | - csIP.Format(_T("\r\nIP: %s"), DwToIPAddress(siAddr.sin_addr.s_addr)); | |
2457 | + csIP.Format(_T("\r\nIP: %s"), DwToIPAddress(sAddrIn.sin_addr.s_addr)); | |
2458 | 2458 | cs += csIP; |
2459 | 2459 | AfxMessageBox(cs); |
2460 | 2460 | return FALSE; |
@@ -2484,7 +2484,7 @@ | ||
2484 | 2484 | return FALSE; |
2485 | 2485 | } |
2486 | 2486 | |
2487 | - SockMsg.pTgtObj = this; | |
2487 | + SockMsg.pCallback = this; | |
2488 | 2488 | SockMsg.dwSocketID = WCS_SOCKID_STREAM_SERVER; |
2489 | 2489 | |
2490 | 2490 | if (!m_pServerSocket->Initialize(SockMsg, m_wcsStatus.wTCPPort, m_wcsStatus.dwLocalAddress)) |
@@ -2512,7 +2512,7 @@ | ||
2512 | 2512 | |
2513 | 2513 | BOOL CWinCSDlg::StartSlave() |
2514 | 2514 | { |
2515 | - SOCKADDR_IN siAddr; | |
2515 | + SOCKADDR_IN sAddrIn; | |
2516 | 2516 | LOCALNET net; |
2517 | 2517 | SOCKMSG SockMsg; |
2518 | 2518 | CString cs, csIP; |
@@ -2520,7 +2520,7 @@ | ||
2520 | 2520 | |
2521 | 2521 | if (m_wcsStatus.fDynamic) |
2522 | 2522 | { |
2523 | - if (!SearchMaster((LPSOCKADDR)&siAddr, &nLenSA)) | |
2523 | + if (!SearchMaster((LPSOCKADDR)&sAddrIn, &nLenSA)) | |
2524 | 2524 | { |
2525 | 2525 | // Master can't discover the network. |
2526 | 2526 | cs.LoadString(IDS_WCS_ERROR_MASTER_DISCOVERY); |
@@ -2529,15 +2529,15 @@ | ||
2529 | 2529 | } |
2530 | 2530 | else |
2531 | 2531 | { |
2532 | - siAddr.sin_family = AF_INET; | |
2533 | - siAddr.sin_port = htons(m_wcsStatus.wTCPPort); | |
2532 | + sAddrIn.sin_family = AF_INET; | |
2533 | + sAddrIn.sin_port = htons(m_wcsStatus.wTCPPort); | |
2534 | 2534 | } |
2535 | 2535 | } |
2536 | 2536 | else |
2537 | 2537 | { |
2538 | - siAddr.sin_family = AF_INET; | |
2539 | - siAddr.sin_port = htons(m_wcsStatus.wTCPPort); | |
2540 | - siAddr.sin_addr.s_addr = m_wcsStatus.dwMasterAddress; | |
2538 | + sAddrIn.sin_family = AF_INET; | |
2539 | + sAddrIn.sin_port = htons(m_wcsStatus.wTCPPort); | |
2540 | + sAddrIn.sin_addr.s_addr = m_wcsStatus.dwMasterAddress; | |
2541 | 2541 | } |
2542 | 2542 | |
2543 | 2543 | // ClientSocket initialize |
@@ -2551,7 +2551,7 @@ | ||
2551 | 2551 | return FALSE; |
2552 | 2552 | } |
2553 | 2553 | |
2554 | - SockMsg.pTgtObj = this; | |
2554 | + SockMsg.pCallback = this; | |
2555 | 2555 | SockMsg.dwSocketID = WCS_SOCKID_STREAM_CLIENT; |
2556 | 2556 | |
2557 | 2557 | if (!m_pClientSocket->Initialize(SockMsg)) |
@@ -2559,13 +2559,13 @@ | ||
2559 | 2559 | return FALSE; |
2560 | 2560 | } |
2561 | 2561 | |
2562 | - if (!ConnectMaster((LPSOCKADDR)&siAddr)) | |
2562 | + if (!ConnectMaster((LPSOCKADDR)&sAddrIn)) | |
2563 | 2563 | { |
2564 | 2564 | m_pClientBcastSocket->CloseSocket(); |
2565 | 2565 | m_pClientSocket->CloseSocket(); |
2566 | 2566 | |
2567 | 2567 | cs.LoadString(IDS_WCS_ERROR_MASTER_CONNECT); |
2568 | - csIP.Format(_T("\r\nIP: %s"), DwToIPAddress(siAddr.sin_addr.s_addr)); | |
2568 | + csIP.Format(_T("\r\nIP: %s"), DwToIPAddress(sAddrIn.sin_addr.s_addr)); | |
2569 | 2569 | cs += csIP; |
2570 | 2570 | AfxMessageBox(cs); |
2571 | 2571 | return FALSE; |
@@ -2593,7 +2593,7 @@ | ||
2593 | 2593 | return FALSE; |
2594 | 2594 | } |
2595 | 2595 | |
2596 | - m_wcsStatus.dwMasterAddress = siAddr.sin_addr.s_addr; | |
2596 | + m_wcsStatus.dwMasterAddress = sAddrIn.sin_addr.s_addr; | |
2597 | 2597 | net.dwAddress = m_wcsStatus.dwLocalAddress; |
2598 | 2598 | net.dwMask = m_wcsStatus.dwMaskAddress; |
2599 | 2599 | net.dwNet = (net.dwAddress & net.dwMask); |
@@ -2655,7 +2655,7 @@ | ||
2655 | 2655 | return FALSE; |
2656 | 2656 | } |
2657 | 2657 | |
2658 | - SockMsg.pTgtObj = this; | |
2658 | + SockMsg.pCallback = this; | |
2659 | 2659 | SockMsg.dwSocketID = WCS_SOCKID_PEER_CLIENT; |
2660 | 2660 | |
2661 | 2661 | if (!m_pClientBcastSocket->Initialize(SockMsg, m_wcsStatus.dwLocalAddress, m_wcsStatus.wUDPClientPort)) |
@@ -2694,7 +2694,7 @@ | ||
2694 | 2694 | return FALSE; |
2695 | 2695 | } |
2696 | 2696 | |
2697 | - SockMsg.pTgtObj = this; | |
2697 | + SockMsg.pCallback = this; | |
2698 | 2698 | SockMsg.dwSocketID = WCS_SOCKID_PEER_SERVER; |
2699 | 2699 | |
2700 | 2700 | if (!m_pServerPeerSocket->Initialize(SockMsg, m_wcsStatus.dwLocalAddress, m_wcsStatus.wUDPServerPort)) |
@@ -2917,19 +2917,19 @@ | ||
2917 | 2917 | return FALSE; |
2918 | 2918 | } |
2919 | 2919 | |
2920 | -void CWinCSDlg::MakeSockAddr(LPSOCKADDR lpSockAddr, DWORD dwAddress, WORD wPort, int nAF) | |
2920 | +void CWinCSDlg::MakeSockAddr(LPSOCKADDR lpsAddr, DWORD dwAddress, WORD wPort, int nFamily) | |
2921 | 2921 | { |
2922 | 2922 | SOCKADDR_IN addr; |
2923 | 2923 | addr.sin_port = htons(wPort); |
2924 | - addr.sin_family = nAF; | |
2924 | + addr.sin_family = nFamily; | |
2925 | 2925 | addr.sin_addr.s_addr = dwAddress; |
2926 | - CopyMemory(lpSockAddr, &addr, sizeof(SOCKADDR)); | |
2926 | + CopyMemory(lpsAddr, &addr, sizeof(SOCKADDR)); | |
2927 | 2927 | } |
2928 | 2928 | |
2929 | -void CWinCSDlg::MakeINetAddr(LPDWORD lpAddress, LPWORD lpPort, const LPSOCKADDR lpSockAddr) | |
2929 | +void CWinCSDlg::MakeINetAddr(LPDWORD lpAddress, LPWORD lpPort, const LPSOCKADDR lpsAddr) | |
2930 | 2930 | { |
2931 | 2931 | SOCKADDR_IN addr; |
2932 | - CopyMemory(&addr, lpSockAddr, sizeof(addr)); | |
2932 | + CopyMemory(&addr, lpsAddr, sizeof(addr)); | |
2933 | 2933 | *lpAddress = addr.sin_addr.s_addr; |
2934 | 2934 | *lpPort = ntohs(addr.sin_port); |
2935 | 2935 | } |
@@ -2976,7 +2976,7 @@ | ||
2976 | 2976 | SaveSettings(_T("Retry"), m_wcsStatus.wRetry); |
2977 | 2977 | } |
2978 | 2978 | |
2979 | -BOOL CWinCSDlg::SearchMaster(LPSOCKADDR lpSockAddr, int *lpSockAddrLen) | |
2979 | +BOOL CWinCSDlg::SearchMaster(LPSOCKADDR lpsAddr, int *lpsAddrLen) | |
2980 | 2980 | { |
2981 | 2981 | CByteArray snd, rcv; |
2982 | 2982 | UDP_DATA uData; |
@@ -2995,7 +2995,7 @@ | ||
2995 | 2995 | return FALSE; |
2996 | 2996 | } |
2997 | 2997 | |
2998 | - if (!m_pClientBcastSocket->ReceiveFrom(rcv, lpSockAddr, lpSockAddrLen)) | |
2998 | + if (!m_pClientBcastSocket->ReceiveFrom(rcv, lpsAddr, lpsAddrLen)) | |
2999 | 2999 | { |
3000 | 3000 | return FALSE; |
3001 | 3001 | } |
@@ -19,7 +19,7 @@ | ||
19 | 19 | CDialog, |
20 | 20 | CStringConvert, |
21 | 21 | CWcsAPI, |
22 | - ISocketMessage | |
22 | + ISocketCallback | |
23 | 23 | { |
24 | 24 | public: |
25 | 25 | CWinCSDlg(CWnd* pParent = NULL); |
@@ -122,8 +122,8 @@ | ||
122 | 122 | WORD SearchNodeID(DWORD dwAddress, WORD wPort); |
123 | 123 | int SearchNodeListIndex(WORD wNodeID); |
124 | 124 | |
125 | - DWORD GetSAddrBySockAddr(const LPSOCKADDR lpSockAddr); | |
126 | - WORD GetPortBySockAddr(const LPSOCKADDR lpSockAddr); | |
125 | + DWORD GetSAddrBySockAddr(const LPSOCKADDR lpsAddr); | |
126 | + WORD GetPortBySockAddr(const LPSOCKADDR lpsAddr); | |
127 | 127 | |
128 | 128 | int SearchPluginIndex(WORD wPluginID); |
129 | 129 | void SetWcsStatus(); |
@@ -131,8 +131,8 @@ | ||
131 | 131 | void SaveWcsSettings(); |
132 | 132 | void OutputNodeData(); |
133 | 133 | void EnableToolBarBtn(int nCtlID, BOOL fEnable); |
134 | - void MakeSockAddr(LPSOCKADDR lpSockAddr, DWORD dwAddress, WORD wPort, int nAF = AF_INET); | |
135 | - void MakeINetAddr(LPDWORD lpAddress, LPWORD lpPort, const LPSOCKADDR lpSockAddr); | |
134 | + void MakeSockAddr(LPSOCKADDR lpsAddr, DWORD dwAddress, WORD wPort, int nFamily = AF_INET); | |
135 | + void MakeINetAddr(LPDWORD lpAddress, LPWORD lpPort, const LPSOCKADDR lpsAddr); | |
136 | 136 | void FreePlugin(BOOL fRefresh = TRUE); |
137 | 137 | BOOL LoadPlugin(); |
138 | 138 | BOOL LoadExcutionPlugin(const CString &csFilePath); |
@@ -142,7 +142,7 @@ | ||
142 | 142 | BOOL ServerPeerSocketInitialize(); |
143 | 143 | BOOL StartMaster(); |
144 | 144 | BOOL StartSlave(); |
145 | - BOOL SearchMaster(LPSOCKADDR lpSockAddr, int *lpSockAddrLen); | |
145 | + BOOL SearchMaster(LPSOCKADDR lpsAddr, int *lpsAddrLen); | |
146 | 146 | BOOL ConnectMaster(const LPSOCKADDR lpMasterAddr); |
147 | 147 | BOOL CreateToolBar(LPTBITEM lpTbItem, SIZE size, UINT nBtnNum); |
148 | 148 | BOOL SendAckToMaster(WORD wMsg, DWORD dwOption = 0); |