Commit 64b52c6e80c856412cd8a102d9e1d2d8af52b15f
1 parent
11c483ff
Exists in
master
and in
3 other branches
Updating trace handlers.
Showing
5 changed files
with
25 additions
and
17 deletions
Show diff stats
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 |