Commit 69991adda77ab35606b2c043d708857bfbe93a88

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

Ajustando macros e chamadas da GSource para tratar o handle de sessao

src/lib3270/api.h
@@ -242,16 +242,16 @@ @@ -242,16 +242,16 @@
242 LOCAL_EXTERN int RegisterFTCallbacks(const struct filetransfer_callbacks *cbk); 242 LOCAL_EXTERN int RegisterFTCallbacks(const struct filetransfer_callbacks *cbk);
243 */ 243 */
244 244
245 - #define PCONNECTED lib3270_pconnected(NULL)  
246 - #define HALF_CONNECTED lib3270_half_connected(NULL)  
247 - #define CONNECTED lib3270_connected(NULL)  
248 -  
249 - #define IN_NEITHER lib3270_in_neither(NULL)  
250 - #define IN_ANSI lib3270_in_ansi(NULL)  
251 - #define IN_3270 lib3270_in_3270(NULL)  
252 - #define IN_SSCP lib3270_in_sscp(NULL)  
253 - #define IN_TN3270E lib3270_in_tn3270e(NULL)  
254 - #define IN_E lib3270_in_e(NULL) 245 + #define PCONNECTED lib3270_pconnected(hSession)
  246 + #define HALF_CONNECTED lib3270_half_connected(hSession)
  247 + #define CONNECTED lib3270_connected(hSession)
  248 +
  249 + #define IN_NEITHER lib3270_in_neither(hSession)
  250 + #define IN_ANSI lib3270_in_ansi(hSession)
  251 + #define IN_3270 lib3270_in_3270(hSession)
  252 + #define IN_SSCP lib3270_in_sscp(hSession)
  253 + #define IN_TN3270E lib3270_in_tn3270e(hSession)
  254 + #define IN_E lib3270_in_e(hSession)
