Commit 953f5b57cde6ccc40574ec2e00a5587bfd3ccf74

Authored by Perry Werneck
1 parent 36eda0f8

popup and trace handlers are now set by session instead of global.

src/include/lib3270/popup.h
@@ -51,6 +51,8 @@ @@ -51,6 +51,8 @@
51 LIB3270_NOTIFY_USER /**< Reserved, always the last one */ 51 LIB3270_NOTIFY_USER /**< Reserved, always the last one */
52 } LIB3270_NOTIFY; 52 } LIB3270_NOTIFY;
53 53
  54 + LIB3270_EXPORT void lib3270_set_popup_handler(H3270 *session, int (*handler)(H3270 *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list));
  55 +
54 /** 56 /**
55 * Pop up an error dialog, based on an error number. 57 * Pop up an error dialog, based on an error number.
56 * 58 *
src/include/lib3270/session.h
@@ -76,8 +76,10 @@ @@ -76,8 +76,10 @@
76 void (*autostart)(H3270 *session); 76 void (*autostart)(H3270 *session);
77 int (*print)(H3270 *session); 77 int (*print)(H3270 *session);
78 78
  79 +
79 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);
80 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);
81 83
82 #ifdef HAVE_LIBSSL 84 #ifdef HAVE_LIBSSL
83 void (*set_peer_certificate)(const X509 *cert); 85 void (*set_peer_certificate)(const X509 *cert);
src/include/lib3270/trace.h
@@ -53,7 +53,7 @@ @@ -53,7 +53,7 @@
53 * 53 *
54 * @return Current trace handler 54 * @return Current trace handler
55 */ 55 */
56 - LIB3270_EXPORT LIB3270_TRACE_HANDLER lib3270_set_trace_handler( LIB3270_TRACE_HANDLER handler); 56 + LIB3270_EXPORT LIB3270_TRACE_HANDLER lib3270_set_trace_handler(H3270 *session, LIB3270_TRACE_HANDLER handler);
57 57
58 /** 58 /**
59 * Write on trace file. 59 * Write on trace file.
src/lib3270/session.c
@@ -44,6 +44,8 @@ @@ -44,6 +44,8 @@
44 #include "kybdc.h" 44 #include "kybdc.h"
45 #include "3270ds.h" 45 #include "3270ds.h"
46 #include "popupsc.h" 46 #include "popupsc.h"
  47 +#include <lib3270/trace.h>
  48 +
47 49
48 /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/ 50 /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/
49 51
@@ -163,7 +165,7 @@ static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const @@ -163,7 +165,7 @@ static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const
163 #endif // ANDROID 165 #endif // ANDROID
164 } 166 }
165 167
166 -static int popup(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg) 168 +static int def_popup(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg)
167 { 169 {
168 #ifdef ANDROID 170 #ifdef ANDROID
169 char *mask = xs_buffer("%s\n",fmt); 171 char *mask = xs_buffer("%s\n",fmt);
@@ -177,6 +179,12 @@ static int popup(H3270 *session, LIB3270_NOTIFY type, const char *title, const c @@ -177,6 +179,12 @@ static int popup(H3270 *session, LIB3270_NOTIFY type, const char *title, const c
177 return 0; 179 return 0;
178 } 180 }
179 181
  182 +static void def_trace(H3270 *session, const char *fmt, va_list args)
  183 +{
  184 + vfprintf(stdout,fmt,args);
  185 + fflush(stdout);
  186 +}
  187 +
180 static void update_ssl(H3270 *session, LIB3270_SSL_STATE state) 188 static void update_ssl(H3270 *session, LIB3270_SSL_STATE state)
181 { 189 {
182 } 190 }
@@ -233,7 +241,8 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char @@ -233,7 +241,8 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char
233 hSession->cbk.update_selection = update_selection; 241 hSession->cbk.update_selection = update_selection;
234 hSession->cbk.cursor = set_cursor; 242 hSession->cbk.cursor = set_cursor;
235 hSession->cbk.message = message; 243 hSession->cbk.message = message;
236 - hSession->cbk.popup = popup; 244 + hSession->cbk.trace = def_trace;
  245 + hSession->cbk.popup = def_popup;
237 hSession->cbk.update_ssl = update_ssl; 246 hSession->cbk.update_ssl = update_ssl;
238 hSession->cbk.display = screen_disp; 247 hSession->cbk.display = screen_disp;
239 hSession->cbk.set_width = nop_int; 248 hSession->cbk.set_width = nop_int;
@@ -282,6 +291,17 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char @@ -282,6 +291,17 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char
282 291
283 } 292 }
284 293
  294 +LIB3270_EXPORT LIB3270_TRACE_HANDLER lib3270_set_trace_handler(H3270 *session, LIB3270_TRACE_HANDLER handler)
  295 +{
  296 + void (*ret)(H3270 *session, const char *fmt, va_list args) = session->cbk.trace;
  297 + session->cbk.trace = handler ? handler : def_trace;
  298 + return ret;
  299 +}
  300 +
  301 +LIB3270_EXPORT void lib3270_set_popup_handler(H3270 *session, int (*handler)(H3270 *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list)) {
  302 + session->cbk.popup = handler ? handler : def_popup;
  303 +}
  304 +
285 H3270 * lib3270_session_new(const char *model) 305 H3270 * lib3270_session_new(const char *model)
286 { 306 {
287 H3270 * hSession; 307 H3270 * hSession;
src/lib3270/trace_ds.c
@@ -69,18 +69,10 @@ @@ -69,18 +69,10 @@
69 #define MAX_HEADER_SIZE (10*1024) 69 #define MAX_HEADER_SIZE (10*1024)
70 70
71 71
  72 +#undef trace
  73 +
72 /* Statics */ 74 /* Statics */
73 -static void __vwtrace(H3270 *session, const char *fmt, va_list args);  
74 static void wtrace(H3270 *session, const char *fmt, ...); 75 static void wtrace(H3270 *session, const char *fmt, ...);
75 -static void (*vwtrace)(H3270 *session, const char *fmt, va_list args) = __vwtrace;  
76 -  
77 -  
78 -LIB3270_EXPORT LIB3270_TRACE_HANDLER lib3270_set_trace_handler( LIB3270_TRACE_HANDLER handler )  
79 -{  
80 - void (*ret)(H3270 *session, const char *fmt, va_list args) = vwtrace;  
81 - vwtrace = handler ? handler : __vwtrace;  
82 - return ret;  
83 -}  
84 76
85 /* display a (row,col) */ 77 /* display a (row,col) */
86 const char * rcba(H3270 *hSession, int baddr) 78 const char * rcba(H3270 *hSession, int baddr)
@@ -169,36 +161,25 @@ void trace_ds_nb(H3270 *hSession, const char *fmt, ...) @@ -169,36 +161,25 @@ void trace_ds_nb(H3270 *hSession, const char *fmt, ...)
169 } 161 }
170 162
171 /* Conditional data stream trace, without line splitting. */ 163 /* Conditional data stream trace, without line splitting. */
172 -void trace_dsn(H3270 *hSession, const char *fmt, ...) 164 +void trace_dsn(H3270 *session, const char *fmt, ...)
173 { 165 {
174 va_list args; 166 va_list args;
175 167
176 - if (!lib3270_get_toggle(hSession,DS_TRACE)) 168 + if (!lib3270_get_toggle(session,DS_TRACE))
177 return; 169 return;
178 170
179 /* print out message */ 171 /* print out message */
180 va_start(args, fmt); 172 va_start(args, fmt);
181 - vwtrace(hSession,fmt, args); 173 + session->cbk.trace(session,fmt, args);
182 va_end(args); 174 va_end(args);
183 } 175 }
184 176
185 -/*  
186 - * Write to the trace file, varargs style.  
187 - * This is the only function that actually does output to the trace file --  
188 - * all others are wrappers around this function.  
189 - */  
190 -static void __vwtrace(H3270 *session, const char *fmt, va_list args)  
191 -{  
192 - vfprintf(stdout,fmt,args);  
193 - fflush(stdout);  
194 -}  
195 -  
196 /* Write to the trace file. */ 177 /* Write to the trace file. */
197 -static void wtrace(H3270 *hSession, const char *fmt, ...) 178 +static void wtrace(H3270 *session, const char *fmt, ...)
198 { 179 {
199 va_list args; 180 va_list args;
200 va_start(args, fmt); 181 va_start(args, fmt);
201 - vwtrace(hSession,fmt, args); 182 + session->cbk.trace(session,fmt, args);
202 va_end(args); 183 va_end(args);
203 } 184 }
204 185
@@ -210,7 +191,7 @@ LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...) @@ -210,7 +191,7 @@ LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...)
210 return; 191 return;
211 192
212 va_start(args, fmt); 193 va_start(args, fmt);
213 - vwtrace(session,fmt, args); 194 + session->cbk.trace(session,fmt, args);
214 va_end(args); 195 va_end(args);
215 } 196 }
216 197
@@ -222,7 +203,7 @@ LIB3270_EXPORT void lib3270_write_nettrace(H3270 *session, const char *fmt, ...) @@ -222,7 +203,7 @@ LIB3270_EXPORT void lib3270_write_nettrace(H3270 *session, const char *fmt, ...)
222 return; 203 return;
223 204
224 va_start(args, fmt); 205 va_start(args, fmt);
225 - vwtrace(session,fmt, args); 206 + session->cbk.trace(session,fmt, args);
226 va_end(args); 207 va_end(args);
227 } 208 }
228 209
@@ -235,7 +216,7 @@ LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...) @@ -235,7 +216,7 @@ LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...)
235 return; 216 return;
236 217
237 va_start(args, fmt); 218 va_start(args, fmt);
238 - vwtrace(session,fmt, args); 219 + session->cbk.trace(session,fmt, args);
239 va_end(args); 220 va_end(args);
240 } 221 }
241 222
src/testprogram/testprogram.c
@@ -24,7 +24,7 @@ int main(int numpar, char *param[]) @@ -24,7 +24,7 @@ int main(int numpar, char *param[])
24 { 24 {
25 H3270 * h; 25 H3270 * h;
26 int rc = 0; 26 int rc = 0;
27 - const char * url = getenv("LIB3270HOST"); 27 + const char * url = getenv("TN3270URL");
28 // char line[4096]; 28 // char line[4096];
29 // pthread_t thread; 29 // pthread_t thread;
30 30