Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/ttcomtester/teraterm/teraterm/ttwsk.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4089 - (hide annotations) (download) (as text)
Tue Sep 7 03:42:35 2010 UTC (13 years, 7 months ago) by doda
Original Path: trunk/teraterm/teraterm/ttwsk.c
File MIME type: text/x-csrc
File size: 4829 byte(s)
WSAAsyncGetAddrInfo を TTX からフックできるようにした。

1 maya 3227 /* Tera Term
2     Copyright(C) 1994-1998 T. Teranishi
3     All rights reserved. */
4    
5     /* TERATERM.EXE, Winsock interface */
6    
7     #include "teraterm.h"
8     #include "ttwsk.h"
9 doda 4089 #include "WSAAsyncGetAddrInfo.h"
10 maya 3227
11     static HANDLE HWinsock = NULL;
12    
13     Tclosesocket Pclosesocket;
14     Tconnect Pconnect;
15     Thtonl Phtonl;
16     Thtons Phtons;
17     Tinet_addr Pinet_addr;
18     Tioctlsocket Pioctlsocket;
19     Trecv Precv;
20     Tselect Pselect;
21     Tsend Psend;
22     Tsetsockopt Psetsockopt;
23     Tsocket Psocket;
24     // Tgethostbyname Pgethostbyname;
25     TWSAAsyncSelect PWSAAsyncSelect;
26     TWSAAsyncGetHostByName PWSAAsyncGetHostByName;
27     TWSACancelAsyncRequest PWSACancelAsyncRequest;
28     TWSAGetLastError PWSAGetLastError;
29     TWSAStartup PWSAStartup;
30     TWSACleanup PWSACleanup;
31 doda 4089 TWSAAsyncGetAddrInfo PWSAAsyncGetAddrInfo;
32 maya 3227
33     void CheckWinsock()
34     {
35     WORD wVersionRequired;
36     WSADATA WSData;
37    
38     if (HWinsock == NULL) return;
39     #if 0
40     wVersionRequired = 1*256+1;
41     if ((PWSAStartup(wVersionRequired, &WSData) != 0) ||
42     (LOBYTE(WSData.wVersion) != 1) ||
43     (HIBYTE(WSData.wVersion) != 1))
44     {
45     PWSACleanup();
46     FreeLibrary(HWinsock);
47     HWinsock = NULL;
48     }
49     #else
50     wVersionRequired = MAKEWORD(2, 2);
51     if ((PWSAStartup(wVersionRequired, &WSData) != 0) ||
52     (LOBYTE(WSData.wVersion) != 2) ||
53     (HIBYTE(WSData.wVersion) != 2))
54     {
55     PWSACleanup();
56     FreeLibrary(HWinsock);
57     HWinsock = NULL;
58     }
59     #endif
60     }
61    
62     #define IdCLOSESOCKET 3
63     #define IdCONNECT 4
64     #define IdHTONL 8
65     #define IdHTONS 9
66     #define IdINET_ADDR 10
67     #define IdIOCTLSOCKET 12
68     #define IdRECV 16
69     #define IdSELECT 18
70     #define IdSEND 19
71     #define IdSETSOCKOPT 21
72     #define IdSOCKET 23
73     // #define IdGETHOSTBYNAME 52
74     #define IdWSAASYNCSELECT 101
75     #define IdWSAASYNCGETHOSTBYNAME 103
76     #define IdWSACANCELASYNCREQUEST 108
77     #define IdWSAGETLASTERROR 111
78     #define IdWSASTARTUP 115
79     #define IdWSACLEANUP 116
80    
81     BOOL LoadWinsock()
82     {
83     BOOL Err;
84    
85     if (HWinsock == NULL)
86     {
87     HWinsock = LoadLibrary("WSOCK32.DLL");
88     if (HWinsock == NULL) return FALSE;
89    
90     Err = FALSE;
91    
92     Pclosesocket = (Tclosesocket)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdCLOSESOCKET));
93     if (Pclosesocket==NULL) Err = TRUE;
94    
95     Pconnect = (Tconnect)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdCONNECT));
96     if (Pconnect==NULL) Err = TRUE;
97    
98     Phtonl = (Thtonl)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdHTONL));
99     if (Phtonl==NULL) Err = TRUE;
100    
101     Phtons = (Thtons)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdHTONS));
102     if (Phtons==NULL) Err = TRUE;
103    
104     Pinet_addr = (Tinet_addr)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdINET_ADDR));
105     if (Pinet_addr==NULL) Err = TRUE;
106    
107     Pioctlsocket = (Tioctlsocket)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdIOCTLSOCKET));
108     if (Pioctlsocket==NULL) Err = TRUE;
109    
110     Precv = (Trecv)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdRECV));
111     if (Precv==NULL) Err = TRUE;
112    
113     Pselect = (Tselect)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSELECT));
114     if (Pselect==NULL) Err = TRUE;
115    
116     Psend = (Tsend)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSEND));
117     if (Psend==NULL) Err = TRUE;
118    
119     Psetsockopt = (Tsetsockopt)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSETSOCKOPT));
120     if (Psetsockopt==NULL) Err = TRUE;
121    
122     Psocket = (Tsocket)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSOCKET));
123     if (Psocket==NULL) Err = TRUE;
124    
125     // Pgethostbyname = (Tgethostbyname)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdGETHOSTBYNAME));
126     // if (Pgethostbyname==NULL) Err = TRUE;
127    
128     PWSAAsyncSelect = (TWSAAsyncSelect)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSAASYNCSELECT));
129     if (PWSAAsyncSelect==NULL) Err = TRUE;
130    
131     PWSAAsyncGetHostByName =
132     (TWSAAsyncGetHostByName)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSAASYNCGETHOSTBYNAME));
133     if (PWSAAsyncSelect==NULL) Err = TRUE;
134    
135     PWSACancelAsyncRequest = (TWSACancelAsyncRequest)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSACANCELASYNCREQUEST));
136     if (PWSACancelAsyncRequest==NULL) Err = TRUE;
137    
138     PWSAGetLastError = (TWSAGetLastError)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSAGETLASTERROR));
139     if (PWSAGetLastError==NULL) Err = TRUE;
140    
141     PWSAStartup = (TWSAStartup)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSASTARTUP));
142     if (PWSAStartup==NULL) Err = TRUE;
143    
144     PWSACleanup = (TWSACleanup)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSACLEANUP));
145     if (PWSACleanup==NULL) Err = TRUE;
146    
147 doda 4089 PWSAAsyncGetAddrInfo = WSAAsyncGetAddrInfo;
148    
149 maya 3227 if (Err)
150     {
151     FreeLibrary(HWinsock);
152     HWinsock = NULL;
153     return FALSE;
154     }
155     }
156    
157     CheckWinsock();
158    
159     return (HWinsock != NULL);
160     }
161    
162     void FreeWinsock()
163     {
164     HANDLE HTemp;
165    
166     if (HWinsock == NULL) return;
167     HTemp = HWinsock;
168     HWinsock = NULL;
169     PWSACleanup();
170     Sleep(50); // for safety
171     FreeLibrary(HTemp);
172     }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26