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