Commit 9aff533ce66ca3eceb367975342ef34d6ed2491e

Authored by perry.werneck@gmail.com
1 parent 49a55f90

Iniciando implementação de trace da comunicação de rede

Showing 3 changed files with 71 additions and 45 deletions   Show diff stats
telnet.c
... ... @@ -102,6 +102,7 @@
102 102 #include "screen.h"
103 103  
104 104 #include <lib3270/internals.h>
  105 +#include <lib3270/trace.h>
105 106  
106 107 #if !defined(TELOPT_NAWS) /*[*/
107 108 #define TELOPT_NAWS 31
... ... @@ -1202,33 +1203,6 @@ void net_input(H3270 *hSession)
1202 1203  
1203 1204 lib3270_data_recv(hSession, nr, buffer);
1204 1205  
1205   -/*
1206   - trace_netdata('<', session->netrbuf, nr);
1207   -
1208   - session->ns_brcvd += nr;
1209   - for (cp = session->netrbuf; cp < (session->netrbuf + nr); cp++)
1210   - {
1211   - if (telnet_fsm(session,*cp))
1212   - {
1213   - (void) ctlr_dbcs_postprocess(hSession);
1214   - host_disconnect(session,True);
1215   - return;
1216   - }
1217   - }
1218   -
1219   -#if defined(X3270_ANSI)
1220   - if (IN_ANSI)
1221   - {
1222   - (void) ctlr_dbcs_postprocess(hSession);
1223   - }
1224   -
1225   - if (session->ansi_data)
1226   - {
1227   - trace_dsn(session,"\n");
1228   - session->ansi_data = 0;
1229   - }
1230   -#endif // X3270_ANSI
1231   -*/
1232 1206 }
1233 1207  
1234 1208 }
... ... @@ -2736,29 +2710,68 @@ opt(unsigned char c)
2736 2710  
2737 2711 void trace_netdata(H3270 *hSession, char direction, unsigned const char *buf, int len)
2738 2712 {
2739   - int offset;
2740   - struct timeval ts;
2741   - double tdiff;
2742   -
2743   - if (!lib3270_get_toggle(hSession,LIB3270_TOGGLE_DS_TRACE))
2744   - return;
2745 2713  
2746   - (void) gettimeofday(&ts, (struct timezone *)NULL);
2747   - if (IN_3270)
  2714 + // IS DS trace ON?
  2715 + if (lib3270_get_toggle(hSession,LIB3270_TOGGLE_DS_TRACE))
2748 2716 {
2749   - tdiff = ((1.0e6 * (double)(ts.tv_sec - hSession->ds_ts.tv_sec)) +
2750   - (double)(ts.tv_usec - hSession->ds_ts.tv_usec)) / 1.0e6;
2751   - trace_dsn(hSession,"%c +%gs\n", direction, tdiff);
  2717 + int offset;
  2718 + struct timeval ts;
  2719 + double tdiff;
  2720 +
  2721 + (void) gettimeofday(&ts, (struct timezone *)NULL);
  2722 + if (IN_3270)
  2723 + {
  2724 + tdiff = ((1.0e6 * (double)(ts.tv_sec - hSession->ds_ts.tv_sec)) +
  2725 + (double)(ts.tv_usec - hSession->ds_ts.tv_usec)) / 1.0e6;
  2726 + trace_dsn(hSession,"%c +%gs\n", direction, tdiff);
  2727 + }
  2728 +
  2729 + hSession->ds_ts = ts;
  2730 + for (offset = 0; offset < len; offset++)
  2731 + {
  2732 + if (!(offset % LINEDUMP_MAX))
  2733 + trace_dsn(hSession,"%s%c 0x%-3x ",(offset ? "\n" : ""), direction, offset);
  2734 + trace_dsn(hSession,"%02x", buf[offset]);
  2735 + }
  2736 + trace_dsn(hSession,"\n");
2752 2737 }
2753 2738  
2754   - hSession->ds_ts = ts;
2755   - for (offset = 0; offset < len; offset++)
  2739 + if (lib3270_get_toggle(hSession,LIB3270_TOGGLE_NETWORK_TRACE))
2756 2740 {
2757   - if (!(offset % LINEDUMP_MAX))
2758   - trace_dsn(hSession,"%s%c 0x%-3x ",(offset ? "\n" : ""), direction, offset);
2759   - trace_dsn(hSession,"%02x", buf[offset]);
  2741 + char l1[82];
  2742 + char l2[82];
  2743 + char l3[82];
  2744 +
  2745 + int offset;
  2746 + int col = 0;
  2747 +
  2748 + for (offset = 0; offset < len; offset++)
  2749 + {
  2750 + unsigned char text[4];
  2751 +
  2752 + text[0] = hSession->charset.ebc2asc[buf[offset]];
  2753 + l1[col] = (text[0] >= ' ' ? text[0] : '.');
  2754 +
  2755 + snprintf((char *) text,4,"%02x",buf[offset]);
  2756 + l2[col] = text[0];
  2757 + l3[col] = text[1];
  2758 +
  2759 + if(++col >= 80)
  2760 + {
  2761 + l1[col] = l2[col] = l3[col] = 0;
  2762 + lib3270_write_nettrace(hSession,"%c\t%s\n\t%s\n\t%s\n",direction,l1,l2,l3);
  2763 + col = 0;
  2764 + }
  2765 + }
  2766 +
  2767 + if(col)
  2768 + {
  2769 + l1[col] = l2[col] = l3[col] = 0;
  2770 + lib3270_write_nettrace(hSession,"%c\t%s\n\t%s\n\t%s\n",direction,l1,l2,l3);
  2771 + }
  2772 +
2760 2773 }
2761   - trace_dsn(hSession,"\n");
  2774 +
2762 2775 }
2763 2776 #endif // X3270_TRACE
2764 2777  
... ...
toggles.c
... ... @@ -82,7 +82,7 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] =
82 82 "fieldattr", /**< View Field attribute */
83 83 "altscreen", /**< auto resize on altscreen */
84 84 "keepalive", /**< Enable network keep-alive with SO_KEEPALIVE */
85   -
  85 + "nettrace", /**< Enable network in/out trace */
86 86  
87 87 };
88 88  
... ...
trace_ds.c
... ... @@ -214,6 +214,19 @@ LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...)
214 214 va_end(args);
215 215 }
216 216  
  217 +LIB3270_EXPORT void lib3270_write_nettrace(H3270 *session, const char *fmt, ...)
  218 +{
  219 + va_list args;
  220 +
  221 + if(!lib3270_get_toggle(session,LIB3270_TOGGLE_NETWORK_TRACE))
  222 + return;
  223 +
  224 + va_start(args, fmt);
  225 + vwtrace(session,fmt, args);
  226 + va_end(args);
  227 +}
  228 +
  229 +
217 230 LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...)
218 231 {
219 232 va_list args;
... ...