Commit cb7afe0c04133066186f15a24a8e416f81fd7e98

Authored by perry.werneck@gmail.com
1 parent 4fd1f48a

Ajustes para multi-sessão

src/lib3270/ft.c
@@ -75,9 +75,7 @@ static void ft_in3270(H3270 *session, int ignored unused, void *unused); @@ -75,9 +75,7 @@ static void ft_in3270(H3270 *session, int ignored unused, void *unused);
75 #define BN (Boolean *)NULL 75 #define BN (Boolean *)NULL
76 76
77 // Globals. 77 // Globals.
78 -static H3270FT *ftsession = NULL;  
79 -  
80 -#define CHECK_FT_HANDLE(x) if(!x) x = ftsession; 78 +H3270FT *ftsession = NULL;
81 79
82 // enum ft_state ft_state = FT_NONE; // File transfer state 80 // enum ft_state ft_state = FT_NONE; // File transfer state
83 // char *ft_local_filename; // Local file to transfer to/from 81 // char *ft_local_filename; // Local file to transfer to/from
src/lib3270/ftc.h
@@ -20,25 +20,24 @@ @@ -20,25 +20,24 @@
20 20
21 #if defined(X3270_FT) /*[*/ 21 #if defined(X3270_FT) /*[*/
22 22
23 -#include <lib3270/filetransfer.h> 23 + #include <lib3270/filetransfer.h>
24 24
25 -LIB3270_INTERNAL Boolean ascii_flag;  
26 -LIB3270_INTERNAL Boolean cr_flag;  
27 -LIB3270_INTERNAL unsigned long ft_length; 25 + #define CHECK_FT_HANDLE(x) if(!x) x = ftsession;
28 26
29 -// LIB3270_INTERNAL H3270FT * ftsession; 27 + LIB3270_INTERNAL Boolean ascii_flag;
  28 + LIB3270_INTERNAL Boolean cr_flag;
  29 + LIB3270_INTERNAL unsigned long ft_length;
30 30
31 -// LIB3270_INTERNAL FILE *ft_local_file;  
32 -// extern char *ft_local_filename; 31 + LIB3270_INTERNAL H3270FT * ftsession;
33 32
34 -LIB3270_INTERNAL Boolean ft_last_cr;  
35 -LIB3270_INTERNAL Boolean remap_flag; 33 + LIB3270_INTERNAL Boolean ft_last_cr;
  34 + LIB3270_INTERNAL Boolean remap_flag;
36 35
37 -LIB3270_INTERNAL void ft_init(H3270 *session); 36 + LIB3270_INTERNAL void ft_init(H3270 *session);
38 37
39 -LIB3270_INTERNAL void ft_aborting(H3270FT *h);  
40 -LIB3270_INTERNAL void ft_complete(H3270FT *h, const char *errmsg);  
41 -LIB3270_INTERNAL void ft_running(H3270FT *h, Boolean is_cut);  
42 -LIB3270_INTERNAL void ft_update_length(H3270FT *h); 38 + LIB3270_INTERNAL void ft_aborting(H3270FT *h);
  39 + LIB3270_INTERNAL void ft_complete(H3270FT *h, const char *errmsg);
  40 + LIB3270_INTERNAL void ft_running(H3270FT *h, Boolean is_cut);
  41 + LIB3270_INTERNAL void ft_update_length(H3270FT *h);
