Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/teraterm/teraterm/ttwsk.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9048 - (show annotations) (download) (as text)
Wed Dec 16 12:24:13 2020 UTC (3 years, 5 months ago) by nmaya
File MIME type: text/x-csrc
File size: 6697 byte(s)
ソースファイルの著作権表記の "最後の発行の年" を削除

ticket #40996
1 /*
2 * Copyright (C) 1994-1998 T. Teranishi
3 * (C) 2007- TeraTerm Project
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30 /* TERATERM.EXE, Winsock interface */
31
32 #include "teraterm.h"
33 #include "ttwsk.h"
34 #include <wspiapi.h>
35 #include "WSAAsyncGetAddrInfo.h"
36
37 static HANDLE HWinsock = NULL;
38
39 Tclosesocket Pclosesocket;
40 Tconnect Pconnect;
41 Thtonl Phtonl;
42 Thtons Phtons;
43 Tinet_addr Pinet_addr;
44 Tioctlsocket Pioctlsocket;
45 Trecv Precv;
46 Tselect Pselect;
47 Tsend Psend;
48 Tsetsockopt Psetsockopt;
49 Tsocket Psocket;
50 // Tgethostbyname Pgethostbyname;
51 TWSAAsyncSelect PWSAAsyncSelect;
52 TWSAAsyncGetHostByName PWSAAsyncGetHostByName;
53 TWSACancelAsyncRequest PWSACancelAsyncRequest;
54 TWSAGetLastError PWSAGetLastError;
55 TWSAStartup PWSAStartup;
56 TWSACleanup PWSACleanup;
57 // Tgetaddrinfo Pgetaddrinfo;
58 Tfreeaddrinfo Pfreeaddrinfo;
59 TWSAAsyncGetAddrInfo PWSAAsyncGetAddrInfo;
60
61 void CheckWinsock()
62 {
63 WORD wVersionRequired;
64 WSADATA WSData;
65
66 if (HWinsock == NULL) return;
67 #if 0
68 wVersionRequired = 1*256+1;
69 if ((PWSAStartup(wVersionRequired, &WSData) != 0) ||
70 (LOBYTE(WSData.wVersion) != 1) ||
71 (HIBYTE(WSData.wVersion) != 1))
72 {
73 PWSACleanup();
74 FreeLibrary(HWinsock);
75 HWinsock = NULL;
76 }
77 #else
78 wVersionRequired = MAKEWORD(2, 2);
79 if ((PWSAStartup(wVersionRequired, &WSData) != 0) ||
80 (LOBYTE(WSData.wVersion) != 2) ||
81 (HIBYTE(WSData.wVersion) != 2))
82 {
83 PWSACleanup();
84 FreeLibrary(HWinsock);
85 HWinsock = NULL;
86 }
87 #endif
88 }
89
90 #define IdCLOSESOCKET 3
91 #define IdCONNECT 4
92 #define IdHTONL 8
93 #define IdHTONS 9
94 #define IdINET_ADDR 10
95 #define IdIOCTLSOCKET 12
96 #define IdRECV 16
97 #define IdSELECT 18
98 #define IdSEND 19
99 #define IdSETSOCKOPT 21
100 #define IdSOCKET 23
101 // #define IdGETHOSTBYNAME 52
102 #define IdWSAASYNCSELECT 101
103 #define IdWSAASYNCGETHOSTBYNAME 103
104 #define IdWSACANCELASYNCREQUEST 108
105 #define IdWSAGETLASTERROR 111
106 #define IdWSASTARTUP 115
107 #define IdWSACLEANUP 116
108
109 BOOL LoadWinsock()
110 {
111 BOOL Err;
112
113 if (HWinsock == NULL)
114 {
115 char wsock32_dll[MAX_PATH];
116
117 GetSystemDirectory(wsock32_dll, sizeof(wsock32_dll));
118 strncat_s(wsock32_dll, sizeof(wsock32_dll), "\\wsock32.dll", _TRUNCATE);
119 HWinsock = LoadLibrary(wsock32_dll);
120 if (HWinsock == NULL) return FALSE;
121
122 Err = FALSE;
123
124 Pclosesocket = (Tclosesocket)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdCLOSESOCKET));
125 if (Pclosesocket==NULL) Err = TRUE;
126
127 Pconnect = (Tconnect)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdCONNECT));
128 if (Pconnect==NULL) Err = TRUE;
129
130 Phtonl = (Thtonl)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdHTONL));
131 if (Phtonl==NULL) Err = TRUE;
132
133 Phtons = (Thtons)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdHTONS));
134 if (Phtons==NULL) Err = TRUE;
135
136 Pinet_addr = (Tinet_addr)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdINET_ADDR));
137 if (Pinet_addr==NULL) Err = TRUE;
138
139 Pioctlsocket = (Tioctlsocket)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdIOCTLSOCKET));
140 if (Pioctlsocket==NULL) Err = TRUE;
141
142 Precv = (Trecv)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdRECV));
143 if (Precv==NULL) Err = TRUE;
144
145 Pselect = (Tselect)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSELECT));
146 if (Pselect==NULL) Err = TRUE;
147
148 Psend = (Tsend)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSEND));
149 if (Psend==NULL) Err = TRUE;
150
151 Psetsockopt = (Tsetsockopt)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSETSOCKOPT));
152 if (Psetsockopt==NULL) Err = TRUE;
153
154 Psocket = (Tsocket)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSOCKET));
155 if (Psocket==NULL) Err = TRUE;
156
157 // Pgethostbyname = (Tgethostbyname)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdGETHOSTBYNAME));
158 // if (Pgethostbyname==NULL) Err = TRUE;
159
160 PWSAAsyncSelect = (TWSAAsyncSelect)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSAASYNCSELECT));
161 if (PWSAAsyncSelect==NULL) Err = TRUE;
162
163 PWSAAsyncGetHostByName =
164 (TWSAAsyncGetHostByName)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSAASYNCGETHOSTBYNAME));
165 if (PWSAAsyncSelect==NULL) Err = TRUE;
166
167 PWSACancelAsyncRequest = (TWSACancelAsyncRequest)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSACANCELASYNCREQUEST));
168 if (PWSACancelAsyncRequest==NULL) Err = TRUE;
169
170 PWSAGetLastError = (TWSAGetLastError)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSAGETLASTERROR));
171 if (PWSAGetLastError==NULL) Err = TRUE;
172
173 PWSAStartup = (TWSAStartup)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSASTARTUP));
174 if (PWSAStartup==NULL) Err = TRUE;
175
176 PWSACleanup = (TWSACleanup)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSACLEANUP));
177 if (PWSACleanup==NULL) Err = TRUE;
178
179 // Pgetaddrinfo = (Tgetaddrinfo)GetProcAddress(HWinsock, "getaddrinfo");
180 // if (Pgetaddrinfo==NULL) Err = TRUE;
181
182 Pfreeaddrinfo = freeaddrinfo;
183 PWSAAsyncGetAddrInfo = WSAAsyncGetAddrInfo;
184
185 if (Err)
186 {
187 FreeLibrary(HWinsock);
188 HWinsock = NULL;
189 return FALSE;
190 }
191 }
192
193 CheckWinsock();
194
195 return (HWinsock != NULL);
196 }
197
198 void FreeWinsock()
199 {
200 HANDLE HTemp;
201
202 if (HWinsock == NULL) return;
203 HTemp = HWinsock;
204 HWinsock = NULL;
205 PWSACleanup();
206 Sleep(50); // for safety
207 FreeLibrary(HTemp);
208 }

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