255 255
256 #ifndef LIB3270 256 #ifndef LIB3270
257 257
src/lib3270/ctlr.c
@@ -155,26 +155,27 @@ void ctlr_reinit(H3270 *session, unsigned cmask) @@ -155,26 +155,27 @@ void ctlr_reinit(H3270 *session, unsigned cmask)
155 /** 155 /**
156 * Get current 3270 model. 156 * Get current 3270 model.
157 * 157 *
158 - * @param session selected 3270 session. 158 + * @param hSession selected 3270 session.
159 * @return Current model number. 159 * @return Current model number.
160 */ 160 */
161 -int lib3270_get_model(H3270 *session) 161 +int lib3270_get_model(H3270 *hSession)
162 { 162 {
163 - return session->model_num; 163 + return hSession->model_num;
164 } 164 }
165 165
166 /** 166 /**
167 * Deal with the relationships between model numbers and rows/cols. 167 * Deal with the relationships between model numbers and rows/cols.
168 * 168 *
169 - * @param model New model (updates model name) 169 + * @param hSession Session handle.
  170 + * @param model New model (updates model name)
170 */ 171 */
171 -int lib3270_set_model(H3270 *session, int model) 172 +int lib3270_set_model(H3270 *hSession, int model)
172 { 173 {
173 if(CONNECTED) 174 if(CONNECTED)
174 return EBUSY; 175 return EBUSY;
175 176
176 - ctlr_set_rows_cols(session,model,session->ov_cols,session->ov_rows);  
177 - ctlr_reinit(session,MODEL_CHANGE); 177 + ctlr_set_rows_cols(hSession,model,hSession->ov_cols,hSession->ov_rows);
  178 + ctlr_reinit(hSession,MODEL_CHANGE);
178 179
179 return 0; 180 return 0;
180 } 181 }
src/lib3270/ft.c
@@ -514,17 +514,17 @@ void ft_aborting(H3270FT *h) @@ -514,17 +514,17 @@ void ft_aborting(H3270FT *h)
514 } 514 }
515 515
516 /* Process a disconnect abort. */ 516 /* Process a disconnect abort. */
517 -static void ft_connected(H3270 *session, int ignored, void *dunno) 517 +static void ft_connected(H3270 *hSession, int ignored, void *dunno)
518 { 518 {
519 - if (!CONNECTED && lib3270_get_ft_state(session) != LIB3270_FT_STATE_NONE)  
520 - ft_complete(get_ft_handle(session),_("Host disconnected, transfer cancelled")); 519 + if (!CONNECTED && lib3270_get_ft_state(hSession) != LIB3270_FT_STATE_NONE)
  520 + ft_complete(get_ft_handle(hSession),_("Host disconnected, transfer cancelled"));
521 } 521 }
522 522
523 /* Process an abort from no longer being in 3270 mode. */ 523 /* Process an abort from no longer being in 3270 mode. */
524 -static void ft_in3270(H3270 *session, int ignored, void *dunno) 524 +static void ft_in3270(H3270 *hSession, int ignored, void *dunno)
525 { 525 {
526 - if (!IN_3270 && lib3270_get_ft_state(session) != LIB3270_FT_STATE_NONE)  
527 - ft_complete(get_ft_handle(session),_("Not in 3270 mode, transfer cancelled")); 526 + if (!IN_3270 && lib3270_get_ft_state(hSession) != LIB3270_FT_STATE_NONE)
  527 + ft_complete(get_ft_handle(hSession),_("Not in 3270 mode, transfer cancelled"));
528 } 528 }
529 529
530 LIB3270_EXPORT LIB3270_FT_STATE lib3270_get_ft_state(H3270 *session) 530 LIB3270_EXPORT LIB3270_FT_STATE lib3270_get_ft_state(H3270 *session)
src/lib3270/host.c
@@ -605,15 +605,15 @@ static int do_connect(H3270 *hSession, const char *n) @@ -605,15 +605,15 @@ static int do_connect(H3270 *hSession, const char *n)
605 * @return 0 if the connection was ok, non zero on error. 605 * @return 0 if the connection was ok, non zero on error.
606 * 606 *
607 */ 607 */
608 -int lib3270_connect(H3270 *h, const char *n, int wait) 608 +int lib3270_connect(H3270 *hSession, const char *n, int wait)
609 { 609 {
610 int rc; 610 int rc;
611 611
612 - CHECK_SESSION_HANDLE(h); 612 + CHECK_SESSION_HANDLE(hSession);
613 613
614 - lib3270_main_iterate(h,0); 614 + lib3270_main_iterate(hSession,0);
615 615
616 - if(h->auto_reconnect_inprogress) 616 + if(hSession->auto_reconnect_inprogress)
617 return EAGAIN; 617 return EAGAIN;
618 618
619 if(PCONNECTED) 619 if(PCONNECTED)
@@ -621,12 +621,12 @@ int lib3270_connect(H3270 *h, const char *n, int wait) @@ -621,12 +621,12 @@ int lib3270_connect(H3270 *h, const char *n, int wait)
621 621
622 if(!n) 622 if(!n)
623 { 623 {
624 - n = h->full_current_host; 624 + n = hSession->full_current_host;
625 if(!n) 625 if(!n)
626 return EINVAL; 626 return EINVAL;
627 } 627 }
628 628
629 - rc = do_connect(h,n); 629 + rc = do_connect(hSession,n);
630 if(rc) 630 if(rc)
631 return rc; 631 return rc;
632 632
@@ -634,7 +634,7 @@ int lib3270_connect(H3270 *h, const char *n, int wait) @@ -634,7 +634,7 @@ int lib3270_connect(H3270 *h, const char *n, int wait)
634 { 634 {
635 while(!IN_ANSI && !IN_3270) 635 while(!IN_ANSI && !IN_3270)
636 { 636 {
637 - lib3270_main_iterate(h,1); 637 + lib3270_main_iterate(hSession,1);
638 638
639 if(!PCONNECTED) 639 if(!PCONNECTED)
640 { 640 {
@@ -661,22 +661,22 @@ LIB3270_EXPORT void lib3270_disconnect(H3270 *h) @@ -661,22 +661,22 @@ LIB3270_EXPORT void lib3270_disconnect(H3270 *h)
661 host_disconnect(h,0); 661 host_disconnect(h,0);
662 } 662 }
663 663
664 -void host_disconnect(H3270 *h, int failed) 664 +void host_disconnect(H3270 *hSession, int failed)
665 { 665 {
666 - CHECK_SESSION_HANDLE(h); 666 + CHECK_SESSION_HANDLE(hSession);
667 667
668 if (CONNECTED || HALF_CONNECTED) 668 if (CONNECTED || HALF_CONNECTED)
669 { 669 {
670 // Disconecting, disable input 670 // Disconecting, disable input
671 - remove_input_calls(h);  
672 - net_disconnect(h); 671 + remove_input_calls(hSession);
  672 + net_disconnect(hSession);
673 673
674 - trace("Disconnected (Failed: %d Reconnect: %d in_progress: %d)",failed,lib3270_get_toggle(h,LIB3270_TOGGLE_RECONNECT),h->auto_reconnect_inprogress);  
675 - if (lib3270_get_toggle(h,LIB3270_TOGGLE_RECONNECT) && !h->auto_reconnect_inprogress) 674 + trace("Disconnected (Failed: %d Reconnect: %d in_progress: %d)",failed,lib3270_get_toggle(hSession,LIB3270_TOGGLE_RECONNECT),hSession->auto_reconnect_inprogress);
  675 + if (lib3270_get_toggle(hSession,LIB3270_TOGGLE_RECONNECT) && !hSession->auto_reconnect_inprogress)
676 { 676 {
677 /* Schedule an automatic reconnection. */ 677 /* Schedule an automatic reconnection. */
678 - h->auto_reconnect_inprogress = 1;  
679 - (void) AddTimeOut(failed ? RECONNECT_ERR_MS: RECONNECT_MS, h, try_reconnect); 678 + hSession->auto_reconnect_inprogress = 1;
  679 + (void) AddTimeOut(failed ? RECONNECT_ERR_MS: RECONNECT_MS, hSession, try_reconnect);
680 } 680 }
681 681
682 /* 682 /*
@@ -684,24 +684,24 @@ void host_disconnect(H3270 *h, int failed) @@ -684,24 +684,24 @@ void host_disconnect(H3270 *h, int failed)
684 * in sync. 684 * in sync.
685 */ 685 */
686 #if defined(X3270_TRACE) /*[*/ 686 #if defined(X3270_TRACE) /*[*/
687 - if (IN_ANSI && lib3270_get_toggle(h,LIB3270_TOGGLE_SCREEN_TRACE))  
688 - trace_ansi_disc(h); 687 + if (IN_ANSI && lib3270_get_toggle(hSession,LIB3270_TOGGLE_SCREEN_TRACE))
  688 + trace_ansi_disc(hSession);
689 #endif /*]*/ 689 #endif /*]*/
690 690
691 - lib3270_set_disconnected(h); 691 + lib3270_set_disconnected(hSession);
692 } 692 }
693 } 693 }
694 694
695 /* The host has entered 3270 or ANSI mode, or switched between them. */ 695 /* The host has entered 3270 or ANSI mode, or switched between them. */
696 -void host_in3270(H3270 *session, LIB3270_CSTATE new_cstate) 696 +void host_in3270(H3270 *hSession, LIB3270_CSTATE new_cstate)
697 { 697 {
698 Boolean now3270 = (new_cstate == CONNECTED_3270 || 698 Boolean now3270 = (new_cstate == CONNECTED_3270 ||
699 new_cstate == CONNECTED_SSCP || 699 new_cstate == CONNECTED_SSCP ||
700 new_cstate == CONNECTED_TN3270E); 700 new_cstate == CONNECTED_TN3270E);
701 701
702 - session->cstate = new_cstate;  
703 - session->ever_3270 = now3270;  
704 - lib3270_st_changed(session, LIB3270_STATE_3270_MODE, now3270); 702 + hSession->cstate = new_cstate;
  703 + hSession->ever_3270 = now3270;
  704 + lib3270_st_changed(hSession, LIB3270_STATE_3270_MODE, now3270);
705 } 705 }
706 706
707 void lib3270_set_connected(H3270 *hSession) 707 void lib3270_set_connected(H3270 *hSession)
@@ -805,26 +805,26 @@ LIB3270_EXPORT const char * lib3270_get_host(H3270 *h) @@ -805,26 +805,26 @@ LIB3270_EXPORT const char * lib3270_get_host(H3270 *h)
805 return h->full_current_host; 805 return h->full_current_host;
806 } 806 }
807 807
808 -LIB3270_EXPORT int lib3270_reconnect(H3270 *h,int wait) 808 +LIB3270_EXPORT int lib3270_reconnect(H3270 *hSession,int wait)
809 { 809 {
810 int rc; 810 int rc;
811 811
812 - CHECK_SESSION_HANDLE(h); 812 + CHECK_SESSION_HANDLE(hSession);
813 813
814 if (CONNECTED || HALF_CONNECTED) 814 if (CONNECTED || HALF_CONNECTED)
815 return EBUSY; 815 return EBUSY;
816 816
817 - if (h->full_current_host == CN) 817 + if (hSession->full_current_host == CN)
818 return EINVAL; 818 return EINVAL;
819 819
820 - if (h->auto_reconnect_inprogress) 820 + if (hSession->auto_reconnect_inprogress)
821 return EBUSY; 821 return EBUSY;
822 822
823 - rc = lib3270_connect(h,h->full_current_host,wait); 823 + rc = lib3270_connect(hSession,hSession->full_current_host,wait);
824 824
825 if(rc) 825 if(rc)
826 { 826 {
827 - h->auto_reconnect_inprogress = 0; 827 + hSession->auto_reconnect_inprogress = 0;
828 return rc; 828 return rc;
829 } 829 }
830 830
src/lib3270/kybd.c
@@ -456,15 +456,15 @@ void kybd_connect(H3270 *session, int connected, void *dunno) @@ -456,15 +456,15 @@ void kybd_connect(H3270 *session, int connected, void *dunno)
456 /* 456 /*
457 * Called when we switch between 3270 and ANSI modes. 457 * Called when we switch between 3270 and ANSI modes.
458 */ 458 */
459 -void kybd_in3270(H3270 *session, int in3270 unused, void *dunno) 459 +void kybd_in3270(H3270 *hSession, int in3270 unused, void *dunno)
460 { 460 {
461 - if (session->kybdlock & KL_DEFERRED_UNLOCK)  
462 - RemoveTimeOut(session->unlock_id);  
463 - lib3270_kybdlock_clear(session,~KL_AWAITING_FIRST); 461 + if (hSession->kybdlock & KL_DEFERRED_UNLOCK)
  462 + RemoveTimeOut(hSession->unlock_id);
  463 + lib3270_kybdlock_clear(hSession,~KL_AWAITING_FIRST);
464 464
465 /* There might be a macro pending. */ 465 /* There might be a macro pending. */
466 if (CONNECTED) 466 if (CONNECTED)
467 - ps_process(session); 467 + ps_process(hSession);
468 } 468 }
469 469
470 /* 470 /*
@@ -1113,19 +1113,19 @@ LIB3270_ACTION( previousfield ) @@ -1113,19 +1113,19 @@ LIB3270_ACTION( previousfield )
1113 * Deferred keyboard unlock. 1113 * Deferred keyboard unlock.
1114 */ 1114 */
1115 1115
1116 -static void defer_unlock(H3270 *session) 1116 +static void defer_unlock(H3270 *hSession)
1117 { 1117 {
1118 // trace("%s",__FUNCTION__); 1118 // trace("%s",__FUNCTION__);
1119 - lib3270_kybdlock_clear(session,KL_DEFERRED_UNLOCK);  
1120 - status_reset(session); 1119 + lib3270_kybdlock_clear(hSession,KL_DEFERRED_UNLOCK);
  1120 + status_reset(hSession);
1121 if(CONNECTED) 1121 if(CONNECTED)
1122 - ps_process(session); 1122 + ps_process(hSession);
1123 } 1123 }
1124 1124
1125 /* 1125 /*
1126 * Reset keyboard lock. 1126 * Reset keyboard lock.
1127 */ 1127 */
1128 -void do_reset(H3270 *session, Boolean explicit) 1128 +void do_reset(H3270 *hSession, Boolean explicit)
1129 { 1129 {
1130 /* 1130 /*
1131 * If explicit (from the keyboard) and there is typeahead or 1131 * If explicit (from the keyboard) and there is typeahead or
@@ -1134,12 +1134,12 @@ void do_reset(H3270 *session, Boolean explicit) @@ -1134,12 +1134,12 @@ void do_reset(H3270 *session, Boolean explicit)
1134 1134
1135 if (explicit 1135 if (explicit
1136 #if defined(X3270_FT) /*[*/ 1136 #if defined(X3270_FT) /*[*/
1137 - || lib3270_get_ft_state(session) != LIB3270_FT_STATE_NONE 1137 + || lib3270_get_ft_state(hSession) != LIB3270_FT_STATE_NONE
1138 #endif /*]*/ 1138 #endif /*]*/
1139 ) { 1139 ) {
1140 Boolean half_reset = False; 1140 Boolean half_reset = False;
1141 1141
1142 - if (flush_ta(session)) 1142 + if (flush_ta(hSession))
1143 half_reset = True; 1143 half_reset = True;
1144 1144
1145 if (half_reset) 1145 if (half_reset)
@@ -1147,7 +1147,7 @@ void do_reset(H3270 *session, Boolean explicit) @@ -1147,7 +1147,7 @@ void do_reset(H3270 *session, Boolean explicit)
1147 } 1147 }
1148 1148
1149 /* Always clear insert mode. */ 1149 /* Always clear insert mode. */
1150 - lib3270_set_toggle(session,LIB3270_TOGGLE_INSERT,0); 1150 + lib3270_set_toggle(hSession,LIB3270_TOGGLE_INSERT,0);
1151 1151
1152 /* Otherwise, if not connect, reset is a no-op. */ 1152 /* Otherwise, if not connect, reset is a no-op. */
1153 if (!CONNECTED) 1153 if (!CONNECTED)
@@ -1157,8 +1157,8 @@ void do_reset(H3270 *session, Boolean explicit) @@ -1157,8 +1157,8 @@ void do_reset(H3270 *session, Boolean explicit)
1157 * Remove any deferred keyboard unlock. We will either unlock the 1157 * Remove any deferred keyboard unlock. We will either unlock the
1158 * keyboard now, or want to defer further into the future. 1158 * keyboard now, or want to defer further into the future.
1159 */ 1159 */
1160 - if (session->kybdlock & KL_DEFERRED_UNLOCK)  
1161 - RemoveTimeOut(session->unlock_id); 1160 + if (hSession->kybdlock & KL_DEFERRED_UNLOCK)
  1161 + RemoveTimeOut(hSession->unlock_id);
1162 1162
1163 /* 1163 /*
1164 * If explicit (from the keyboard), unlock the keyboard now. 1164 * If explicit (from the keyboard), unlock the keyboard now.
@@ -1166,21 +1166,21 @@ void do_reset(H3270 *session, Boolean explicit) @@ -1166,21 +1166,21 @@ void do_reset(H3270 *session, Boolean explicit)
1166 */ 1166 */
1167 if (explicit 1167 if (explicit
1168 #if defined(X3270_FT) /*[*/ 1168 #if defined(X3270_FT) /*[*/
1169 - || lib3270_get_ft_state(session) != LIB3270_FT_STATE_NONE 1169 + || lib3270_get_ft_state(hSession) != LIB3270_FT_STATE_NONE
1170 #endif /*]*/ 1170 #endif /*]*/
1171 - || (!session->unlock_delay) // && !sms_in_macro())  
1172 - || (session->unlock_delay_time != 0 && (time(NULL) - session->unlock_delay_time) > 1)) {  
1173 - lib3270_kybdlock_clear(session,-1);  
1174 - } else if (session->kybdlock & 1171 + || (!hSession->unlock_delay) // && !sms_in_macro())
  1172 + || (hSession->unlock_delay_time != 0 && (time(NULL) - hSession->unlock_delay_time) > 1)) {
  1173 + lib3270_kybdlock_clear(hSession,-1);
  1174 + } else if (hSession->kybdlock &
1175 (KL_DEFERRED_UNLOCK | KL_OIA_TWAIT | KL_OIA_LOCKED | KL_AWAITING_FIRST)) { 1175 (KL_DEFERRED_UNLOCK | KL_OIA_TWAIT | KL_OIA_LOCKED | KL_AWAITING_FIRST)) {
1176 - lib3270_kybdlock_clear(session,~KL_DEFERRED_UNLOCK);  
1177 - kybdlock_set(session,KL_DEFERRED_UNLOCK);  
1178 - session->unlock_id = AddTimeOut(UNLOCK_MS, session, defer_unlock); 1176 + lib3270_kybdlock_clear(hSession,~KL_DEFERRED_UNLOCK);
  1177 + kybdlock_set(hSession,KL_DEFERRED_UNLOCK);
  1178 + hSession->unlock_id = AddTimeOut(UNLOCK_MS, hSession, defer_unlock);
1179 } 1179 }
1180 1180
1181 /* Clean up other modes. */ 1181 /* Clean up other modes. */
1182 - status_reset(session);  
1183 - mcursor_normal(session); 1182 + status_reset(hSession);
  1183 + mcursor_normal(hSession);
1184 1184
1185 } 1185 }
1186 1186
src/lib3270/screen.c
@@ -538,51 +538,41 @@ void status_lu(H3270 *session, const char *lu) @@ -538,51 +538,41 @@ void status_lu(H3270 *session, const char *lu)
538 538
539 } 539 }
540 540
541 -static void status_connect(H3270 *session, int connected, void *dunno) 541 +static void status_connect(H3270 *hSession, int connected, void *dunno)
542 { 542 {
543 LIB3270_STATUS id = LIB3270_STATUS_USER; 543 LIB3270_STATUS id = LIB3270_STATUS_USER;
544 544
545 - ctlr_erase(session,1); 545 + ctlr_erase(hSession,1);
546 546
547 if (connected) 547 if (connected)
548 { 548 {
549 - set_status(session,OIA_FLAG_BOXSOLID,IN_3270 && !IN_SSCP); 549 + set_status(hSession,OIA_FLAG_BOXSOLID,IN_3270 && !IN_SSCP);
550 550
551 - if (session->kybdlock & KL_AWAITING_FIRST) 551 + if (hSession->kybdlock & KL_AWAITING_FIRST)
552 id = LIB3270_STATUS_AWAITING_FIRST; 552 id = LIB3270_STATUS_AWAITING_FIRST;
553 else 553 else
554 id = LIB3270_STATUS_CONNECTED; 554 id = LIB3270_STATUS_CONNECTED;
555 555
556 -/*  
557 -#if defined(HAVE_LIBSSL)  
558 - set_status(session,OIA_FLAG_SECURE,session->secure_connection);  
559 -#endif  
560 -*/  
561 -  
562 } 556 }
563 else 557 else
564 { 558 {
565 - set_status(session,OIA_FLAG_BOXSOLID,False);  
566 -/*  
567 - set_status(session,OIA_FLAG_SECURE,False);  
568 -*/  
569 - 559 + set_status(hSession,OIA_FLAG_BOXSOLID,False);
570 id = LIB3270_STATUS_DISCONNECTED; 560 id = LIB3270_STATUS_DISCONNECTED;
571 } 561 }
572 562
573 - status_changed(session,id); 563 + status_changed(hSession,id);
574 564
575 } 565 }
576 566
577 -static void status_3270_mode(H3270 *session, int ignored unused, void *dunno) 567 +static void status_3270_mode(H3270 *hSession, int ignored unused, void *dunno)
578 { 568 {
579 Boolean oia_boxsolid = (IN_3270 && !IN_SSCP); 569 Boolean oia_boxsolid = (IN_3270 && !IN_SSCP);
580 570
581 - CHECK_SESSION_HANDLE(session); 571 + CHECK_SESSION_HANDLE(hSession);
582 572
583 if(oia_boxsolid) 573 if(oia_boxsolid)
584 - set_status(session,OIA_FLAG_UNDERA,True);  
585 - set_status(session,OIA_FLAG_BOXSOLID,oia_boxsolid); 574 + set_status(hSession,OIA_FLAG_UNDERA,True);
  575 + set_status(hSession,OIA_FLAG_BOXSOLID,oia_boxsolid);
586 576
587 } 577 }
588 578
src/lib3270/telnet.c
@@ -1009,43 +1009,46 @@ LIB3270_EXPORT void lib3270_data_recv(H3270 *hSession, size_t nr, const unsigned @@ -1009,43 +1009,46 @@ LIB3270_EXPORT void lib3270_data_recv(H3270 *hSession, size_t nr, const unsigned
1009 #endif // X3270_ANSI 1009 #endif // X3270_ANSI
1010 } 1010 }
1011 1011
1012 -  
1013 -/*  
1014 - * net_input  
1015 - * Called by the toolkit whenever there is input available on the  
1016 - * socket. Reads the data, processes the special telnet commands  
1017 - * and calls process_ds to process the 3270 data stream. 1012 +/**
  1013 + * net_input.
  1014 + *
  1015 + * Called by the toolkit whenever there is input available on the
  1016 + * socket. Reads the data, processes the special telnet commands
  1017 + * and calls process_ds to process the 3270 data stream.
  1018 + *
  1019 + * @param hSession Session handle
  1020 + *
1018 */ 1021 */
1019 -void net_input(H3270 *session) 1022 +void net_input(H3270 *hSession)
1020 { 1023 {
1021 // register unsigned char * cp; 1024 // register unsigned char * cp;
1022 int nr; 1025 int nr;
1023 unsigned char buffer[BUFSZ]; 1026 unsigned char buffer[BUFSZ];
1024 1027
1025 - CHECK_SESSION_HANDLE(session); 1028 + CHECK_SESSION_HANDLE(hSession);
1026 1029
1027 #if defined(_WIN32) 1030 #if defined(_WIN32)
1028 for (;;) 1031 for (;;)
1029 #endif 1032 #endif
1030 { 1033 {
1031 - if (session->sock < 0) 1034 + if (hSession->sock < 0)
1032 return; 1035 return;
1033 1036
1034 #if defined(X3270_ANSI) 1037 #if defined(X3270_ANSI)
1035 - session->ansi_data = 0; 1038 + hSession->ansi_data = 0;
1036 #endif 1039 #endif
1037 1040
1038 #if defined(_WIN32) 1041 #if defined(_WIN32)
1039 - ResetEvent(session->sockEvent); 1042 + ResetEvent(hSession->sockEvent);
1040 #endif 1043 #endif
1041 1044
1042 #if defined(HAVE_LIBSSL) 1045 #if defined(HAVE_LIBSSL)
1043 - if (session->ssl_con != NULL)  
1044 - nr = SSL_read(session->ssl_con, (char *) buffer, BUFSZ); 1046 + if (hSession->ssl_con != NULL)
  1047 + nr = SSL_read(hSession->ssl_con, (char *) buffer, BUFSZ);
1045 else 1048 else
1046 - nr = recv(session->sock, (char *) buffer, BUFSZ, 0); 1049 + nr = recv(hSession->sock, (char *) buffer, BUFSZ, 0);
1047 #else 1050 #else
1048 - nr = recv(session->sock, (char *) buffer, BUFSZ, 0); 1051 + nr = recv(hSession->sock, (char *) buffer, BUFSZ, 0);
1049 #endif // HAVE_LIBSSL 1052 #endif // HAVE_LIBSSL
1050 1053
1051 if (nr < 0) 1054 if (nr < 0)
@@ -1054,7 +1057,7 @@ void net_input(H3270 *session) @@ -1054,7 +1057,7 @@ void net_input(H3270 *session)
1054 return; 1057 return;
1055 1058
1056 #if defined(HAVE_LIBSSL) /*[*/ 1059 #if defined(HAVE_LIBSSL) /*[*/
1057 - if(session->ssl_con != NULL) 1060 + if(hSession->ssl_con != NULL)
1058 { 1061 {
1059 unsigned long e; 1062 unsigned long e;
1060 char err_buf[120]; 1063 char err_buf[120];
@@ -1065,55 +1068,55 @@ void net_input(H3270 *session) @@ -1065,55 +1068,55 @@ void net_input(H3270 *session)
1065 else 1068 else
1066 strcpy(err_buf, _( "unknown error" ) ); 1069 strcpy(err_buf, _( "unknown error" ) );
1067 1070
1068 - trace_dsn(session,"RCVD SSL_read error %ld (%s)\n", e,err_buf); 1071 + trace_dsn(hSession,"RCVD SSL_read error %ld (%s)\n", e,err_buf);
1069 1072
1070 - session->message( session,LIB3270_NOTIFY_ERROR,_( "SSL Error" ),_( "SSL Read error" ),err_buf ); 1073 + hSession->message(hSession,LIB3270_NOTIFY_ERROR,_( "SSL Error" ),_( "SSL Read error" ),err_buf );
1071 1074
1072 - host_disconnect(session,True); 1075 + host_disconnect(hSession,True);
1073 return; 1076 return;
1074 } 1077 }
1075 #endif /*]*/ 1078 #endif /*]*/
1076 1079
1077 if (HALF_CONNECTED && socket_errno() == SE_EAGAIN) 1080 if (HALF_CONNECTED && socket_errno() == SE_EAGAIN)
1078 { 1081 {
1079 - connection_complete(session); 1082 + connection_complete(hSession);
1080 return; 1083 return;
1081 } 1084 }
1082 1085
1083 - trace_dsn(session,"RCVD socket error %d\n", errno); 1086 + trace_dsn(hSession,"RCVD socket error %d\n", errno);
1084 1087
1085 if (HALF_CONNECTED) 1088 if (HALF_CONNECTED)
1086 { 1089 {
1087 - popup_a_sockerr(session, N_( "%s:%d" ),session->hostname, session->current_port); 1090 + popup_a_sockerr(hSession, N_( "%s:%d" ),hSession->hostname, hSession->current_port);
1088 } 1091 }
1089 else if (socket_errno() != SE_ECONNRESET) 1092 else if (socket_errno() != SE_ECONNRESET)
1090 { 1093 {
1091 - popup_a_sockerr(session, N_( "Socket read error" ) ); 1094 + popup_a_sockerr(hSession, N_( "Socket read error" ) );
1092 } 1095 }
1093 1096
1094 - host_disconnect(session,True); 1097 + host_disconnect(hSession,True);
1095 return; 1098 return;
1096 } else if (nr == 0) 1099 } else if (nr == 0)
1097 { 1100 {
1098 /* Host disconnected. */ 1101 /* Host disconnected. */
1099 - trace_dsn(session,"RCVD disconnect\n");  
1100 - host_disconnect(session,False); 1102 + trace_dsn(hSession,"RCVD disconnect\n");
  1103 + host_disconnect(hSession,False);
1101 return; 1104 return;
1102 } 1105 }
1103 1106
1104 /* Process the data. */ 1107 /* Process the data. */
1105 if (HALF_CONNECTED) 1108 if (HALF_CONNECTED)
1106 { 1109 {
1107 - if (non_blocking(session,False) < 0) 1110 + if (non_blocking(hSession,False) < 0)
1108 { 1111 {
1109 - host_disconnect(session,True); 1112 + host_disconnect(hSession,True);
1110 return; 1113 return;
1111 } 1114 }
1112 - lib3270_set_connected(session);  
1113 - net_connected(session); 1115 + lib3270_set_connected(hSession);
  1116 + net_connected(hSession);
1114 } 1117 }
1115 1118
1116 - lib3270_data_recv(session, nr, buffer); 1119 + lib3270_data_recv(hSession, nr, buffer);
1117 1120
1118 /* 1121 /*
1119 trace_netdata('<', session->netrbuf, nr); 1122 trace_netdata('<', session->netrbuf, nr);
@@ -1201,65 +1204,64 @@ static void next_lu(H3270 *hSession) @@ -1201,65 +1204,64 @@ static void next_lu(H3270 *hSession)
1201 * Telnet finite-state machine. 1204 * Telnet finite-state machine.
1202 * Returns 0 for okay, -1 for errors. 1205 * Returns 0 for okay, -1 for errors.
1203 */ 1206 */
1204 -static int telnet_fsm(H3270 *session, unsigned char c) 1207 +static int telnet_fsm(H3270 *hSession, unsigned char c)
1205 { 1208 {
1206 #if defined(X3270_ANSI) /*[*/ 1209 #if defined(X3270_ANSI) /*[*/
1207 char *see_chr; 1210 char *see_chr;
1208 int sl; 1211 int sl;
1209 #endif /*]*/ 1212 #endif /*]*/
1210 1213
1211 - switch (session->telnet_state) 1214 + switch (hSession->telnet_state)
1212 { 1215 {
1213 case TNS_DATA: /* normal data processing */ 1216 case TNS_DATA: /* normal data processing */
1214 if (c == IAC) { /* got a telnet command */ 1217 if (c == IAC) { /* got a telnet command */
1215 - session->telnet_state = TNS_IAC; 1218 + hSession->telnet_state = TNS_IAC;
1216 #if defined(X3270_ANSI) /*[*/ 1219 #if defined(X3270_ANSI) /*[*/
1217 - if (session->ansi_data) {  
1218 - trace_dsn(session,"\n");  
1219 - session->ansi_data = 0; 1220 + if (hSession->ansi_data) {
  1221 + trace_dsn(hSession,"\n");
  1222 + hSession->ansi_data = 0;
1220 } 1223 }
1221 #endif /*]*/ 1224 #endif /*]*/
1222 break; 1225 break;
1223 } 1226 }
1224 if (IN_NEITHER) { /* now can assume ANSI mode */ 1227 if (IN_NEITHER) { /* now can assume ANSI mode */
1225 #if defined(X3270_ANSI)/*[*/ 1228 #if defined(X3270_ANSI)/*[*/
1226 - if (session->linemode)  
1227 - cooked_init(session); 1229 + if (hSession->linemode)
  1230 + cooked_init(hSession);
1228 #endif /*]*/ 1231 #endif /*]*/
1229 - host_in3270(session,CONNECTED_ANSI);  
1230 - lib3270_kybdlock_clear(session,KL_AWAITING_FIRST);  
1231 - status_reset(session);  
1232 - ps_process(session); 1232 + host_in3270(hSession,CONNECTED_ANSI);
  1233 + lib3270_kybdlock_clear(hSession,KL_AWAITING_FIRST);
  1234 + status_reset(hSession);
  1235 + ps_process(hSession);
1233 } 1236 }
1234 if (IN_ANSI && !IN_E) { 1237 if (IN_ANSI && !IN_E) {
1235 #if defined(X3270_ANSI) /*[*/ 1238 #if defined(X3270_ANSI) /*[*/
1236 - if (!session->ansi_data) {  
1237 - trace_dsn(session,"<.. ");  
1238 - session->ansi_data = 4; 1239 + if (!hSession->ansi_data) {
  1240 + trace_dsn(hSession,"<.. ");
  1241 + hSession->ansi_data = 4;
1239 } 1242 }
1240 see_chr = ctl_see((int) c); 1243 see_chr = ctl_see((int) c);
1241 - session->ansi_data += (sl = strlen(see_chr));  
1242 - if (session->ansi_data >= TRACELINE) {  
1243 - trace_dsn(session," ...\n... ");  
1244 - session->ansi_data = 4 + sl; 1244 + hSession->ansi_data += (sl = strlen(see_chr));
  1245 + if (hSession->ansi_data >= TRACELINE) {
  1246 + trace_dsn(hSession," ...\n... ");
  1247 + hSession->ansi_data = 4 + sl;
1245 } 1248 }
1246 - trace_dsn(session,"%s",see_chr);  
1247 - if (!session->syncing) 1249 + trace_dsn(hSession,"%s",see_chr);
  1250 + if (!hSession->syncing)
1248 { 1251 {
1249 - if (session->linemode && session->onlcr && c == '\n')  
1250 - ansi_process(session,(unsigned int) '\r');  
1251 - ansi_process(session,(unsigned int) c);  
1252 -// sms_store(c); 1252 + if (hSession->linemode && hSession->onlcr && c == '\n')
  1253 + ansi_process(hSession,(unsigned int) '\r');
  1254 + ansi_process(hSession,(unsigned int) c);
1253 } 1255 }
1254 #endif /*]*/ 1256 #endif /*]*/
1255 } else { 1257 } else {
1256 - store3270in(session,c); 1258 + store3270in(hSession,c);
1257 } 1259 }
1258 break; 1260 break;
1259 case TNS_IAC: /* process a telnet command */ 1261 case TNS_IAC: /* process a telnet command */
1260 if (c != EOR && c != IAC) 1262 if (c != EOR && c != IAC)
1261 { 1263 {
1262 - trace_dsn(session,"RCVD %s ", cmd(c)); 1264 + trace_dsn(hSession,"RCVD %s ", cmd(c));
1263 } 1265 }
1264 1266
1265 switch (c) 1267 switch (c)
@@ -1268,91 +1270,91 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1268,91 +1270,91 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1268 if (IN_ANSI && !IN_E) 1270 if (IN_ANSI && !IN_E)
1269 { 1271 {
1270 #if defined(X3270_ANSI) /*[*/ 1272 #if defined(X3270_ANSI) /*[*/
1271 - if (!session->ansi_data) 1273 + if (!hSession->ansi_data)
1272 { 1274 {
1273 - trace_dsn(session,"<.. ");  
1274 - session->ansi_data = 4; 1275 + trace_dsn(hSession,"<.. ");
  1276 + hSession->ansi_data = 4;
1275 } 1277 }
1276 see_chr = ctl_see((int) c); 1278 see_chr = ctl_see((int) c);
1277 - session->ansi_data += (sl = strlen(see_chr));  
1278 - if (session->ansi_data >= TRACELINE) 1279 + hSession->ansi_data += (sl = strlen(see_chr));
  1280 + if (hSession->ansi_data >= TRACELINE)
1279 { 1281 {
1280 - trace_dsn(session," ...\n ...");  
1281 - session->ansi_data = 4 + sl; 1282 + trace_dsn(hSession," ...\n ...");
  1283 + hSession->ansi_data = 4 + sl;
1282 } 1284 }
1283 - trace_dsn(session,"%s",see_chr);  
1284 - ansi_process(session,(unsigned int) c); 1285 + trace_dsn(hSession,"%s",see_chr);
  1286 + ansi_process(hSession,(unsigned int) c);
1285 #endif /*]*/ 1287 #endif /*]*/
1286 } 1288 }
1287 else 1289 else
1288 { 1290 {
1289 - store3270in(session,c); 1291 + store3270in(hSession,c);
1290 } 1292 }
1291 - session->telnet_state = TNS_DATA; 1293 + hSession->telnet_state = TNS_DATA;
1292 break; 1294 break;
1293 1295
1294 case EOR: /* eor, process accumulated input */ 1296 case EOR: /* eor, process accumulated input */
1295 1297
1296 - if (IN_3270 || (IN_E && session->tn3270e_negotiated)) 1298 + if (IN_3270 || (IN_E && hSession->tn3270e_negotiated))
1297 { 1299 {
1298 - session->ns_rrcvd++;  
1299 - if (process_eor(session)) 1300 + hSession->ns_rrcvd++;
  1301 + if (process_eor(hSession))
1300 return -1; 1302 return -1;
1301 } else 1303 } else
1302 - Warning(session, _( "EOR received when not in 3270 mode, ignored." )); 1304 + Warning(hSession, _( "EOR received when not in 3270 mode, ignored." ));
1303 1305
1304 - trace_dsn(session,"RCVD EOR\n");  
1305 - session->ibptr = session->ibuf;  
1306 - session->telnet_state = TNS_DATA; 1306 + trace_dsn(hSession,"RCVD EOR\n");
  1307 + hSession->ibptr = hSession->ibuf;
  1308 + hSession->telnet_state = TNS_DATA;
1307 break; 1309 break;
1308 1310
1309 case WILL: 1311 case WILL:
1310 - session->telnet_state = TNS_WILL; 1312 + hSession->telnet_state = TNS_WILL;
1311 break; 1313 break;
1312 1314
1313 case WONT: 1315 case WONT:
1314 - session->telnet_state = TNS_WONT; 1316 + hSession->telnet_state = TNS_WONT;
1315 break; 1317 break;
1316 1318
1317 case DO: 1319 case DO:
1318 - session->telnet_state = TNS_DO; 1320 + hSession->telnet_state = TNS_DO;
1319 break; 1321 break;
1320 1322
1321 case DONT: 1323 case DONT:
1322 - session->telnet_state = TNS_DONT; 1324 + hSession->telnet_state = TNS_DONT;
1323 break; 1325 break;
1324 1326
1325 case SB: 1327 case SB:
1326 - session->telnet_state = TNS_SB;  
1327 - if (session->sbbuf == (unsigned char *)NULL)  
1328 - session->sbbuf = (unsigned char *)lib3270_malloc(1024);  
1329 - session->sbptr = session->sbbuf; 1328 + hSession->telnet_state = TNS_SB;
  1329 + if (hSession->sbbuf == (unsigned char *)NULL)
  1330 + hSession->sbbuf = (unsigned char *)lib3270_malloc(1024);
  1331 + hSession->sbptr = hSession->sbbuf;
1330 break; 1332 break;
1331 1333
1332 case DM: 1334 case DM:
1333 - trace_dsn(session,"\n");  
1334 - if (session->syncing) 1335 + trace_dsn(hSession,"\n");
  1336 + if (hSession->syncing)
1335 { 1337 {
1336 - session->syncing = 0;  
1337 - x_except_on(session); 1338 + hSession->syncing = 0;
  1339 + x_except_on(hSession);
1338 } 1340 }
1339 - session->telnet_state = TNS_DATA; 1341 + hSession->telnet_state = TNS_DATA;
1340 break; 1342 break;
1341 1343
1342 case GA: 1344 case GA:
1343 case NOP: 1345 case NOP:
1344 - trace_dsn(session,"\n");  
1345 - session->telnet_state = TNS_DATA; 1346 + trace_dsn(hSession,"\n");
  1347 + hSession->telnet_state = TNS_DATA;
1346 break; 1348 break;
1347 1349
1348 default: 1350 default:
1349 - trace_dsn(session,"???\n");  
1350 - session->telnet_state = TNS_DATA; 1351 + trace_dsn(hSession,"???\n");
  1352 + hSession->telnet_state = TNS_DATA;
1351 break; 1353 break;
1352 } 1354 }
1353 break; 1355 break;
1354 case TNS_WILL: /* telnet WILL DO OPTION command */ 1356 case TNS_WILL: /* telnet WILL DO OPTION command */
1355 - trace_dsn(session,"%s\n", opt(c)); 1357 + trace_dsn(hSession,"%s\n", opt(c));
1356 switch (c) { 1358 switch (c) {
1357 case TELOPT_SGA: 1359 case TELOPT_SGA:
1358 case TELOPT_BINARY: 1360 case TELOPT_BINARY:
@@ -1362,54 +1364,54 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1362,54 +1364,54 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1362 #if defined(X3270_TN3270E) /*[*/ 1364 #if defined(X3270_TN3270E) /*[*/
1363 case TELOPT_TN3270E: 1365 case TELOPT_TN3270E:
1364 #endif /*]*/ 1366 #endif /*]*/
1365 - if (c != TELOPT_TN3270E || !session->non_tn3270e_host) {  
1366 - if (!session->hisopts[c]) {  
1367 - session->hisopts[c] = 1; 1367 + if (c != TELOPT_TN3270E || !hSession->non_tn3270e_host) {
  1368 + if (!hSession->hisopts[c]) {
  1369 + hSession->hisopts[c] = 1;
1368 do_opt[2] = c; 1370 do_opt[2] = c;
1369 - net_rawout(session,do_opt, sizeof(do_opt));  
1370 - trace_dsn(session,"SENT %s %s\n", 1371 + net_rawout(hSession,do_opt, sizeof(do_opt));
  1372 + trace_dsn(hSession,"SENT %s %s\n",
1371 cmd(DO), opt(c)); 1373 cmd(DO), opt(c));
1372 1374
1373 /* 1375 /*
1374 * For UTS, volunteer to do EOR when 1376 * For UTS, volunteer to do EOR when
1375 * they do. 1377 * they do.
1376 */ 1378 */
1377 - if (c == TELOPT_EOR && !session->myopts[c]) {  
1378 - session->myopts[c] = 1; 1379 + if (c == TELOPT_EOR && !hSession->myopts[c]) {
  1380 + hSession->myopts[c] = 1;
1379 will_opt[2] = c; 1381 will_opt[2] = c;
1380 - net_rawout(session,will_opt,sizeof(will_opt));  
1381 - trace_dsn(session,"SENT %s %s\n",cmd(WILL), opt(c)); 1382 + net_rawout(hSession,will_opt,sizeof(will_opt));
  1383 + trace_dsn(hSession,"SENT %s %s\n",cmd(WILL), opt(c));
1382 } 1384 }
1383 1385
1384 - check_in3270(session);  
1385 - check_linemode(session,False); 1386 + check_in3270(hSession);
  1387 + check_linemode(hSession,False);
1386 } 1388 }
1387 break; 1389 break;
1388 } 1390 }
1389 default: 1391 default:
1390 dont_opt[2] = c; 1392 dont_opt[2] = c;
1391 - net_rawout(session,dont_opt, sizeof(dont_opt));  
1392 - trace_dsn(session,"SENT %s %s\n", cmd(DONT), opt(c)); 1393 + net_rawout(hSession,dont_opt, sizeof(dont_opt));
  1394 + trace_dsn(hSession,"SENT %s %s\n", cmd(DONT), opt(c));
1393 break; 1395 break;
1394 } 1396 }
1395 - session->telnet_state = TNS_DATA; 1397 + hSession->telnet_state = TNS_DATA;
1396 break; 1398 break;
1397 case TNS_WONT: /* telnet WONT DO OPTION command */ 1399 case TNS_WONT: /* telnet WONT DO OPTION command */
1398 - trace_dsn(session,"%s\n", opt(c));  
1399 - if (session->hisopts[c]) 1400 + trace_dsn(hSession,"%s\n", opt(c));
  1401 + if (hSession->hisopts[c])
1400 { 1402 {
1401 - session->hisopts[c] = 0; 1403 + hSession->hisopts[c] = 0;
1402 dont_opt[2] = c; 1404 dont_opt[2] = c;
1403 - net_rawout(session, dont_opt, sizeof(dont_opt));  
1404 - trace_dsn(session,"SENT %s %s\n", cmd(DONT), opt(c));  
1405 - check_in3270(session);  
1406 - check_linemode(session,False); 1405 + net_rawout(hSession, dont_opt, sizeof(dont_opt));
  1406 + trace_dsn(hSession,"SENT %s %s\n", cmd(DONT), opt(c));
  1407 + check_in3270(hSession);
  1408 + check_linemode(hSession,False);
1407 } 1409 }
1408 1410
1409 - session->telnet_state = TNS_DATA; 1411 + hSession->telnet_state = TNS_DATA;
1410 break; 1412 break;
1411 case TNS_DO: /* telnet PLEASE DO OPTION command */ 1413 case TNS_DO: /* telnet PLEASE DO OPTION command */
1412 - trace_dsn(session,"%s\n", opt(c)); 1414 + trace_dsn(hSession,"%s\n", opt(c));
1413 switch (c) { 1415 switch (c) {
1414 case TELOPT_BINARY: 1416 case TELOPT_BINARY:
1415 case TELOPT_EOR: 1417 case TELOPT_EOR:
@@ -1423,24 +1425,24 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1423,24 +1425,24 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1423 #if defined(HAVE_LIBSSL) /*[*/ 1425 #if defined(HAVE_LIBSSL) /*[*/
1424 case TELOPT_STARTTLS: 1426 case TELOPT_STARTTLS:
1425 #endif /*]*/ 1427 #endif /*]*/
1426 - if (c == TELOPT_TN3270E && session->non_tn3270e_host) 1428 + if (c == TELOPT_TN3270E && hSession->non_tn3270e_host)
1427 goto wont; 1429 goto wont;
1428 - if (c == TELOPT_TM && !session->bsd_tm) 1430 + if (c == TELOPT_TM && !hSession->bsd_tm)
1429 goto wont; 1431 goto wont;
1430 1432
1431 - trace("session->myopts[c]=%d",session->myopts[c]);  
1432 - if (!session->myopts[c]) 1433 + trace("hSession->myopts[c]=%d",hSession->myopts[c]);
  1434 + if (!hSession->myopts[c])
1433 { 1435 {
1434 if (c != TELOPT_TM) 1436 if (c != TELOPT_TM)
1435 - session->myopts[c] = 1; 1437 + hSession->myopts[c] = 1;
1436 will_opt[2] = c; 1438 will_opt[2] = c;
1437 - net_rawout(session, will_opt, sizeof(will_opt));  
1438 - trace_dsn(session,"SENT %s %s\n", cmd(WILL), opt(c));  
1439 - check_in3270(session);  
1440 - check_linemode(session,False); 1439 + net_rawout(hSession, will_opt, sizeof(will_opt));
  1440 + trace_dsn(hSession,"SENT %s %s\n", cmd(WILL), opt(c));
  1441 + check_in3270(hSession);
  1442 + check_linemode(hSession,False);
1441 } 1443 }
1442 if (c == TELOPT_NAWS) 1444 if (c == TELOPT_NAWS)
1443 - send_naws(session); 1445 + send_naws(hSession);
1444 #if defined(HAVE_LIBSSL) /*[*/ 1446 #if defined(HAVE_LIBSSL) /*[*/
1445 if (c == TELOPT_STARTTLS) { 1447 if (c == TELOPT_STARTTLS) {
1446 static unsigned char follows_msg[] = { 1448 static unsigned char follows_msg[] = {
@@ -1452,82 +1454,82 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1452,82 +1454,82 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1452 * Send IAC SB STARTTLS FOLLOWS IAC SE 1454 * Send IAC SB STARTTLS FOLLOWS IAC SE
1453 * to announce that what follows is TLS. 1455 * to announce that what follows is TLS.
1454 */ 1456 */
1455 - net_rawout(session, follows_msg, sizeof(follows_msg));  
1456 - trace_dsn(session,"SENT %s %s FOLLOWS %s\n", 1457 + net_rawout(hSession, follows_msg, sizeof(follows_msg));
  1458 + trace_dsn(hSession,"SENT %s %s FOLLOWS %s\n",
1457 cmd(SB), 1459 cmd(SB),
1458 opt(TELOPT_STARTTLS), 1460 opt(TELOPT_STARTTLS),
1459 cmd(SE)); 1461 cmd(SE));
1460 - session->need_tls_follows = 1; 1462 + hSession->need_tls_follows = 1;
1461 } 1463 }
1462 #endif /*]*/ 1464 #endif /*]*/
1463 break; 1465 break;
1464 default: 1466 default:
1465 wont: 1467 wont:
1466 wont_opt[2] = c; 1468 wont_opt[2] = c;
1467 - net_rawout(session, wont_opt, sizeof(wont_opt));  
1468 - trace_dsn(session,"SENT %s %s\n", cmd(WONT), opt(c)); 1469 + net_rawout(hSession, wont_opt, sizeof(wont_opt));
  1470 + trace_dsn(hSession,"SENT %s %s\n", cmd(WONT), opt(c));
1469 break; 1471 break;
1470 } 1472 }
1471 - session->telnet_state = TNS_DATA; 1473 + hSession->telnet_state = TNS_DATA;
1472 break; 1474 break;
1473 case TNS_DONT: /* telnet PLEASE DON'T DO OPTION command */ 1475 case TNS_DONT: /* telnet PLEASE DON'T DO OPTION command */
1474 - trace_dsn(session,"%s\n", opt(c));  
1475 - if (session->myopts[c]) {  
1476 - session->myopts[c] = 0; 1476 + trace_dsn(hSession,"%s\n", opt(c));
  1477 + if (hSession->myopts[c]) {
  1478 + hSession->myopts[c] = 0;
1477 wont_opt[2] = c; 1479 wont_opt[2] = c;
1478 - net_rawout(session, wont_opt, sizeof(wont_opt));  
1479 - trace_dsn(session,"SENT %s %s\n", cmd(WONT), opt(c));  
1480 - check_in3270(session);  
1481 - check_linemode(session,False); 1480 + net_rawout(hSession, wont_opt, sizeof(wont_opt));
  1481 + trace_dsn(hSession,"SENT %s %s\n", cmd(WONT), opt(c));
  1482 + check_in3270(hSession);
  1483 + check_linemode(hSession,False);
1482 } 1484 }
1483 - session->telnet_state = TNS_DATA; 1485 + hSession->telnet_state = TNS_DATA;
1484 break; 1486 break;
1485 case TNS_SB: /* telnet sub-option string command */ 1487 case TNS_SB: /* telnet sub-option string command */
1486 if (c == IAC) 1488 if (c == IAC)
1487 - session->telnet_state = TNS_SB_IAC; 1489 + hSession->telnet_state = TNS_SB_IAC;
1488 else 1490 else
1489 - *session->sbptr++ = c; 1491 + *hSession->sbptr++ = c;
1490 break; 1492 break;
1491 case TNS_SB_IAC: /* telnet sub-option string command */ 1493 case TNS_SB_IAC: /* telnet sub-option string command */
1492 - *session->sbptr++ = c; 1494 + *hSession->sbptr++ = c;
1493 if (c == SE) { 1495 if (c == SE) {
1494 - session->telnet_state = TNS_DATA;  
1495 - if (session->sbbuf[0] == TELOPT_TTYPE && session->sbbuf[1] == TELQUAL_SEND) 1496 + hSession->telnet_state = TNS_DATA;
  1497 + if (hSession->sbbuf[0] == TELOPT_TTYPE && hSession->sbbuf[1] == TELQUAL_SEND)
1496 { 1498 {
1497 int tt_len, tb_len; 1499 int tt_len, tb_len;
1498 char *tt_out; 1500 char *tt_out;
1499 1501
1500 - trace_dsn(session,"%s %s\n", opt(session->sbbuf[0]),telquals[session->sbbuf[1]]); 1502 + trace_dsn(hSession,"%s %s\n", opt(hSession->sbbuf[0]),telquals[hSession->sbbuf[1]]);
1501 1503
1502 - if (session->lus != (char **)NULL && session->try_lu == CN) 1504 + if (hSession->lus != (char **)NULL && hSession->try_lu == CN)
1503 { 1505 {
1504 /* None of the LUs worked. */ 1506 /* None of the LUs worked. */
1505 popup_an_error(NULL,"Cannot connect to specified LU"); 1507 popup_an_error(NULL,"Cannot connect to specified LU");
1506 return -1; 1508 return -1;
1507 } 1509 }
1508 1510
1509 - tt_len = strlen(session->termtype);  
1510 - if (session->try_lu != CN && *session->try_lu) 1511 + tt_len = strlen(hSession->termtype);
  1512 + if (hSession->try_lu != CN && *hSession->try_lu)
1511 { 1513 {
1512 - tt_len += strlen(session->try_lu) + 1;  
1513 - session->connected_lu = session->try_lu; 1514 + tt_len += strlen(hSession->try_lu) + 1;
  1515 + hSession->connected_lu = hSession->try_lu;
1514 } 1516 }
1515 else 1517 else
1516 - session->connected_lu = CN; 1518 + hSession->connected_lu = CN;
1517 1519
1518 - status_lu(session,session->connected_lu); 1520 + status_lu(hSession,hSession->connected_lu);
1519 1521
1520 tb_len = 4 + tt_len + 2; 1522 tb_len = 4 + tt_len + 2;
1521 tt_out = lib3270_malloc(tb_len + 1); 1523 tt_out = lib3270_malloc(tb_len + 1);
1522 (void) sprintf(tt_out, "%c%c%c%c%s%s%s%c%c", 1524 (void) sprintf(tt_out, "%c%c%c%c%s%s%s%c%c",
1523 IAC, SB, TELOPT_TTYPE, TELQUAL_IS, 1525 IAC, SB, TELOPT_TTYPE, TELQUAL_IS,
1524 - session->termtype,  
1525 - (session->try_lu != CN && *session->try_lu) ? "@" : "",  
1526 - (session->try_lu != CN && *session->try_lu) ? session->try_lu : "", 1526 + hSession->termtype,
  1527 + (hSession->try_lu != CN && *hSession->try_lu) ? "@" : "",
  1528 + (hSession->try_lu != CN && *hSession->try_lu) ? hSession->try_lu : "",
1527 IAC, SE); 1529 IAC, SE);
1528 - net_rawout(session, (unsigned char *)tt_out, tb_len); 1530 + net_rawout(hSession, (unsigned char *)tt_out, tb_len);
1529 1531
1530 - trace_dsn(session,"SENT %s %s %s %.*s %s\n", 1532 + trace_dsn(hSession,"SENT %s %s %s %.*s %s\n",
1531 cmd(SB), opt(TELOPT_TTYPE), 1533 cmd(SB), opt(TELOPT_TTYPE),
1532 telquals[TELQUAL_IS], 1534 telquals[TELQUAL_IS],
1533 tt_len, tt_out + 4, 1535 tt_len, tt_out + 4,
@@ -1535,24 +1537,24 @@ static int telnet_fsm(H3270 *session, unsigned char c) @@ -1535,24 +1537,24 @@ static int telnet_fsm(H3270 *session, unsigned char c)
1535 lib3270_free(tt_out); 1537 lib3270_free(tt_out);
1536 1538
1537 /* Advance to the next LU name. */ 1539 /* Advance to the next LU name. */
1538 - next_lu(session); 1540 + next_lu(hSession);
1539 } 1541 }
1540 #if defined(X3270_TN3270E) /*[*/ 1542 #if defined(X3270_TN3270E) /*[*/
1541 - else if (session->myopts[TELOPT_TN3270E] && session->sbbuf[0] == TELOPT_TN3270E) 1543 + else if (hSession->myopts[TELOPT_TN3270E] && hSession->sbbuf[0] == TELOPT_TN3270E)
1542 { 1544 {
1543 - if (tn3270e_negotiate(session)) 1545 + if (tn3270e_negotiate(hSession))
1544 return -1; 1546 return -1;
1545 } 1547 }
1546 #endif /*]*/ 1548 #endif /*]*/
1547 #if defined(HAVE_LIBSSL) /*[*/ 1549 #if defined(HAVE_LIBSSL) /*[*/
1548 - else if (session->need_tls_follows && session->myopts[TELOPT_STARTTLS] && session->sbbuf[0] == TELOPT_STARTTLS) 1550 + else if (hSession->need_tls_follows && hSession->myopts[TELOPT_STARTTLS] && hSession->sbbuf[0] == TELOPT_STARTTLS)
1549 { 1551 {
1550 - continue_tls(session,session->sbbuf, session->sbptr - session->sbbuf); 1552 + continue_tls(hSession,hSession->sbbuf, hSession->sbptr - hSession->sbbuf);
1551 } 1553 }
1552 #endif /*]*/ 1554 #endif /*]*/
1553 1555
1554 } else { 1556 } else {
1555 - session->telnet_state = TNS_SB; 1557 + hSession->telnet_state = TNS_SB;
1556 } 1558 }
1557 break; 1559 break;
1558 } 1560 }
@@ -2405,18 +2407,19 @@ static void do_lnext(H3270 *hSession, char c) @@ -2405,18 +2407,19 @@ static void do_lnext(H3270 *hSession, char c)
2405 #endif /*]*/ 2407 #endif /*]*/
2406 2408
2407 2409
2408 -  
2409 -/*  
2410 - * check_in3270  
2411 - * Check for switches between NVT, SSCP-LU and 3270 modes. 2410 +/**
  2411 + * Check for switches between NVT, SSCP-LU and 3270 modes.
  2412 + *
  2413 + * @param hSession Session handle.
  2414 + *
2412 */ 2415 */
2413 -static void  
2414 -check_in3270(H3270 *session) 2416 +static void check_in3270(H3270 *hSession)
2415 { 2417 {
2416 LIB3270_CSTATE new_cstate = NOT_CONNECTED; 2418 LIB3270_CSTATE new_cstate = NOT_CONNECTED;
2417 2419
2418 #if defined(X3270_TRACE) /*[*/ 2420 #if defined(X3270_TRACE) /*[*/
2419 - static const char *state_name[] = { 2421 + static const char *state_name[] =
  2422 + {
2420 "unconnected", 2423 "unconnected",
2421 "resolving", 2424 "resolving",
2422 "pending", 2425 "pending",
@@ -2431,10 +2434,10 @@ check_in3270(H3270 *session) @@ -2431,10 +2434,10 @@ check_in3270(H3270 *session)
2431 #endif /*]*/ 2434 #endif /*]*/
2432 2435
2433 #if defined(X3270_TN3270E) /*[*/ 2436 #if defined(X3270_TN3270E) /*[*/
2434 - if (session->myopts[TELOPT_TN3270E]) {  
2435 - if (!session->tn3270e_negotiated) 2437 + if (hSession->myopts[TELOPT_TN3270E]) {
  2438 + if (!hSession->tn3270e_negotiated)
2436 new_cstate = CONNECTED_INITIAL_E; 2439 new_cstate = CONNECTED_INITIAL_E;
2437 - else switch (session->tn3270e_submode) { 2440 + else switch (hSession->tn3270e_submode) {
2438 case E_NONE: 2441 case E_NONE:
2439 new_cstate = CONNECTED_INITIAL_E; 2442 new_cstate = CONNECTED_INITIAL_E;
2440 break; 2443 break;
@@ -2450,20 +2453,20 @@ check_in3270(H3270 *session) @@ -2450,20 +2453,20 @@ check_in3270(H3270 *session)
2450 } 2453 }
2451 } else 2454 } else
2452 #endif /*]*/ 2455 #endif /*]*/
2453 - if (session->myopts[TELOPT_BINARY] &&  
2454 - session->myopts[TELOPT_EOR] &&  
2455 - session->myopts[TELOPT_TTYPE] &&  
2456 - session->hisopts[TELOPT_BINARY] &&  
2457 - session->hisopts[TELOPT_EOR]) { 2456 + if (hSession->myopts[TELOPT_BINARY] &&
  2457 + hSession->myopts[TELOPT_EOR] &&
  2458 + hSession->myopts[TELOPT_TTYPE] &&
  2459 + hSession->hisopts[TELOPT_BINARY] &&
  2460 + hSession->hisopts[TELOPT_EOR]) {
2458 new_cstate = CONNECTED_3270; 2461 new_cstate = CONNECTED_3270;
2459 - } else if (session->cstate == CONNECTED_INITIAL) { 2462 + } else if (hSession->cstate == CONNECTED_INITIAL) {
2460 /* Nothing has happened, yet. */ 2463 /* Nothing has happened, yet. */
2461 return; 2464 return;
2462 } else { 2465 } else {
2463 new_cstate = CONNECTED_ANSI; 2466 new_cstate = CONNECTED_ANSI;
2464 } 2467 }
2465 2468
2466 - if (new_cstate != session->cstate) { 2469 + if (new_cstate != hSession->cstate) {
2467 #if defined(X3270_TN3270E) /*[*/ 2470 #if defined(X3270_TN3270E) /*[*/
2468 int was_in_e = IN_E; 2471 int was_in_e = IN_E;
2469 #endif /*]*/ 2472 #endif /*]*/
@@ -2474,37 +2477,37 @@ check_in3270(H3270 *session) @@ -2474,37 +2477,37 @@ check_in3270(H3270 *session)
2474 * TN3270E mode, reset the LU list so we can try again 2477 * TN3270E mode, reset the LU list so we can try again
2475 * in the new mode. 2478 * in the new mode.
2476 */ 2479 */
2477 - if (session->lus != (char **)NULL && was_in_e != IN_E) {  
2478 - session->curr_lu = session->lus;  
2479 - session->try_lu = *session->curr_lu; 2480 + if (hSession->lus != (char **)NULL && was_in_e != IN_E) {
  2481 + hSession->curr_lu = hSession->lus;
  2482 + hSession->try_lu = *hSession->curr_lu;
2480 } 2483 }
2481 #endif /*]*/ 2484 #endif /*]*/
2482 2485
2483 /* Allocate the initial 3270 input buffer. */ 2486 /* Allocate the initial 3270 input buffer. */
2484 - if(new_cstate >= CONNECTED_INITIAL && !(session->ibuf_size && session->ibuf)) 2487 + if(new_cstate >= CONNECTED_INITIAL && !(hSession->ibuf_size && hSession->ibuf))
2485 { 2488 {
2486 - session->ibuf = (unsigned char *) lib3270_malloc(BUFSIZ);  
2487 - session->ibuf_size = BUFSIZ;  
2488 - session->ibptr = session->ibuf; 2489 + hSession->ibuf = (unsigned char *) lib3270_malloc(BUFSIZ);
  2490 + hSession->ibuf_size = BUFSIZ;
  2491 + hSession->ibptr = hSession->ibuf;
2489 } 2492 }
2490 2493
2491 #if defined(X3270_ANSI) /*[*/ 2494 #if defined(X3270_ANSI) /*[*/
2492 /* Reinitialize line mode. */ 2495 /* Reinitialize line mode. */
2493 - if ((new_cstate == CONNECTED_ANSI && session->linemode) || 2496 + if ((new_cstate == CONNECTED_ANSI && hSession->linemode) ||
2494 new_cstate == CONNECTED_NVT) 2497 new_cstate == CONNECTED_NVT)
2495 - cooked_init(session); 2498 + cooked_init(hSession);
2496 #endif /*]*/ 2499 #endif /*]*/
2497 2500
2498 #if defined(X3270_TN3270E) /*[*/ 2501 #if defined(X3270_TN3270E) /*[*/
2499 /* If we fell out of TN3270E, remove the state. */ 2502 /* If we fell out of TN3270E, remove the state. */
2500 - if (!session->myopts[TELOPT_TN3270E]) {  
2501 - session->tn3270e_negotiated = 0;  
2502 - session->tn3270e_submode = E_NONE;  
2503 - session->tn3270e_bound = 0; 2503 + if (!hSession->myopts[TELOPT_TN3270E]) {
  2504 + hSession->tn3270e_negotiated = 0;
  2505 + hSession->tn3270e_submode = E_NONE;
  2506 + hSession->tn3270e_bound = 0;
2504 } 2507 }
2505 #endif /*]*/ 2508 #endif /*]*/
2506 - trace_dsn(session,"Now operating in %s mode.\n",state_name[new_cstate]);  
2507 - host_in3270(session,new_cstate); 2509 + trace_dsn(hSession,"Now operating in %s mode.\n",state_name[new_cstate]);
  2510 + host_in3270(hSession,new_cstate);
2508 } 2511 }
2509 } 2512 }
2510 2513
src/pw3270/v3270/iocallback.c
@@ -111,6 +111,7 @@ static void * AddSource(int source, H3270 *session, gushort events, void (*fn)(H @@ -111,6 +111,7 @@ static void * AddSource(int source, H3270 *session, gushort events, void (*fn)(H
111 src->fn = fn; 111 src->fn = fn;
112 src->poll.fd = (int) source; 112 src->poll.fd = (int) source;
113 src->poll.events = events; 113 src->poll.events = events;
  114 + src->session = session;
114 115
115 g_source_attach((GSource *) src,NULL); 116 g_source_attach((GSource *) src,NULL);
116 g_source_add_poll((GSource *) src,&src->poll); 117 g_source_add_poll((GSource *) src,&src->poll);
@@ -329,10 +330,6 @@ void v3270_register_io_handlers(v3270Class *cls) @@ -329,10 +330,6 @@ void v3270_register_io_handlers(v3270Class *cls)
329 330
330 static_AddExcept, 331 static_AddExcept,
331 332
332 -// #if !defined(_WIN32)  
333 -// static_AddOutput,  
334 -// #endif  
335 -  
336 #ifdef G_THREADS_ENABLED 333 #ifdef G_THREADS_ENABLED
337 static_CallAndWait, 334 static_CallAndWait,
338 #else 335 #else