43 42
44 #endif /*]*/ 43 #endif /*]*/
src/lib3270/kybd.c
@@ -394,11 +394,11 @@ kybd_inhibit(Boolean inhibit) @@ -394,11 +394,11 @@ kybd_inhibit(Boolean inhibit)
394 if (inhibit) { 394 if (inhibit) {
395 kybdlock_set(KL_ENTER_INHIBIT, "kybd_inhibit"); 395 kybdlock_set(KL_ENTER_INHIBIT, "kybd_inhibit");
396 if (kybdlock == KL_ENTER_INHIBIT) 396 if (kybdlock == KL_ENTER_INHIBIT)
397 - status_reset(NULL); 397 + status_reset(&h3270);
398 } else { 398 } else {
399 kybdlock_clr(KL_ENTER_INHIBIT, "kybd_inhibit"); 399 kybdlock_clr(KL_ENTER_INHIBIT, "kybd_inhibit");
400 if (!kybdlock) 400 if (!kybdlock)
401 - status_reset(NULL); 401 + status_reset(&h3270);
402 } 402 }
403 } 403 }
404 404
@@ -1406,7 +1406,7 @@ LIB3270_KEY_ACTION( backtab ) @@ -1406,7 +1406,7 @@ LIB3270_KEY_ACTION( backtab )
1406 if (kybdlock) { 1406 if (kybdlock) {
1407 if (KYBDLOCK_IS_OERR) { 1407 if (KYBDLOCK_IS_OERR) {
1408 kybdlock_clr(KL_OERR_MASK, "BackTab"); 1408 kybdlock_clr(KL_OERR_MASK, "BackTab");
1409 - status_reset(NULL); 1409 + status_reset(&h3270);
1410 } else { 1410 } else {
1411 ENQUEUE_ACTION(lib3270_backtab); 1411 ENQUEUE_ACTION(lib3270_backtab);
1412 return 0; 1412 return 0;
@@ -1515,7 +1515,7 @@ do_reset(Boolean explicit) @@ -1515,7 +1515,7 @@ do_reset(Boolean explicit)
1515 } 1515 }
1516 1516
1517 /* Clean up other modes. */ 1517 /* Clean up other modes. */
1518 - status_reset(NULL); 1518 + status_reset(&h3270);
1519 mcursor_normal(&h3270); 1519 mcursor_normal(&h3270);
1520 1520
1521 } 1521 }
@@ -1586,7 +1586,7 @@ LIB3270_CURSOR_ACTION( left ) @@ -1586,7 +1586,7 @@ LIB3270_CURSOR_ACTION( left )
1586 if (KYBDLOCK_IS_OERR) 1586 if (KYBDLOCK_IS_OERR)
1587 { 1587 {
1588 kybdlock_clr(KL_OERR_MASK, "Left"); 1588 kybdlock_clr(KL_OERR_MASK, "Left");
1589 - status_reset(NULL); 1589 + status_reset(&h3270);
1590 } 1590 }
1591 else 1591 else
1592 { 1592 {
@@ -1848,7 +1848,7 @@ LIB3270_CURSOR_ACTION( right ) @@ -1848,7 +1848,7 @@ LIB3270_CURSOR_ACTION( right )
1848 if (KYBDLOCK_IS_OERR) 1848 if (KYBDLOCK_IS_OERR)
1849 { 1849 {
1850 kybdlock_clr(KL_OERR_MASK, "Right"); 1850 kybdlock_clr(KL_OERR_MASK, "Right");
1851 - status_reset(NULL); 1851 + status_reset(&h3270);
1852 } 1852 }
1853 else 1853 else
1854 { 1854 {
@@ -1893,7 +1893,7 @@ Left2_action(Widget w unused, XEvent *event, String *params, @@ -1893,7 +1893,7 @@ Left2_action(Widget w unused, XEvent *event, String *params,
1893 if (kybdlock) { 1893 if (kybdlock) {
1894 if (KYBDLOCK_IS_OERR) { 1894 if (KYBDLOCK_IS_OERR) {
1895 kybdlock_clr(KL_OERR_MASK, "Left2"); 1895 kybdlock_clr(KL_OERR_MASK, "Left2");
1896 - status_reset(); 1896 + status_reset(&h3270);
1897 } else { 1897 } else {
1898 enq_ta(Left2_action, CN, CN); 1898 enq_ta(Left2_action, CN, CN);
1899 return; 1899 return;
@@ -1998,7 +1998,7 @@ Right2_action(Widget w unused, XEvent *event, String *params, @@ -1998,7 +1998,7 @@ Right2_action(Widget w unused, XEvent *event, String *params,
1998 if (kybdlock) { 1998 if (kybdlock) {
1999 if (KYBDLOCK_IS_OERR) { 1999 if (KYBDLOCK_IS_OERR) {
2000 kybdlock_clr(KL_OERR_MASK, "Right2"); 2000 kybdlock_clr(KL_OERR_MASK, "Right2");
2001 - status_reset(); 2001 + status_reset(&h3270);
2002 } else { 2002 } else {
2003 enq_ta(Right2_action, CN, CN); 2003 enq_ta(Right2_action, CN, CN);
2004 return; 2004 return;
@@ -2151,7 +2151,7 @@ LIB3270_CURSOR_ACTION( up ) @@ -2151,7 +2151,7 @@ LIB3270_CURSOR_ACTION( up )
2151 if (KYBDLOCK_IS_OERR) 2151 if (KYBDLOCK_IS_OERR)
2152 { 2152 {
2153 kybdlock_clr(KL_OERR_MASK, "Up"); 2153 kybdlock_clr(KL_OERR_MASK, "Up");
2154 - status_reset(NULL); 2154 + status_reset(&h3270);
2155 } 2155 }
2156 else 2156 else
2157 { 2157 {
@@ -2189,7 +2189,7 @@ LIB3270_CURSOR_ACTION( down ) @@ -2189,7 +2189,7 @@ LIB3270_CURSOR_ACTION( down )
2189 if (KYBDLOCK_IS_OERR) 2189 if (KYBDLOCK_IS_OERR)
2190 { 2190 {
2191 kybdlock_clr(KL_OERR_MASK, "Down"); 2191 kybdlock_clr(KL_OERR_MASK, "Down");
2192 - status_reset(NULL); 2192 + status_reset(&h3270);
2193 } else 2193 } else
2194 { 2194 {
2195 ENQUEUE_ACTION(lib3270_cursor_down); 2195 ENQUEUE_ACTION(lib3270_cursor_down);
src/lib3270/sf.c
@@ -50,9 +50,11 @@ @@ -50,9 +50,11 @@
50 50
51 #include "charsetc.h" 51 #include "charsetc.h"
52 #include "ctlrc.h" 52 #include "ctlrc.h"
53 -#if defined(X3270_FT) /*[*/  
54 -#include "ft_dftc.h"  
55 -#endif /*]*/ 53 +
  54 +#if defined(X3270_FT)
  55 + #include "ft_dftc.h"
  56 +#endif
  57 +
56 #include "kybdc.h" 58 #include "kybdc.h"
57 #include "screenc.h" 59 #include "screenc.h"
58 #include "seec.h" 60 #include "seec.h"
src/lib3270/telnet.c
@@ -203,9 +203,9 @@ static char *proxy_host = CN; @@ -203,9 +203,9 @@ static char *proxy_host = CN;
203 static char *proxy_portname = CN; 203 static char *proxy_portname = CN;
204 static unsigned short proxy_port = 0; 204 static unsigned short proxy_port = 0;
205 205
206 -static int telnet_fsm(unsigned char c); 206 +static int telnet_fsm(H3270 *session, unsigned char c);
207 static void net_rawout(unsigned const char *buf, int len); 207 static void net_rawout(unsigned const char *buf, int len);
208 -static void check_in3270(void); 208 +static void check_in3270(H3270 *session);
209 static void store3270in(unsigned char c); 209 static void store3270in(unsigned char c);
210 static void check_linemode(Boolean init); 210 static void check_linemode(Boolean init);
211 static int non_blocking(H3270 *session, Boolean on); 211 static int non_blocking(H3270 *session, Boolean on);
@@ -609,14 +609,14 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo @@ -609,14 +609,14 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo
609 haddr.sin.sin_port = passthru_port; 609 haddr.sin.sin_port = passthru_port;
610 ha_len = sizeof(struct sockaddr_in); 610 ha_len = sizeof(struct sockaddr_in);
611 } else if (proxy_type > 0) { 611 } else if (proxy_type > 0) {
612 - if (resolve_host_and_port(&h3270,proxy_host, proxy_portname, 612 + if (resolve_host_and_port(session,proxy_host, proxy_portname,
613 &proxy_port, &haddr.sa, &ha_len, errmsg, 613 &proxy_port, &haddr.sa, &ha_len, errmsg,
614 sizeof(errmsg)) < 0) { 614 sizeof(errmsg)) < 0) {
615 popup_an_error(session,errmsg); 615 popup_an_error(session,errmsg);
616 return -1; 616 return -1;
617 } 617 }
618 } else { 618 } else {
619 - if (resolve_host_and_port(&h3270,host, portname, 619 + if (resolve_host_and_port(session,host, portname,
620 &session->current_port, &haddr.sa, &ha_len, 620 &session->current_port, &haddr.sa, &ha_len,
621 errmsg, sizeof(errmsg)) < 0) { 621 errmsg, sizeof(errmsg)) < 0) {
622 popup_an_error(session,errmsg); 622 popup_an_error(session,errmsg);
@@ -818,7 +818,7 @@ static void net_connected(H3270 *session) @@ -818,7 +818,7 @@ static void net_connected(H3270 *session)
818 if (SSL_set_fd(session->ssl_con, session->sock) != 1) 818 if (SSL_set_fd(session->ssl_con, session->sock) != 1)
819 { 819 {
820 trace_dsn("Can't set fd!\n"); 820 trace_dsn("Can't set fd!\n");
821 - popup_system_error(&h3270,_( "Connection failed" ), _( "Can't set SSL socket file descriptor" ), "%s", SSL_state_string_long(session->ssl_con)); 821 + popup_system_error(session,_( "Connection failed" ), _( "Can't set SSL socket file descriptor" ), "%s", SSL_state_string_long(session->ssl_con));
822 set_ssl_state(session,LIB3270_SSL_UNSECURE); 822 set_ssl_state(session,LIB3270_SSL_UNSECURE);
823 } 823 }
824 else 824 else
@@ -836,11 +836,7 @@ static void net_connected(H3270 *session) @@ -836,11 +836,7 @@ static void net_connected(H3270 *session)
836 836
837 if(e != session->last_ssl_error) 837 if(e != session->last_ssl_error)
838 { 838 {
839 - session->message( &h3270,  
840 - LIB3270_NOTIFY_ERROR,  
841 - _( "Connection failed" ),  
842 - _( "SSL negotiation failed" ),  
843 - state); 839 + session->message(session,LIB3270_NOTIFY_ERROR,_( "Connection failed" ),_( "SSL negotiation failed" ),state);
844 session->last_ssl_error = e; 840 session->last_ssl_error = e;
845 } 841 }
846 return; 842 return;
@@ -907,15 +903,15 @@ static void net_connected(H3270 *session) @@ -907,15 +903,15 @@ static void net_connected(H3270 *session)
907 * appeared ready but recv() returned EWOULDBLOCK). Complete the 903 * appeared ready but recv() returned EWOULDBLOCK). Complete the
908 * connection-completion processing. 904 * connection-completion processing.
909 */ 905 */
910 -static void connection_complete(void) 906 +static void connection_complete(H3270 *session)
911 { 907 {
912 - if (non_blocking(&h3270,False) < 0) 908 + if (non_blocking(session,False) < 0)
913 { 909 {
914 - host_disconnect(&h3270,True); 910 + host_disconnect(session,True);
915 return; 911 return;
916 } 912 }
917 - host_connected(&h3270);  
918 - net_connected(&h3270); 913 + host_connected(session);
  914 + net_connected(session);
919 } 915 }
920 916
921 /* 917 /*
@@ -950,7 +946,7 @@ void net_disconnect(H3270 *session) @@ -950,7 +946,7 @@ void net_disconnect(H3270 *session)
950 946
951 /* We're not connected to an LU any more. */ 947 /* We're not connected to an LU any more. */
952 session->connected_lu = CN; 948 session->connected_lu = CN;
953 - status_lu(&h3270,CN); 949 + status_lu(session,CN);
954 950
955 } 951 }
956 952
@@ -984,7 +980,7 @@ void net_input(H3270 *session) @@ -984,7 +980,7 @@ void net_input(H3270 *session)
984 980
985 switch (err) { 981 switch (err) {
986 case WSAEISCONN: 982 case WSAEISCONN:
987 - connection_complete(); 983 + connection_complete(session);
988 // and go get data...? 984 // and go get data...?
989 break; 985 break;
990 case WSAEALREADY: 986 case WSAEALREADY:
@@ -992,11 +988,7 @@ void net_input(H3270 *session) @@ -992,11 +988,7 @@ void net_input(H3270 *session)
992 case WSAEINVAL: 988 case WSAEINVAL:
993 return; 989 return;
994 default: 990 default:
995 - lib3270_popup_dialog( &h3270,  
996 - LIB3270_NOTIFY_CRITICAL,  
997 - N_( "Network startup error" ),  
998 - N_( "Second connect() failed" ),  
999 - "%s", win32_strerror(GetLastError()) ); 991 + lib3270_popup_dialog(session,LIB3270_NOTIFY_CRITICAL,N_( "Network startup error" ),N_( "Second connect() failed" ),"%s", win32_strerror(GetLastError()) );
1000 _exit(1); 992 _exit(1);
1001 } 993 }
1002 } 994 }
@@ -1040,11 +1032,7 @@ void net_input(H3270 *session) @@ -1040,11 +1032,7 @@ void net_input(H3270 *session)
1040 1032
1041 trace_dsn("RCVD SSL_read error %ld (%s)\n", e,err_buf); 1033 trace_dsn("RCVD SSL_read error %ld (%s)\n", e,err_buf);
1042 1034
1043 - h3270.message( &h3270,  
1044 - LIB3270_NOTIFY_ERROR,  
1045 - _( "SSL Error" ),  
1046 - _( "SSL Read error" ),  
1047 - err_buf ); 1035 + session->message( session,LIB3270_NOTIFY_ERROR,_( "SSL Error" ),_( "SSL Read error" ),err_buf );
1048 1036
1049 host_disconnect(session,True); 1037 host_disconnect(session,True);
1050 return; 1038 return;
@@ -1053,7 +1041,7 @@ void net_input(H3270 *session) @@ -1053,7 +1041,7 @@ void net_input(H3270 *session)
1053 1041
1054 if (HALF_CONNECTED && socket_errno() == SE_EAGAIN) 1042 if (HALF_CONNECTED && socket_errno() == SE_EAGAIN)
1055 { 1043 {
1056 - connection_complete(); 1044 + connection_complete(session);
1057 return; 1045 return;
1058 } 1046 }
1059 1047
@@ -1095,7 +1083,7 @@ void net_input(H3270 *session) @@ -1095,7 +1083,7 @@ void net_input(H3270 *session)
1095 ns_brcvd += nr; 1083 ns_brcvd += nr;
1096 for (cp = netrbuf; cp < (netrbuf + nr); cp++) 1084 for (cp = netrbuf; cp < (netrbuf + nr); cp++)
1097 { 1085 {
1098 - if (telnet_fsm(*cp)) 1086 + if (telnet_fsm(session,*cp))
1099 { 1087 {
1100 (void) ctlr_dbcs_postprocess(); 1088 (void) ctlr_dbcs_postprocess();
1101 host_disconnect(session,True); 1089 host_disconnect(session,True);
@@ -1177,8 +1165,7 @@ next_lu(void) @@ -1177,8 +1165,7 @@ next_lu(void)
1177 * Telnet finite-state machine. 1165 * Telnet finite-state machine.
1178 * Returns 0 for okay, -1 for errors. 1166 * Returns 0 for okay, -1 for errors.
1179 */ 1167 */
1180 -static int  
1181 -telnet_fsm(unsigned char c) 1168 +static int telnet_fsm(H3270 *session, unsigned char c)
1182 { 1169 {
1183 #if defined(X3270_ANSI) /*[*/ 1170 #if defined(X3270_ANSI) /*[*/
1184 char *see_chr; 1171 char *see_chr;
@@ -1202,9 +1189,9 @@ telnet_fsm(unsigned char c) @@ -1202,9 +1189,9 @@ telnet_fsm(unsigned char c)
1202 if (linemode) 1189 if (linemode)
1203 cooked_init(); 1190 cooked_init();
1204 #endif /*]*/ 1191 #endif /*]*/
1205 - host_in3270(&h3270,CONNECTED_ANSI); 1192 + host_in3270(session,CONNECTED_ANSI);
1206 kybdlock_clr(KL_AWAITING_FIRST, "telnet_fsm"); 1193 kybdlock_clr(KL_AWAITING_FIRST, "telnet_fsm");
1207 - status_reset(NULL); 1194 + status_reset(session);
1208 ps_process(); 1195 ps_process();
1209 } 1196 }
1210 if (IN_ANSI && !IN_E) { 1197 if (IN_ANSI && !IN_E) {
@@ -1220,9 +1207,9 @@ telnet_fsm(unsigned char c) @@ -1220,9 +1207,9 @@ telnet_fsm(unsigned char c)
1220 ansi_data = 4 + sl; 1207 ansi_data = 4 + sl;
1221 } 1208 }
1222 trace_dsn("%s",see_chr); 1209 trace_dsn("%s",see_chr);
1223 - if (!h3270.syncing) 1210 + if (!session->syncing)
1224 { 1211 {
1225 - if (linemode && h3270.onlcr && c == '\n') 1212 + if (linemode && session->onlcr && c == '\n')
1226 ansi_process((unsigned int) '\r'); 1213 ansi_process((unsigned int) '\r');
1227 ansi_process((unsigned int) c); 1214 ansi_process((unsigned int) c);
1228 // sms_store(c); 1215 // sms_store(c);
@@ -1289,10 +1276,10 @@ telnet_fsm(unsigned char c) @@ -1289,10 +1276,10 @@ telnet_fsm(unsigned char c)
1289 break; 1276 break;
1290 case DM: 1277 case DM:
1291 trace_dsn("\n"); 1278 trace_dsn("\n");
1292 - if (h3270.syncing) 1279 + if (session->syncing)
1293 { 1280 {
1294 - h3270.syncing = 0;  
1295 - x_except_on(&h3270); 1281 + session->syncing = 0;
  1282 + x_except_on(session);
1296 } 1283 }
1297 telnet_state = TNS_DATA; 1284 telnet_state = TNS_DATA;
1298 break; 1285 break;
@@ -1339,7 +1326,7 @@ telnet_fsm(unsigned char c) @@ -1339,7 +1326,7 @@ telnet_fsm(unsigned char c)
1339 cmd(WILL), opt(c)); 1326 cmd(WILL), opt(c));
1340 } 1327 }
1341 1328
1342 - check_in3270(); 1329 + check_in3270(&h3270);
1343 check_linemode(False); 1330 check_linemode(False);
1344 } 1331 }
1345 break; 1332 break;
@@ -1359,7 +1346,7 @@ telnet_fsm(unsigned char c) @@ -1359,7 +1346,7 @@ telnet_fsm(unsigned char c)
1359 dont_opt[2] = c; 1346 dont_opt[2] = c;
1360 net_rawout(dont_opt, sizeof(dont_opt)); 1347 net_rawout(dont_opt, sizeof(dont_opt));
1361 trace_dsn("SENT %s %s\n", cmd(DONT), opt(c)); 1348 trace_dsn("SENT %s %s\n", cmd(DONT), opt(c));
1362 - check_in3270(); 1349 + check_in3270(&h3270);
1363 check_linemode(False); 1350 check_linemode(False);
1364 } 1351 }
1365 telnet_state = TNS_DATA; 1352 telnet_state = TNS_DATA;
@@ -1379,9 +1366,9 @@ telnet_fsm(unsigned char c) @@ -1379,9 +1366,9 @@ telnet_fsm(unsigned char c)
1379 #if defined(HAVE_LIBSSL) /*[*/ 1366 #if defined(HAVE_LIBSSL) /*[*/
1380 case TELOPT_STARTTLS: 1367 case TELOPT_STARTTLS:
1381 #endif /*]*/ 1368 #endif /*]*/
1382 - if (c == TELOPT_TN3270E && h3270.non_tn3270e_host) 1369 + if (c == TELOPT_TN3270E && session->non_tn3270e_host)
1383 goto wont; 1370 goto wont;
1384 - if (c == TELOPT_TM && !h3270.bsd_tm) 1371 + if (c == TELOPT_TM && !session->bsd_tm)
1385 goto wont; 1372 goto wont;
1386 1373
1387 if (!myopts[c]) { 1374 if (!myopts[c]) {
@@ -1390,7 +1377,7 @@ telnet_fsm(unsigned char c) @@ -1390,7 +1377,7 @@ telnet_fsm(unsigned char c)
1390 will_opt[2] = c; 1377 will_opt[2] = c;
1391 net_rawout(will_opt, sizeof(will_opt)); 1378 net_rawout(will_opt, sizeof(will_opt));
1392 trace_dsn("SENT %s %s\n", cmd(WILL), opt(c)); 1379 trace_dsn("SENT %s %s\n", cmd(WILL), opt(c));
1393 - check_in3270(); 1380 + check_in3270(&h3270);
1394 check_linemode(False); 1381 check_linemode(False);
1395 } 1382 }
1396 if (c == TELOPT_NAWS) 1383 if (c == TELOPT_NAWS)
@@ -1432,7 +1419,7 @@ telnet_fsm(unsigned char c) @@ -1432,7 +1419,7 @@ telnet_fsm(unsigned char c)
1432 wont_opt[2] = c; 1419 wont_opt[2] = c;
1433 net_rawout(wont_opt, sizeof(wont_opt)); 1420 net_rawout(wont_opt, sizeof(wont_opt));
1434 trace_dsn("SENT %s %s\n", cmd(WONT), opt(c)); 1421 trace_dsn("SENT %s %s\n", cmd(WONT), opt(c));
1435 - check_in3270(); 1422 + check_in3270(&h3270);
1436 check_linemode(False); 1423 check_linemode(False);
1437 } 1424 }
1438 telnet_state = TNS_DATA; 1425 telnet_state = TNS_DATA;
@@ -1460,19 +1447,19 @@ telnet_fsm(unsigned char c) @@ -1460,19 +1447,19 @@ telnet_fsm(unsigned char c)
1460 return -1; 1447 return -1;
1461 } 1448 }
1462 1449
1463 - tt_len = strlen(h3270.termtype); 1450 + tt_len = strlen(session->termtype);
1464 if (try_lu != CN && *try_lu) { 1451 if (try_lu != CN && *try_lu) {
1465 tt_len += strlen(try_lu) + 1; 1452 tt_len += strlen(try_lu) + 1;
1466 - h3270.connected_lu = try_lu; 1453 + session->connected_lu = try_lu;
1467 } else 1454 } else
1468 - h3270.connected_lu = CN;  
1469 - status_lu(&h3270,h3270.connected_lu); 1455 + session->connected_lu = CN;
  1456 + status_lu(session,session->connected_lu);
1470 1457
1471 tb_len = 4 + tt_len + 2; 1458 tb_len = 4 + tt_len + 2;
1472 tt_out = lib3270_malloc(tb_len + 1); 1459 tt_out = lib3270_malloc(tb_len + 1);
1473 (void) sprintf(tt_out, "%c%c%c%c%s%s%s%c%c", 1460 (void) sprintf(tt_out, "%c%c%c%c%s%s%s%c%c",
1474 IAC, SB, TELOPT_TTYPE, TELQUAL_IS, 1461 IAC, SB, TELOPT_TTYPE, TELQUAL_IS,
1475 - h3270.termtype, 1462 + session->termtype,
1476 (try_lu != CN && *try_lu) ? "@" : "", 1463 (try_lu != CN && *try_lu) ? "@" : "",
1477 (try_lu != CN && *try_lu) ? try_lu : "", 1464 (try_lu != CN && *try_lu) ? try_lu : "",
1478 IAC, SE); 1465 IAC, SE);
@@ -1569,7 +1556,7 @@ backoff_tn3270e(const char *why) @@ -1569,7 +1556,7 @@ backoff_tn3270e(const char *why)
1569 1556
1570 /* Reset our internal state. */ 1557 /* Reset our internal state. */
1571 myopts[TELOPT_TN3270E] = 0; 1558 myopts[TELOPT_TN3270E] = 0;
1572 - check_in3270(); 1559 + check_in3270(&h3270);
1573 } 1560 }
1574 1561
1575 /* 1562 /*
@@ -1706,7 +1693,7 @@ tn3270e_negotiate(void) @@ -1706,7 +1693,7 @@ tn3270e_negotiate(void)
1706 tn3270e_subneg_send(TN3270E_OP_IS, e_funcs); 1693 tn3270e_subneg_send(TN3270E_OP_IS, e_funcs);
1707 tn3270e_negotiated = 1; 1694 tn3270e_negotiated = 1;
1708 trace_dsn("TN3270E option negotiation complete.\n"); 1695 trace_dsn("TN3270E option negotiation complete.\n");
1709 - check_in3270(); 1696 + check_in3270(&h3270);
1710 } else { 1697 } else {
1711 /* 1698 /*
1712 * They want us to do something we can't. 1699 * They want us to do something we can't.
@@ -1743,7 +1730,7 @@ tn3270e_negotiate(void) @@ -1743,7 +1730,7 @@ tn3270e_negotiate(void)
1743 } 1730 }
1744 tn3270e_negotiated = 1; 1731 tn3270e_negotiated = 1;
1745 trace_dsn("TN3270E option negotiation complete.\n"); 1732 trace_dsn("TN3270E option negotiation complete.\n");
1746 - check_in3270(); 1733 + check_in3270(&h3270);
1747 break; 1734 break;
1748 1735
1749 default: 1736 default:
@@ -1894,7 +1881,7 @@ process_eor(void) @@ -1894,7 +1881,7 @@ process_eor(void)
1894 !tn3270e_bound) 1881 !tn3270e_bound)
1895 return 0; 1882 return 0;
1896 tn3270e_submode = E_3270; 1883 tn3270e_submode = E_3270;
1897 - check_in3270(); 1884 + check_in3270(&h3270);
1898 response_required = h->response_flag; 1885 response_required = h->response_flag;
1899 rv = process_ds(ibuf + EH_SIZE, 1886 rv = process_ds(ibuf + EH_SIZE,
1900 (ibptr - ibuf) - EH_SIZE); 1887 (ibptr - ibuf) - EH_SIZE);
@@ -1912,7 +1899,7 @@ process_eor(void) @@ -1912,7 +1899,7 @@ process_eor(void)
1912 process_bind(ibuf + EH_SIZE, (ibptr - ibuf) - EH_SIZE); 1899 process_bind(ibuf + EH_SIZE, (ibptr - ibuf) - EH_SIZE);
1913 trace_dsn("< BIND PLU-name '%s'\n", plu_name); 1900 trace_dsn("< BIND PLU-name '%s'\n", plu_name);
1914 tn3270e_bound = 1; 1901 tn3270e_bound = 1;
1915 - check_in3270(); 1902 + check_in3270(&h3270);
1916 return 0; 1903 return 0;
1917 case TN3270E_DT_UNBIND: 1904 case TN3270E_DT_UNBIND:
1918 if (!(e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE))) 1905 if (!(e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE)))
@@ -1920,12 +1907,12 @@ process_eor(void) @@ -1920,12 +1907,12 @@ process_eor(void)
1920 tn3270e_bound = 0; 1907 tn3270e_bound = 0;
1921 if (tn3270e_submode == E_3270) 1908 if (tn3270e_submode == E_3270)
1922 tn3270e_submode = E_NONE; 1909 tn3270e_submode = E_NONE;
1923 - check_in3270(); 1910 + check_in3270(&h3270);
1924 return 0; 1911 return 0;
1925 case TN3270E_DT_NVT_DATA: 1912 case TN3270E_DT_NVT_DATA:
1926 /* In tn3270e NVT mode */ 1913 /* In tn3270e NVT mode */
1927 tn3270e_submode = E_NVT; 1914 tn3270e_submode = E_NVT;
1928 - check_in3270(); 1915 + check_in3270(&h3270);
1929 for (s = ibuf; s < ibptr; s++) { 1916 for (s = ibuf; s < ibptr; s++) {
1930 ansi_process(*s++); 1917 ansi_process(*s++);
1931 } 1918 }
@@ -1934,7 +1921,7 @@ process_eor(void) @@ -1934,7 +1921,7 @@ process_eor(void)
1934 if (!(e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE))) 1921 if (!(e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE)))
1935 return 0; 1922 return 0;
1936 tn3270e_submode = E_SSCP; 1923 tn3270e_submode = E_SSCP;
1937 - check_in3270(); 1924 + check_in3270(&h3270);
1938 ctlr_write_sscp_lu(ibuf + EH_SIZE, 1925 ctlr_write_sscp_lu(ibuf + EH_SIZE,
1939 (ibptr - ibuf) - EH_SIZE); 1926 (ibptr - ibuf) - EH_SIZE);
1940 return 0; 1927 return 0;
@@ -2407,9 +2394,10 @@ do_lnext(char c) @@ -2407,9 +2394,10 @@ do_lnext(char c)
2407 * Check for switches between NVT, SSCP-LU and 3270 modes. 2394 * Check for switches between NVT, SSCP-LU and 3270 modes.
2408 */ 2395 */
2409 static void 2396 static void
2410 -check_in3270(void) 2397 +check_in3270(H3270 *session)
2411 { 2398 {
2412 LIB3270_CSTATE new_cstate = NOT_CONNECTED; 2399 LIB3270_CSTATE new_cstate = NOT_CONNECTED;
  2400 +
2413 #if defined(X3270_TRACE) /*[*/ 2401 #if defined(X3270_TRACE) /*[*/
2414 static const char *state_name[] = { 2402 static const char *state_name[] = {
2415 "unconnected", 2403 "unconnected",
@@ -2451,14 +2439,14 @@ check_in3270(void) @@ -2451,14 +2439,14 @@ check_in3270(void)
2451 hisopts[TELOPT_BINARY] && 2439 hisopts[TELOPT_BINARY] &&
2452 hisopts[TELOPT_EOR]) { 2440 hisopts[TELOPT_EOR]) {
2453 new_cstate = CONNECTED_3270; 2441 new_cstate = CONNECTED_3270;
2454 - } else if (h3270.cstate == CONNECTED_INITIAL) { 2442 + } else if (session->cstate == CONNECTED_INITIAL) {
2455 /* Nothing has happened, yet. */ 2443 /* Nothing has happened, yet. */
2456 return; 2444 return;
2457 } else { 2445 } else {
2458 new_cstate = CONNECTED_ANSI; 2446 new_cstate = CONNECTED_ANSI;
2459 } 2447 }
2460 2448
2461 - if (new_cstate != h3270.cstate) { 2449 + if (new_cstate != session->cstate) {
2462 #if defined(X3270_TN3270E) /*[*/ 2450 #if defined(X3270_TN3270E) /*[*/
2463 int was_in_e = IN_E; 2451 int was_in_e = IN_E;
2464 #endif /*]*/ 2452 #endif /*]*/
@@ -2498,7 +2486,7 @@ check_in3270(void) @@ -2498,7 +2486,7 @@ check_in3270(void)
2498 } 2486 }
2499 #endif /*]*/ 2487 #endif /*]*/
2500 trace_dsn("Now operating in %s mode.\n",state_name[new_cstate]); 2488 trace_dsn("Now operating in %s mode.\n",state_name[new_cstate]);
2501 - host_in3270(&h3270,new_cstate); 2489 + host_in3270(session,new_cstate);
2502 } 2490 }
2503 } 2491 }
2504 2492
@@ -3017,14 +3005,14 @@ net_abort(void) @@ -3017,14 +3005,14 @@ net_abort(void)
3017 if (tn3270e_bound || 3005 if (tn3270e_bound ||
3018 !(e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE))) { 3006 !(e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE))) {
3019 tn3270e_submode = E_3270; 3007 tn3270e_submode = E_3270;
3020 - check_in3270(); 3008 + check_in3270(&h3270);
3021 } 3009 }
3022 break; 3010 break;
3023 case E_3270: 3011 case E_3270:
3024 net_rawout(buf, sizeof(buf)); 3012 net_rawout(buf, sizeof(buf));
3025 trace_dsn("SENT AO\n"); 3013 trace_dsn("SENT AO\n");
3026 tn3270e_submode = E_SSCP; 3014 tn3270e_submode = E_SSCP;
3027 - check_in3270(); 3015 + check_in3270(&h3270);
3028 break; 3016 break;
3029 } 3017 }
3030 } 3018 }