Commit b00a36907c88022a670aba509b1da52372ad441f

Authored by Perry Werneck
1 parent 2a4054a8

Melhorando sistema de callbacks.

src/include/lib3270/session.h
... ... @@ -83,8 +83,6 @@
83 83  
84 84 struct lib3270_session_callbacks
85 85 {
86   - unsigned short sz;
87   -
88 86 int (*write)(H3270 *hSession, unsigned const char *buf, int len);
89 87 void (*disconnect)(H3270 *hSession);
90 88  
... ... @@ -119,6 +117,8 @@
119 117 };
120 118  
121 119  
  120 + LIB3270_EXPORT struct lib3270_session_callbacks * lib3270_get_session_callbacks(H3270 *session, unsigned short sz);
  121 +
122 122 struct _h3270
123 123 {
124 124 unsigned short sz; /**< Struct size */
... ... @@ -182,10 +182,10 @@
182 182  
183 183 struct
184 184 {
185   - char * current; /**< The hostname part, stripped of qualifiers, luname and port number */
186   - char * full; /**< The entire string, for use in reconnecting */
187   - char * srvc; /**< The service name */
188   - char * qualified;
  185 + char * current; /**< The hostname part, stripped of qualifiers, luname and port number */
  186 + char * full; /**< The entire string, for use in reconnecting */
  187 + char * srvc; /**< The service name */
  188 + char * qualified;
189 189 } host;
190 190  
191 191 char * proxy; /**< Proxy server (type:host[:port]) */
... ...
src/lib3270/ctlr.c
... ... @@ -2696,27 +2696,6 @@ void ctlr_scroll(H3270 *hSession)
2696 2696 #endif /*]*/
2697 2697  
2698 2698 /*
2699   - * Note that a particular region of the screen has changed.
2700   - */
2701   -
2702   -// void changed(H3270 *session, int bstart, int bend)
2703   -// {
2704   - /*
2705   - if(session->first_changed < 0)
2706   - {
2707   - session->first_changed = bstart;
2708   - session->last_changed = bend;
2709   - return;
2710   - }
2711   - if(bstart < session->first_changed)
2712   - session->first_changed = bstart;
2713   -
2714   - if(bend > session->last_changed)
2715   - session->last_changed = bend;
2716   - */
2717   -// }
2718   -
2719   -/*
2720 2699 * Swap the regular and alternate screen buffers
2721 2700 */
2722 2701 void ctlr_altbuffer(H3270 *session, int alt)
... ...
src/lib3270/session.c
... ... @@ -331,3 +331,15 @@ LIB3270_EXPORT void * lib3270_get_user_data(H3270 *h)
331 331 CHECK_SESSION_HANDLE(h);
332 332 return h->user_data;
333 333 }
  334 +
  335 +struct lib3270_session_callbacks * lib3270_get_session_callbacks(H3270 *session, unsigned short sz)
  336 +{
  337 + CHECK_SESSION_HANDLE(session);
  338 +
  339 + if(sz != sizeof(struct lib3270_session_callbacks))
  340 + return NULL;
  341 +
  342 + return &session->cbk;
  343 +}
  344 +
  345 +
... ...
src/lib3270/telnet.c
... ... @@ -1866,10 +1866,11 @@ static void process_bind(H3270 *hSession, unsigned char *buf, int buflen)
1866 1866 }
1867 1867 #endif /*]*/
1868 1868  
1869   -static int
1870   -process_eor(H3270 *hSession)
  1869 +static int process_eor(H3270 *hSession)
1871 1870 {
  1871 +
1872 1872 trace("%s: syncing=%s",__FUNCTION__,hSession->syncing ? "Yes" : "No");
  1873 +
1873 1874 if (hSession->syncing || !(hSession->ibptr - hSession->ibuf))
1874 1875 return(0);
1875 1876  
... ...
src/pw3270/v3270/widget.c
... ... @@ -918,7 +918,11 @@ static void release_activity_timer(v3270 *widget)
918 918  
919 919 static void v3270_init(v3270 *widget)
920 920 {
921   - widget->host = lib3270_session_new("");
  921 + struct lib3270_session_callbacks *cbk;
  922 +
  923 + widget->host = lib3270_session_new("");
  924 + widget->host->user_data = widget;
  925 +
922 926  
923 927 trace("%s host->sz=%d expected=%d revision=%s expected=%s",__FUNCTION__,widget->host->sz,(int) sizeof(H3270),lib3270_get_revision(),PACKAGE_REVISION);
924 928  
... ... @@ -928,29 +932,35 @@ static void v3270_init(v3270 *widget)
928 932 return;
929 933 }
930 934  
931   - widget->host->user_data = widget;
932   -
933   - widget->host->cbk.update = v3270_update_char;
934   - widget->host->cbk.changed = changed;
935   - widget->host->cbk.set_timer = set_timer;
936   -
937   - widget->host->cbk.set_selection = set_selection;
938   - widget->host->cbk.update_selection = update_selection;
939   -
940   - widget->host->cbk.update_luname = update_luname;
941   - widget->host->cbk.configure = update_screen_size;
942   - widget->host->cbk.update_status = update_message;
943   - widget->host->cbk.update_cursor = v3270_update_cursor;
944   - widget->host->cbk.update_toggle = update_toggle;
945   - widget->host->cbk.update_oia = v3270_update_oia;
946   - widget->host->cbk.cursor = select_cursor;
947   - widget->host->cbk.update_connect = update_connect;
948   - widget->host->cbk.update_model = update_model;
949   - widget->host->cbk.changed = changed;
950   - widget->host->cbk.ctlr_done = ctlr_done;
951   - widget->host->cbk.message = message;
952   - widget->host->cbk.update_ssl = v3270_update_ssl;
953   - widget->host->cbk.print = emit_print_signal;
  935 + cbk = lib3270_get_session_callbacks(widget->host,sizeof(struct lib3270_session_callbacks));
  936 + if(!cbk)
  937 + {
  938 + g_error( _( "Invalid callback table, possible version mismatch in lib3270") );
  939 + return;
  940 + }
  941 +
  942 +
  943 + cbk->update = v3270_update_char;
  944 + cbk->changed = changed;
  945 + cbk->set_timer = set_timer;
  946 +
  947 + cbk->set_selection = set_selection;
  948 + cbk->update_selection = update_selection;
  949 +
  950 + cbk->update_luname = update_luname;
  951 + cbk->configure = update_screen_size;
  952 + cbk->update_status = update_message;
  953 + cbk->update_cursor = v3270_update_cursor;
  954 + cbk->update_toggle = update_toggle;
  955 + cbk->update_oia = v3270_update_oia;
  956 + cbk->cursor = select_cursor;
  957 + cbk->update_connect = update_connect;
  958 + cbk->update_model = update_model;
  959 + cbk->changed = changed;
  960 + cbk->ctlr_done = ctlr_done;
  961 + cbk->message = message;
  962 + cbk->update_ssl = v3270_update_ssl;
  963 + cbk->print = emit_print_signal;
954 964  
955 965  
956 966 // Reset timer
... ...