Commit 0b463e02526cc0245dead44f734e4e7b9b632629

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

Implementando opção de "override" desconexão de socket, movendo mensagems do SSL…

… do log de debug para o trace padrão
android/src/br/com/bb/pw3270/lib3270.java
@@ -81,6 +81,7 @@ public class lib3270 @@ -81,6 +81,7 @@ public class lib3270
81 { 81 {
82 outData.write(data,0,len); 82 outData.write(data,0,len);
83 outData.flush(); 83 outData.flush();
  84 + return len;
84 } catch( Exception e ) 85 } catch( Exception e )
85 { 86 {
86 String msg = e.getLocalizedMessage(); 87 String msg = e.getLocalizedMessage();
@@ -315,12 +316,14 @@ public class lib3270 @@ -315,12 +316,14 @@ public class lib3270
315 316
316 public void pfkey(int id) 317 public void pfkey(int id)
317 { 318 {
318 - Log.i(TAG,"PF "+id); 319 + Log.d(TAG,"PF"+id);
  320 + sendPFkey(id);
319 } 321 }
320 322
321 public void xmit() 323 public void xmit()
322 { 324 {
323 - Log.i(TAG,"XMIT"); 325 + Log.d(TAG,"XMIT");
  326 + sendEnter();
324 } 327 }
325 328
326 /*---[ External methods ]------------------------------------------------*/ 329 /*---[ External methods ]------------------------------------------------*/
src/include/lib3270/session.h
@@ -274,6 +274,7 @@ @@ -274,6 +274,7 @@
274 274
275 // Session based callbacks 275 // Session based callbacks
276 int (*write)(H3270 *hSession, unsigned const char *buf, int len); 276 int (*write)(H3270 *hSession, unsigned const char *buf, int len);
  277 + int (*disconnect)(H3270 *hSession);
277 278
278 void (*configure)(H3270 *session, unsigned short rows, unsigned short cols); 279 void (*configure)(H3270 *session, unsigned short rows, unsigned short cols);
279 void (*update)(H3270 *session, int baddr, unsigned char c, unsigned short attr, unsigned char cursor); 280 void (*update)(H3270 *session, int baddr, unsigned char c, unsigned short attr, unsigned char cursor);
src/lib3270/globals.h
@@ -354,4 +354,5 @@ LIB3270_INTERNAL int cursor_move(H3270 *session, int baddr); @@ -354,4 +354,5 @@ LIB3270_INTERNAL int cursor_move(H3270 *session, int baddr);
354 LIB3270_INTERNAL void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt); 354 LIB3270_INTERNAL void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt);
355 LIB3270_INTERNAL void remove_input_calls(H3270 *session); 355 LIB3270_INTERNAL void remove_input_calls(H3270 *session);
356 356
357 -LIB3270_INTERNAL int lib3270_send(H3270 *hSession, unsigned const char *buf, int len); 357 +LIB3270_INTERNAL int lib3270_sock_send(H3270 *hSession, unsigned const char *buf, int len);
  358 +LIB3270_INTERNAL void lib3270_sock_disconnect(H3270 *hSession);
src/lib3270/session.c
@@ -167,7 +167,8 @@ static void lib3270_session_init(H3270 *hSession, const char *model) @@ -167,7 +167,8 @@ static void lib3270_session_init(H3270 *hSession, const char *model)
167 hSession->sz = sizeof(H3270); 167 hSession->sz = sizeof(H3270);
168 168
169 // Default calls 169 // Default calls
170 - hSession->write = lib3270_send; 170 + hSession->write = lib3270_sock_send;
  171 + hSession->disconnect = lib3270_sock_disconnect;
171 hSession->update = update_char; 172 hSession->update = update_char;
172 hSession->update_model = update_model; 173 hSession->update_model = update_model;
173 hSession->update_cursor = update_cursor; 174 hSession->update_cursor = update_cursor;
src/lib3270/telnet.c
@@ -380,8 +380,7 @@ static void set_ssl_state(H3270 *session, LIB3270_SSL_STATE state) @@ -380,8 +380,7 @@ static void set_ssl_state(H3270 *session, LIB3270_SSL_STATE state)
380 if(state == session->secure) 380 if(state == session->secure)
381 return; 381 return;
382 382
383 - trace_dsn("SSL state changes to %d",(int) state);  
384 - trace("SSL state changes to %d",(int) state); 383 + trace_dsn("SSL state changes to %d\n",(int) state);
385 384
386 session->update_ssl(session,session->secure = state); 385 session->update_ssl(session,session->secure = state);
387 } 386 }
@@ -931,12 +930,11 @@ static void connection_complete(H3270 *session) @@ -931,12 +930,11 @@ static void connection_complete(H3270 *session)
931 net_connected(session); 930 net_connected(session);
932 } 931 }
933 932
934 -/*  
935 - * net_disconnect  
936 - * Shut down the socket.  
937 - */  
938 -void net_disconnect(H3270 *session) 933 +
  934 +LIB3270_INTERNAL void lib3270_sock_disconnect(H3270 *session)
