Commit 4ce1a163bbb0c2187bdaa39916c89bf73dca3843

Authored by perry.werneck@gmail.com
1 parent fa57e324

Movendo mais campos para a estrutura de controle de sessao

src/include/lib3270/session.h
@@ -185,6 +185,26 @@ @@ -185,6 +185,26 @@
185 int ibuf_size; /**< size of ibuf */ 185 int ibuf_size; /**< size of ibuf */
186 unsigned char * obuf; /**< 3270 output buffer */ 186 unsigned char * obuf; /**< 3270 output buffer */
187 unsigned char * obptr; 187 unsigned char * obptr;
  188 + time_t ns_time;
  189 + int ns_brcvd;
  190 + int ns_rrcvd;
  191 + int ns_bsent;
  192 + int ns_rsent;
  193 + struct timeval ds_ts;
  194 +
  195 + // 3270 input buffer
  196 + unsigned char * ibptr;
  197 + unsigned char * obuf_base;
  198 + int obuf_size;
  199 + unsigned char * netrbuf;
  200 +
  201 + // network input buffer
  202 + unsigned char * sbbuf;
  203 +
  204 + // telnet sub-option buffer
  205 + unsigned char * sbptr;
  206 + unsigned char telnet_state;
  207 + char ttype_tmpval[13];
188 208
189 unsigned char myopts[LIB3270_TELNET_N_OPTS]; 209 unsigned char myopts[LIB3270_TELNET_N_OPTS];
190 unsigned char hisopts[LIB3270_TELNET_N_OPTS]; 210 unsigned char hisopts[LIB3270_TELNET_N_OPTS];
src/lib3270/telnet.c
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin 18 * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19 * St, Fifth Floor, Boston, MA 02110-1301 USA 19 * St, Fifth Floor, Boston, MA 02110-1301 USA
20 * 20 *
21 - * Este programa está nomeado como telnet.c e possui 3477 linhas de código. 21 + * Este programa está nomeado como telnet.c e possui - linhas de código.
22 * 22 *
23 * Contatos: 23 * Contatos:
24 * 24 *
@@ -116,11 +116,11 @@ @@ -116,11 +116,11 @@
116 116
117 /* Globals */ 117 /* Globals */
118 // char *hostname = CN; 118 // char *hostname = CN;
119 -time_t ns_time;  
120 -int ns_brcvd;  
121 -int ns_rrcvd;  
122 -int ns_bsent;  
123 -int ns_rsent; 119 +// time_t ns_time;
  120 +//int ns_brcvd;
  121 +//int ns_rrcvd;
  122 +//int ns_bsent;
  123 +//int ns_rsent;
124 // unsigned char *obuf; /* 3270 output buffer */ 124 // unsigned char *obuf; /* 3270 output buffer */
125 // unsigned char *obptr = (unsigned char *) NULL; 125 // unsigned char *obptr = (unsigned char *) NULL;
126 //int linemode = 1; 126 //int linemode = 1;
@@ -133,7 +133,7 @@ Boolean local_process = False; @@ -133,7 +133,7 @@ Boolean local_process = False;
133 */ 133 */
134 134
135 /* Externals */ 135 /* Externals */
136 -extern struct timeval ds_ts; 136 +// extern struct timeval ds_ts;
137 137
138 /* Statics */ 138 /* Statics */
139 // static int sock = -1; /* active socket */ 139 // static int sock = -1; /* active socket */
@@ -153,18 +153,18 @@ extern struct timeval ds_ts; @@ -153,18 +153,18 @@ extern struct timeval ds_ts;
153 // static int ibuf_size = 0; /* size of ibuf */ 153 // static int ibuf_size = 0; /* size of ibuf */
154 154
155 /* 3270 input buffer */ 155 /* 3270 input buffer */
156 -static unsigned char *ibptr;  
157 -static unsigned char *obuf_base = (unsigned char *)NULL;  
158 -static int obuf_size = 0;  
159 -static unsigned char *netrbuf = (unsigned char *)NULL; 156 +// static unsigned char *ibptr;
  157 +// static unsigned char *obuf_base = (unsigned char *)NULL;
  158 +// static int obuf_size = 0;
  159 +// static unsigned char *netrbuf = (unsigned char *)NULL;
160 160
161 /* network input buffer */ 161 /* network input buffer */
162 -static unsigned char *sbbuf = (unsigned char *)NULL; 162 +// static unsigned char *sbbuf = (unsigned char *)NULL;
163 163
164 /* telnet sub-option buffer */ 164 /* telnet sub-option buffer */
165 -static unsigned char *sbptr;  
166 -static unsigned char telnet_state;  
167 -static char ttype_tmpval[13]; 165 +// static unsigned char *sbptr;
  166 +// static unsigned char telnet_state;
  167 +// static char ttype_tmpval[13];
168 168
169 #if defined(X3270_TN3270E) /*[*/ 169 #if defined(X3270_TN3270E) /*[*/
170 static unsigned long e_funcs; /* negotiated TN3270E functions */ 170 static unsigned long e_funcs; /* negotiated TN3270E functions */
@@ -511,8 +511,8 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo @@ -511,8 +511,8 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo
511 sockstart(session); 511 sockstart(session);
512 #endif 512 #endif
513 513
514 - if (netrbuf == (unsigned char *)NULL)  
515 - netrbuf = (unsigned char *)lib3270_malloc(BUFSZ); 514 + if (session->netrbuf == (unsigned char *)NULL)
  515 + session->netrbuf = (unsigned char *)lib3270_malloc(BUFSZ);
