Commit 64b52c6e80c856412cd8a102d9e1d2d8af52b15f

Authored by Perry Werneck
1 parent 11c483ff

Updating trace handlers.

src/include/lib3270/session.h
@@ -79,7 +79,6 @@ @@ -79,7 +79,6 @@
79 79
80 void (*message)(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text); 80 void (*message)(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text);
81 void (*popup)(H3270 *session, LIB3270_NOTIFY id, const char *title, const char *msg, const char *fmt, va_list); 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 #ifdef HAVE_LIBSSL 83 #ifdef HAVE_LIBSSL
85 void (*set_peer_certificate)(const X509 *cert); 84 void (*set_peer_certificate)(const X509 *cert);
src/include/lib3270/trace.h
@@ -42,18 +42,18 @@ @@ -42,18 +42,18 @@
42 #define LIB3270_AS_PRINTF(a,b) __attribute__((format(printf, a, b))) 42 #define LIB3270_AS_PRINTF(a,b) __attribute__((format(printf, a, b)))
43 #endif 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 * Set trace handle callback. 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 * Write on trace file. 59 * Write on trace file.
src/lib3270/private.h
@@ -618,6 +618,12 @@ struct _h3270 @@ -618,6 +618,12 @@ struct _h3270
618 input_t * inputs; 618 input_t * inputs;
619 int inputs_changed : 1; 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 // Callbacks. 627 // Callbacks.
622 struct lib3270_state_callback * st_callbacks[LIB3270_STATE_USER]; 628 struct lib3270_state_callback * st_callbacks[LIB3270_STATE_USER];
623 struct lib3270_state_callback * st_last[LIB3270_STATE_USER]; 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,7 +209,7 @@ static void def_popup(H3270 *session, LIB3270_NOTIFY type unused, const char *ti
209 #endif // ANDROID 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 vfprintf(stdout,fmt,args); 214 vfprintf(stdout,fmt,args);
215 fflush(stdout); 215 fflush(stdout);
@@ -271,7 +271,6 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char @@ -271,7 +271,6 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char
271 hSession->cbk.update_selection = update_selection; 271 hSession->cbk.update_selection = update_selection;
272 hSession->cbk.cursor = set_cursor; 272 hSession->cbk.cursor = set_cursor;
273 hSession->cbk.message = message; 273 hSession->cbk.message = message;
274 - hSession->cbk.trace = def_trace;  
275 hSession->cbk.popup = def_popup; 274 hSession->cbk.popup = def_popup;
276 hSession->cbk.update_ssl = update_ssl; 275 hSession->cbk.update_ssl = update_ssl;
277 hSession->cbk.display = screen_disp; 276 hSession->cbk.display = screen_disp;
@@ -282,6 +281,9 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char @@ -282,6 +281,9 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char
282 hSession->cbk.print = print; 281 hSession->cbk.print = print;
283 hSession->cbk.set_peer_certificate = set_peer_certificate; 282 hSession->cbk.set_peer_certificate = set_peer_certificate;
284 283
  284 + // Trace management.
  285 + hSession->trace.handler = def_trace;
  286 +
285 // Set the defaults. 287 // Set the defaults.
286 hSession->extended = 1; 288 hSession->extended = 1;
287 hSession->typeahead = 1; 289 hSession->typeahead = 1;
@@ -321,11 +323,12 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char @@ -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 LIB3270_EXPORT void lib3270_set_popup_handler(H3270 *session, void (*handler)(H3270 *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list)) { 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,7 +170,7 @@ void trace_dsn(H3270 *session, const char *fmt, ...)
170 170
171 /* print out message */ 171 /* print out message */
172 va_start(args, fmt); 172 va_start(args, fmt);
173 - session->cbk.trace(session,fmt, args); 173 + session->trace.handler(session,session->trace.userdata,fmt, args);
174 va_end(args); 174 va_end(args);
175 } 175 }
176 176
@@ -179,7 +179,7 @@ static void wtrace(H3270 *session, const char *fmt, ...) @@ -179,7 +179,7 @@ static void wtrace(H3270 *session, const char *fmt, ...)
179 { 179 {
180 va_list args; 180 va_list args;
181 va_start(args, fmt); 181 va_start(args, fmt);
182 - session->cbk.trace(session,fmt, args); 182 + session->trace.handler(session,session->trace.userdata,fmt, args);
183 va_end(args); 183 va_end(args);
184 } 184 }
185 185
@@ -191,7 +191,7 @@ LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...) @@ -191,7 +191,7 @@ LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...)
191 return; 191 return;
192 192
193 va_start(args, fmt); 193 va_start(args, fmt);
194 - session->cbk.trace(session,fmt, args); 194 + session->trace.handler(session,session->trace.userdata,fmt, args);
195 va_end(args); 195 va_end(args);
196 } 196 }
197 197
@@ -203,7 +203,7 @@ LIB3270_EXPORT void lib3270_write_nettrace(H3270 *session, const char *fmt, ...) @@ -203,7 +203,7 @@ LIB3270_EXPORT void lib3270_write_nettrace(H3270 *session, const char *fmt, ...)
203 return; 203 return;
204 204
205 va_start(args, fmt); 205 va_start(args, fmt);
206 - session->cbk.trace(session,fmt, args); 206 + session->trace.handler(session,session->trace.userdata,fmt, args);
207 va_end(args); 207 va_end(args);
208 } 208 }
209 209
@@ -216,7 +216,7 @@ LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...) @@ -216,7 +216,7 @@ LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...)
216 return; 216 return;
217 217
218 va_start(args, fmt); 218 va_start(args, fmt);
219 - session->cbk.trace(session,fmt, args); 219 + session->trace.handler(session,session->trace.userdata,fmt, args);
220 va_end(args); 220 va_end(args);
221 } 221 }
222 222