Commit 0b463e02526cc0245dead44f734e4e7b9b632629
1 parent
d25fb3a6
Exists in
master
and in
5 other branches
Implementando opção de "override" desconexão de socket, movendo mensagems do SSL…
… do log de debug para o trace padrão
Showing
6 changed files
with
46 additions
and
33 deletions
Show diff stats
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 |