Commit ed2e112bbc428ce751cd12fc9e1b4cb4e9247f3e
1 parent
b04b9f4b
Exists in
master
and in
5 other branches
Mais funções passam a suportar multi-sessão
Showing
7 changed files
with
84 additions
and
74 deletions
Show diff stats
src/lib3270/ansi.c
| @@ -1021,15 +1021,15 @@ ansi_nop(H3270 *hSession, int ig1 unused, int ig2 unused) | @@ -1021,15 +1021,15 @@ ansi_nop(H3270 *hSession, int ig1 unused, int ig2 unused) | ||
| 1021 | } | 1021 | } |
| 1022 | 1022 | ||
| 1023 | #define PWRAP { \ | 1023 | #define PWRAP { \ |
| 1024 | - nc = h3270.cursor_addr + 1; \ | ||
| 1025 | - if (nc < h3270.scroll_bottom * h3270.cols) \ | ||
| 1026 | - cursor_move(&h3270,nc); \ | 1024 | + nc = hSession->cursor_addr + 1; \ |
| 1025 | + if (nc < hSession->scroll_bottom * hSession->cols) \ | ||
| 1026 | + cursor_move(hSession,nc); \ | ||
| 1027 | else { \ | 1027 | else { \ |
| 1028 | - if (h3270.cursor_addr / h3270.cols >= h3270.scroll_bottom) \ | ||
| 1029 | - cursor_move(&h3270,h3270.cursor_addr / h3270.cols * h3270.cols); \ | 1028 | + if (hSession->cursor_addr / hSession->cols >= hSession->scroll_bottom) \ |
| 1029 | + cursor_move(hSession,hSession->cursor_addr / hSession->cols * hSession->cols); \ | ||
| 1030 | else { \ | 1030 | else { \ |
| 1031 | - ansi_scroll(&h3270); \ | ||
| 1032 | - cursor_move(&h3270,nc - h3270.cols); \ | 1031 | + ansi_scroll(hSession); \ |
| 1032 | + cursor_move(hSession,nc - hSession->cols); \ | ||
| 1033 | } \ | 1033 | } \ |
| 1034 | } \ | 1034 | } \ |
| 1035 | } | 1035 | } |
src/lib3270/ctlr.c
| @@ -463,78 +463,85 @@ void ctlr_erase(H3270 *session, int alt) | @@ -463,78 +463,85 @@ void ctlr_erase(H3270 *session, int alt) | ||
| 463 | /* | 463 | /* |
| 464 | * Interpret an incoming 3270 command. | 464 | * Interpret an incoming 3270 command. |
| 465 | */ | 465 | */ |
| 466 | -enum pds | ||
| 467 | -process_ds(unsigned char *buf, int buflen) | 466 | +enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen) |
| 468 | { | 467 | { |
| 469 | enum pds rv; | 468 | enum pds rv; |
| 470 | 469 | ||
| 471 | if (!buflen) | 470 | if (!buflen) |
| 472 | return PDS_OKAY_NO_OUTPUT; | 471 | return PDS_OKAY_NO_OUTPUT; |
| 473 | 472 | ||
| 474 | -// scroll_to_bottom(); | ||
| 475 | - | ||
| 476 | - trace_ds(&h3270,"< "); | 473 | + trace_ds(hSession,"< "); |
| 477 | 474 | ||
| 478 | - switch (buf[0]) { /* 3270 command */ | 475 | + switch (buf[0]) /* 3270 command */ |
| 476 | + { | ||
| 479 | case CMD_EAU: /* erase all unprotected */ | 477 | case CMD_EAU: /* erase all unprotected */ |
| 480 | case SNA_CMD_EAU: | 478 | case SNA_CMD_EAU: |
| 481 | - trace_ds(&h3270,"EraseAllUnprotected\n"); | ||
| 482 | - ctlr_erase_all_unprotected(&h3270); | 479 | + trace_ds(hSession, "EraseAllUnprotected\n"); |
| 480 | + ctlr_erase_all_unprotected(hSession); | ||
| 483 | return PDS_OKAY_NO_OUTPUT; | 481 | return PDS_OKAY_NO_OUTPUT; |
| 484 | break; | 482 | break; |
| 483 | + | ||
| 485 | case CMD_EWA: /* erase/write alternate */ | 484 | case CMD_EWA: /* erase/write alternate */ |
| 486 | case SNA_CMD_EWA: | 485 | case SNA_CMD_EWA: |
| 487 | - trace_ds(&h3270,"EraseWriteAlternate"); | 486 | + trace_ds(hSession,"EraseWriteAlternate"); |
| 488 | ctlr_erase(NULL,True); | 487 | ctlr_erase(NULL,True); |
| 489 | if ((rv = ctlr_write(buf, buflen, True)) < 0) | 488 | if ((rv = ctlr_write(buf, buflen, True)) < 0) |
| 490 | return rv; | 489 | return rv; |
| 491 | return PDS_OKAY_NO_OUTPUT; | 490 | return PDS_OKAY_NO_OUTPUT; |
| 492 | break; | 491 | break; |
| 492 | + | ||
| 493 | case CMD_EW: /* erase/write */ | 493 | case CMD_EW: /* erase/write */ |
| 494 | case SNA_CMD_EW: | 494 | case SNA_CMD_EW: |
| 495 | - trace_ds(&h3270,"EraseWrite"); | 495 | + trace_ds(hSession,"EraseWrite"); |
| 496 | ctlr_erase(NULL,False); | 496 | ctlr_erase(NULL,False); |
| 497 | if ((rv = ctlr_write(buf, buflen, True)) < 0) | 497 | if ((rv = ctlr_write(buf, buflen, True)) < 0) |
| 498 | return rv; | 498 | return rv; |
| 499 | return PDS_OKAY_NO_OUTPUT; | 499 | return PDS_OKAY_NO_OUTPUT; |
| 500 | break; | 500 | break; |
| 501 | + | ||
| 501 | case CMD_W: /* write */ | 502 | case CMD_W: /* write */ |
| 502 | case SNA_CMD_W: | 503 | case SNA_CMD_W: |
| 503 | - trace_ds(&h3270,"Write"); | 504 | + trace_ds(hSession,"Write"); |
| 504 | if ((rv = ctlr_write(buf, buflen, False)) < 0) | 505 | if ((rv = ctlr_write(buf, buflen, False)) < 0) |
| 505 | return rv; | 506 | return rv; |
| 506 | return PDS_OKAY_NO_OUTPUT; | 507 | return PDS_OKAY_NO_OUTPUT; |
| 507 | break; | 508 | break; |
| 509 | + | ||
| 508 | case CMD_RB: /* read buffer */ | 510 | case CMD_RB: /* read buffer */ |
| 509 | case SNA_CMD_RB: | 511 | case SNA_CMD_RB: |
| 510 | - trace_ds(&h3270,"ReadBuffer\n"); | ||
| 511 | - ctlr_read_buffer(&h3270,h3270.aid); | 512 | + trace_ds(hSession,"ReadBuffer\n"); |
| 513 | + ctlr_read_buffer(hSession,hSession->aid); | ||
| 512 | return PDS_OKAY_OUTPUT; | 514 | return PDS_OKAY_OUTPUT; |
| 513 | break; | 515 | break; |
| 516 | + | ||
| 514 | case CMD_RM: /* read modifed */ | 517 | case CMD_RM: /* read modifed */ |
| 515 | case SNA_CMD_RM: | 518 | case SNA_CMD_RM: |
| 516 | - trace_ds(&h3270,"ReadModified\n"); | ||
| 517 | - ctlr_read_modified(h3270.aid, False); | 519 | + trace_ds(hSession,"ReadModified\n"); |
| 520 | + ctlr_read_modified(hSession->aid, False); | ||
| 518 | return PDS_OKAY_OUTPUT; | 521 | return PDS_OKAY_OUTPUT; |
| 519 | break; | 522 | break; |
| 523 | + | ||
| 520 | case CMD_RMA: /* read modifed all */ | 524 | case CMD_RMA: /* read modifed all */ |
| 521 | case SNA_CMD_RMA: | 525 | case SNA_CMD_RMA: |
| 522 | - trace_ds(&h3270,"ReadModifiedAll\n"); | ||
| 523 | - ctlr_read_modified(h3270.aid, True); | 526 | + trace_ds(hSession,"ReadModifiedAll\n"); |
| 527 | + ctlr_read_modified(hSession->aid, True); | ||
| 524 | return PDS_OKAY_OUTPUT; | 528 | return PDS_OKAY_OUTPUT; |
| 525 | break; | 529 | break; |
| 530 | + | ||
| 526 | case CMD_WSF: /* write structured field */ | 531 | case CMD_WSF: /* write structured field */ |
| 527 | case SNA_CMD_WSF: | 532 | case SNA_CMD_WSF: |
| 528 | - trace_ds(&h3270,"WriteStructuredField"); | 533 | + trace_ds(hSession,"WriteStructuredField"); |
| 529 | return write_structured_field(buf, buflen); | 534 | return write_structured_field(buf, buflen); |
| 530 | break; | 535 | break; |
| 536 | + | ||
| 531 | case CMD_NOP: /* no-op */ | 537 | case CMD_NOP: /* no-op */ |
| 532 | - trace_ds(&h3270,"NoOp\n"); | 538 | + trace_ds(hSession,"NoOp\n"); |
| 533 | return PDS_OKAY_NO_OUTPUT; | 539 | return PDS_OKAY_NO_OUTPUT; |
| 534 | break; | 540 | break; |
| 541 | + | ||
| 535 | default: | 542 | default: |
| 536 | /* unknown 3270 command */ | 543 | /* unknown 3270 command */ |
| 537 | - popup_an_error(&h3270,_( "Unknown 3270 Data Stream command: 0x%X" ),buf[0]); | 544 | + popup_an_error(hSession,_( "Unknown 3270 Data Stream command: 0x%X" ),buf[0]); |
| 538 | return PDS_BAD_CMD; | 545 | return PDS_BAD_CMD; |
| 539 | } | 546 | } |
| 540 | } | 547 | } |
src/lib3270/ctlrc.h
| @@ -69,7 +69,7 @@ LIB3270_INTERNAL void ctlr_write_sscp_lu(H3270 *session, unsigned char buf[], in | @@ -69,7 +69,7 @@ LIB3270_INTERNAL void ctlr_write_sscp_lu(H3270 *session, unsigned char buf[], in | ||
| 69 | LIB3270_INTERNAL void mdt_clear(int baddr); | 69 | LIB3270_INTERNAL void mdt_clear(int baddr); |
| 70 | LIB3270_INTERNAL void mdt_set(int baddr); | 70 | LIB3270_INTERNAL void mdt_set(int baddr); |
| 71 | LIB3270_INTERNAL int next_unprotected(H3270 *session, int baddr0); | 71 | LIB3270_INTERNAL int next_unprotected(H3270 *session, int baddr0); |
| 72 | -LIB3270_INTERNAL enum pds process_ds(unsigned char *buf, int buflen); | 72 | +LIB3270_INTERNAL enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen); |
| 73 | LIB3270_INTERNAL void ps_process(void); | 73 | LIB3270_INTERNAL void ps_process(void); |
| 74 | 74 | ||
| 75 | LIB3270_INTERNAL void update_model_info(H3270 *session, int model, int cols, int rows); | 75 | LIB3270_INTERNAL void update_model_info(H3270 *session, int model, int cols, int rows); |
src/lib3270/kybd.c
| @@ -594,7 +594,7 @@ LIB3270_ACTION(break) | @@ -594,7 +594,7 @@ LIB3270_ACTION(break) | ||
| 594 | if (!IN_3270) | 594 | if (!IN_3270) |
| 595 | return 0; | 595 | return 0; |
| 596 | 596 | ||
| 597 | - net_break(); | 597 | + net_break(hSession); |
| 598 | 598 | ||
| 599 | return 0; | 599 | return 0; |
| 600 | } | 600 | } |
| @@ -607,7 +607,7 @@ LIB3270_ACTION(attn) | @@ -607,7 +607,7 @@ LIB3270_ACTION(attn) | ||
| 607 | if (!IN_3270) | 607 | if (!IN_3270) |
| 608 | return 0; | 608 | return 0; |
| 609 | 609 | ||
| 610 | - net_interrupt(); | 610 | + net_interrupt(hSession); |
| 611 | 611 | ||
| 612 | return 0; | 612 | return 0; |
| 613 | } | 613 | } |
| @@ -1886,7 +1886,7 @@ LIB3270_ACTION( sysreq ) | @@ -1886,7 +1886,7 @@ LIB3270_ACTION( sysreq ) | ||
| 1886 | return 0; | 1886 | return 0; |
| 1887 | #if defined(X3270_TN3270E) /*[*/ | 1887 | #if defined(X3270_TN3270E) /*[*/ |
| 1888 | if (IN_E) { | 1888 | if (IN_E) { |
| 1889 | - net_abort(); | 1889 | + net_abort(hSession); |
| 1890 | } else | 1890 | } else |
| 1891 | #endif /*]*/ | 1891 | #endif /*]*/ |
| 1892 | { | 1892 | { |
src/lib3270/screen.c
| @@ -166,7 +166,7 @@ static unsigned short calc_attrs(H3270 *session, int baddr, int fa_addr, int fa) | @@ -166,7 +166,7 @@ static unsigned short calc_attrs(H3270 *session, int baddr, int fa_addr, int fa) | ||
| 166 | /* Compute the color. */ | 166 | /* Compute the color. */ |
| 167 | 167 | ||
| 168 | /* Monochrome is easy, and so is color if nothing is specified. */ | 168 | /* Monochrome is easy, and so is color if nothing is specified. */ |
| 169 | - if (!h3270.m3279 || | 169 | + if (!session->m3279 || |
| 170 | (!session->ea_buf[baddr].fg && | 170 | (!session->ea_buf[baddr].fg && |
| 171 | !session->ea_buf[fa_addr].fg && | 171 | !session->ea_buf[fa_addr].fg && |
| 172 | !session->ea_buf[baddr].bg && | 172 | !session->ea_buf[baddr].bg && |
src/lib3270/telnet.c
| @@ -1952,8 +1952,7 @@ process_eor(H3270 *hSession) | @@ -1952,8 +1952,7 @@ process_eor(H3270 *hSession) | ||
| 1952 | hSession->tn3270e_submode = E_3270; | 1952 | hSession->tn3270e_submode = E_3270; |
| 1953 | check_in3270(hSession); | 1953 | check_in3270(hSession); |
| 1954 | hSession->response_required = h->response_flag; | 1954 | hSession->response_required = h->response_flag; |
| 1955 | - rv = process_ds(hSession->ibuf + EH_SIZE, | ||
| 1956 | - (hSession->ibptr - hSession->ibuf) - EH_SIZE); | 1955 | + rv = process_ds(hSession, hSession->ibuf + EH_SIZE,(hSession->ibptr - hSession->ibuf) - EH_SIZE); |
| 1957 | if (rv < 0 && | 1956 | if (rv < 0 && |
| 1958 | hSession->response_required != TN3270E_RSF_NO_RESPONSE) | 1957 | hSession->response_required != TN3270E_RSF_NO_RESPONSE) |
| 1959 | tn3270e_nak(hSession,rv); | 1958 | tn3270e_nak(hSession,rv); |
| @@ -2000,7 +1999,7 @@ process_eor(H3270 *hSession) | @@ -2000,7 +1999,7 @@ process_eor(H3270 *hSession) | ||
| 2000 | } else | 1999 | } else |
| 2001 | #endif /*]*/ | 2000 | #endif /*]*/ |
| 2002 | { | 2001 | { |
| 2003 | - (void) process_ds(hSession->ibuf, hSession->ibptr - hSession->ibuf); | 2002 | + (void) process_ds(hSession, hSession->ibuf, hSession->ibptr - hSession->ibuf); |
| 2004 | } | 2003 | } |
| 2005 | return 0; | 2004 | return 0; |
| 2006 | } | 2005 | } |
| @@ -2270,7 +2269,7 @@ static void do_intr(H3270 *hSession, char c) | @@ -2270,7 +2269,7 @@ static void do_intr(H3270 *hSession, char c) | ||
| 2270 | } | 2269 | } |
| 2271 | ansi_process_s(ctl_see((int) c)); | 2270 | ansi_process_s(ctl_see((int) c)); |
| 2272 | cooked_init(hSession); | 2271 | cooked_init(hSession); |
| 2273 | - net_interrupt(); | 2272 | + net_interrupt(hSession); |
| 2274 | } | 2273 | } |
| 2275 | 2274 | ||
| 2276 | static void do_quit(H3270 *hSession, char c) | 2275 | static void do_quit(H3270 *hSession, char c) |
| @@ -2282,7 +2281,7 @@ static void do_quit(H3270 *hSession, char c) | @@ -2282,7 +2281,7 @@ static void do_quit(H3270 *hSession, char c) | ||
| 2282 | } | 2281 | } |
| 2283 | ansi_process_s(ctl_see((int) c)); | 2282 | ansi_process_s(ctl_see((int) c)); |
| 2284 | cooked_init(hSession); | 2283 | cooked_init(hSession); |
| 2285 | - net_break(); | 2284 | + net_break(hSession); |
| 2286 | } | 2285 | } |
| 2287 | 2286 | ||
| 2288 | static void do_cerase(H3270 *hSession, char c) | 2287 | static void do_cerase(H3270 *hSession, char c) |
| @@ -2688,8 +2687,8 @@ void trace_netdata(H3270 *hSession, char direction, unsigned const char *buf, in | @@ -2688,8 +2687,8 @@ void trace_netdata(H3270 *hSession, char direction, unsigned const char *buf, in | ||
| 2688 | (void) gettimeofday(&ts, (struct timezone *)NULL); | 2687 | (void) gettimeofday(&ts, (struct timezone *)NULL); |
| 2689 | if (IN_3270) | 2688 | if (IN_3270) |
| 2690 | { | 2689 | { |
| 2691 | - tdiff = ((1.0e6 * (double)(ts.tv_sec - h3270.ds_ts.tv_sec)) + | ||
| 2692 | - (double)(ts.tv_usec - h3270.ds_ts.tv_usec)) / 1.0e6; | 2690 | + tdiff = ((1.0e6 * (double)(ts.tv_sec - hSession->ds_ts.tv_sec)) + |
| 2691 | + (double)(ts.tv_usec - hSession->ds_ts.tv_usec)) / 1.0e6; | ||
| 2693 | trace_dsn(hSession,"%c +%gs\n", direction, tdiff); | 2692 | trace_dsn(hSession,"%c +%gs\n", direction, tdiff); |
| 2694 | } | 2693 | } |
| 2695 | 2694 | ||
| @@ -2990,20 +2989,23 @@ net_linemode(void) | @@ -2990,20 +2989,23 @@ net_linemode(void) | ||
| 2990 | } | 2989 | } |
| 2991 | */ | 2990 | */ |
| 2992 | 2991 | ||
| 2993 | -void | ||
| 2994 | -net_charmode(void) | 2992 | +void net_charmode(H3270 *hSession) |
| 2995 | { | 2993 | { |
| 2996 | if (!CONNECTED) | 2994 | if (!CONNECTED) |
| 2997 | return; | 2995 | return; |
| 2998 | - if (!hisopts[TELOPT_ECHO]) { | 2996 | + |
| 2997 | + if (!hisopts[TELOPT_ECHO]) | ||
| 2998 | + { | ||
| 2999 | do_opt[2] = TELOPT_ECHO; | 2999 | do_opt[2] = TELOPT_ECHO; |
| 3000 | net_rawout(do_opt, sizeof(do_opt)); | 3000 | net_rawout(do_opt, sizeof(do_opt)); |
| 3001 | - trace_dsn(&h3270,"SENT %s %s\n", cmd(DO), opt(TELOPT_ECHO)); | 3001 | + trace_dsn(hSession,"SENT %s %s\n", cmd(DO), opt(TELOPT_ECHO)); |
| 3002 | } | 3002 | } |
| 3003 | - if (!hisopts[TELOPT_SGA]) { | 3003 | + |
| 3004 | + if (!hisopts[TELOPT_SGA]) | ||
| 3005 | + { | ||
| 3004 | do_opt[2] = TELOPT_SGA; | 3006 | do_opt[2] = TELOPT_SGA; |
| 3005 | net_rawout(do_opt, sizeof(do_opt)); | 3007 | net_rawout(do_opt, sizeof(do_opt)); |
| 3006 | - trace_dsn(&h3270,"SENT %s %s\n", cmd(DO), opt(TELOPT_SGA)); | 3008 | + trace_dsn(hSession,"SENT %s %s\n", cmd(DO), opt(TELOPT_SGA)); |
| 3007 | } | 3009 | } |
| 3008 | } | 3010 | } |
| 3009 | #endif /*]*/ | 3011 | #endif /*]*/ |
| @@ -3014,14 +3016,13 @@ net_charmode(void) | @@ -3014,14 +3016,13 @@ net_charmode(void) | ||
| 3014 | * Send telnet break, which is used to implement 3270 ATTN. | 3016 | * Send telnet break, which is used to implement 3270 ATTN. |
| 3015 | * | 3017 | * |
| 3016 | */ | 3018 | */ |
| 3017 | -void | ||
| 3018 | -net_break(void) | 3019 | +void net_break(H3270 *hSession) |
| 3019 | { | 3020 | { |
| 3020 | - static unsigned char buf[] = { IAC, BREAK }; | 3021 | + static const unsigned char buf[] = { IAC, BREAK }; |
| 3021 | 3022 | ||
| 3022 | /* I don't know if we should first send TELNET synch ? */ | 3023 | /* I don't know if we should first send TELNET synch ? */ |
| 3023 | - net_rawout(&h3270, buf, sizeof(buf)); | ||
| 3024 | - trace_dsn(&h3270,"SENT BREAK\n"); | 3024 | + net_rawout(hSession, buf, sizeof(buf)); |
| 3025 | + trace_dsn(hSession,"SENT BREAK\n"); | ||
| 3025 | } | 3026 | } |
| 3026 | 3027 | ||
| 3027 | /* | 3028 | /* |
| @@ -3029,14 +3030,13 @@ net_break(void) | @@ -3029,14 +3030,13 @@ net_break(void) | ||
| 3029 | * Send telnet IP. | 3030 | * Send telnet IP. |
| 3030 | * | 3031 | * |
| 3031 | */ | 3032 | */ |
| 3032 | -void | ||
| 3033 | -net_interrupt(void) | 3033 | +void net_interrupt(H3270 *hSession) |
| 3034 | { | 3034 | { |
| 3035 | - static unsigned char buf[] = { IAC, IP }; | 3035 | + static const unsigned char buf[] = { IAC, IP }; |
| 3036 | 3036 | ||
| 3037 | /* I don't know if we should first send TELNET synch ? */ | 3037 | /* I don't know if we should first send TELNET synch ? */ |
| 3038 | - net_rawout(&h3270, buf, sizeof(buf)); | ||
| 3039 | - trace_dsn(&h3270,"SENT IP\n"); | 3038 | + net_rawout(hSession, buf, sizeof(buf)); |
| 3039 | + trace_dsn(hSession,"SENT IP\n"); | ||
| 3040 | } | 3040 | } |
| 3041 | 3041 | ||
| 3042 | /* | 3042 | /* |
| @@ -3045,36 +3045,39 @@ net_interrupt(void) | @@ -3045,36 +3045,39 @@ net_interrupt(void) | ||
| 3045 | * | 3045 | * |
| 3046 | */ | 3046 | */ |
| 3047 | #if defined(X3270_TN3270E) /*[*/ | 3047 | #if defined(X3270_TN3270E) /*[*/ |
| 3048 | -void | ||
| 3049 | -net_abort(void) | 3048 | +void net_abort(H3270 *hSession) |
| 3050 | { | 3049 | { |
| 3051 | - static unsigned char buf[] = { IAC, AO }; | 3050 | + static const unsigned char buf[] = { IAC, AO }; |
| 3052 | 3051 | ||
| 3053 | - if (h3270.e_funcs & E_OPT(TN3270E_FUNC_SYSREQ)) { | 3052 | + if (hSession->e_funcs & E_OPT(TN3270E_FUNC_SYSREQ)) |
| 3053 | + { | ||
| 3054 | /* | 3054 | /* |
| 3055 | * I'm not sure yet what to do here. Should the host respond | 3055 | * I'm not sure yet what to do here. Should the host respond |
| 3056 | * to the AO by sending us SSCP-LU data (and putting us into | 3056 | * to the AO by sending us SSCP-LU data (and putting us into |
| 3057 | * SSCP-LU mode), or should we put ourselves in it? | 3057 | * SSCP-LU mode), or should we put ourselves in it? |
| 3058 | * Time, and testers, will tell. | 3058 | * Time, and testers, will tell. |
| 3059 | */ | 3059 | */ |
| 3060 | - switch (h3270.tn3270e_submode) { | 3060 | + switch (hSession->tn3270e_submode) |
| 3061 | + { | ||
| 3061 | case E_NONE: | 3062 | case E_NONE: |
| 3062 | case E_NVT: | 3063 | case E_NVT: |
| 3063 | break; | 3064 | break; |
| 3065 | + | ||
| 3064 | case E_SSCP: | 3066 | case E_SSCP: |
| 3065 | - net_rawout(&h3270, buf, sizeof(buf)); | ||
| 3066 | - trace_dsn(&h3270,"SENT AO\n"); | ||
| 3067 | - if (h3270.tn3270e_bound || | ||
| 3068 | - !(h3270.e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE))) { | ||
| 3069 | - h3270.tn3270e_submode = E_3270; | ||
| 3070 | - check_in3270(&h3270); | 3067 | + net_rawout(hSession, buf, sizeof(buf)); |
| 3068 | + trace_dsn(hSession,"SENT AO\n"); | ||
| 3069 | + if (hSession->tn3270e_bound || !(hSession->e_funcs & E_OPT(TN3270E_FUNC_BIND_IMAGE))) | ||
| 3070 | + { | ||
| 3071 | + hSession->tn3270e_submode = E_3270; | ||
| 3072 | + check_in3270(hSession); | ||
| 3071 | } | 3073 | } |
| 3072 | break; | 3074 | break; |
| 3075 | + | ||
| 3073 | case E_3270: | 3076 | case E_3270: |
| 3074 | - net_rawout(&h3270, buf, sizeof(buf)); | ||
| 3075 | - trace_dsn(&h3270,"SENT AO\n"); | ||
| 3076 | - h3270.tn3270e_submode = E_SSCP; | ||
| 3077 | - check_in3270(&h3270); | 3077 | + net_rawout(hSession, buf, sizeof(buf)); |
| 3078 | + trace_dsn(hSession,"SENT AO\n"); | ||
| 3079 | + hSession->tn3270e_submode = E_SSCP; | ||
| 3080 | + check_in3270(hSession); | ||
| 3078 | break; | 3081 | break; |
| 3079 | } | 3082 | } |
| 3080 | } | 3083 | } |
src/lib3270/telnetc.h
| @@ -29,17 +29,17 @@ struct ctl_char { | @@ -29,17 +29,17 @@ struct ctl_char { | ||
| 29 | char value[3]; | 29 | char value[3]; |
| 30 | }; | 30 | }; |
| 31 | 31 | ||
| 32 | -LIB3270_INTERNAL void net_abort(void); | 32 | +LIB3270_INTERNAL void net_abort(H3270 *hSession); |
| 33 | LIB3270_INTERNAL Boolean net_add_dummy_tn3270e(void); | 33 | LIB3270_INTERNAL Boolean net_add_dummy_tn3270e(void); |
| 34 | LIB3270_INTERNAL void net_add_eor(unsigned char *buf, int len); | 34 | LIB3270_INTERNAL void net_add_eor(unsigned char *buf, int len); |
| 35 | -LIB3270_INTERNAL void net_break(void); | ||
| 36 | -LIB3270_INTERNAL void net_charmode(void); | 35 | +LIB3270_INTERNAL void net_break(H3270 *hSession); |
| 36 | +LIB3270_INTERNAL void net_charmode(H3270 *hSession); | ||
| 37 | LIB3270_INTERNAL int net_connect(H3270 *session, const char *, char *, Boolean, Boolean *, Boolean *); | 37 | LIB3270_INTERNAL int net_connect(H3270 *session, const char *, char *, Boolean, Boolean *, Boolean *); |
| 38 | LIB3270_INTERNAL void net_disconnect(H3270 *session); | 38 | LIB3270_INTERNAL void net_disconnect(H3270 *session); |
| 39 | LIB3270_INTERNAL void net_exception(H3270 *session); | 39 | LIB3270_INTERNAL void net_exception(H3270 *session); |
| 40 | // LIB3270_INTERNAL void net_hexansi_out(unsigned char *buf, int len); | 40 | // LIB3270_INTERNAL void net_hexansi_out(unsigned char *buf, int len); |
| 41 | LIB3270_INTERNAL void net_input(H3270 *session); | 41 | LIB3270_INTERNAL void net_input(H3270 *session); |
| 42 | -LIB3270_INTERNAL void net_interrupt(void); | 42 | +LIB3270_INTERNAL void net_interrupt(H3270 *hSession); |
| 43 | // LIB3270_INTERNAL void net_linemode(void); | 43 | // LIB3270_INTERNAL void net_linemode(void); |
| 44 | // LIB3270_INTERNAL struct ctl_char *net_linemode_chars(void); | 44 | // LIB3270_INTERNAL struct ctl_char *net_linemode_chars(void); |
| 45 | LIB3270_INTERNAL void net_output(H3270 *hSession); | 45 | LIB3270_INTERNAL void net_output(H3270 *hSession); |