516 516
517 #if defined(X3270_ANSI) /*[*/ 517 #if defined(X3270_ANSI) /*[*/
518 if (!t_valid) 518 if (!t_valid)
@@ -704,8 +704,8 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo @@ -704,8 +704,8 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo
704 /* set up temporary termtype */ 704 /* set up temporary termtype */
705 if (session->termname == CN && session->std_ds_host) 705 if (session->termname == CN && session->std_ds_host)
706 { 706 {
707 - sprintf(ttype_tmpval, "IBM-327%c-%d",session->m3279 ? '9' : '8', session->model_num);  
708 - session->termtype = ttype_tmpval; 707 + sprintf(session->ttype_tmpval, "IBM-327%c-%d",session->m3279 ? '9' : '8', session->model_num);
  708 + session->termtype = session->ttype_tmpval;
709 } 709 }
710 710
711 /* all done */ 711 /* all done */
@@ -876,16 +876,16 @@ static void net_connected(H3270 *session) @@ -876,16 +876,16 @@ static void net_connected(H3270 *session)
876 #if defined(HAVE_LIBSSL) /*[*/ 876 #if defined(HAVE_LIBSSL) /*[*/
877 need_tls_follows = False; 877 need_tls_follows = False;
878 #endif /*]*/ 878 #endif /*]*/
879 - telnet_state = TNS_DATA;  
880 - ibptr = h3270.ibuf; 879 + h3270.telnet_state = TNS_DATA;
  880 + h3270.ibptr = h3270.ibuf;
881 881
882 /* clear statistics and flags */ 882 /* clear statistics and flags */
883 - (void) time(&ns_time);  
884 - ns_brcvd = 0;  
885 - ns_rrcvd = 0;  
886 - ns_bsent = 0;  
887 - ns_rsent = 0;  
888 - session->syncing = 0; 883 + time(&session->ns_time);
  884 + session->ns_brcvd = 0;
  885 + session->ns_rrcvd = 0;
  886 + session->ns_bsent = 0;
  887 + session->ns_rsent = 0;
  888 + session->syncing = 0;
889 tn3270e_negotiated = 0; 889 tn3270e_negotiated = 0;
890 tn3270e_submode = E_NONE; 890 tn3270e_submode = E_NONE;
891 tn3270e_bound = 0; 891 tn3270e_bound = 0;
@@ -1015,11 +1015,11 @@ void net_input(H3270 *session) @@ -1015,11 +1015,11 @@ void net_input(H3270 *session)
1015 1015
1016 #if defined(HAVE_LIBSSL) 1016 #if defined(HAVE_LIBSSL)
1017 if (session->ssl_con != NULL) 1017 if (session->ssl_con != NULL)
1018 - nr = SSL_read(session->ssl_con, (char *) netrbuf, BUFSZ); 1018 + nr = SSL_read(session->ssl_con, (char *) session->netrbuf, BUFSZ);
1019 else 1019 else
1020 - nr = recv(session->sock, (char *) netrbuf, BUFSZ, 0); 1020 + nr = recv(session->sock, (char *) session->netrbuf, BUFSZ, 0);
1021 #else 1021 #else
1022 - nr = recv(session->sock, (char *) netrbuf, BUFSZ, 0); 1022 + nr = recv(session->sock, (char *) session->netrbuf, BUFSZ, 0);
1023 #endif // HAVE_LIBSSL 1023 #endif // HAVE_LIBSSL
1024 1024
1025 if (nr < 0) 1025 if (nr < 0)
@@ -1087,10 +1087,10 @@ void net_input(H3270 *session) @@ -1087,10 +1087,10 @@ void net_input(H3270 *session)
1087 net_connected(session); 1087 net_connected(session);
1088 } 1088 }
1089 1089
1090 - trace_netdata('<', netrbuf, nr); 1090 + trace_netdata('<', session->netrbuf, nr);
1091 1091
1092 - ns_brcvd += nr;  
1093 - for (cp = netrbuf; cp < (netrbuf + nr); cp++) 1092 + session->ns_brcvd += nr;
  1093 + for (cp = session->netrbuf; cp < (session->netrbuf + nr); cp++)
