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 7479 - (hide annotations) (download) (as text)
Wed Mar 13 15:32:17 2019 UTC (5 years, 1 month ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/ttwsk.c
File MIME type: text/x-csrc
File size: 6701 byte(s)
wspiapi.h を include した
ws2_32.dll関連でエラーが出ないバイナリがビルドできるようになった
従来は _WIN32_WINNT のdefine具合よってWindows95でエラーが出るバイナリとなっていた
1 doda 6806 /*
2     * Copyright (C) 1994-1998 T. Teranishi
3 zmatsuo 7479 * (C) 2007-2019 TeraTerm Project
4 doda 6806 * All rights reserved.
5     *
6 doda 6841 * Redistribution and use in source and binary forms, with or without
7     * modification, are permitted provided that the following conditions
8     * are met:
9 doda 6806 *
10 doda 6841 * 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 doda 6806 *
18 doda 6841 * 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 doda 6806 */
29 maya 3227
30     /* TERATERM.EXE, Winsock interface */
31    
32     #include "teraterm.h"
33     #include "ttwsk.h"
34 zmatsuo 7479 #include <wspiapi.h>
35 doda 4089 #include "WSAAsyncGetAddrInfo.h"
36 maya 3227
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 doda 4165 // Tgetaddrinfo Pgetaddrinfo;
58     Tfreeaddrinfo Pfreeaddrinfo;
59 doda 4089 TWSAAsyncGetAddrInfo PWSAAsyncGetAddrInfo;
60 maya 3227
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 doda 6435 #define IdHTONL 8
93     #define IdHTONS 9
94 maya 3227 #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 maya 4134 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 maya 3227 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 doda 4165 // Pgetaddrinfo = (Tgetaddrinfo)GetProcAddress(HWinsock, "getaddrinfo");
180     // if (Pgetaddrinfo==NULL) Err = TRUE;
181    
182     Pfreeaddrinfo = freeaddrinfo;
183 doda 4089 PWSAAsyncGetAddrInfo = WSAAsyncGetAddrInfo;
184    
185 maya 3227 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