Commit 64b52c6e80c856412cd8a102d9e1d2d8af52b15f

Authored by Perry Werneck
1 parent 11c483ff

Updating trace handlers.

src/include/lib3270/session.h
... ... @@ -79,7 +79,6 @@
79 79  
80 80 void (*message)(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text);
81 81 void (*popup)(H3270 *session, LIB3270_NOTIFY id, const char *title, const char *msg, const char *fmt, va_list);
82   - void (*trace)(H3270 *session, const char *fmt, va_list args);
83 82  
84 83 #ifdef HAVE_LIBSSL
85 84 void (*set_peer_certificate)(const X509 *cert);
... ...
src/include/lib3270/trace.h
... ... @@ -42,18 +42,18 @@
42 42 #define LIB3270_AS_PRINTF(a,b) __attribute__((format(printf, a, b)))
43 43 #endif
44 44  
45   - typedef void (*LIB3270_TRACE_HANDLER)(H3270 *, const char *, va_list);
  45 + typedef void (*LIB3270_TRACE_HANDLER)(H3270 *, void *, const char *, va_list);
46 46  
47 47  
48 48 /**
49 49 * Set trace handle callback.
50 50 *
51   - * @param handle Callback to write in trace file or show trace window (NULL send all trace to stdout/syslog).
52   - * @param data User data to pass to the trace handler.
  51 + * @param hSession TN3270 Session handle.
  52 + * @param handler Callback to write in trace file or show trace window (NULL send all trace to stdout/syslog).
  53 + * @param userdata User data to pass to the trace handler.
53 54 *
54   - * @return Current trace handler
55 55 */
56   - LIB3270_EXPORT LIB3270_TRACE_HANDLER lib3270_set_trace_handler(H3270 *session, LIB3270_TRACE_HANDLER handler);
  56 + LIB3270_EXPORT void lib3270_set_trace_handler(H3270 *hSession, LIB3270_TRACE_HANDLER handler, void *userdata);
57 57  
58 58 /**
59 59 * Write on trace file.
... ...
src/lib3270/private.h
... ... @@ -618,6 +618,12 @@ struct _h3270
618 618 input_t * inputs;
619 619 int inputs_changed : 1;
620 620  
  621 + // Trace Window.
  622 + struct {
  623 + void (*handler)(H3270 *session, void *userdata, const char *fmt, va_list args);
  624 + void *userdata;
  625 + } trace;
  626 +
621 627 // Callbacks.
622 628 struct lib3270_state_callback * st_callbacks[LIB3270_STATE_USER];
623 629 struct lib3270_state_callback * st_last[LIB3270_STATE_USER];
... ...
src/lib3270/session.c
... ... @@ -209,7 +209,7 @@ static void def_popup(H3270 *session, LIB3270_NOTIFY type unused, const char *ti
209 209 #endif // ANDROID
210 210 }
211 211  
212   -static void def_trace(H3270 *session unused, const char *fmt, va_list args)
  212 +static void def_trace(H3270 *session unused, void *userdata unused, const char *fmt, va_list args)
213 213 {
214 214 vfprintf(stdout,fmt,args);
215 215 fflush(stdout);
... ... @@ -271,7 +271,6 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char
271 271 hSession->cbk.update_selection = update_selection;
272 272 hSession->cbk.cursor = set_cursor;
273 273 hSession->cbk.message = message;
274   - hSession->cbk.trace = def_trace;
275 274 hSession->cbk.popup = def_popup;
276 275 hSession->cbk.update_ssl = update_ssl;
277 276 hSession->cbk.display = screen_disp;
... ... @@ -282,6 +281,9 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char
282 281 hSession->cbk.print = print;
283 282 hSession->cbk.set_peer_certificate = set_peer_certificate;
284 283  
  284 + // Trace management.
  285 + hSession->trace.handler = def_trace;
  286 +
285 287 // Set the defaults.
286 288 hSession->extended = 1;
287 289 hSession->typeahead = 1;
... ... @@ -321,11 +323,12 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char
321 323  
322 324 }
323 325  
324   -LIB3270_EXPORT LIB3270_TRACE_HANDLER lib3270_set_trace_handler(H3270 *session, LIB3270_TRACE_HANDLER handler)
  326 +LIB3270_EXPORT void lib3270_set_trace_handler(H3270 *hSession, LIB3270_TRACE_HANDLER handler, void *userdata)
325 327 {
326   - void (*ret)(H3270 *session, const char *fmt, va_list args) = session->cbk.trace;
327   - session->cbk.trace = handler ? handler : def_trace;
328   - return ret;
  328 + CHECK_SESSION_HANDLE(hSession);
  329 +
  330 + hSession->trace.handler = handler ? handler : def_trace;
  331 + hSession->trace.userdata = userdata;
329 332 }
330 333  
331 334 LIB3270_EXPORT void lib3270_set_popup_handler(H3270 *session, void (*handler)(H3270 *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list)) {
... ...
src/lib3270/trace_ds.c
... ... @@ -170,7 +170,7 @@ void trace_dsn(H3270 *session, const char *fmt, ...)
170 170  
171 171 /* print out message */
172 172 va_start(args, fmt);
173   - session->cbk.trace(session,fmt, args);
  173 + session->trace.handler(session,session->trace.userdata,fmt, args);
174 174 va_end(args);
175 175 }
176 176  
... ... @@ -179,7 +179,7 @@ static void wtrace(H3270 *session, const char *fmt, ...)
179 179 {
180 180 va_list args;
181 181 va_start(args, fmt);
182   - session->cbk.trace(session,fmt, args);
  182 + session->trace.handler(session,session->trace.userdata,fmt, args);
183 183 va_end(args);
184 184 }
185 185  
... ... @@ -191,7 +191,7 @@ LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...)
191 191 return;
192 192  
193 193 va_start(args, fmt);
194   - session->cbk.trace(session,fmt, args);
  194 + session->trace.handler(session,session->trace.userdata,fmt, args);
195 195 va_end(args);
196 196 }
197 197  
... ... @@ -203,7 +203,7 @@ LIB3270_EXPORT void lib3270_write_nettrace(H3270 *session, const char *fmt, ...)
203 203 return;
204 204  
205 205 va_start(args, fmt);
206   - session->cbk.trace(session,fmt, args);
  206 + session->trace.handler(session,session->trace.userdata,fmt, args);
207 207 va_end(args);
208 208 }
209 209  
... ... @@ -216,7 +216,7 @@ LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...)
216 216 return;
217 217  
218 218 va_start(args, fmt);
219   - session->cbk.trace(session,fmt, args);
  219 + session->trace.handler(session,session->trace.userdata,fmt, args);
220 220 va_end(args);
221 221 }
222 222  
... ...