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 6841 - (hide annotations) (download) (as text)
Tue Jul 4 15:02:28 2017 UTC (6 years, 9 months ago) by doda
Original Path: trunk/teraterm/teraterm/ttwsk.c
File MIME type: text/x-csrc
File size: 6679 byte(s)
TeraTerm Project としてのライセンス表記を追加

・Tera Term 本体分を横 80 桁に収まるように改行位置を調整
・ttssh 関連の分を追加
1 doda 6806 /*
2     * Copyright (C) 1994-1998 T. Teranishi
3     * (C) 2007-2017 TeraTerm Project
4     * 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 doda 4089 #include "WSAAsyncGetAddrInfo.h"
35 maya 3227
36     static HANDLE HWinsock = NULL;
37    
38     Tclosesocket Pclosesocket;
39     Tconnect Pconnect;
40     Thtonl Phtonl;
41     Thtons Phtons;
42     Tinet_addr Pinet_addr;
43     Tioctlsocket Pioctlsocket;
44     Trecv Precv;
45     Tselect Pselect;
46     Tsend Psend;
47     Tsetsockopt Psetsockopt;
48     Tsocket Psocket;
49     // Tgethostbyname Pgethostbyname;
50     TWSAAsyncSelect PWSAAsyncSelect;
51     TWSAAsyncGetHostByName PWSAAsyncGetHostByName;
52     TWSACancelAsyncRequest PWSACancelAsyncRequest;
53     TWSAGetLastError PWSAGetLastError;
54     TWSAStartup PWSAStartup;
55     TWSACleanup PWSACleanup;
56 doda 4165 // Tgetaddrinfo Pgetaddrinfo;
57     Tfreeaddrinfo Pfreeaddrinfo;
58 doda 4089 TWSAAsyncGetAddrInfo PWSAAsyncGetAddrInfo;
59 maya 3227
60     void CheckWinsock()
61     {
62     WORD wVersionRequired;
63     WSADATA WSData;
64    
65     if (HWinsock == NULL) return;
66     #if 0
67     wVersionRequired = 1*256+1;
68     if ((PWSAStartup(wVersionRequired, &WSData) != 0) ||
69     (LOBYTE(WSData.wVersion) != 1) ||
70     (HIBYTE(WSData.wVersion) != 1))
71     {
72     PWSACleanup();
73     FreeLibrary(HWinsock);
74     HWinsock = NULL;
75     }
76     #else
77     wVersionRequired = MAKEWORD(2, 2);
78     if ((PWSAStartup(wVersionRequired, &WSData) != 0) ||
79     (LOBYTE(WSData.wVersion) != 2) ||
80     (HIBYTE(WSData.wVersion) != 2))
81     {
82     PWSACleanup();
83     FreeLibrary(HWinsock);
84     HWinsock = NULL;
85     }
86     #endif
87     }
88    
89     #define IdCLOSESOCKET 3
90     #define IdCONNECT 4
91 doda 6435 #define IdHTONL 8
92     #define IdHTONS 9
93 maya 3227 #define IdINET_ADDR 10
94     #define IdIOCTLSOCKET 12
95     #define IdRECV 16
96     #define IdSELECT 18
97     #define IdSEND 19
98     #define IdSETSOCKOPT 21
99     #define IdSOCKET 23
100     // #define IdGETHOSTBYNAME 52
101     #define IdWSAASYNCSELECT 101
102     #define IdWSAASYNCGETHOSTBYNAME 103
103     #define IdWSACANCELASYNCREQUEST 108
104     #define IdWSAGETLASTERROR 111
105     #define IdWSASTARTUP 115
106     #define IdWSACLEANUP 116
107    
108     BOOL LoadWinsock()
109     {
110     BOOL Err;
111    
112     if (HWinsock == NULL)
113     {
114 maya 4134 char wsock32_dll[MAX_PATH];
115    
116     GetSystemDirectory(wsock32_dll, sizeof(wsock32_dll));
117     strncat_s(wsock32_dll, sizeof(wsock32_dll), "\\wsock32.dll", _TRUNCATE);
118     HWinsock = LoadLibrary(wsock32_dll);
119 maya 3227 if (HWinsock == NULL) return FALSE;
120    
121     Err = FALSE;
122    
123     Pclosesocket = (Tclosesocket)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdCLOSESOCKET));
124     if (Pclosesocket==NULL) Err = TRUE;
125    
126     Pconnect = (Tconnect)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdCONNECT));
127     if (Pconnect==NULL) Err = TRUE;
128    
129     Phtonl = (Thtonl)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdHTONL));
130     if (Phtonl==NULL) Err = TRUE;
131    
132     Phtons = (Thtons)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdHTONS));
133     if (Phtons==NULL) Err = TRUE;
134    
135     Pinet_addr = (Tinet_addr)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdINET_ADDR));
136     if (Pinet_addr==NULL) Err = TRUE;
137    
138     Pioctlsocket = (Tioctlsocket)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdIOCTLSOCKET));
139     if (Pioctlsocket==NULL) Err = TRUE;
140    
141     Precv = (Trecv)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdRECV));
142     if (Precv==NULL) Err = TRUE;
143    
144     Pselect = (Tselect)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSELECT));
145     if (Pselect==NULL) Err = TRUE;
146    
147     Psend = (Tsend)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSEND));
148     if (Psend==NULL) Err = TRUE;
149    
150     Psetsockopt = (Tsetsockopt)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSETSOCKOPT));
151     if (Psetsockopt==NULL) Err = TRUE;
152    
153     Psocket = (Tsocket)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdSOCKET));
154     if (Psocket==NULL) Err = TRUE;
155    
156     // Pgethostbyname = (Tgethostbyname)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdGETHOSTBYNAME));
157     // if (Pgethostbyname==NULL) Err = TRUE;
158    
159     PWSAAsyncSelect = (TWSAAsyncSelect)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSAASYNCSELECT));
160     if (PWSAAsyncSelect==NULL) Err = TRUE;
161    
162     PWSAAsyncGetHostByName =
163     (TWSAAsyncGetHostByName)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSAASYNCGETHOSTBYNAME));
164     if (PWSAAsyncSelect==NULL) Err = TRUE;
165    
166     PWSACancelAsyncRequest = (TWSACancelAsyncRequest)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSACANCELASYNCREQUEST));
167     if (PWSACancelAsyncRequest==NULL) Err = TRUE;
168    
169     PWSAGetLastError = (TWSAGetLastError)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSAGETLASTERROR));
170     if (PWSAGetLastError==NULL) Err = TRUE;
171    
172     PWSAStartup = (TWSAStartup)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSASTARTUP));
173     if (PWSAStartup==NULL) Err = TRUE;
174    
175     PWSACleanup = (TWSACleanup)GetProcAddress(HWinsock, MAKEINTRESOURCE(IdWSACLEANUP));
176     if (PWSACleanup==NULL) Err = TRUE;
177    
178 doda 4165 // Pgetaddrinfo = (Tgetaddrinfo)GetProcAddress(HWinsock, "getaddrinfo");
179     // if (Pgetaddrinfo==NULL) Err = TRUE;
180    
181     Pfreeaddrinfo = freeaddrinfo;
182 doda 4089 PWSAAsyncGetAddrInfo = WSAAsyncGetAddrInfo;
183    
184 maya 3227 if (Err)
185     {
186     FreeLibrary(HWinsock);
187     HWinsock = NULL;
188     return FALSE;
189     }
190     }
191    
192     CheckWinsock();
193    
194     return (HWinsock != NULL);
195     }
196    
197     void FreeWinsock()
198     {
199     HANDLE HTemp;
200    
201     if (HWinsock == NULL) return;
202     HTemp = HWinsock;
203     HWinsock = NULL;
204     PWSACleanup();
205     Sleep(50); // for safety
206     FreeLibrary(HTemp);
207     }

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