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 | 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 | ... | ... |