Commit 97080b25c1df344997d12458bfea6d5706338ccc
1 parent
db04ac3f
Exists in
master
and in
3 other branches
Splitting ssl & host_type properties.
Showing
14 changed files
with
185 additions
and
534 deletions
Show diff stats
src/include/lib3270.h
@@ -278,33 +278,27 @@ | @@ -278,33 +278,27 @@ | ||
278 | 278 | ||
279 | 279 | ||
280 | /** | 280 | /** |
281 | - * Connect options | 281 | + * @brief Host options |
282 | * | 282 | * |
283 | */ | 283 | */ |
284 | - typedef enum lib3270_option | 284 | + typedef enum lib3270_host_type |
285 | { | 285 | { |
286 | - /* Host types */ | ||
287 | - LIB3270_OPTION_AS400 = 0x0001, /**< AS400 host - Prefix every PF with PA1 */ | ||
288 | - LIB3270_OPTION_TSO = 0x0002, /**< Host is TSO? */ | ||
289 | - LIB3270_OPTION_S390 = 0x0006, /**< Host is S390? (TSO included) */ | 286 | + // Host types |
287 | + LIB3270_HOST_AS400 = 0x0001, ///< AS400 host - Prefix every PF with PA1 | ||
288 | + LIB3270_HOST_TSO = 0x0002, ///< Host is TSO? | ||
289 | + LIB3270_HOST_S390 = 0x0006, ///< Host is S390? (TSO included) | ||
290 | 290 | ||
291 | - /* Other options */ | ||
292 | - LIB3270_OPTION_SSL = 0x0010, /**< Secure connection ? */ | 291 | + } LIB3270_HOST_TYPE; |
293 | 292 | ||
293 | + #define LIB3270_HOSTTYPE_DEFAULT LIB3270_HOST_S390 | ||
294 | 294 | ||
295 | - LIB3270_OPTION_WAIT = 0x8000 /**< Wait for session ready on connect ? */ | ||
296 | - } LIB3270_OPTION; | ||
297 | - | ||
298 | - #define LIB3270_OPTION_HOST_TYPE 0x0007 | ||
299 | - #define LIB3270_OPTION_DEFAULTS LIB3270_OPTION_S390 | ||
300 | - | ||
301 | - typedef struct _lib3270_option_entry | 295 | + typedef struct _LIB3270_HOST_TYPE_entry |
302 | { | 296 | { |
303 | - LIB3270_OPTION option; | ||
304 | - const char * name; | ||
305 | - const char * description; | ||
306 | - const char * tooltip; | ||
307 | - } LIB3270_OPTION_ENTRY; | 297 | + LIB3270_HOST_TYPE type; |
298 | + const char * name; | ||
299 | + const char * description; | ||
300 | + const char * tooltip; | ||
301 | + } LIB3270_HOST_TYPE_ENTRY; | ||
308 | 302 | ||
309 | /** | 303 | /** |
310 | * SSL state | 304 | * SSL state |
@@ -517,7 +511,9 @@ | @@ -517,7 +511,9 @@ | ||
517 | * @param h Session handle. | 511 | * @param h Session handle. |
518 | * | 512 | * |
519 | */ | 513 | */ |
520 | - LIB3270_EXPORT LIB3270_OPTION lib3270_get_options(H3270 *hSession); | 514 | + LIB3270_EXPORT LIB3270_HOST_TYPE lib3270_get_host_type(H3270 *hSession); |
515 | + | ||
516 | + LIB3270_EXPORT const char * lib3270_get_host_type_name(H3270 *hSession); | ||
521 | 517 | ||
522 | /** | 518 | /** |
523 | * @brief Get URL of the hostname for the connect/reconnect operations. | 519 | * @brief Get URL of the hostname for the connect/reconnect operations. |
@@ -531,17 +527,17 @@ | @@ -531,17 +527,17 @@ | ||
531 | 527 | ||
532 | 528 | ||
533 | /** | 529 | /** |
534 | - * @brief Network connect operation, keep main loop running | 530 | + * @brief Reconnect to host. |
535 | * | 531 | * |
536 | * @param h Session handle. | 532 | * @param h Session handle. |
537 | - * @param seconds Seconds to wait for connection . | 533 | + * @param seconds Seconds to wait for connection. |
538 | * | 534 | * |
539 | * @return 0 for success, EAGAIN if auto-reconnect is in progress, EBUSY if connected, ENOTCONN if connection has failed, -1 on unexpected failure. | 535 | * @return 0 for success, EAGAIN if auto-reconnect is in progress, EBUSY if connected, ENOTCONN if connection has failed, -1 on unexpected failure. |
540 | * | 536 | * |
541 | */ | 537 | */ |
542 | - LIB3270_EXPORT int lib3270_connect(H3270 *h,int seconds); | 538 | + LIB3270_EXPORT int lib3270_reconnect(H3270 *h,int seconds); |
543 | 539 | ||
544 | - LIB3270_EXPORT int lib3270_set_connected(H3270 *h,int state); | 540 | +// LIB3270_EXPORT int lib3270_set_connected(H3270 *h,int state); |
545 | 541 | ||
546 | /** | 542 | /** |
547 | * @brief Connect to defined host, keep main loop running. | 543 | * @brief Connect to defined host, keep main loop running. |
@@ -554,7 +550,7 @@ | @@ -554,7 +550,7 @@ | ||
554 | * @return 0 for success, EAGAIN if auto-reconnect is in progress, EBUSY if connected, ENOTCONN if connection has failed, -1 on unexpected failure. | 550 | * @return 0 for success, EAGAIN if auto-reconnect is in progress, EBUSY if connected, ENOTCONN if connection has failed, -1 on unexpected failure. |
555 | * | 551 | * |
556 | */ | 552 | */ |
557 | - LIB3270_EXPORT int lib3270_connect_host(H3270 *hSession, const char *hostname, const char *srvc, LIB3270_OPTION opt); | 553 | +// LIB3270_EXPORT int lib3270_connect_host(H3270 *hSession, const char *hostname, const char *srvc, LIB3270_HOST_TYPE opt); |
558 | 554 | ||
559 | /** | 555 | /** |
560 | * @brief Connect by URL | 556 | * @brief Connect by URL |
@@ -1249,17 +1245,16 @@ | @@ -1249,17 +1245,16 @@ | ||
1249 | 1245 | ||
1250 | LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession); | 1246 | LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession); |
1251 | 1247 | ||
1252 | - LIB3270_EXPORT void lib3270_set_options(H3270 *hSession, LIB3270_OPTION opt); | ||
1253 | 1248 | ||
1254 | LIB3270_EXPORT int lib3270_set_color_type(H3270 *hSession, int colortype); | 1249 | LIB3270_EXPORT int lib3270_set_color_type(H3270 *hSession, int colortype); |
1255 | LIB3270_EXPORT int lib3270_get_color_type(H3270 *hSession); | 1250 | LIB3270_EXPORT int lib3270_get_color_type(H3270 *hSession); |
1256 | 1251 | ||
1257 | - LIB3270_EXPORT int lib3270_set_host_type(H3270 *hSession, const char *name); | ||
1258 | - LIB3270_EXPORT const char * lib3270_get_host_type(H3270 *hSession); | 1252 | + LIB3270_EXPORT int lib3270_set_host_type_by_name(H3270 *hSession, const char *name); |
1253 | + LIB3270_EXPORT int lib3270_set_host_type(H3270 *hSession, LIB3270_HOST_TYPE opt); | ||
1259 | 1254 | ||
1260 | - LIB3270_EXPORT LIB3270_OPTION lib3270_parse_host_type(const char *name); | 1255 | + LIB3270_EXPORT LIB3270_HOST_TYPE lib3270_parse_host_type(const char *name); |
1261 | 1256 | ||
1262 | - LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void); | 1257 | + LIB3270_EXPORT const LIB3270_HOST_TYPE_ENTRY * lib3270_get_option_list(void); |
1263 | 1258 | ||
1264 | LIB3270_EXPORT LIB3270_POINTER lib3270_get_pointer(H3270 *hSession, int baddr); | 1259 | LIB3270_EXPORT LIB3270_POINTER lib3270_get_pointer(H3270 *hSession, int baddr); |
1265 | 1260 | ||
@@ -1277,14 +1272,28 @@ | @@ -1277,14 +1272,28 @@ | ||
1277 | LIB3270_EXPORT int lib3270_run_task(H3270 *hSession, int(*callback)(H3270 *h, void *), void *parm); | 1272 | LIB3270_EXPORT int lib3270_run_task(H3270 *hSession, int(*callback)(H3270 *h, void *), void *parm); |
1278 | 1273 | ||
1279 | /** | 1274 | /** |
1280 | - * The host is TSO? | 1275 | + * @brief The host is TSO? |
1281 | * | 1276 | * |
1282 | * @param hSession Session Handle | 1277 | * @param hSession Session Handle |
1283 | * | 1278 | * |
1284 | * @return Non zero if the host is TSO. | 1279 | * @return Non zero if the host is TSO. |
1285 | * | 1280 | * |
1286 | */ | 1281 | */ |
1287 | - LIB3270_EXPORT int lib3270_is_tso(H3270 *hSession); | 1282 | + LIB3270_EXPORT int lib3270_is_tso(H3270 *hSession); |
1283 | + | ||
1284 | + LIB3270_EXPORT int lib3270_set_tso(H3270 *hSession, int on); | ||
1285 | + | ||
1286 | + /** | ||
1287 | + * @brief Host is AS400 (Prefix every PF with PA1). | ||
1288 | + * | ||
1289 | + * @param hSession Session Handle | ||
1290 | + * | ||
1291 | + * @return Non zero if the host is AS400. | ||
1292 | + * | ||
1293 | + */ | ||
1294 | + LIB3270_EXPORT int lib3270_is_as400(H3270 *hSession); | ||
1295 | + | ||
1296 | + LIB3270_EXPORT int lib3270_set_as400(H3270 *hSession, int on); | ||
1288 | 1297 | ||
1289 | #ifdef WIN32 | 1298 | #ifdef WIN32 |
1290 | LIB3270_EXPORT const char * lib3270_win32_strerror(int e); | 1299 | LIB3270_EXPORT const char * lib3270_win32_strerror(int e); |
src/include/lib3270/macros.h
@@ -1,39 +0,0 @@ | @@ -1,39 +0,0 @@ | ||
1 | -/* | ||
2 | - * "Software PW3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
5 | - * | ||
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | - * | ||
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | - * Free Software Foundation. | ||
11 | - * | ||
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | - * obter mais detalhes. | ||
16 | - * | ||
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
20 | - * | ||
21 | - * Este programa está nomeado como macros.h e possui - linhas de código. | ||
22 | - * | ||
23 | - * Contatos: | ||
24 | - * | ||
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) | ||
27 | - * licinio@bb.com.br (Licínio Luis Branco) | ||
28 | - * kraucer@bb.com.br (Kraucer Fernandes Mazuco) | ||
29 | - * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda) | ||
30 | - * | ||
31 | - */ | ||
32 | - | ||
33 | - #error Deprecated | ||
34 | - | ||
35 | - | ||
36 | - // #define LIB3270_MACRO( name ) LIB3270_EXPORT char * lib3270_macro_ ## name (H3270 *hSession, int argc, const char **argv) | ||
37 | - | ||
38 | -// LIB3270_EXPORT char * lib3270_run_macro(H3270 *session, const char **argv); | ||
39 | - |
src/lib3270/ft.c
@@ -439,13 +439,13 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); | @@ -439,13 +439,13 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); | ||
439 | (ft->flags & LIB3270_FT_OPTION_APPEND) ? " APPEND" : "" | 439 | (ft->flags & LIB3270_FT_OPTION_APPEND) ? " APPEND" : "" |
440 | ); | 440 | ); |
441 | 441 | ||
442 | - trace("tso=%s",hSession->options & LIB3270_OPTION_TSO ? "yes" : "No"); | 442 | + trace("tso=%s",lib3270_is_tso(hSession) ? "yes" : "No"); |
443 | 443 | ||
444 | if(!(ft->flags & LIB3270_FT_OPTION_RECEIVE)) | 444 | if(!(ft->flags & LIB3270_FT_OPTION_RECEIVE)) |
445 | { | 445 | { |
446 | // Sending file | 446 | // Sending file |
447 | 447 | ||
448 | - if(hSession->options & LIB3270_OPTION_TSO) | 448 | + if(lib3270_is_tso(hSession)) |
449 | { | 449 | { |
450 | // TSO Host | 450 | // TSO Host |
451 | if(recfm > 0) | 451 | if(recfm > 0) |
@@ -492,7 +492,7 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); | @@ -492,7 +492,7 @@ static void set_ft_state(H3270FT *session, LIB3270_FT_STATE state); | ||
492 | 492 | ||
493 | if(*op) | 493 | if(*op) |
494 | { | 494 | { |
495 | - if(hSession->options & LIB3270_OPTION_TSO) | 495 | + if(lib3270_is_tso(hSession)) |
496 | snconcat(buffer,4095," %s",op+1); | 496 | snconcat(buffer,4095," %s",op+1); |
497 | else | 497 | else |
498 | snconcat(buffer,4095," (%s",op+1); | 498 | snconcat(buffer,4095," (%s",op+1); |
src/lib3270/host.c
@@ -58,11 +58,21 @@ | @@ -58,11 +58,21 @@ | ||
58 | /** | 58 | /** |
59 | * @brief Called from timer to attempt an automatic reconnection. | 59 | * @brief Called from timer to attempt an automatic reconnection. |
60 | */ | 60 | */ |
61 | -int lib3270_reconnect(H3270 *hSession) | 61 | +int lib3270_check_for_auto_reconnect(H3270 *hSession) |
62 | { | 62 | { |
63 | - lib3270_write_log(hSession,"3270","Starting auto-reconnect on %s",lib3270_get_url(hSession)); | ||
64 | - hSession->auto_reconnect_inprogress = 0; | ||
65 | - lib3270_connect(hSession,0); | 63 | + if(hSession->popups) |
64 | + { | ||
65 | + lib3270_write_log(hSession,"3270","Delaying auto-reconnect. There's %u pending popup(s)",(unsigned int) hSession->popups); | ||
66 | + return 1; | ||
67 | + } | ||
68 | + | ||
69 | + if(hSession->auto_reconnect_inprogress) | ||
70 | + { | ||
71 | + lib3270_write_log(hSession,"3270","Starting auto-reconnect on %s",lib3270_get_url(hSession)); | ||
72 | + lib3270_reconnect(hSession,0); | ||
73 | + hSession->auto_reconnect_inprogress = 0; | ||
74 | + } | ||
75 | + | ||
66 | return 0; | 76 | return 0; |
67 | } | 77 | } |
68 | 78 | ||
@@ -86,7 +96,7 @@ int host_disconnect(H3270 *hSession, int failed) | @@ -86,7 +96,7 @@ int host_disconnect(H3270 *hSession, int failed) | ||
86 | { | 96 | { |
87 | /* Schedule an automatic reconnection. */ | 97 | /* Schedule an automatic reconnection. */ |
88 | hSession->auto_reconnect_inprogress = 1; | 98 | hSession->auto_reconnect_inprogress = 1; |
89 | - (void) AddTimer(failed ? RECONNECT_ERR_MS : RECONNECT_MS, hSession, lib3270_reconnect); | 99 | + (void) AddTimer(failed ? RECONNECT_ERR_MS : RECONNECT_MS, hSession, lib3270_check_for_auto_reconnect); |
90 | } | 100 | } |
91 | 101 | ||
92 | /* | 102 | /* |
@@ -219,12 +229,16 @@ static void update_host(H3270 *h) | @@ -219,12 +229,16 @@ static void update_host(H3270 *h) | ||
219 | Replace(h->host.full, | 229 | Replace(h->host.full, |
220 | lib3270_strdup_printf( | 230 | lib3270_strdup_printf( |
221 | "%s%s:%s", | 231 | "%s%s:%s", |
222 | - h->options&LIB3270_OPTION_SSL ? "tn3270s://" : "tn3270://", | 232 | +#ifdef HAVE_LIBSSL |
233 | + (h->ssl.enabled ? "tn3270s://" : "tn3270://"), | ||
234 | +#else | ||
235 | + "tn3270://", | ||
236 | +#endif // HAVE_LIBSSL | ||
223 | h->host.current, | 237 | h->host.current, |
224 | h->host.srvc | 238 | h->host.srvc |
225 | )); | 239 | )); |
226 | 240 | ||
227 | - trace("hosturl=[%s] ssl=%s",h->host.full,(h->options&LIB3270_OPTION_SSL) ? "yes" : "no"); | 241 | + trace("hosturl=[%s] ssl=%s",h->host.full,h->ssl.enabled ? "yes" : "no"); |
228 | 242 | ||
229 | } | 243 | } |
230 | 244 | ||
@@ -269,18 +283,21 @@ LIB3270_EXPORT int lib3270_set_url(H3270 *h, const char *n) | @@ -269,18 +283,21 @@ LIB3270_EXPORT int lib3270_set_url(H3270 *h, const char *n) | ||
269 | { | 283 | { |
270 | static const struct _sch | 284 | static const struct _sch |
271 | { | 285 | { |
272 | - LIB3270_OPTION opt; | 286 | + char ssl; |
273 | const char * text; | 287 | const char * text; |
274 | const char * srvc; | 288 | const char * srvc; |
275 | } sch[] = | 289 | } sch[] = |
276 | { | 290 | { |
277 | - { LIB3270_OPTION_DEFAULTS, "tn3270://", "telnet" }, | ||
278 | - { LIB3270_OPTION_SSL, "tn3270s://", "telnets" }, | ||
279 | - { LIB3270_OPTION_DEFAULTS, "telnet://", "telnet" }, | ||
280 | - { LIB3270_OPTION_DEFAULTS, "telnets://", "telnets" }, | ||
281 | - { LIB3270_OPTION_SSL, "L://", "telnets" }, | 291 | +#ifdef HAVE_LIBSSL |
292 | + { 1, "tn3270s://", "telnets" }, | ||
293 | + { 1, "telnets://", "telnets" }, | ||
294 | + { 1, "L://", "telnets" }, | ||
295 | + { 1, "L:", "telnets" }, | ||
296 | +#endif // HAVE_LIBSSL | ||
297 | + | ||
298 | + { 0, "tn3270://", "telnet" }, | ||
299 | + { 0, "telnet://", "telnet" } | ||
282 | 300 | ||
283 | - { LIB3270_OPTION_SSL, "L:", "telnets" } // The compatibility should be the last option | ||
284 | }; | 301 | }; |
285 | 302 | ||
286 | char * str = strdup(n); | 303 | char * str = strdup(n); |
@@ -291,16 +308,21 @@ LIB3270_EXPORT int lib3270_set_url(H3270 *h, const char *n) | @@ -291,16 +308,21 @@ LIB3270_EXPORT int lib3270_set_url(H3270 *h, const char *n) | ||
291 | int f; | 308 | int f; |
292 | 309 | ||
293 | trace("%s(%s)",__FUNCTION__,str); | 310 | trace("%s(%s)",__FUNCTION__,str); |
294 | - h->options = LIB3270_OPTION_DEFAULTS; | 311 | + |
312 | +#ifdef HAVE_LIBSSL | ||
313 | + h->ssl.enabled = 0; | ||
314 | +#endif // HAVE_LIBSSL | ||
295 | 315 | ||
296 | for(f=0;f < sizeof(sch)/sizeof(sch[0]);f++) | 316 | for(f=0;f < sizeof(sch)/sizeof(sch[0]);f++) |
297 | { | 317 | { |
298 | size_t sz = strlen(sch[f].text); | 318 | size_t sz = strlen(sch[f].text); |
299 | if(!strncasecmp(hostname,sch[f].text,sz)) | 319 | if(!strncasecmp(hostname,sch[f].text,sz)) |
300 | { | 320 | { |
301 | - h->options = sch[f].opt; | ||
302 | - srvc = sch[f].srvc; | ||
303 | - hostname += sz; | 321 | +#ifdef HAVE_LIBSSL |
322 | + h->ssl.enabled = sch[f].ssl; | ||
323 | +#endif // HAVE_LIBSSL | ||
324 | + srvc = sch[f].srvc; | ||
325 | + hostname += sz; | ||
304 | break; | 326 | break; |
305 | } | 327 | } |
306 | } | 328 | } |
@@ -348,25 +370,18 @@ LIB3270_EXPORT int lib3270_set_url(H3270 *h, const char *n) | @@ -348,25 +370,18 @@ LIB3270_EXPORT int lib3270_set_url(H3270 *h, const char *n) | ||
348 | *(val++) = 0; | 370 | *(val++) = 0; |
349 | 371 | ||
350 | if(lib3270_set_string_property(h, var, val, 0) == 0) | 372 | if(lib3270_set_string_property(h, var, val, 0) == 0) |
351 | - { | ||
352 | continue; | 373 | continue; |
353 | - } | ||
354 | - | ||
355 | - /* | ||
356 | - if(!(strcasecmp(var,"lu") && strcasecmp(var,"luname"))) | ||
357 | - { | ||
358 | - lib3270_set_luname(h, val); | ||
359 | - // strncpy(h->luname,val,LIB3270_LUNAME_LENGTH); | ||
360 | - } | ||
361 | - else | ||
362 | - { | ||
363 | - lib3270_write_log(h,"","Ignoring invalid URL attribute \"%s\"",var); | ||
364 | - } | ||
365 | - */ | ||
366 | 374 | ||
367 | lib3270_write_log(h,"","Can't set attribute \"%s\": %s",var,strerror(errno)); | 375 | lib3270_write_log(h,"","Can't set attribute \"%s\": %s",var,strerror(errno)); |
368 | 376 | ||
369 | } | 377 | } |
378 | + else | ||
379 | + { | ||
380 | + if(lib3270_set_int_property(h,var,1,0)) | ||
381 | + continue; | ||
382 | + | ||
383 | + lib3270_write_log(h,"","Can't set attribute \"%s\": %s",var,strerror(errno)); | ||
384 | + } | ||
370 | 385 | ||
371 | } | 386 | } |
372 | 387 |
src/lib3270/kybd.c
@@ -534,14 +534,14 @@ LIB3270_EXPORT int lib3270_pfkey(H3270 *hSession, int key) | @@ -534,14 +534,14 @@ LIB3270_EXPORT int lib3270_pfkey(H3270 *hSession, int key) | ||
534 | 534 | ||
535 | if (hSession->kybdlock) | 535 | if (hSession->kybdlock) |
536 | { | 536 | { |
537 | - if(hSession->options & LIB3270_OPTION_AS400) | 537 | + if(hSession->host_type & LIB3270_HOST_AS400) |
538 | enq_key(hSession,pa_xlate[0]); | 538 | enq_key(hSession,pa_xlate[0]); |
539 | 539 | ||
540 | enq_key(hSession,pf_xlate[key-1]); | 540 | enq_key(hSession,pf_xlate[key-1]); |
541 | } | 541 | } |
542 | else | 542 | else |
543 | { | 543 | { |
544 | - if(hSession->options & LIB3270_OPTION_AS400) | 544 | + if(hSession->host_type & LIB3270_HOST_AS400) |
545 | key_AID(hSession,pa_xlate[0]); | 545 | key_AID(hSession,pa_xlate[0]); |
546 | 546 | ||
547 | key_AID(hSession,pf_xlate[key-1]); | 547 | key_AID(hSession,pf_xlate[key-1]); |
src/lib3270/linux/connect.c
@@ -124,11 +124,12 @@ static void net_connected(H3270 *hSession, int fd unused, LIB3270_IO_FLAG flag u | @@ -124,11 +124,12 @@ static void net_connected(H3270 *hSession, int fd unused, LIB3270_IO_FLAG flag u | ||
124 | lib3270_set_url(hSession,url); | 124 | lib3270_set_url(hSession,url); |
125 | } | 125 | } |
126 | 126 | ||
127 | - return lib3270_connect(hSession, wait); | 127 | + return lib3270_reconnect(hSession, wait); |
128 | 128 | ||
129 | } | 129 | } |
130 | 130 | ||
131 | - LIB3270_EXPORT int lib3270_connect_host(H3270 *hSession, const char *hostname, const char *srvc, LIB3270_OPTION opt) | 131 | + /* |
132 | + LIB3270_EXPORT int lib3270_connect_host(H3270 *hSession, const char *hostname, const char *srvc, LIB3270_HOST_TYPE opt) | ||
132 | { | 133 | { |
133 | CHECK_SESSION_HANDLE(hSession); | 134 | CHECK_SESSION_HANDLE(hSession); |
134 | 135 | ||
@@ -155,22 +156,23 @@ static void net_connected(H3270 *hSession, int fd unused, LIB3270_IO_FLAG flag u | @@ -155,22 +156,23 @@ static void net_connected(H3270 *hSession, int fd unused, LIB3270_IO_FLAG flag u | ||
155 | hostname = name; | 156 | hostname = name; |
156 | } | 157 | } |
157 | 158 | ||
158 | - hSession->options = opt & ~LIB3270_OPTION_WAIT; | 159 | + hSession->options = opt & ~LIB3270_HOST_TYPE_WAIT; |
159 | Replace(hSession->host.current,strdup(hostname)); | 160 | Replace(hSession->host.current,strdup(hostname)); |
160 | Replace(hSession->host.srvc,strdup(srvc)); | 161 | Replace(hSession->host.srvc,strdup(srvc)); |
161 | 162 | ||
162 | Replace(hSession->host.full, | 163 | Replace(hSession->host.full, |
163 | lib3270_strdup_printf( | 164 | lib3270_strdup_printf( |
164 | "%s%s:%s", | 165 | "%s%s:%s", |
165 | - opt&LIB3270_OPTION_SSL ? "tn3270s://" : "tn3270://", | 166 | + opt&LIB3270_HOST_TYPE_SSL ? "tn3270s://" : "tn3270://", |
166 | hostname, | 167 | hostname, |
167 | srvc )); | 168 | srvc )); |
168 | 169 | ||
169 | trace("current_host=\"%s\"",hSession->host.current); | 170 | trace("current_host=\"%s\"",hSession->host.current); |
170 | 171 | ||
171 | - return lib3270_connect(hSession,opt & LIB3270_OPTION_WAIT); | 172 | + return lib3270_reconnect(hSession,opt & LIB3270_HOST_TYPE_WAIT); |
172 | 173 | ||
173 | } | 174 | } |
175 | + */ | ||
174 | 176 | ||
175 | struct resolver | 177 | struct resolver |
176 | { | 178 | { |
@@ -223,7 +225,7 @@ static void net_connected(H3270 *hSession, int fd unused, LIB3270_IO_FLAG flag u | @@ -223,7 +225,7 @@ static void net_connected(H3270 *hSession, int fd unused, LIB3270_IO_FLAG flag u | ||
223 | 225 | ||
224 | } | 226 | } |
225 | 227 | ||
226 | - int lib3270_connect(H3270 *hSession, int seconds) | 228 | + int lib3270_reconnect(H3270 *hSession, int seconds) |
227 | { | 229 | { |
228 | int optval; | 230 | int optval; |
229 | struct resolver host; | 231 | struct resolver host; |
@@ -283,22 +285,13 @@ static void net_connected(H3270 *hSession, int fd unused, LIB3270_IO_FLAG flag u | @@ -283,22 +285,13 @@ static void net_connected(H3270 *hSession, int fd unused, LIB3270_IO_FLAG flag u | ||
283 | hSession->ever_3270 = False; | 285 | hSession->ever_3270 = False; |
284 | hSession->ssl.host = 0; | 286 | hSession->ssl.host = 0; |
285 | 287 | ||
286 | - if(hSession->options&LIB3270_OPTION_SSL) | ||
287 | - { | ||
288 | #if defined(HAVE_LIBSSL) | 288 | #if defined(HAVE_LIBSSL) |
289 | + if(hSession->ssl.enabled) | ||
290 | + { | ||
289 | hSession->ssl.host = 1; | 291 | hSession->ssl.host = 1; |
290 | ssl_init(hSession); | 292 | ssl_init(hSession); |
291 | -#else | ||
292 | - lib3270_popup_dialog( hSession, | ||
293 | - LIB3270_NOTIFY_ERROR, | ||
294 | - _( "SSL error" ), | ||
295 | - _( "Unable to connect to secure hosts" ), | ||
296 | - _( "This version of %s was built without support for secure sockets layer (SSL)." ), | ||
297 | - PACKAGE_NAME); | ||
298 | - | ||
299 | - return errno = EINVAL; | ||
300 | -#endif // HAVE_LIBSSL | ||
301 | } | 293 | } |
294 | +#endif // HAVE_LIBSSL | ||
302 | 295 | ||
303 | // set options for inline out-of-band data and keepalives | 296 | // set options for inline out-of-band data and keepalives |
304 | optval = 1; | 297 | optval = 1; |
src/lib3270/macros.c
@@ -1,362 +0,0 @@ | @@ -1,362 +0,0 @@ | ||
1 | -/* | ||
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
5 | - * | ||
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | - * | ||
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | - * Free Software Foundation. | ||
11 | - * | ||
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | - * obter mais detalhes. | ||
16 | - * | ||
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
20 | - * | ||
21 | - * Este programa está nomeado como macros.c e possui - linhas de código. | ||
22 | - * | ||
23 | - * Contatos: | ||
24 | - * | ||
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
27 | - * licinio@bb.com.br (Licínio Luis Branco) | ||
28 | - * kraucer@bb.com.br (Kraucer Fernandes Mazuco) | ||
29 | - * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda) | ||
30 | - * | ||
31 | - */ | ||
32 | - | ||
33 | -/* | ||
34 | -#ifdef WIN32 | ||
35 | - #include <winsock2.h> | ||
36 | - #include <windows.h> | ||
37 | -#endif // WIN32 | ||
38 | - | ||
39 | - #include <errno.h> | ||
40 | - #include <string.h> | ||
41 | - #include <stdio.h> | ||
42 | - #include <lib3270.h> | ||
43 | - #include <lib3270/macros.h> | ||
44 | - #include <lib3270/selection.h> | ||
45 | - #include <stdlib.h> | ||
46 | - #include <strings.h> | ||
47 | - #include "private.h" | ||
48 | - #include "utilc.h" | ||
49 | - #include "api.h" | ||
50 | - */ | ||
51 | - | ||
52 | -/*--[ Structs & Defines ]----------------------------------------------------------------------------*/ | ||
53 | - | ||
54 | -/* | ||
55 | - struct macro_list | ||
56 | - { | ||
57 | - const char *name; | ||
58 | - char *(*exec)(H3270 *session, int argc, const char **argv); | ||
59 | - }; | ||
60 | -*/ | ||
61 | - | ||
62 | -/*--[ Implement ]------------------------------------------------------------------------------------*/ | ||
63 | - | ||
64 | -/* | ||
65 | - static const char * get_state(H3270 *h) | ||
66 | - { | ||
67 | - #define DECLARE_XLAT_STATE(x) { x, #x } | ||
68 | - static const struct _xlat_state | ||
69 | - { | ||
70 | - LIB3270_CSTATE state; | ||
71 | - const char * ret; | ||
72 | - } xlat_state[] = | ||
73 | - { | ||
74 | - DECLARE_XLAT_STATE( LIB3270_NOT_CONNECTED ), | ||
75 | - DECLARE_XLAT_STATE( LIB3270_RESOLVING ), | ||
76 | - DECLARE_XLAT_STATE( LIB3270_PENDING ), | ||
77 | - DECLARE_XLAT_STATE( LIB3270_CONNECTED_INITIAL ), | ||
78 | - DECLARE_XLAT_STATE( LIB3270_CONNECTED_ANSI ), | ||
79 | - DECLARE_XLAT_STATE( LIB3270_CONNECTED_3270 ), | ||
80 | - DECLARE_XLAT_STATE( LIB3270_CONNECTED_INITIAL_E ), | ||
81 | - DECLARE_XLAT_STATE( LIB3270_CONNECTED_NVT ), | ||
82 | - DECLARE_XLAT_STATE( LIB3270_CONNECTED_SSCP ), | ||
83 | - DECLARE_XLAT_STATE( LIB3270_CONNECTED_TN3270E ) | ||
84 | - }; | ||
85 | - | ||
86 | - size_t f; | ||
87 | - | ||
88 | - LIB3270_CSTATE state = lib3270_get_connection_state(h); | ||
89 | - | ||
90 | - for(f=0;f < (sizeof(xlat_state)/sizeof(struct _xlat_state)); f++) | ||
91 | - { | ||
92 | - if(state == xlat_state[f].state) | ||
93 | - return xlat_state[f].ret; | ||
94 | - } | ||
95 | - | ||
96 | - return "Unexpected"; | ||
97 | - } | ||
98 | - | ||
99 | - LIB3270_MACRO( encoding ) | ||
100 | - { | ||
101 | - return strdup(lib3270_get_display_charset(hSession)); | ||
102 | - } | ||
103 | - | ||
104 | - LIB3270_MACRO( get ) | ||
105 | - { | ||
106 | - char *buffer = NULL; | ||
107 | - | ||
108 | - switch(argc) | ||
109 | - { | ||
110 | - case 1: // Get entire screen | ||
111 | - buffer = lib3270_get_string_at_address(hSession,0,-1,'\n'); | ||
112 | - break; | ||
113 | - | ||
114 | - default: | ||
115 | - errno = EINVAL; | ||
116 | - } | ||
117 | - | ||
118 | - return buffer; | ||
119 | - } | ||
120 | - | ||
121 | - LIB3270_MACRO( set ) | ||
122 | - { | ||
123 | - const char *str = NULL; | ||
124 | - int rows, cols; | ||
125 | - | ||
126 | - if(lib3270_get_program_message(hSession) != LIB3270_MESSAGE_NONE) | ||
127 | - { | ||
128 | - errno = EBUSY; | ||
129 | - return NULL; | ||
130 | - } | ||
131 | - | ||
132 | - lib3270_get_screen_size(hSession,&rows,&cols); | ||
133 | - | ||
134 | - switch(argc) | ||
135 | - { | ||
136 | - case 1: | ||
137 | - lib3270_enter(hSession); | ||
138 | - break; | ||
139 | - | ||
140 | - case 2: | ||
141 | - str = argv[1]; | ||
142 | - break; | ||
143 | - | ||
144 | - case 3: | ||
145 | - lib3270_set_cursor_address(hSession,atoi(argv[1])); | ||
146 | - str = argv[2]; | ||
147 | - break; | ||
148 | - | ||
149 | - case 4: | ||
150 | - lib3270_set_cursor_address(hSession,(atoi(argv[1])-1) * cols + (atoi(argv[2])-1)); | ||
151 | - str = argv[3]; | ||
152 | - break; | ||
153 | - | ||
154 | - default: | ||
155 | - errno = EINVAL; | ||
156 | - return NULL; | ||
157 | - } | ||
158 | - | ||
159 | - if(str) | ||
160 | - lib3270_set_string(NULL, (const unsigned char *) str); | ||
161 | - | ||
162 | - return strdup(get_state(hSession)); | ||
163 | - } | ||
164 | - | ||
165 | - LIB3270_MACRO( status ) | ||
166 | - { | ||
167 | - const char * luname = (const char *) lib3270_get_luname(hSession); | ||
168 | - const char * state = get_state(hSession); | ||
169 | - const char * host = (const char *) lib3270_get_hostname(hSession); | ||
170 | - char * rsp; | ||
171 | - size_t sz; | ||
172 | - | ||
173 | - if(!luname) | ||
174 | - luname = "none"; | ||
175 | - | ||
176 | - if(!host) | ||
177 | - host = "-"; | ||
178 | - | ||
179 | - sz = strlen(luname)+strlen(state)+strlen(host)+4; | ||
180 | - rsp = lib3270_malloc(sz+1); | ||
181 | - snprintf(rsp,sz,"%s %s %s",state,luname,host); | ||
182 | - return rsp; | ||
183 | - } | ||
184 | - | ||
185 | - LIB3270_MACRO( cstate ) | ||
186 | - { | ||
187 | - return strdup(get_state(hSession)); | ||
188 | - } | ||
189 | - | ||
190 | - LIB3270_MACRO( luname ) | ||
191 | - { | ||
192 | - const char * luname = (const char *) lib3270_get_luname(hSession); | ||
193 | - return strdup(luname ? luname : "none" ); | ||
194 | - } | ||
195 | - | ||
196 | - LIB3270_MACRO( pf ) | ||
197 | - { | ||
198 | - char ret[10]; | ||
199 | - if(argc != 2) | ||
200 | - { | ||
201 | - errno = EINVAL; | ||
202 | - return NULL; | ||
203 | - } | ||
204 | - snprintf(ret,9,"%d",lib3270_pfkey(hSession,atoi(argv[1]))); | ||
205 | - return strdup(ret); | ||
206 | - } | ||
207 | - | ||
208 | - LIB3270_MACRO( pa ) | ||
209 | - { | ||
210 | - char ret[10]; | ||
211 | - if(argc != 2) | ||
212 | - { | ||
213 | - errno = EINVAL; | ||
214 | - return NULL; | ||
215 | - } | ||
216 | - snprintf(ret,9,"%d",lib3270_pakey(hSession,atoi(argv[1]))); | ||
217 | - return strdup(ret); | ||
218 | - } | ||
219 | - | ||
220 | - LIB3270_MACRO( enter ) | ||
221 | - { | ||
222 | - char ret[10]; | ||
223 | - if(argc != 1) | ||
224 | - { | ||
225 | - errno = EINVAL; | ||
226 | - return NULL; | ||
227 | - } | ||
228 | - snprintf(ret,9,"%d",lib3270_enter(hSession)); | ||
229 | - return strdup(ret); | ||
230 | - } | ||
231 | - | ||
232 | - LIB3270_MACRO( connect ) | ||
233 | - { | ||
234 | - int rc = EBUSY; | ||
235 | - char ret[10]; | ||
236 | - | ||
237 | - switch(argc) | ||
238 | - { | ||
239 | - case 1: | ||
240 | - rc = lib3270_connect(hSession,0); | ||
241 | - break; | ||
242 | - | ||
243 | - case 2: | ||
244 | - lib3270_set_url(hSession,argv[1]); | ||
245 | - rc = lib3270_connect(hSession,0); | ||
246 | - break; | ||
247 | - | ||
248 | - case 3: | ||
249 | - lib3270_set_url(hSession,argv[1]); | ||
250 | - rc = lib3270_connect(hSession,atoi(argv[2])); | ||
251 | - break; | ||
252 | - | ||
253 | - default: | ||
254 | - return NULL; | ||
255 | - } | ||
256 | - | ||
257 | - snprintf(ret,9,"%d",rc); | ||
258 | - return strdup(ret); | ||
259 | - } | ||
260 | - | ||
261 | - LIB3270_MACRO( disconnect ) | ||
262 | - { | ||
263 | - lib3270_disconnect(hSession); | ||
264 | - return strdup("0"); | ||
265 | - } | ||
266 | - | ||
267 | - LIB3270_MACRO( unselect ) | ||
268 | - { | ||
269 | - lib3270_unselect(hSession); | ||
270 | - return strdup("0"); | ||
271 | - } | ||
272 | - | ||
273 | - LIB3270_MACRO( select ) | ||
274 | - { | ||
275 | - int rc = -1; | ||
276 | - char ret[10]; | ||
277 | - | ||
278 | - switch(argc) | ||
279 | - { | ||
280 | - case 1: // 1 argument, select all | ||
281 | - rc = lib3270_select_all(hSession); | ||
282 | - break; | ||
283 | - | ||
284 | - case 3: // 2 arguments, first and last addr | ||
285 | - rc = lib3270_select_region(hSession,atoi(argv[1]),atoi(argv[2])); | ||
286 | - break; | ||
287 | - | ||
288 | - | ||
289 | - default: | ||
290 | - errno = EINVAL; | ||
291 | - return NULL; | ||
292 | - } | ||
293 | - | ||
294 | - snprintf(ret,9,"%d",rc); | ||
295 | - return strdup(ret); | ||
296 | - | ||
297 | - } | ||
298 | -*/ | ||
299 | - | ||
300 | -/*--[ Macro entry point ]----------------------------------------------------------------------------*/ | ||
301 | - | ||
302 | -/* | ||
303 | - LIB3270_EXPORT char * lib3270_run_macro(H3270 *session, const char **argv) | ||
304 | - { | ||
305 | - #define LIB3270_MACRO_ENTRY( name ) { #name, lib3270_macro_ ## name } | ||
306 | - | ||
307 | - static const struct macro_list cmd[] = | ||
308 | - { | ||
309 | - LIB3270_MACRO_ENTRY( connect ), | ||
310 | - LIB3270_MACRO_ENTRY( cstate ), | ||
311 | - LIB3270_MACRO_ENTRY( disconnect ), | ||
312 | - LIB3270_MACRO_ENTRY( encoding ), | ||
313 | - LIB3270_MACRO_ENTRY( enter ), | ||
314 | - LIB3270_MACRO_ENTRY( get ), | ||
315 | - LIB3270_MACRO_ENTRY( luname ), | ||
316 | - LIB3270_MACRO_ENTRY( pa ), | ||
317 | - LIB3270_MACRO_ENTRY( pf ), | ||
318 | - LIB3270_MACRO_ENTRY( set ), | ||
319 | - LIB3270_MACRO_ENTRY( status ), | ||
320 | - LIB3270_MACRO_ENTRY( select ), | ||
321 | - LIB3270_MACRO_ENTRY( unselect ), | ||
322 | - | ||
323 | - {NULL, NULL} | ||
324 | - }; | ||
325 | - | ||
326 | - int argc; | ||
327 | - int f; | ||
328 | - | ||
329 | - CHECK_SESSION_HANDLE(session); | ||
330 | - | ||
331 | - trace("macro(%s)",argv[0]); | ||
332 | - | ||
333 | - // Get the number of arguments | ||
334 | - for(argc = 0; argv[argc]; argc++); | ||
335 | - | ||
336 | - // Search for macro function | ||
337 | - for(f=0;cmd[f].name;f++) | ||
338 | - { | ||
339 | - if(!strcasecmp(cmd[f].name,argv[0])) | ||
340 | - return cmd[f].exec(session,argc,argv); | ||
341 | - } | ||
342 | - | ||
343 | - if(argc == 1) | ||
344 | - { | ||
345 | - // Search for action | ||
346 | - const LIB3270_ACTION_ENTRY *actions = lib3270_get_action_table(); | ||
347 | - | ||
348 | - for(f=0;actions[f].name;f++) | ||
349 | - { | ||
350 | - if(!strcasecmp(actions[f].name,argv[0])) | ||
351 | - { | ||
352 | - int rc = actions[f].call(session); | ||
353 | - return xs_buffer("%d",rc); | ||
354 | - } | ||
355 | - } | ||
356 | - | ||
357 | - } | ||
358 | - | ||
359 | - // Not found, return NULL | ||
360 | - return NULL; | ||
361 | - } | ||
362 | -*/ |
src/lib3270/options.c
@@ -35,22 +35,22 @@ | @@ -35,22 +35,22 @@ | ||
35 | 35 | ||
36 | /*---[ Statics ]--------------------------------------------------------------------------------------------------------------*/ | 36 | /*---[ Statics ]--------------------------------------------------------------------------------------------------------------*/ |
37 | 37 | ||
38 | - static const LIB3270_OPTION_ENTRY host_type[] = | 38 | + static const LIB3270_HOST_TYPE_ENTRY host_type[] = |
39 | { | 39 | { |
40 | { | 40 | { |
41 | - LIB3270_OPTION_S390, | 41 | + LIB3270_HOST_S390, |
42 | "S390", | 42 | "S390", |
43 | N_( "IBM S/390" ), | 43 | N_( "IBM S/390" ), |
44 | NULL | 44 | NULL |
45 | }, | 45 | }, |
46 | { | 46 | { |
47 | - LIB3270_OPTION_AS400, | 47 | + LIB3270_HOST_AS400, |
48 | "AS400", | 48 | "AS400", |
49 | N_( "IBM AS/400" ), | 49 | N_( "IBM AS/400" ), |
50 | NULL | 50 | NULL |
51 | }, | 51 | }, |
52 | { | 52 | { |
53 | - LIB3270_OPTION_TSO, | 53 | + LIB3270_HOST_TSO, |
54 | "TSO", | 54 | "TSO", |
55 | N_( "Other (TSO)" ), | 55 | N_( "Other (TSO)" ), |
56 | NULL | 56 | NULL |
@@ -73,25 +73,17 @@ | @@ -73,25 +73,17 @@ | ||
73 | 73 | ||
74 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ | 74 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ |
75 | 75 | ||
76 | -LIB3270_EXPORT LIB3270_OPTION lib3270_get_options(H3270 *hSession) | 76 | +LIB3270_EXPORT LIB3270_HOST_TYPE lib3270_get_host_type(H3270 *hSession) |
77 | { | 77 | { |
78 | CHECK_SESSION_HANDLE(hSession); | 78 | CHECK_SESSION_HANDLE(hSession); |
79 | - return hSession->options; | 79 | + return hSession->host_type; |
80 | } | 80 | } |
81 | 81 | ||
82 | -LIB3270_EXPORT void lib3270_set_options(H3270 *hSession, LIB3270_OPTION opt) | 82 | +LIB3270_EXPORT int lib3270_set_host_type(H3270 *hSession, LIB3270_HOST_TYPE opt) |
83 | { | 83 | { |
84 | - CHECK_SESSION_HANDLE(hSession); | ||
85 | - hSession->options = opt; | ||
86 | - | ||
87 | - Replace(hSession->host.full, | ||
88 | - lib3270_strdup_printf( | ||
89 | - "%s%s:%s", | ||
90 | - hSession->options&LIB3270_OPTION_SSL ? "tn3270s://" : "tn3270://", | ||
91 | - hSession->host.current, | ||
92 | - hSession->host.srvc | ||
93 | - )); | ||
94 | - | 84 | + FAIL_IF_ONLINE(hSession); |
85 | + hSession->host_type = opt; | ||
86 | + return 0; | ||
95 | } | 87 | } |
96 | 88 | ||
97 | LIB3270_EXPORT int lib3270_get_color_type(H3270 *hSession) | 89 | LIB3270_EXPORT int lib3270_get_color_type(H3270 *hSession) |
@@ -137,7 +129,7 @@ LIB3270_EXPORT int lib3270_set_color_type(H3270 *hSession, int colortype) | @@ -137,7 +129,7 @@ LIB3270_EXPORT int lib3270_set_color_type(H3270 *hSession, int colortype) | ||
137 | } | 129 | } |
138 | 130 | ||
139 | 131 | ||
140 | -LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void) | 132 | +LIB3270_EXPORT const LIB3270_HOST_TYPE_ENTRY * lib3270_get_option_list(void) |
141 | { | 133 | { |
142 | return host_type; | 134 | return host_type; |
143 | } | 135 | } |
@@ -145,10 +137,40 @@ LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void) | @@ -145,10 +137,40 @@ LIB3270_EXPORT const LIB3270_OPTION_ENTRY * lib3270_get_option_list(void) | ||
145 | LIB3270_EXPORT int lib3270_is_tso(H3270 *hSession) | 137 | LIB3270_EXPORT int lib3270_is_tso(H3270 *hSession) |
146 | { | 138 | { |
147 | CHECK_SESSION_HANDLE(hSession); | 139 | CHECK_SESSION_HANDLE(hSession); |
148 | - return (hSession->options & LIB3270_OPTION_TSO) != 0; | 140 | + return (hSession->host_type & LIB3270_HOST_TSO) != 0; |
141 | +} | ||
142 | + | ||
143 | +LIB3270_EXPORT int lib3270_set_tso(H3270 *hSession, int on) | ||
144 | +{ | ||
145 | + FAIL_IF_ONLINE(hSession); | ||
146 | + | ||
147 | + if(on) | ||
148 | + hSession->host_type = LIB3270_HOST_TSO; | ||
149 | + else | ||
150 | + hSession->host_type &= ~LIB3270_HOST_TSO; | ||
151 | + | ||
152 | + return 0; | ||
153 | +} | ||
154 | + | ||
155 | +LIB3270_EXPORT int lib3270_is_as400(H3270 *hSession) | ||
156 | +{ | ||
157 | + CHECK_SESSION_HANDLE(hSession); | ||
158 | + return (hSession->host_type & LIB3270_HOST_AS400) != 0; | ||
149 | } | 159 | } |
150 | 160 | ||
151 | -LIB3270_EXPORT LIB3270_OPTION lib3270_parse_host_type(const char *name) | 161 | +LIB3270_EXPORT int lib3270_set_as400(H3270 *hSession, int on) |
162 | +{ | ||
163 | + FAIL_IF_ONLINE(hSession); | ||
164 | + | ||
165 | + if(on) | ||
166 | + hSession->host_type |= LIB3270_HOST_AS400; | ||
167 | + else | ||
168 | + hSession->host_type &= ~LIB3270_HOST_AS400; | ||
169 | + | ||
170 | + return 0; | ||
171 | +} | ||
172 | + | ||
173 | +LIB3270_EXPORT LIB3270_HOST_TYPE lib3270_parse_host_type(const char *name) | ||
152 | { | 174 | { |
153 | 175 | ||
154 | int f; | 176 | int f; |
@@ -156,22 +178,23 @@ LIB3270_EXPORT LIB3270_OPTION lib3270_parse_host_type(const char *name) | @@ -156,22 +178,23 @@ LIB3270_EXPORT LIB3270_OPTION lib3270_parse_host_type(const char *name) | ||
156 | for(f=0;host_type[f].name;f++) | 178 | for(f=0;host_type[f].name;f++) |
157 | { | 179 | { |
158 | if(!strcasecmp(host_type[f].name,name)) | 180 | if(!strcasecmp(host_type[f].name,name)) |
159 | - return host_type[f].option; | 181 | + return host_type[f].type; |
160 | } | 182 | } |
161 | 183 | ||
184 | + errno = ENOENT; | ||
162 | return 0; | 185 | return 0; |
163 | } | 186 | } |
164 | 187 | ||
165 | -LIB3270_EXPORT int lib3270_set_host_type(H3270 *hSession, const char *name) | 188 | +LIB3270_EXPORT int lib3270_set_host_type_by_name(H3270 *hSession, const char *name) |
166 | { | 189 | { |
167 | - size_t f; | 190 | + FAIL_IF_ONLINE(hSession); |
168 | 191 | ||
192 | + size_t f; | ||
169 | for(f=0;f<(sizeof(host_type)/sizeof(host_type[0]));f++) | 193 | for(f=0;f<(sizeof(host_type)/sizeof(host_type[0]));f++) |
170 | { | 194 | { |
171 | if(host_type[f].name && !strcasecmp(host_type[f].name,name)) | 195 | if(host_type[f].name && !strcasecmp(host_type[f].name,name)) |
172 | { | 196 | { |
173 | - hSession->options &= ~LIB3270_OPTION_HOST_TYPE; | ||
174 | - hSession->options |= host_type[f].option; | 197 | + hSession->host_type = host_type[f].type; |
175 | return 0; | 198 | return 0; |
176 | } | 199 | } |
177 | } | 200 | } |
@@ -179,13 +202,13 @@ LIB3270_EXPORT int lib3270_set_host_type(H3270 *hSession, const char *name) | @@ -179,13 +202,13 @@ LIB3270_EXPORT int lib3270_set_host_type(H3270 *hSession, const char *name) | ||
179 | return errno = EINVAL; | 202 | return errno = EINVAL; |
180 | } | 203 | } |
181 | 204 | ||
182 | -LIB3270_EXPORT const char * lib3270_get_host_type(H3270 *hSession) | 205 | +LIB3270_EXPORT const char * lib3270_get_host_type_name(H3270 *hSession) |
183 | { | 206 | { |
184 | size_t f; | 207 | size_t f; |
185 | 208 | ||
186 | for(f=0;f<(sizeof(host_type)/sizeof(host_type[0]));f++) | 209 | for(f=0;f<(sizeof(host_type)/sizeof(host_type[0]));f++) |
187 | { | 210 | { |
188 | - if(hSession->options & host_type[f].option) | 211 | + if(hSession->host_type == host_type[f].type) |
189 | { | 212 | { |
190 | return host_type[f].name; | 213 | return host_type[f].name; |
191 | } | 214 | } |
src/lib3270/private.h
@@ -309,7 +309,7 @@ struct _h3270 | @@ -309,7 +309,7 @@ struct _h3270 | ||
309 | LIB3270_CSTATE cstate; ///< @brief Connection state. | 309 | LIB3270_CSTATE cstate; ///< @brief Connection state. |
310 | 310 | ||
311 | // flags | 311 | // flags |
312 | - LIB3270_OPTION options; ///< @brief Session options. | 312 | + LIB3270_HOST_TYPE host_type; ///< @brief Host type. |
313 | 313 | ||
314 | int selected : 1; ///< @brief Has selected region? | 314 | int selected : 1; ///< @brief Has selected region? |
315 | int rectsel : 1; ///< @brief Selected region is a rectangle ? | 315 | int rectsel : 1; ///< @brief Selected region is a rectangle ? |
@@ -605,6 +605,7 @@ struct _h3270 | @@ -605,6 +605,7 @@ struct _h3270 | ||
605 | /// @brief SSL Data. | 605 | /// @brief SSL Data. |
606 | struct | 606 | struct |
607 | { | 607 | { |
608 | + char enabled; | ||
608 | char host; | 609 | char host; |
609 | LIB3270_SSL_STATE state; | 610 | LIB3270_SSL_STATE state; |
610 | unsigned long error; | 611 | unsigned long error; |
@@ -647,7 +648,7 @@ LIB3270_INTERNAL int lib3270_default_event_dispatcher(H3270 *hSession, int block | @@ -647,7 +648,7 @@ LIB3270_INTERNAL int lib3270_default_event_dispatcher(H3270 *hSession, int block | ||
647 | /** | 648 | /** |
648 | * @brief Called from timer to attempt an automatic reconnection. | 649 | * @brief Called from timer to attempt an automatic reconnection. |
649 | */ | 650 | */ |
650 | -LIB3270_INTERNAL int lib3270_reconnect(H3270 *hSession); | 651 | +LIB3270_INTERNAL int lib3270_check_for_auto_reconnect(H3270 *hSession); |
651 | 652 | ||
652 | #if defined(DEBUG) | 653 | #if defined(DEBUG) |
653 | #define CHECK_SESSION_HANDLE(x) check_session_handle(&x,__FUNCTION__); | 654 | #define CHECK_SESSION_HANDLE(x) check_session_handle(&x,__FUNCTION__); |
src/lib3270/properties.c
@@ -72,7 +72,7 @@ | @@ -72,7 +72,7 @@ | ||
72 | "connected", // Property name. | 72 | "connected", // Property name. |
73 | N_( "" ), // Property description. | 73 | N_( "" ), // Property description. |
74 | lib3270_is_connected, // Get value. | 74 | lib3270_is_connected, // Get value. |
75 | - lib3270_set_connected // Set value. | 75 | + NULL // Set value. |
76 | }, | 76 | }, |
77 | 77 | ||
78 | { | 78 | { |
@@ -86,7 +86,14 @@ | @@ -86,7 +86,14 @@ | ||
86 | "tso", // Property name. | 86 | "tso", // Property name. |
87 | N_( "Non zero if the host is TSO." ), // Property description. | 87 | N_( "Non zero if the host is TSO." ), // Property description. |
88 | lib3270_is_tso, // Get value. | 88 | lib3270_is_tso, // Get value. |
89 | - NULL // Set value. | 89 | + lib3270_set_tso // Set value. |
90 | + }, | ||
91 | + | ||
92 | + { | ||
93 | + "as400", // Property name. | ||
94 | + N_( "Non zero if the host is AS400." ), // Property description. | ||
95 | + lib3270_is_as400, // Get value. | ||
96 | + lib3270_set_as400 // Set value. | ||
90 | }, | 97 | }, |
91 | 98 | ||
92 | { | 99 | { |
@@ -360,8 +367,8 @@ | @@ -360,8 +367,8 @@ | ||
360 | { | 367 | { |
361 | "host_type", // Property name. | 368 | "host_type", // Property name. |
362 | N_( "" ), // Property description. | 369 | N_( "" ), // Property description. |
363 | - lib3270_get_host_type, // Get value. | ||
364 | - lib3270_set_host_type // Set value. | 370 | + lib3270_get_host_type_name, // Get value. |
371 | + lib3270_set_host_type_by_name // Set value. | ||
365 | }, | 372 | }, |
366 | 373 | ||
367 | { | 374 | { |
@@ -422,11 +429,12 @@ | @@ -422,11 +429,12 @@ | ||
422 | 429 | ||
423 | } | 430 | } |
424 | 431 | ||
432 | + /* | ||
425 | int lib3270_set_connected(H3270 *hSession, int state) { | 433 | int lib3270_set_connected(H3270 *hSession, int state) { |
426 | 434 | ||
427 | if(state) { | 435 | if(state) { |
428 | 436 | ||
429 | - if(lib3270_connect(hSession,120)) | 437 | + if(lib3270_reconnect(hSession,120)) |
430 | return -1; | 438 | return -1; |
431 | 439 | ||
432 | } else { | 440 | } else { |
@@ -436,6 +444,7 @@ | @@ -436,6 +444,7 @@ | ||
436 | 444 | ||
437 | return 0; | 445 | return 0; |
438 | } | 446 | } |
447 | + */ | ||
439 | 448 | ||
440 | int lib3270_get_int_property(H3270 *hSession, const char *name, int seconds) | 449 | int lib3270_get_int_property(H3270 *hSession, const char *name, int seconds) |
441 | { | 450 | { |
src/lib3270/session.c
@@ -314,7 +314,7 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char | @@ -314,7 +314,7 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char | ||
314 | hSession->saved_wraparound_mode = 1; | 314 | hSession->saved_wraparound_mode = 1; |
315 | hSession->once_cset = -1; | 315 | hSession->once_cset = -1; |
316 | hSession->state = LIB3270_ANSI_STATE_DATA; | 316 | hSession->state = LIB3270_ANSI_STATE_DATA; |
317 | - hSession->options = LIB3270_OPTION_DEFAULTS; | 317 | + hSession->host_type = LIB3270_HOSTTYPE_DEFAULT; |
318 | hSession->colors = 16; | 318 | hSession->colors = 16; |
319 | hSession->m3279 = 1; | 319 | hSession->m3279 = 1; |
320 | hSession->unlock_delay_ms = 350; // 0.35s after last unlock | 320 | hSession->unlock_delay_ms = 350; // 0.35s after last unlock |
src/lib3270/testprogram/testprogram.c
@@ -50,7 +50,7 @@ int main(int argc, char *argv[]) | @@ -50,7 +50,7 @@ int main(int argc, char *argv[]) | ||
50 | //lib3270_set_toggle(h,LIB3270_TOGGLE_DS_TRACE,1); | 50 | //lib3270_set_toggle(h,LIB3270_TOGGLE_DS_TRACE,1); |
51 | lib3270_set_toggle(h,LIB3270_TOGGLE_SSL_TRACE,1); | 51 | lib3270_set_toggle(h,LIB3270_TOGGLE_SSL_TRACE,1); |
52 | 52 | ||
53 | - rc = lib3270_connect(h,120); | 53 | + rc = lib3270_reconnect(h,120); |
54 | printf("\nConnect %s exits with rc=%d\n",lib3270_get_url(h),rc); | 54 | printf("\nConnect %s exits with rc=%d\n",lib3270_get_url(h),rc); |
55 | 55 | ||
56 | lib3270_wait_for_ready(h,10); | 56 | lib3270_wait_for_ready(h,10); |
src/lib3270/toggles.c
@@ -352,7 +352,7 @@ static void toggle_reconnect(H3270 *hSession, struct lib3270_toggle *t unused, L | @@ -352,7 +352,7 @@ static void toggle_reconnect(H3270 *hSession, struct lib3270_toggle *t unused, L | ||
352 | /* Schedule an automatic reconnection. */ | 352 | /* Schedule an automatic reconnection. */ |
353 | lib3270_write_log(hSession,"toggle","Auto-reconnect toggle was activated when offline, reconnecting"); | 353 | lib3270_write_log(hSession,"toggle","Auto-reconnect toggle was activated when offline, reconnecting"); |
354 | hSession->auto_reconnect_inprogress = 1; | 354 | hSession->auto_reconnect_inprogress = 1; |
355 | - (void) AddTimer(RECONNECT_MS, hSession, lib3270_reconnect); | 355 | + (void) AddTimer(RECONNECT_MS, hSession, lib3270_check_for_auto_reconnect); |
356 | } | 356 | } |
357 | 357 | ||
358 | } | 358 | } |
src/lib3270/windows/connect.c
@@ -159,11 +159,12 @@ LIB3270_EXPORT int lib3270_connect_url(H3270 *hSession, const char *url, int wai | @@ -159,11 +159,12 @@ LIB3270_EXPORT int lib3270_connect_url(H3270 *hSession, const char *url, int wai | ||
159 | lib3270_set_url(hSession,url); | 159 | lib3270_set_url(hSession,url); |
160 | } | 160 | } |
161 | 161 | ||
162 | - return lib3270_connect(hSession, wait); | 162 | + return lib3270_reconnect(hSession, wait); |
163 | 163 | ||
164 | } | 164 | } |
165 | 165 | ||
166 | -LIB3270_EXPORT int lib3270_connect_host(H3270 *hSession, const char *hostname, const char *srvc, LIB3270_OPTION opt) | 166 | +/* |
167 | +LIB3270_EXPORT int lib3270_connect_host(H3270 *hSession, const char *hostname, const char *srvc, LIB3270_HOST_TYPE opt) | ||
167 | { | 168 | { |
168 | CHECK_SESSION_HANDLE(hSession); | 169 | CHECK_SESSION_HANDLE(hSession); |
169 | 170 | ||
@@ -190,22 +191,23 @@ LIB3270_EXPORT int lib3270_connect_host(H3270 *hSession, const char *hostname, c | @@ -190,22 +191,23 @@ LIB3270_EXPORT int lib3270_connect_host(H3270 *hSession, const char *hostname, c | ||
190 | hostname = name; | 191 | hostname = name; |
191 | } | 192 | } |
192 | 193 | ||
193 | - hSession->options = opt & ~LIB3270_OPTION_WAIT; | 194 | + hSession->options = opt & ~LIB3270_HOST_TYPE_WAIT; |
194 | Replace(hSession->host.current,strdup(hostname)); | 195 | Replace(hSession->host.current,strdup(hostname)); |
195 | Replace(hSession->host.srvc,strdup(srvc)); | 196 | Replace(hSession->host.srvc,strdup(srvc)); |
196 | 197 | ||
197 | Replace(hSession->host.full, | 198 | Replace(hSession->host.full, |
198 | lib3270_strdup_printf( | 199 | lib3270_strdup_printf( |
199 | "%s%s:%s", | 200 | "%s%s:%s", |
200 | - opt&LIB3270_OPTION_SSL ? "tn3270s://" : "tn3270://", | 201 | + opt&LIB3270_HOST_TYPE_SSL ? "tn3270s://" : "tn3270://", |
201 | hostname, | 202 | hostname, |
202 | srvc )); | 203 | srvc )); |
203 | 204 | ||
204 | trace("current_host=\"%s\"",hSession->host.current); | 205 | trace("current_host=\"%s\"",hSession->host.current); |
205 | 206 | ||
206 | - return lib3270_connect(hSession,opt & LIB3270_OPTION_WAIT); | 207 | + return lib3270_reconnect(hSession,opt & LIB3270_HOST_TYPE_WAIT); |
207 | 208 | ||
208 | } | 209 | } |
210 | +*/ | ||
209 | 211 | ||
210 | struct resolver | 212 | struct resolver |
211 | { | 213 | { |
@@ -260,7 +262,7 @@ LIB3270_EXPORT int lib3270_connect_host(H3270 *hSession, const char *hostname, c | @@ -260,7 +262,7 @@ LIB3270_EXPORT int lib3270_connect_host(H3270 *hSession, const char *hostname, c | ||
260 | 262 | ||
261 | } | 263 | } |
262 | 264 | ||
263 | -int lib3270_connect(H3270 *hSession, int seconds) | 265 | +int lib3270_reconnect(H3270 *hSession, int seconds) |
264 | { | 266 | { |
265 | int optval; | 267 | int optval; |
266 | struct resolver host; | 268 | struct resolver host; |
@@ -330,7 +332,7 @@ int lib3270_connect(H3270 *hSession, int seconds) | @@ -330,7 +332,7 @@ int lib3270_connect(H3270 *hSession, int seconds) | ||
330 | hSession->ever_3270 = False; | 332 | hSession->ever_3270 = False; |
331 | hSession->ssl.host = 0; | 333 | hSession->ssl.host = 0; |
332 | 334 | ||
333 | - if(hSession->options&LIB3270_OPTION_SSL) | 335 | + if(hSession->options&LIB3270_HOST_TYPE_SSL) |
334 | { | 336 | { |
335 | #if defined(HAVE_LIBSSL) | 337 | #if defined(HAVE_LIBSSL) |
336 | hSession->ssl.host = 1; | 338 | hSession->ssl.host = 1; |