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 81 {
82 82 outData.write(data,0,len);
83 83 outData.flush();
  84 + return len;
84 85 } catch( Exception e )
85 86 {
86 87 String msg = e.getLocalizedMessage();
... ... @@ -315,12 +316,14 @@ public class lib3270
315 316  
316 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 323 public void xmit()
322 324 {
323   - Log.i(TAG,"XMIT");
  325 + Log.d(TAG,"XMIT");
  326 + sendEnter();
324 327 }
325 328  
326 329 /*---[ External methods ]------------------------------------------------*/
... ...
src/include/lib3270/session.h
... ... @@ -274,6 +274,7 @@
274 274  
275 275 // Session based callbacks
276 276 int (*write)(H3270 *hSession, unsigned const char *buf, int len);
  277 + int (*disconnect)(H3270 *hSession);
277 278  
278 279 void (*configure)(H3270 *session, unsigned short rows, unsigned short cols);
279 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 354 LIB3270_INTERNAL void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt);
355 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 167 hSession->sz = sizeof(H3270);
168 168  
169 169 // Default calls
170   - hSession->write = lib3270_send;
  170 + hSession->write = lib3270_sock_send;
  171 + hSession->disconnect = lib3270_sock_disconnect;
171 172 hSession->update = update_char;
172 173 hSession->update_model = update_model;
173 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 380 if(state == session->secure)
381 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 385 session->update_ssl(session,session->secure = state);
387 386 }
... ... @@ -931,12 +930,11 @@ static void connection_complete(H3270 *session)
931 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 938 #if defined(HAVE_LIBSSL)
941 939 if(session->ssl_con != NULL)
942 940 {
... ... @@ -946,14 +944,23 @@ void net_disconnect(H3270 *session)
946 944 }
947 945 #endif
948 946  
949   - set_ssl_state(session,LIB3270_SSL_UNSECURE);
950   -
951 947 if(session->sock >= 0)
952 948 {
953 949 shutdown(session->sock, 2);
954 950 SOCK_CLOSE(session->sock);
955 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 965 trace_dsn("SENT disconnect\n");
959 966  
... ... @@ -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 2002 int rc;
1996 2003  
... ... @@ -3249,6 +3256,8 @@ static void ssl_init(H3270 *session)
3249 3256 /* Callback for tracing protocol negotiation. */
3250 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 3261 switch(where)
3253 3262 {
3254 3263 case SSL_CB_CONNECT_LOOP:
... ... @@ -3257,12 +3266,11 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret)
3257 3266  
3258 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 3271 if (ret == 0)
3263 3272 {
3264 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 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 3305  
3298 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 3309 PW3270_DIALOG_CRITICAL, // PW3270_DIALOG type,
3302 3310 _( "SSL Connect error" ), // Title
3303 3311 err_buf, // Message
... ... @@ -3310,28 +3318,28 @@ static void ssl_info_callback(INFO_CONST SSL *s, int where, int ret)
3310 3318  
3311 3319  
3312 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 3326 #ifdef DEBUG
3319 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 3331 #endif
3324 3332  
3325 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 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 3339 if(SSL_state(s) == 0x03)
3332   - set_ssl_state(&h3270,LIB3270_SSL_SECURE);
  3340 + set_ssl_state(hSession,LIB3270_SSL_SECURE);
3333 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 3375 /* Set up the TLS/SSL connection. */
3368 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 3381 //#if defined(_WIN32)
... ...
src/lib3270/trace_ds.c
... ... @@ -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 181 if (!lib3270_get_toggle(&h3270,DS_TRACE))
183 182 return;
... ... @@ -185,9 +184,10 @@ trace_ds(const char *fmt, ...)
185 184 va_start(args, fmt);
186 185  
187 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 189 va_end(args);
  190 + lib3270_free(text);
191 191 }
192 192  
193 193 void
... ... @@ -223,8 +223,7 @@ trace_event(const char *fmt, ...)
223 223 }
224 224  
225 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 228 va_list args;
230 229  
... ...