Commit b6be0002a03b6623388780f5942c51178040188f

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

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

src/include/lib3270.h
... ... @@ -117,6 +117,8 @@
117 117 LIB3270_TOGGLE_VIEW_FIELD, /**< View Field attribute */
118 118 LIB3270_TOGGLE_ALTSCREEN, /**< auto resize on altscreen */
119 119 LIB3270_TOGGLE_KEEP_ALIVE, /**< Enable network keep-alive with SO_KEEPALIVE */
  120 + LIB3270_TOGGLE_NETWORK_TRACE, /**< Enable network in/out trace */
  121 +
120 122  
121 123 // LIB3270_TOGGLE_ALT_CURSOR,
122 124 // LIB3270_TOGGLE_AID_WAIT,
... ...
src/include/lib3270/trace.h
... ... @@ -64,6 +64,17 @@
64 64 /**
65 65 * Write on trace file.
66 66 *
  67 + * Write text on trace file, if network trace is enabled.
  68 + *
  69 + * @param fmt String format.
  70 + * @param ... Arguments.
  71 + *
  72 + */
  73 + LIB3270_EXPORT void lib3270_write_nettrace(H3270 *session, const char *fmt, ...);
  74 +
  75 + /**
  76 + * Write on trace file.
  77 + *
67 78 * Write text on trace file, if event is enabled.
68 79 *
69 80 * @param fmt String format.
... ...
src/lib3270/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  
... ...
src/lib3270/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  
... ...
src/lib3270/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;
... ...
src/pw3270/main.c
... ... @@ -266,6 +266,7 @@ static void trace_window_destroy(GtkWidget *widget, H3270 *hSession)
266 266 lib3270_set_toggle(hSession,LIB3270_TOGGLE_DS_TRACE,0);
267 267 lib3270_set_toggle(hSession,LIB3270_TOGGLE_SCREEN_TRACE,0);
268 268 lib3270_set_toggle(hSession,LIB3270_TOGGLE_EVENT_TRACE,0);
  269 + lib3270_set_toggle(hSession,LIB3270_TOGGLE_NETWORK_TRACE,0);
269 270 trace_window = NULL;
270 271 }
271 272  
... ...
ui/99debug.xml
... ... @@ -37,10 +37,11 @@
37 37  
38 38 <menu name='View' >
39 39 <menu name='TraceOptions' label='Trace' >
40   - <menuitem action='toggle' id='dstrace' label='DS Trace' />
41   - <menuitem action='toggle' id='screentrace' label='Screen Trace' />
42   - <menuitem action='toggle' id='eventtrace' label='Event Trace' />
43   - <menuitem action='toggle' id='fieldattr' label='View Field Delimiters' />
  40 + <menuitem action='toggle' id='dstrace' label='DS Trace' />
  41 + <menuitem action='toggle' id='screentrace' label='Screen Trace' />
  42 + <menuitem action='toggle' id='nettrace' label='Network Trace' />
  43 + <menuitem action='toggle' id='eventtrace' label='Event Trace' />
  44 + <menuitem action='toggle' id='fieldattr' label='View Field Delimiters' />
44 45 </menu>
45 46 </menu>
46 47  
... ...