(empty log message)
@@ -0,0 +1,31 @@ | ||
1 | +#pragma once | |
2 | + | |
3 | +////////////////////////////////////////////////////////////////////////// | |
4 | + | |
5 | +#define SM_EVENT (WM_APP + 100) | |
6 | +#define SM_GETHOST (WM_APP + 101) | |
7 | + | |
8 | +#define SX_KA_TIME 30000 // 30 seconds | |
9 | +#define SX_KA_INTERVAL 1000 // 1 seconds | |
10 | +#define SX_SEND_TIMEOUT 20000 // 20 seconds | |
11 | +#define SX_RECV_TIMEOUT 20000 // 20 seconds | |
12 | +#define SX_TCP_MAXBUFSIZE 262144 // 256 KByte | |
13 | +#define SX_TCP_MINBUFSIZE 8192 // 8 KByte | |
14 | +#define SX_UDP_BUFSIZE 4096 // 4 KByte | |
15 | + | |
16 | +#define FD_SERVER (FD_ACCEPT | FD_WRITE | FD_READ | FD_CLOSE) | |
17 | +#define FD_CLIENT (FD_WRITE | FD_READ | FD_CLOSE) | |
18 | +#define FD_PEER (FD_WRITE | FD_READ | FD_CLOSE) | |
19 | + | |
20 | +#define SF_KEY_RND1 0x0001 | |
21 | +#define SF_KEY_RND2 0x0002 | |
22 | +#define SF_KEY_RND3 0x0004 | |
23 | +#define SF_SEC_MODE 0x0008 | |
24 | +#define SF_SEC_HASH 0x0010 | |
25 | + | |
26 | +////////////////////////////////////////////////////////////////////////// | |
27 | + | |
28 | +#define DATA_SEND(dt) const_cast<LPSTR>(reinterpret_cast<LPCSTR>(dt)) | |
29 | +#define DATA_RECEIVE(dt) reinterpret_cast<LPSTR>(dt) | |
30 | + | |
31 | +////////////////////////////////////////////////////////////////////////// | |
\ No newline at end of file |
@@ -51,10 +51,9 @@ | ||
51 | 51 | |
52 | 52 | while (nRet != SOCKET_ERROR) |
53 | 53 | { |
54 | - nRet = recv(hSocket, reinterpret_cast<LPSTR>(&buf[0]), buf.GetSize(), 0); | |
54 | + nRet = recv(hSocket, reinterpret_cast<LPSTR>(buf.GetData()), buf.GetSize(), 0); | |
55 | 55 | } |
56 | 56 | |
57 | - closesocket(hSocket); | |
58 | 57 | TRACE0("***** ERROR: Receive(Socket not found) *****\n"); |
59 | 58 | return; |
60 | 59 | } |
@@ -104,24 +104,11 @@ | ||
104 | 104 | int nErrorCode = WSAGETSELECTERROR(lParam); |
105 | 105 | HANDLE hTask = (HANDLE)wParam; |
106 | 106 | |
107 | - OnGetHostByName(hTask, nErrorCode); | |
107 | + doGetHostByName(hTask, nErrorCode); | |
108 | 108 | |
109 | 109 | return 0; |
110 | 110 | } |
111 | 111 | |
112 | -void IBaseSocket::OnGetHostByName(HANDLE hTask, int nErrorCode) | |
113 | -{ | |
114 | - LPHOSTENT lpHostEnt = reinterpret_cast<LPHOSTENT>(m_HostName.buf); | |
115 | - | |
116 | - if (m_HostName.hTask != hTask) | |
117 | - { | |
118 | - TRACE0("***** ERROR: GetHostByName(Handle) *****\n"); | |
119 | - return; | |
120 | - } | |
121 | - | |
122 | - m_SockMsg.pTgtObj->OnGetHostByNameMessage(lpHostEnt); | |
123 | -} | |
124 | - | |
125 | 112 | BOOL IBaseSocket::CreateSocketWindow() |
126 | 113 | { |
127 | 114 | CString strClass; |
@@ -342,6 +329,21 @@ | ||
342 | 329 | |
343 | 330 | ////////////////////////////////////////////////////////////////////////// |
344 | 331 | |
332 | +BOOL IBaseSocket::doGetHostByName(HANDLE hTask, int nErrorCode) | |
333 | +{ | |
334 | + LPHOSTENT lpHostEnt = reinterpret_cast<LPHOSTENT>(m_HostName.buf); | |
335 | + | |
336 | + if (m_HostName.hTask != hTask) | |
337 | + { | |
338 | + TRACE0("***** ERROR: GetHostByName(Handle) *****\n"); | |
339 | + return FALSE; | |
340 | + } | |
341 | + | |
342 | + m_SockMsg.pTgtObj->OnGetHostByNameMessage(lpHostEnt); | |
343 | + | |
344 | + return TRUE; | |
345 | +} | |
346 | + | |
345 | 347 | BOOL IBaseSocket::doCloseSocket(SOCKET hSocket) |
346 | 348 | { |
347 | 349 | if (closesocket(hSocket) != 0) |
@@ -556,9 +558,9 @@ | ||
556 | 558 | BOOL IBaseSocket::doSend(SOCKET hSocket, const CByteArray &data) |
557 | 559 | { |
558 | 560 | CByteArray snd; |
559 | - size_t dataSize; | |
560 | - size_t sendSize; | |
561 | - size_t bufPtr; | |
561 | + HEADER header; | |
562 | + size_t dataSize, hdrSize; | |
563 | + size_t dataPtr, hdrPtr; | |
562 | 564 | LONG lEvent; |
563 | 565 | BOOL fResult; |
564 | 566 | int nRet; |
@@ -572,18 +574,20 @@ | ||
572 | 574 | } |
573 | 575 | |
574 | 576 | dataSize = data.GetSize(); |
575 | - sendSize = dataSize + sizeof(HEADER); | |
576 | - bufPtr = 0; | |
577 | + hdrSize = sizeof(HEADER); | |
578 | + dataPtr = 0; | |
579 | + hdrPtr = 0; | |
577 | 580 | fResult = TRUE; |
578 | 581 | |
579 | - snd.SetSize(sendSize); | |
580 | - ((LPHEADER)snd.GetData())->size = dataSize; | |
581 | - CopyMemory((snd.GetData() + sizeof(HEADER)), data.GetData(), dataSize); | |
582 | + header.size = dataSize; | |
583 | + snd.SetSize(hdrSize); | |
584 | + CopyMemory(snd.GetData(), &header, hdrSize); | |
582 | 585 | snd.FreeExtra(); |
583 | 586 | |
584 | - do | |
587 | + do | |
585 | 588 | { |
586 | - nRet = send(hSocket, reinterpret_cast<const LPSTR>(snd.GetData() + bufPtr), sendSize, 0); | |
589 | + // Send header | |
590 | + nRet = send(hSocket, DATA_SEND(snd.GetData() + hdrPtr), hdrSize, 0); | |
587 | 591 | |
588 | 592 | if (nRet == SOCKET_ERROR) |
589 | 593 | { |
@@ -595,7 +599,7 @@ | ||
595 | 599 | } |
596 | 600 | else |
597 | 601 | { |
598 | - TRACE1("***** ERROR: send(%d) *****\n", m_dwError); | |
602 | + TRACE1("***** ERROR: send header(%d) *****\n", m_dwError); | |
599 | 603 | fResult = FALSE; |
600 | 604 | break; |
601 | 605 | } |
@@ -602,11 +606,42 @@ | ||
602 | 606 | } |
603 | 607 | else |
604 | 608 | { |
605 | - bufPtr += nRet; | |
606 | - sendSize -= nRet; | |
609 | + hdrPtr += nRet; | |
610 | + hdrSize -= nRet; | |
607 | 611 | } |
612 | + } | |
613 | + while (hdrSize > 0); | |
614 | + | |
615 | + if (fResult) | |
616 | + { | |
617 | + do | |
618 | + { | |
619 | + // Send data | |
620 | + nRet = send(hSocket, DATA_SEND(data.GetData() + dataPtr), dataSize, 0); | |
621 | + | |
622 | + if (nRet == SOCKET_ERROR) | |
623 | + { | |
624 | + m_dwError = GetLastError(); | |
625 | + | |
626 | + if (m_dwError == WSAEWOULDBLOCK) | |
627 | + { | |
628 | + continue; | |
629 | + } | |
630 | + else | |
631 | + { | |
632 | + TRACE1("***** ERROR: send data(%d) *****\n", m_dwError); | |
633 | + fResult = FALSE; | |
634 | + break; | |
635 | + } | |
636 | + } | |
637 | + else | |
638 | + { | |
639 | + dataPtr += nRet; | |
640 | + dataSize -= nRet; | |
641 | + } | |
642 | + } | |
643 | + while (dataSize > 0); | |
608 | 644 | } |
609 | - while (sendSize > 0); | |
610 | 645 | |
611 | 646 | if ((lEvent != 0) && (lEvent & FD_WRITE)) |
612 | 647 | { |
@@ -636,7 +671,7 @@ | ||
636 | 671 | } |
637 | 672 | |
638 | 673 | // Receive header |
639 | - nRet = recv(hSocket, reinterpret_cast<LPSTR>(&header.size), sizeof(HEADER), MSG_PEEK); | |
674 | + nRet = recv(hSocket, DATA_RECEIVE(&header), sizeof(HEADER), MSG_PEEK); | |
640 | 675 | |
641 | 676 | if (nRet == sizeof(HEADER)) |
642 | 677 | { |
@@ -651,7 +686,7 @@ | ||
651 | 686 | do |
652 | 687 | { |
653 | 688 | // Receive data |
654 | - nRet = recv(hSocket, reinterpret_cast<LPSTR>(data.GetData() + bufPtr), recvSize, 0); | |
689 | + nRet = recv(hSocket, DATA_RECEIVE(data.GetData() + bufPtr), recvSize, 0); | |
655 | 690 | |
656 | 691 | if (nRet == SOCKET_ERROR) |
657 | 692 | { |
@@ -680,7 +715,6 @@ | ||
680 | 715 | if (data.GetSize() >= sizeof(HEADER)) |
681 | 716 | { |
682 | 717 | data.RemoveAt(0, sizeof(HEADER)); |
683 | - data.FreeExtra(); | |
684 | 718 | } |
685 | 719 | } |
686 | 720 | else |
@@ -35,30 +35,10 @@ | ||
35 | 35 | #include <WinSock2.h> |
36 | 36 | #include <MSTcpIP.h> // For tcp_keepalive, promiscuous |
37 | 37 | #include <memory> // For shard_ptr |
38 | +#include "Config.h" | |
38 | 39 | |
39 | 40 | #pragma comment(lib, "ws2_32") |
40 | 41 | |
41 | -#define SM_EVENT (WM_APP + 100) | |
42 | -#define SM_GETHOST (WM_APP + 101) | |
43 | - | |
44 | -#define SX_KA_TIME 30000 // 30 seconds | |
45 | -#define SX_KA_INTERVAL 1000 // 1 seconds | |
46 | -#define SX_SEND_TIMEOUT 20000 // 20 seconds | |
47 | -#define SX_RECV_TIMEOUT 20000 // 20 seconds | |
48 | -#define SX_TCP_MAXBUFSIZE 262144 // 256 KByte | |
49 | -#define SX_TCP_MINBUFSIZE 8192 // 8 KByte | |
50 | -#define SX_UDP_BUFSIZE 4096 // 4 KByte | |
51 | - | |
52 | -#define SX_EVENT_SEND 1000 | |
53 | -#define SX_EVENT_RECEIVE 2000 | |
54 | -#define SX_EVENT_CONNECT 3000 | |
55 | -#define SX_EVENT_ACCEPT 4000 | |
56 | -#define SX_EVENT_CLOSE 5000 | |
57 | - | |
58 | -#define FD_SERVER (FD_ACCEPT | FD_WRITE | FD_READ | FD_CLOSE) | |
59 | -#define FD_CLIENT (FD_WRITE | FD_READ | FD_CLOSE) | |
60 | -#define FD_PEER (FD_WRITE | FD_READ | FD_CLOSE) | |
61 | - | |
62 | 42 | ////////////////////////////////////////////////////////////////////////// |
63 | 43 | |
64 | 44 | BOOL SocketXInitialize(); |
@@ -117,7 +97,7 @@ | ||
117 | 97 | { |
118 | 98 | public: |
119 | 99 | ISocketMessage() {} |
120 | - ~ISocketMessage() {} | |
100 | + virtual ~ISocketMessage() {} | |
121 | 101 | |
122 | 102 | // Message function |
123 | 103 | virtual void OnSocketSendMessage(DWORD dwSocketID) {} |
@@ -170,7 +150,6 @@ | ||
170 | 150 | virtual void OnClose(SOCKET hSocket, int nErrorCode) {} |
171 | 151 | virtual void OnSend(SOCKET hSocket, int nErrorCode) {} |
172 | 152 | virtual void OnReceive(SOCKET hSocket, int nErrorCode) {} |
173 | - void OnGetHostByName(HANDLE hTask, int nErrorCode); | |
174 | 153 | |
175 | 154 | void SetTargetWnd(SOCKMSG SockMsg) { m_SockMsg = SockMsg; } |
176 | 155 | void ConvertSockAddrToNetAddr(const LPSOCKADDR lpSockAddr, NETADDR &NetAddr); |
@@ -221,6 +200,7 @@ | ||
221 | 200 | void MakeSockAddrIN(LPSOCKADDR_IN lpSockAddrIN, DWORD dwAddress, WORD wPort, UINT nAF = AF_INET); |
222 | 201 | |
223 | 202 | BOOL doCloseSocket(SOCKET hSocket); |
203 | + BOOL doGetHostByName(HANDLE hTask, int nErrorCode); | |
224 | 204 | BOOL doSend(SOCKET hSocket, const CByteArray &data); |
225 | 205 | BOOL doSendTo(SOCKET hSocket, const CByteArray &data, const LPSOCKADDR lpSockAddr, int nSockAddrLen); |
226 | 206 | BOOL doReceive(SOCKET hSocket, CByteArray &data); |
@@ -263,6 +243,8 @@ | ||
263 | 243 | typedef struct _HEADER |
264 | 244 | { |
265 | 245 | size_t size; |
246 | + size_t pad; | |
247 | + WORD flags; | |
266 | 248 | } |
267 | 249 | HEADER, *LPHEADER; |
268 | 250 |