comparison lib/Xsj3clib/connect.c @ 0:92745d501b9a

initial import from kinput2-v3.1
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 08 Mar 2010 04:44:30 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:92745d501b9a
1 #ifndef lint
2 static char *rcsid = "$Id: connect.c,v 2.0 1992/02/13 18:33:14 nao Exp $";
3 #endif
4 /*
5 * Copyright 1991 Sony Corporation
6 *
7 * Permission to use, copy, modify, distribute, and sell this software and its
8 * documentation for any purpose is hereby granted without fee, provided that
9 * the above copyright notice appear in all copies and that both that
10 * copyright notice and this permission notice appear in supporting
11 * documentation, and that the name of Sony not be used in advertising or
12 * publicity pertaining to distribution of the software without specific,
13 * written prior permission. Sony makes no representations about the
14 * suitability of this software for any purpose. It is provided "as is"
15 * without express or implied warranty.
16 *
17 * SONY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SONY
19 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
21 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
22 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 */
24 /*
25 * Author: Naoshi Suzuki, SONY Corporation. (nao@sm.sony.co.jp)
26 */
27
28 #include "common.h"
29 #include "util.h"
30
31 extern Xsj3cCVServerIF serverIF[SERVER_NUM];
32
33 int Xsj3cOpen();
34 void Xsj3cClose();
35 void Xsj3cConnect();
36
37 static void _Xsj3cOpenError();
38 static void _Xsj3cCloseError();
39
40 static int connected[SERVER_NUM]= {0};
41
42 /*
43 * Xsj3cOpen()
44 * Connect to sj3serv(kana-kanji conversion server).
45 */
46 int
47 Xsj3cOpen(buf, host, user, force, second)
48 Xsj3cBuf buf;
49 char *host;
50 char *user;
51 int force;
52 int second;
53 {
54 extern char *getenv();
55 char *p;
56 char hostname[SERVER_NUM][32];
57 int value;
58
59 if (connected[buf->server] && !force) {
60 return CONNECT_OK;
61 }
62 if (host) {
63 if (user) {
64 if ((value = serverIF[buf->server].func[FUNC_OPEN](host, user))
65 != SJ3_NORMAL_END) {
66 _Xsj3cOpenError(value);
67 if (value == SJ3_SERVER_DEAD || value == SJ3_CONNECT_ERROR)
68 return CONNECT_FAIL;
69 }
70 } else {
71 Xsj3cError("can't connect sj3serv by null user");
72 return CONNECT_FAIL;
73 }
74 } else {
75 if (user) {
76 hostname[buf->server][0] = '\0';
77 if (buf->server == SERVER_SJ3) {
78 if (!second) {
79 if ((p = getenv("SJ3SERV")) && *p != '\0') {
80 strcpy(hostname[buf->server], p);
81 } else if (buf->sj3serv) {
82 strcpy(hostname[buf->server], buf->sj3serv);
83 }
84 } else {
85 if ((p = getenv("SJ3SERV2")) && *p != '\0') {
86 strcpy(hostname[buf->server], p);
87 } else if (buf->sj3serv2) {
88 strcpy(hostname[buf->server], buf->sj3serv2);
89 }
90 }
91 }
92 if ((value = serverIF[buf->server].func[FUNC_OPEN](hostname, user))
93 != SJ3_NORMAL_END) {
94 _Xsj3cOpenError(value);
95 if (value == SJ3_SERVER_DEAD || value == SJ3_CONNECT_ERROR)
96 return CONNECT_FAIL;
97 }
98 } else {
99 Xsj3cError("can't connect sj3serv by null user");
100 return CONNECT_FAIL;
101 }
102 }
103 locked[buf->server] = 0;
104 connected[buf->server] = 1;
105 return CONNECT_OK;
106 }
107
108 /*
109 * Xsj3cConnect()
110 * Disconnect to sj3serv and reonnect to sj3serv.
111 */
112 void
113 Xsj3cConnect(buf, host, host2, user)
114 Xsj3cBuf buf;
115 char *host;
116 char *host2;
117 char *user;
118 {
119 serverIF[buf->server].func[FUNC_UNLOCK]();
120 Xsj3cClose(buf, ON);
121 if ((Xsj3cOpen(buf, host, user, OFF, OFF)) != CONNECT_OK) {
122 Xsj3cWarning("Failed to connect first server. try to second server");
123 if ((Xsj3cOpen(buf, host2, user, OFF, ON)) != CONNECT_OK) {
124 Xsj3cError("Failed to connect seconON server.");
125 }
126 }
127 }
128
129 /*
130 * Xsj3cClose()
131 * Disconnect to sj3serv.
132 */
133 void
134 Xsj3cClose(buf, force)
135 Xsj3cBuf buf;
136 int force;
137 {
138 int value;
139
140 if (connected[buf->server]) {
141 if ((value = serverIF[buf->server].func[FUNC_CLOSE]())
142 != SJ3_NORMAL_END && !force) {
143 _Xsj3cCloseError(value);
144 }
145 connected[buf->server] = 0;
146 }
147 }
148
149 /*
150 * _Xsj3cOpenError()
151 * Print error messages for connecting to sj3serv.
152 */
153 static void
154 _Xsj3cOpenError(error)
155 int error;
156 {
157 switch (error) {
158 case SJ3_SERVER_DEAD:
159 Xsj3cWarning("sj3_open: server died in connecting");
160 break;
161 case SJ3_CONNECT_ERROR:
162 Xsj3cWarning("sj3_open: connected to server error");
163 break;
164 case SJ3_ALREADY_CONNECTED:
165 Xsj3cWarning("sj3_open: already connected to server");
166 break;
167 case SJ3_CANNOT_OPEN_MDICT:
168 Xsj3cWarning("sj3_open: can't open main dictionaries");
169 break;
170 case SJ3_CANNOT_OPEN_UDICT:
171 Xsj3cWarning("sj3_open: can't open user dictionaries");
172 break;
173 case SJ3_CANNOT_OPEN_STUDY:
174 Xsj3cWarning("sj3_open: can't open files for study");
175 break;
176 case SJ3_CANNOT_MAKE_UDIR:
177 Xsj3cWarning("sj3_open: can't make directries for user");
178 break;
179 case SJ3_CANNOT_MAKE_UDICT:
180 Xsj3cWarning("sj3_open: can't make user dictionaries");
181 break;
182 case SJ3_CANNOT_MAKE_STUDY:
183 Xsj3cWarning("sj3_open: can't make files for study");
184 break;
185 default:
186 Xsj3cWarning("sj3_open: unknown error");
187 break;
188 }
189 }
190
191 /*
192 * _Xsj3cCloseError()
193 * Print error messages for disconnecting to sj3serv.
194 */
195 static void
196 _Xsj3cCloseError(error)
197 int error;
198 {
199 switch (error) {
200 case SJ3_SERVER_DEAD:
201 Xsj3cWarning("sj3_close: server died in disconnecting");
202 break;
203 case SJ3_DISCONNECT_ERROR:
204 Xsj3cWarning("sj3_close: server internal error");
205 break;
206 case SJ3_NOT_CONNECTED:
207 Xsj3cWarning("sj3_close: already disconnected to server");
208 break;
209 case SJ3_NOT_OPENED_MDICT:
210 Xsj3cWarning("sj3_close: main dictionaries are not opend");
211 break;
212 case SJ3_NOT_OPENED_UDICT:
213 Xsj3cWarning("sj3_close: user dictionaries are not opend");
214 break;
215 case SJ3_NOT_OPENED_STUDY:
216 Xsj3cWarning("sj3_close: files for study are not opend");
217 break;
218 case SJ3_CLOSE_MDICT_ERROR:
219 Xsj3cWarning("sj3_close: can't close main dictionaries");
220 break;
221 case SJ3_CLOSE_UDICT_ERROR:
222 Xsj3cWarning("sj3_close: can't close user dictionaries");
223 break;
224 case SJ3_CLOSE_STUDY_ERROR:
225 Xsj3cWarning("sj3_close: can't close files for study");
226 break;
227 default:
228 Xsj3cWarning("sj3_close: unknown error");
229 break;
230 }
231 }
232