Commit 97080b25c1df344997d12458bfea6d5706338ccc

Authored by Perry Werneck
1 parent db04ac3f

Splitting ssl & host_type properties.

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;