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 |