1094 { 1094 {
1095 if (telnet_fsm(session,*cp)) 1095 if (telnet_fsm(session,*cp))
1096 { 1096 {
@@ -1181,10 +1181,10 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1181,10 +1181,10 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1181 int sl; 1181 int sl;
1182 #endif /*]*/ 1182 #endif /*]*/
1183 1183
1184 - switch (telnet_state) { 1184 + switch (session->telnet_state) {
1185 case TNS_DATA: /* normal data processing */ 1185 case TNS_DATA: /* normal data processing */
1186 if (c == IAC) { /* got a telnet command */ 1186 if (c == IAC) { /* got a telnet command */
1187 - telnet_state = TNS_IAC; 1187 + session->telnet_state = TNS_IAC;
1188 #if defined(X3270_ANSI) /*[*/ 1188 #if defined(X3270_ANSI) /*[*/
1189 if (ansi_data) { 1189 if (ansi_data) {
1190 trace_dsn("\n"); 1190 trace_dsn("\n");
@@ -1252,36 +1252,36 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1252,36 +1252,36 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1252 #endif /*]*/ 1252 #endif /*]*/
1253 } else 1253 } else
1254 store3270in(c); 1254 store3270in(c);
1255 - telnet_state = TNS_DATA; 1255 + h3270.telnet_state = TNS_DATA;
1256 break; 1256 break;
1257 case EOR: /* eor, process accumulated input */ 1257 case EOR: /* eor, process accumulated input */
1258 if (IN_3270 || (IN_E && tn3270e_negotiated)) { 1258 if (IN_3270 || (IN_E && tn3270e_negotiated)) {
1259 - ns_rrcvd++; 1259 + h3270.ns_rrcvd++;
1260 if (process_eor()) 1260 if (process_eor())
1261 return -1; 1261 return -1;
1262 } else 1262 } else
1263 Warning(NULL, _( "EOR received when not in 3270 mode, ignored." )); 1263 Warning(NULL, _( "EOR received when not in 3270 mode, ignored." ));
1264 trace_dsn("RCVD EOR\n"); 1264 trace_dsn("RCVD EOR\n");
1265 - ibptr = h3270.ibuf;  
1266 - telnet_state = TNS_DATA; 1265 + h3270.ibptr = h3270.ibuf;
  1266 + h3270.telnet_state = TNS_DATA;
1267 break; 1267 break;
1268 case WILL: 1268 case WILL:
1269 - telnet_state = TNS_WILL; 1269 + h3270.telnet_state = TNS_WILL;
1270 break; 1270 break;
1271 case WONT: 1271 case WONT:
1272 - telnet_state = TNS_WONT; 1272 + h3270.telnet_state = TNS_WONT;
1273 break; 1273 break;
1274 case DO: 1274 case DO:
1275 - telnet_state = TNS_DO; 1275 + h3270.telnet_state = TNS_DO;
1276 break; 1276 break;
1277 case DONT: 1277 case DONT:
1278 - telnet_state = TNS_DONT; 1278 + h3270.telnet_state = TNS_DONT;
1279 break; 1279 break;
1280 case SB: 1280 case SB:
1281 - telnet_state = TNS_SB;  
1282 - if (sbbuf == (unsigned char *)NULL)  
1283 - sbbuf = (unsigned char *)lib3270_malloc(1024);  
1284 - sbptr = sbbuf; 1281 + h3270.telnet_state = TNS_SB;
  1282 + if (session->sbbuf == (unsigned char *)NULL)
  1283 + session->sbbuf = (unsigned char *)lib3270_malloc(1024);
  1284 + session->sbptr = session->sbbuf;
1285 break; 1285 break;
1286 case DM: 1286 case DM:
1287 trace_dsn("\n"); 1287 trace_dsn("\n");
@@ -1290,16 +1290,16 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1290,16 +1290,16 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1290 session->syncing = 0; 1290 session->syncing = 0;
1291 x_except_on(session); 1291 x_except_on(session);
1292 } 1292 }
1293 - telnet_state = TNS_DATA; 1293 + h3270.telnet_state = TNS_DATA;
1294 break; 1294 break;
1295 case GA: 1295 case GA:
1296 case NOP: 1296 case NOP:
1297 trace_dsn("\n"); 1297 trace_dsn("\n");
1298 - telnet_state = TNS_DATA; 1298 + h3270.telnet_state = TNS_DATA;
1299 break; 1299 break;
1300 default: 1300 default:
1301 trace_dsn("???\n"); 1301 trace_dsn("???\n");
1302 - telnet_state = TNS_DATA; 1302 + h3270.telnet_state = TNS_DATA;
1303 break; 1303 break;
1304 } 1304 }
1305 break; 1305 break;
@@ -1346,7 +1346,7 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1346,7 +1346,7 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1346 trace_dsn("SENT %s %s\n", cmd(DONT), opt(c)); 1346 trace_dsn("SENT %s %s\n", cmd(DONT), opt(c));
1347 break; 1347 break;
1348 } 1348 }
1349 - telnet_state = TNS_DATA; 1349 + h3270.telnet_state = TNS_DATA;
1350 break; 1350 break;
1351 case TNS_WONT: /* telnet WONT DO OPTION command */ 1351 case TNS_WONT: /* telnet WONT DO OPTION command */
1352 trace_dsn("%s\n", opt(c)); 1352 trace_dsn("%s\n", opt(c));
@@ -1358,7 +1358,7 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1358,7 +1358,7 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1358 check_in3270(&h3270); 1358 check_in3270(&h3270);
1359 check_linemode(False); 1359 check_linemode(False);
1360 } 1360 }
1361 - telnet_state = TNS_DATA; 1361 + h3270.telnet_state = TNS_DATA;
1362 break; 1362 break;
1363 case TNS_DO: /* telnet PLEASE DO OPTION command */ 1363 case TNS_DO: /* telnet PLEASE DO OPTION command */
1364 trace_dsn("%s\n", opt(c)); 1364 trace_dsn("%s\n", opt(c));
@@ -1419,7 +1419,7 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1419,7 +1419,7 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1419 trace_dsn("SENT %s %s\n", cmd(WONT), opt(c)); 1419 trace_dsn("SENT %s %s\n", cmd(WONT), opt(c));
1420 break; 1420 break;
1421 } 1421 }
1422 - telnet_state = TNS_DATA; 1422 + h3270.telnet_state = TNS_DATA;
1423 break; 1423 break;
1424 case TNS_DONT: /* telnet PLEASE DON'T DO OPTION command */ 1424 case TNS_DONT: /* telnet PLEASE DON'T DO OPTION command */
1425 trace_dsn("%s\n", opt(c)); 1425 trace_dsn("%s\n", opt(c));
@@ -1431,25 +1431,25 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1431,25 +1431,25 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1431 check_in3270(&h3270); 1431 check_in3270(&h3270);
1432 check_linemode(False); 1432 check_linemode(False);
1433 } 1433 }
1434 - telnet_state = TNS_DATA; 1434 + h3270.telnet_state = TNS_DATA;
1435 break; 1435 break;
1436 case TNS_SB: /* telnet sub-option string command */ 1436 case TNS_SB: /* telnet sub-option string command */
1437 if (c == IAC) 1437 if (c == IAC)
1438 - telnet_state = TNS_SB_IAC; 1438 + h3270.telnet_state = TNS_SB_IAC;
1439 else 1439 else
1440 - *sbptr++ = c; 1440 + *h3270.sbptr++ = c;
1441 break; 1441 break;
1442 case TNS_SB_IAC: /* telnet sub-option string command */ 1442 case TNS_SB_IAC: /* telnet sub-option string command */
1443 - *sbptr++ = c; 1443 + *h3270.sbptr++ = c;
1444 if (c == SE) { 1444 if (c == SE) {
1445 - telnet_state = TNS_DATA;  
1446 - if (sbbuf[0] == TELOPT_TTYPE &&  
1447 - sbbuf[1] == TELQUAL_SEND) { 1445 + h3270.telnet_state = TNS_DATA;
  1446 + if (session->sbbuf[0] == TELOPT_TTYPE &&
  1447 + session->sbbuf[1] == TELQUAL_SEND) {
1448 int tt_len, tb_len; 1448 int tt_len, tb_len;
1449 char *tt_out; 1449 char *tt_out;
1450 1450
1451 - trace_dsn("%s %s\n", opt(sbbuf[0]),  
1452 - telquals[sbbuf[1]]); 1451 + trace_dsn("%s %s\n", opt(session->sbbuf[0]),
  1452 + telquals[session->sbbuf[1]]);
1453 if (lus != (char **)NULL && try_lu == CN) { 1453 if (lus != (char **)NULL && try_lu == CN) {
1454 /* None of the LUs worked. */ 1454 /* None of the LUs worked. */
1455 popup_an_error(NULL,"Cannot connect to specified LU"); 1455 popup_an_error(NULL,"Cannot connect to specified LU");
@@ -1486,7 +1486,7 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1486,7 +1486,7 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1486 } 1486 }
1487 #if defined(X3270_TN3270E) /*[*/ 1487 #if defined(X3270_TN3270E) /*[*/
1488 else if (h3270.myopts[TELOPT_TN3270E] && 1488 else if (h3270.myopts[TELOPT_TN3270E] &&
1489 - sbbuf[0] == TELOPT_TN3270E) { 1489 + h3270.sbbuf[0] == TELOPT_TN3270E) {
1490 if (tn3270e_negotiate()) 1490 if (tn3270e_negotiate())
1491 return -1; 1491 return -1;
1492 } 1492 }
@@ -1494,13 +1494,13 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1494,13 +1494,13 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1494 #if defined(HAVE_LIBSSL) /*[*/ 1494 #if defined(HAVE_LIBSSL) /*[*/
1495 else if (need_tls_follows && 1495 else if (need_tls_follows &&
1496 h3270.myopts[TELOPT_STARTTLS] && 1496 h3270.myopts[TELOPT_STARTTLS] &&
1497 - sbbuf[0] == TELOPT_STARTTLS) {  
1498 - continue_tls(sbbuf, sbptr - sbbuf); 1497 + h3270.sbbuf[0] == TELOPT_STARTTLS) {
  1498 + continue_tls(h3270.sbbuf, h3270.sbptr - h3270.sbbuf);
1499 } 1499 }
1500 #endif /*]*/ 1500 #endif /*]*/
1501 1501
1502 } else { 1502 } else {
1503 - telnet_state = TNS_SB; 1503 + h3270.telnet_state = TNS_SB;
1504 } 1504 }
1505 break; 1505 break;
1506 } 1506 }
@@ -1583,24 +1583,24 @@ tn3270e_negotiate(void) @@ -1583,24 +1583,24 @@ tn3270e_negotiate(void)
1583 1583
1584 /* Find out how long the subnegotiation buffer is. */ 1584 /* Find out how long the subnegotiation buffer is. */
1585 for (sblen = 0; ; sblen++) { 1585 for (sblen = 0; ; sblen++) {
1586 - if (sbbuf[sblen] == SE) 1586 + if (h3270.sbbuf[sblen] == SE)
1587 break; 1587 break;
1588 } 1588 }
1589 1589
1590 trace_dsn("TN3270E "); 1590 trace_dsn("TN3270E ");
1591 1591
1592 - switch (sbbuf[1]) { 1592 + switch (h3270.sbbuf[1]) {
1593 1593
1594 case TN3270E_OP_SEND: 1594 case TN3270E_OP_SEND:
1595 1595
1596 - if (sbbuf[2] == TN3270E_OP_DEVICE_TYPE) { 1596 + if (h3270.sbbuf[2] == TN3270E_OP_DEVICE_TYPE) {
1597 1597
1598 /* Host wants us to send our device type. */ 1598 /* Host wants us to send our device type. */
1599 trace_dsn("SEND DEVICE-TYPE SE\n"); 1599 trace_dsn("SEND DEVICE-TYPE SE\n");
1600 1600
1601 tn3270e_request(); 1601 tn3270e_request();
1602 } else { 1602 } else {
1603 - trace_dsn("SEND ??%u SE\n", sbbuf[2]); 1603 + trace_dsn("SEND ??%u SE\n", h3270.sbbuf[2]);
1604 } 1604 }
1605 break; 1605 break;
1606 1606
@@ -1609,7 +1609,7 @@ tn3270e_negotiate(void) @@ -1609,7 +1609,7 @@ tn3270e_negotiate(void)
1609 /* Device type negotiation. */ 1609 /* Device type negotiation. */
1610 trace_dsn("DEVICE-TYPE "); 1610 trace_dsn("DEVICE-TYPE ");
1611 1611
1612 - switch (sbbuf[2]) { 1612 + switch (h3270.sbbuf[2]) {
1613 case TN3270E_OP_IS: { 1613 case TN3270E_OP_IS: {
1614 int tnlen, snlen; 1614 int tnlen, snlen;
1615 1615
@@ -1617,24 +1617,24 @@ tn3270e_negotiate(void) @@ -1617,24 +1617,24 @@ tn3270e_negotiate(void)
1617 1617
1618 /* Isolate the terminal type and session. */ 1618 /* Isolate the terminal type and session. */
1619 tnlen = 0; 1619 tnlen = 0;
1620 - while (sbbuf[3+tnlen] != SE &&  
1621 - sbbuf[3+tnlen] != TN3270E_OP_CONNECT) 1620 + while (h3270.sbbuf[3+tnlen] != SE &&
  1621 + h3270.sbbuf[3+tnlen] != TN3270E_OP_CONNECT)
1622 tnlen++; 1622 tnlen++;
1623 snlen = 0; 1623 snlen = 0;
1624 - if (sbbuf[3+tnlen] == TN3270E_OP_CONNECT) {  
1625 - while(sbbuf[3+tnlen+1+snlen] != SE) 1624 + if (h3270.sbbuf[3+tnlen] == TN3270E_OP_CONNECT) {
  1625 + while(h3270.sbbuf[3+tnlen+1+snlen] != SE)
1626 snlen++; 1626 snlen++;
1627 } 1627 }
1628 trace_dsn("IS %.*s CONNECT %.*s SE\n", 1628 trace_dsn("IS %.*s CONNECT %.*s SE\n",
1629 - tnlen, &sbbuf[3],  
1630 - snlen, &sbbuf[3+tnlen+1]); 1629 + tnlen, &h3270.sbbuf[3],
  1630 + snlen, &h3270.sbbuf[3+tnlen+1]);
1631 1631
1632 /* Remember the LU. */ 1632 /* Remember the LU. */
1633 if (tnlen) { 1633 if (tnlen) {
1634 if (tnlen > LU_MAX) 1634 if (tnlen > LU_MAX)
1635 tnlen = LU_MAX; 1635 tnlen = LU_MAX;
1636 (void)strncpy(reported_type, 1636 (void)strncpy(reported_type,
1637 - (char *)&sbbuf[3], tnlen); 1637 + (char *)&h3270.sbbuf[3], tnlen);
1638 reported_type[tnlen] = '\0'; 1638 reported_type[tnlen] = '\0';
1639 h3270.connected_type = reported_type; 1639 h3270.connected_type = reported_type;
1640 } 1640 }
@@ -1642,7 +1642,7 @@ tn3270e_negotiate(void) @@ -1642,7 +1642,7 @@ tn3270e_negotiate(void)
1642 if (snlen > LU_MAX) 1642 if (snlen > LU_MAX)
1643 snlen = LU_MAX; 1643 snlen = LU_MAX;
1644 (void)strncpy(reported_lu, 1644 (void)strncpy(reported_lu,
1645 - (char *)&sbbuf[3+tnlen+1], snlen); 1645 + (char *)&h3270.sbbuf[3+tnlen+1], snlen);
1646 reported_lu[snlen] = '\0'; 1646 reported_lu[snlen] = '\0';
1647 h3270.connected_lu = reported_lu; 1647 h3270.connected_lu = reported_lu;
1648 status_lu(&h3270,h3270.connected_lu); 1648 status_lu(&h3270,h3270.connected_lu);
@@ -1656,11 +1656,10 @@ tn3270e_negotiate(void) @@ -1656,11 +1656,10 @@ tn3270e_negotiate(void)
1656 1656
1657 /* Device type failure. */ 1657 /* Device type failure. */
1658 1658
1659 - trace_dsn("REJECT REASON %s SE\n", rsn(sbbuf[4]));  
1660 - if (sbbuf[4] == TN3270E_REASON_INV_DEVICE_TYPE ||  
1661 - sbbuf[4] == TN3270E_REASON_UNSUPPORTED_REQ) {  
1662 - backoff_tn3270e("Host rejected device type or "  
1663 - "request type"); 1659 + trace_dsn("REJECT REASON %s SE\n", rsn(h3270.sbbuf[4]));
  1660 + if (h3270.sbbuf[4] == TN3270E_REASON_INV_DEVICE_TYPE ||
  1661 + h3270.sbbuf[4] == TN3270E_REASON_UNSUPPORTED_REQ) {
  1662 + backoff_tn3270e(_( "Host rejected device type or request type" ));
1664 break; 1663 break;
1665 } 1664 }
1666 1665
@@ -1670,14 +1669,14 @@ tn3270e_negotiate(void) @@ -1670,14 +1669,14 @@ tn3270e_negotiate(void)
1670 tn3270e_request(); 1669 tn3270e_request();
1671 } else if (lus != (char **)NULL) { 1670 } else if (lus != (char **)NULL) {
1672 /* No more LUs to try. Give up. */ 1671 /* No more LUs to try. Give up. */
1673 - backoff_tn3270e("Host rejected resource(s)"); 1672 + backoff_tn3270e(_("Host rejected resource(s)"));
1674 } else { 1673 } else {
1675 - backoff_tn3270e("Device type rejected"); 1674 + backoff_tn3270e(_("Device type rejected"));
1676 } 1675 }
1677 1676
1678 break; 1677 break;
1679 default: 1678 default:
1680 - trace_dsn("??%u SE\n", sbbuf[2]); 1679 + trace_dsn("??%u SE\n", h3270.sbbuf[2]);
1681 break; 1680 break;
1682 } 1681 }
1683 break; 1682 break;
@@ -1687,15 +1686,15 @@ tn3270e_negotiate(void) @@ -1687,15 +1686,15 @@ tn3270e_negotiate(void)
1687 /* Functions negotiation. */ 1686 /* Functions negotiation. */
1688 trace_dsn("FUNCTIONS "); 1687 trace_dsn("FUNCTIONS ");
1689 1688
1690 - switch (sbbuf[2]) { 1689 + switch (h3270.sbbuf[2]) {
1691 1690
1692 case TN3270E_OP_REQUEST: 1691 case TN3270E_OP_REQUEST:
1693 1692
1694 /* Host is telling us what functions they want. */ 1693 /* Host is telling us what functions they want. */
1695 trace_dsn("REQUEST %s SE\n", 1694 trace_dsn("REQUEST %s SE\n",
1696 - tn3270e_function_names(sbbuf+3, sblen-3)); 1695 + tn3270e_function_names(h3270.sbbuf+3, sblen-3));
1697 1696
1698 - e_rcvd = tn3270e_fdecode(sbbuf+3, sblen-3); 1697 + e_rcvd = tn3270e_fdecode(h3270.sbbuf+3, sblen-3);
1699 if ((e_rcvd == e_funcs) || (e_funcs & ~e_rcvd)) { 1698 if ((e_rcvd == e_funcs) || (e_funcs & ~e_rcvd)) {
1700 /* They want what we want, or less. Done. */ 1699 /* They want what we want, or less. Done. */
1701 e_funcs = e_rcvd; 1700 e_funcs = e_rcvd;
@@ -1717,8 +1716,8 @@ tn3270e_negotiate(void) @@ -1717,8 +1716,8 @@ tn3270e_negotiate(void)
1717 1716
1718 /* They accept our last request, or a subset thereof. */ 1717 /* They accept our last request, or a subset thereof. */
1719 trace_dsn("IS %s SE\n", 1718 trace_dsn("IS %s SE\n",
1720 - tn3270e_function_names(sbbuf+3, sblen-3));  
1721 - e_rcvd = tn3270e_fdecode(sbbuf+3, sblen-3); 1719 + tn3270e_function_names(h3270.sbbuf+3, sblen-3));
  1720 + e_rcvd = tn3270e_fdecode(h3270.sbbuf+3, sblen-3);
1722 if (e_rcvd != e_funcs) { 1721 if (e_rcvd != e_funcs) {
1723 if (e_funcs & ~e_rcvd) { 1722 if (e_funcs & ~e_rcvd) {
1724 /* 1723 /*
@@ -1732,8 +1731,7 @@ tn3270e_negotiate(void) @@ -1732,8 +1731,7 @@ tn3270e_negotiate(void)
1732 * They've added something. Abandon 1731 * They've added something. Abandon
1733 * TN3270E, they're brain dead. 1732 * TN3270E, they're brain dead.
1734 */ 1733 */
1735 - backoff_tn3270e("Host illegally added "  
1736 - "function(s)"); 1734 + backoff_tn3270e("Host illegally added function(s)");
1737 break; 1735 break;
1738 } 1736 }
1739 } 1737 }
@@ -1743,13 +1741,13 @@ tn3270e_negotiate(void) @@ -1743,13 +1741,13 @@ tn3270e_negotiate(void)
1743 break; 1741 break;
1744 1742
1745 default: 1743 default:
1746 - trace_dsn("??%u SE\n", sbbuf[2]); 1744 + trace_dsn("??%u SE\n", h3270.sbbuf[2]);
1747 break; 1745 break;
1748 } 1746 }
1749 break; 1747 break;
1750 1748
1751 default: 1749 default:
1752 - trace_dsn("??%u SE\n", sbbuf[1]); 1750 + trace_dsn("??%u SE\n", h3270.sbbuf[1]);
1753 } 1751 }
1754 1752
1755 /* Good enough for now. */ 1753 /* Good enough for now. */
@@ -1869,7 +1867,7 @@ process_bind(unsigned char *buf, int buflen) @@ -1869,7 +1867,7 @@ process_bind(unsigned char *buf, int buflen)
1869 static int 1867 static int
1870 process_eor(void) 1868 process_eor(void)
1871 { 1869 {
1872 - if (h3270.syncing || !(ibptr - h3270.ibuf)) 1870 + if (h3270.syncing || !(h3270.ibptr - h3270.ibuf))
1873 return(0); 1871 return(0);
1874 1872
1875 #if defined(X3270_TN3270E) /*[*/ 1873 #if defined(X3270_TN3270E) /*[*/
@@ -1893,7 +1891,7 @@ process_eor(void) @@ -1893,7 +1891,7 @@ process_eor(void)
1893 check_in3270(&h3270); 1891 check_in3270(&h3270);
1894 response_required = h->response_flag; 1892 response_required = h->response_flag;
1895 rv = process_ds(h3270.ibuf + EH_SIZE, 1893 rv = process_ds(h3270.ibuf + EH_SIZE,
1896 - (ibptr - h3270.ibuf) - EH_SIZE); 1894 + (h3270.ibptr - h3270.ibuf) - EH_SIZE);
1897 if (rv < 0 && 1895 if (rv < 0 &&
1898 response_required != TN3270E_RSF_NO_RESPONSE) 1896 response_required != TN3270E_RSF_NO_RESPONSE)
1899 tn3270e_nak(rv); 1897 tn3270e_nak(rv);
@@ -1905,7 +1903,7 @@ process_eor(void) @@ -1905,7 +1903,7 @@ process_eor(void)
1905 case TN3270E_DT_BIND_IMAGE: 1903 case TN3270E_DT_BIND_IMAGE:
1906 if (!(e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE))) 1904 if (!(e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE)))
1907 return 0; 1905 return 0;
1908 - process_bind(h3270.ibuf + EH_SIZE, (ibptr - h3270.ibuf) - EH_SIZE); 1906 + process_bind(h3270.ibuf + EH_SIZE, (h3270.ibptr - h3270.ibuf) - EH_SIZE);
1909 trace_dsn("< BIND PLU-name '%s'\n", plu_name); 1907 trace_dsn("< BIND PLU-name '%s'\n", plu_name);
1910 tn3270e_bound = 1; 1908 tn3270e_bound = 1;
1911 check_in3270(&h3270); 1909 check_in3270(&h3270);
@@ -1922,7 +1920,7 @@ process_eor(void) @@ -1922,7 +1920,7 @@ process_eor(void)
1922 /* In tn3270e NVT mode */ 1920 /* In tn3270e NVT mode */
1923 tn3270e_submode = E_NVT; 1921 tn3270e_submode = E_NVT;
1924 check_in3270(&h3270); 1922 check_in3270(&h3270);
1925 - for (s = h3270.ibuf; s < ibptr; s++) { 1923 + for (s = h3270.ibuf; s < h3270.ibptr; s++) {
1926 ansi_process(*s++); 1924 ansi_process(*s++);
1927 } 1925 }
1928 return 0; 1926 return 0;
@@ -1931,7 +1929,7 @@ process_eor(void) @@ -1931,7 +1929,7 @@ process_eor(void)
1931 return 0; 1929 return 0;
1932 tn3270e_submode = E_SSCP; 1930 tn3270e_submode = E_SSCP;
1933 check_in3270(&h3270); 1931 check_in3270(&h3270);
1934 - ctlr_write_sscp_lu(&h3270, h3270.ibuf + EH_SIZE,(ibptr - h3270.ibuf) - EH_SIZE); 1932 + ctlr_write_sscp_lu(&h3270, h3270.ibuf + EH_SIZE,(h3270.ibptr - h3270.ibuf) - EH_SIZE);
1935 return 0; 1933 return 0;
1936 default: 1934 default:
1937 /* Should do something more extraordinary here. */ 1935 /* Should do something more extraordinary here. */
@@ -1940,7 +1938,7 @@ process_eor(void) @@ -1940,7 +1938,7 @@ process_eor(void)
1940 } else 1938 } else
1941 #endif /*]*/ 1939 #endif /*]*/
1942 { 1940 {
1943 - (void) process_ds(h3270.ibuf, ibptr - h3270.ibuf); 1941 + (void) process_ds(h3270.ibuf, h3270.ibptr - h3270.ibuf);
1944 } 1942 }
1945 return 0; 1943 return 0;
1946 } 1944 }
@@ -2050,7 +2048,7 @@ net_rawout(H3270 *session, unsigned const char *buf, int len) @@ -2050,7 +2048,7 @@ net_rawout(H3270 *session, unsigned const char *buf, int len)
2050 return; 2048 return;
2051 } 2049 }
2052 } 2050 }
2053 - ns_bsent += nw; 2051 + h3270.ns_bsent += nw;
2054 len -= nw; 2052 len -= nw;
2055 buf += nw; 2053 buf += nw;
2056 bot: 2054 bot:
@@ -2476,7 +2474,7 @@ check_in3270(H3270 *session) @@ -2476,7 +2474,7 @@ check_in3270(H3270 *session)
2476 { 2474 {
2477 h3270.ibuf = (unsigned char *) lib3270_malloc(BUFSIZ); 2475 h3270.ibuf = (unsigned char *) lib3270_malloc(BUFSIZ);
2478 h3270.ibuf_size = BUFSIZ; 2476 h3270.ibuf_size = BUFSIZ;
2479 - ibptr = h3270.ibuf; 2477 + h3270.ibptr = h3270.ibuf;
2480 } 2478 }
2481 2479
2482 #if defined(X3270_ANSI) /*[*/ 2480 #if defined(X3270_ANSI) /*[*/
@@ -2507,13 +2505,13 @@ check_in3270(H3270 *session) @@ -2507,13 +2505,13 @@ check_in3270(H3270 *session)
2507 static void 2505 static void
2508 store3270in(unsigned char c) 2506 store3270in(unsigned char c)
2509 { 2507 {
2510 - if (ibptr - h3270.ibuf >= h3270.ibuf_size) 2508 + if (h3270.ibptr - h3270.ibuf >= h3270.ibuf_size)
2511 { 2509 {
2512 h3270.ibuf_size += BUFSIZ; 2510 h3270.ibuf_size += BUFSIZ;
2513 h3270.ibuf = (unsigned char *) lib3270_realloc((char *) h3270.ibuf, h3270.ibuf_size); 2511 h3270.ibuf = (unsigned char *) lib3270_realloc((char *) h3270.ibuf, h3270.ibuf_size);
2514 - ibptr = h3270.ibuf + h3270.ibuf_size - BUFSIZ; 2512 + h3270.ibptr = h3270.ibuf + h3270.ibuf_size - BUFSIZ;
2515 } 2513 }
2516 - *ibptr++ = c; 2514 + *h3270.ibptr++ = c;
2517 } 2515 }
2518 2516
2519 /* 2517 /*
@@ -2527,18 +2525,17 @@ void space3270out(int n) @@ -2527,18 +2525,17 @@ void space3270out(int n)
2527 unsigned nc = 0; /* amount of data currently in obuf */ 2525 unsigned nc = 0; /* amount of data currently in obuf */
2528 unsigned more = 0; 2526 unsigned more = 0;
2529 2527
2530 - if (obuf_size) 2528 + if (h3270.obuf_size)
2531 nc = h3270.obptr - h3270.obuf; 2529 nc = h3270.obptr - h3270.obuf;
2532 2530
2533 - while ((nc + n + EH_SIZE) > (obuf_size + more)) { 2531 + while ((nc + n + EH_SIZE) > (h3270.obuf_size + more)) {
2534 more += BUFSIZ; 2532 more += BUFSIZ;
2535 } 2533 }
2536 2534
2537 if (more) { 2535 if (more) {
2538 - obuf_size += more;  
2539 - obuf_base = (unsigned char *)Realloc((char *)obuf_base,  
2540 - obuf_size);  
2541 - h3270.obuf = obuf_base + EH_SIZE; 2536 + h3270.obuf_size += more;
  2537 + h3270.obuf_base = (unsigned char *)Realloc((char *) h3270.obuf_base,h3270.obuf_size);
  2538 + h3270.obuf = h3270.obuf_base + EH_SIZE;
2542 h3270.obptr = h3270.obuf + nc; 2539 h3270.obptr = h3270.obuf + nc;
2543 } 2540 }
2544 } 2541 }
@@ -2645,11 +2642,11 @@ void trace_netdata(char direction, unsigned const char *buf, int len) @@ -2645,11 +2642,11 @@ void trace_netdata(char direction, unsigned const char *buf, int len)
2645 return; 2642 return;
2646 (void) gettimeofday(&ts, (struct timezone *)NULL); 2643 (void) gettimeofday(&ts, (struct timezone *)NULL);
2647 if (IN_3270) { 2644 if (IN_3270) {
2648 - tdiff = ((1.0e6 * (double)(ts.tv_sec - ds_ts.tv_sec)) +  
2649 - (double)(ts.tv_usec - ds_ts.tv_usec)) / 1.0e6; 2645 + tdiff = ((1.0e6 * (double)(ts.tv_sec - h3270.ds_ts.tv_sec)) +
  2646 + (double)(ts.tv_usec - h3270.ds_ts.tv_usec)) / 1.0e6;
2650 trace_dsn("%c +%gs\n", direction, tdiff); 2647 trace_dsn("%c +%gs\n", direction, tdiff);
2651 } 2648 }
2652 - ds_ts = ts; 2649 + h3270.ds_ts = ts;
2653 for (offset = 0; offset < len; offset++) { 2650 for (offset = 0; offset < len; offset++) {
2654 if (!(offset % LINEDUMP_MAX)) 2651 if (!(offset % LINEDUMP_MAX))
2655 trace_dsn("%s%c 0x%-3x ", 2652 trace_dsn("%s%c 0x%-3x ",
@@ -2677,7 +2674,7 @@ net_output(void) @@ -2677,7 +2674,7 @@ net_output(void)
2677 unsigned char *nxoptr, *xoptr; 2674 unsigned char *nxoptr, *xoptr;
2678 2675
2679 #if defined(X3270_TN3270E) /*[*/ 2676 #if defined(X3270_TN3270E) /*[*/
2680 -#define BSTART ((IN_TN3270E || IN_SSCP) ? obuf_base : h3270.obuf) 2677 +#define BSTART ((IN_TN3270E || IN_SSCP) ? h3270.obuf_base : h3270.obuf)
2681 #else /*][*/ 2678 #else /*][*/
2682 #define BSTART obuf 2679 #define BSTART obuf
2683 #endif /*]*/ 2680 #endif /*]*/
@@ -2685,7 +2682,7 @@ net_output(void) @@ -2685,7 +2682,7 @@ net_output(void)
2685 #if defined(X3270_TN3270E) /*[*/ 2682 #if defined(X3270_TN3270E) /*[*/
2686 /* Set the TN3720E header. */ 2683 /* Set the TN3720E header. */
2687 if (IN_TN3270E || IN_SSCP) { 2684 if (IN_TN3270E || IN_SSCP) {
2688 - tn3270e_header *h = (tn3270e_header *)obuf_base; 2685 + tn3270e_header *h = (tn3270e_header *) h3270.obuf_base;
2689 2686
2690 /* Check for sending a TN3270E response. */ 2687 /* Check for sending a TN3270E response. */
2691 if (response_required == TN3270E_RSF_ALWAYS_RESPONSE) { 2688 if (response_required == TN3270E_RSF_ALWAYS_RESPONSE) {
@@ -2732,7 +2729,7 @@ net_output(void) @@ -2732,7 +2729,7 @@ net_output(void)
2732 net_rawout(&h3270,xobuf, xoptr - xobuf); 2729 net_rawout(&h3270,xobuf, xoptr - xobuf);
2733 2730
2734 trace_dsn("SENT EOR\n"); 2731 trace_dsn("SENT EOR\n");
2735 - ns_rsent++; 2732 + h3270.ns_rsent++;
2736 #undef BSTART 2733 #undef BSTART
2737 } 2734 }
2738 2735
src/lib3270/trace_ds.c
@@ -113,7 +113,8 @@ static void wtrace(const char *fmt, ...); @@ -113,7 +113,8 @@ static void wtrace(const char *fmt, ...);
113 // static void stop_tracing(void); 113 // static void stop_tracing(void);
114 114
115 /* Globals */ 115 /* Globals */
116 -struct timeval ds_ts; 116 +// struct timeval ds_ts;
  117 +
117 static void (*vwtrace)(H3270 *session, const char *fmt, va_list args) = __vwtrace; 118 static void (*vwtrace)(H3270 *session, const char *fmt, va_list args) = __vwtrace;
118 Boolean trace_skipping = False; 119 Boolean trace_skipping = False;
119 120