939 { 935 {
  936 + trace("%s",__FUNCTION__);
  937 +
940 #if defined(HAVE_LIBSSL) 938 #if defined(HAVE_LIBSSL)
941 if(session->ssl_con != NULL) 939 if(session->ssl_con != NULL)
942 { 940 {
@@ -946,14 +944,23 @@ void net_disconnect(H3270 *session) @@ -946,14 +944,23 @@ void net_disconnect(H3270 *session)
946 } 944 }
947 #endif 945 #endif
948 946
949 - set_ssl_state(session,LIB3270_SSL_UNSECURE);  
950 -  
951 if(session->sock >= 0) 947 if(session->sock >= 0)
952 { 948 {
953 shutdown(session->sock, 2); 949 shutdown(session->sock, 2);
954 SOCK_CLOSE(session->sock); 950 SOCK_CLOSE(session->sock);
955 session->sock = -1; 951 session->sock = -1;
956 } 952 }
  953 +}
  954 +
  955 +/*
  956 + * net_disconnect
  957 + * Shut down the socket.
  958 + */
  959 +void net_disconnect(H3270 *session)
  960 +{
  961 + set_ssl_state(session,LIB3270_SSL_UNSECURE);
  962 +
  963 + session->disconnect(session);
957 964
958 trace_dsn("SENT disconnect\n"); 965 trace_dsn("SENT disconnect\n");
959 966
@@ -1990,7 +1997,7 @@ void net_exception(H3270 *session) @@ -1990,7 +1997,7 @@ void net_exception(H3270 *session)
1990 * 1997 *
1991 */ 1998 */
1992 1999
1993 -LIB3270_INTERNAL int lib3270_send(H3270 *hSession, unsigned const char *buf, int len) 2000 +LIB3270_INTERNAL int lib3270_sock_send(H3270 *hSession, unsigned const char *buf, int len)
1994 { 2001 {
1995 int rc; 2002 int rc;
1996 2003
@@ -3249,6 +3256,8 @@ static void ssl_init(H3270 *session) @@ -3249,6 +3256,8 @@ static void ssl_init(H3270 *session)
3249 /* Callback for tracing protocol negotiation. */ 3256 /* Callback for tracing protocol negotiation. */
3250 static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret) 3257 static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret)
3251 { 3258 {
  3259 + H3270 *hSession = &h3270; // TODO: Find a better way!
  3260 +
3252 switch(where) 3261 switch(where)
3253 { 3262 {
3254 case SSL_CB_CONNECT_LOOP: 3263 case SSL_CB_CONNECT_LOOP:
@@ -3257,12 +3266,11 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret) @@ -3257,12 +3266,11 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret)
3257 3266
3258 case SSL_CB_CONNECT_EXIT: 3267 case SSL_CB_CONNECT_EXIT:
3259 3268
3260 - trace("%s: SSL_CB_CONNECT_EXIT",__FUNCTION__); 3269 + trace_dsn("%s: SSL_CB_CONNECT_EXIT\n",__FUNCTION__);
3261 3270
3262 if (ret == 0) 3271 if (ret == 0)
3263 { 3272 {
3264 trace_dsn("SSL_connect: failed in %s\n",SSL_state_string_long(s)); 3273 trace_dsn("SSL_connect: failed in %s\n",SSL_state_string_long(s));
3265 - lib3270_write_log(&h3270,"SSL","connect failed in %s (Alert: %s)",SSL_state_string_long(s),SSL_alert_type_string_long(ret));  
3266 } 3274 }
3267 else if (ret < 0) 3275 else if (ret < 0)
3268 { 3276 {
@@ -3297,7 +3305,7 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret) @@ -3297,7 +3305,7 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret)
3297 3305
3298 trace_dsn("SSL Connect error in %s\nState: %s\nAlert: %s\n",err_buf,SSL_state_string_long(s),SSL_alert_type_string_long(ret)); 3306 trace_dsn("SSL Connect error in %s\nState: %s\nAlert: %s\n",err_buf,SSL_state_string_long(s),SSL_alert_type_string_long(ret));
3299 3307
3300 - show_3270_popup_dialog( &h3270, // H3270 *session, 3308 + show_3270_popup_dialog( hSession, // H3270 *session,
3301 PW3270_DIALOG_CRITICAL, // PW3270_DIALOG type, 3309 PW3270_DIALOG_CRITICAL, // PW3270_DIALOG type,
3302 _( "SSL Connect error" ), // Title 3310 _( "SSL Connect error" ), // Title
3303 err_buf, // Message 3311 err_buf, // Message
@@ -3310,28 +3318,28 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret) @@ -3310,28 +3318,28 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret)
3310 3318
3311 3319
3312 default: 3320 default:
3313 - lib3270_write_log(NULL,"SSL","Current state is \"%s\"",SSL_state_string_long(s)); 3321 + trace_dsn("SSL Current state is \"%s\"\n",SSL_state_string_long(s));
3314 } 3322 }
3315 3323
3316 - trace("%s: state=%04x where=%04x ret=%d",__FUNCTION__,SSL_state(s),where,ret); 3324 +// trace("%s: state=%04x where=%04x ret=%d",__FUNCTION__,SSL_state(s),where,ret);
3317 3325
3318 #ifdef DEBUG 3326 #ifdef DEBUG
3319 if(where & SSL_CB_EXIT) 3327 if(where & SSL_CB_EXIT)
3320 { 3328 {
3321 - trace("%s: SSL_CB_EXIT ret=%d",__FUNCTION__,ret); 3329 + trace("%s: SSL_CB_EXIT ret=%d\n",__FUNCTION__,ret);
3322 } 3330 }
3323 #endif 3331 #endif
3324 3332
3325 if(where & SSL_CB_ALERT) 3333 if(where & SSL_CB_ALERT)
3326 - lib3270_write_log(NULL,"SSL","ALERT: %s",SSL_alert_type_string_long(ret)); 3334 + trace_dsn("SSL ALERT: %s\n",SSL_alert_type_string_long(ret));
3327 3335
3328 if(where & SSL_CB_HANDSHAKE_DONE) 3336 if(where & SSL_CB_HANDSHAKE_DONE)
3329 { 3337 {
3330 - trace("%s: SSL_CB_HANDSHAKE_DONE state=%04x",__FUNCTION__,SSL_state(s)); 3338 + trace_dsn("%s: SSL_CB_HANDSHAKE_DONE state=%04x\n",__FUNCTION__,SSL_state(s));
3331 if(SSL_state(s) == 0x03) 3339 if(SSL_state(s) == 0x03)
3332 - set_ssl_state(&h3270,LIB3270_SSL_SECURE); 3340 + set_ssl_state(hSession,LIB3270_SSL_SECURE);
3333 else 3341 else
3334 - set_ssl_state(&h3270,LIB3270_SSL_UNSECURE); 3342 + set_ssl_state(hSession,LIB3270_SSL_UNSECURE);
3335 } 3343 }
3336 } 3344 }
3337 3345
@@ -3367,7 +3375,7 @@ static void continue_tls(unsigned char *sbbuf, int len) @@ -3367,7 +3375,7 @@ static void continue_tls(unsigned char *sbbuf, int len)
3367 /* Set up the TLS/SSL connection. */ 3375 /* Set up the TLS/SSL connection. */
3368 if(SSL_set_fd(h3270.ssl_con, h3270.sock) != 1) 3376 if(SSL_set_fd(h3270.ssl_con, h3270.sock) != 1)
3369 { 3377 {
3370 - trace_dsn("Can't set fd!\n"); 3378 + trace_dsn("SSL_set_fd failed!\n");
3371 } 3379 }
3372 3380
3373 //#if defined(_WIN32) 3381 //#if defined(_WIN32)
src/lib3270/trace_ds.c
@@ -173,11 +173,10 @@ trace_ds_s(char *s, Boolean can_break) @@ -173,11 +173,10 @@ trace_ds_s(char *s, Boolean can_break)
173 } 173 }
174 } 174 }
175 175
176 -void  
177 -trace_ds(const char *fmt, ...) 176 +void trace_ds(const char *fmt, ...)
178 { 177 {
179 - char tdsbuf[4096];  
180 - va_list args; 178 + char * text;
  179 + va_list args;
181 180
182 if (!lib3270_get_toggle(&h3270,DS_TRACE)) 181 if (!lib3270_get_toggle(&h3270,DS_TRACE))
183 return; 182 return;
@@ -185,9 +184,10 @@ trace_ds(const char *fmt, ...) @@ -185,9 +184,10 @@ trace_ds(const char *fmt, ...)
185 va_start(args, fmt); 184 va_start(args, fmt);
186 185
187 /* print out remainder of message */ 186 /* print out remainder of message */
188 - (void) vsprintf(tdsbuf, fmt, args);  
189 - trace_ds_s(tdsbuf, True); 187 + text = lib3270_vsprintf(fmt,args);
  188 + trace_ds_s(text, True);
190 va_end(args); 189 va_end(args);
  190 + lib3270_free(text);
191 } 191 }
192 192
193 void 193 void
@@ -223,8 +223,7 @@ trace_event(const char *fmt, ...) @@ -223,8 +223,7 @@ trace_event(const char *fmt, ...)
223 } 223 }
224 224
225 /* Conditional data stream trace, without line splitting. */ 225 /* Conditional data stream trace, without line splitting. */
226 -void  
227 -trace_dsn(const char *fmt, ...) 226 +void trace_dsn(const char *fmt, ...)
228 { 227 {
229 va_list args; 228 va_list args;
230 229