1 /***************************************************************************
2 begin : Fri Feb 07 2003
3 copyright : (C) 2021 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * *
8 * This library is free software; you can redistribute it and/or *
9 * modify it under the terms of the GNU Lesser General Public *
10 * License as published by the Free Software Foundation; either *
11 * version 2.1 of the License, or (at your option) any later version. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16 * Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public *
19 * License along with this library; if not, write to the Free Software *
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21 * MA 02111-1307 USA *
22 * *
23 ***************************************************************************/
24
25 /* included from gui.c */
26
27
28
GWEN_Gui_SetMessageBoxFn(GWEN_GUI * gui,GWEN_GUI_MESSAGEBOX_FN f)29 GWEN_GUI_MESSAGEBOX_FN GWEN_Gui_SetMessageBoxFn(GWEN_GUI *gui,
30 GWEN_GUI_MESSAGEBOX_FN f)
31 {
32 GWEN_GUI_MESSAGEBOX_FN of;
33
34 assert(gui);
35 of=gui->messageBoxFn;
36 gui->messageBoxFn=f;
37 return of;
38 }
39
40
41
GWEN_Gui_SetInputBoxFn(GWEN_GUI * gui,GWEN_GUI_INPUTBOX_FN f)42 GWEN_GUI_INPUTBOX_FN GWEN_Gui_SetInputBoxFn(GWEN_GUI *gui,
43 GWEN_GUI_INPUTBOX_FN f)
44 {
45 GWEN_GUI_INPUTBOX_FN of;
46
47 assert(gui);
48 of=gui->inputBoxFn;
49 gui->inputBoxFn=f;
50 return of;
51 }
52
53
54
GWEN_Gui_SetShowBoxFn(GWEN_GUI * gui,GWEN_GUI_SHOWBOX_FN f)55 GWEN_GUI_SHOWBOX_FN GWEN_Gui_SetShowBoxFn(GWEN_GUI *gui,
56 GWEN_GUI_SHOWBOX_FN f)
57 {
58 GWEN_GUI_SHOWBOX_FN of;
59
60 assert(gui);
61 of=gui->showBoxFn;
62 gui->showBoxFn=f;
63 return of;
64 }
65
66
67
GWEN_Gui_SetHideBoxFn(GWEN_GUI * gui,GWEN_GUI_HIDEBOX_FN f)68 GWEN_GUI_HIDEBOX_FN GWEN_Gui_SetHideBoxFn(GWEN_GUI *gui,
69 GWEN_GUI_HIDEBOX_FN f)
70 {
71 GWEN_GUI_HIDEBOX_FN of;
72
73 assert(gui);
74 of=gui->hideBoxFn;
75 gui->hideBoxFn=f;
76 return of;
77 }
78
79
80
GWEN_Gui_SetProgressStartFn(GWEN_GUI * gui,GWEN_GUI_PROGRESS_START_FN f)81 GWEN_GUI_PROGRESS_START_FN GWEN_Gui_SetProgressStartFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_START_FN f)
82 {
83 GWEN_GUI_PROGRESS_START_FN of;
84
85 assert(gui);
86 of=gui->progressStartFn;
87 gui->progressStartFn=f;
88 return of;
89 }
90
91
92
GWEN_Gui_SetProgressAdvanceFn(GWEN_GUI * gui,GWEN_GUI_PROGRESS_ADVANCE_FN f)93 GWEN_GUI_PROGRESS_ADVANCE_FN GWEN_Gui_SetProgressAdvanceFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_ADVANCE_FN f)
94 {
95 GWEN_GUI_PROGRESS_ADVANCE_FN of;
96
97 assert(gui);
98 of=gui->progressAdvanceFn;
99 gui->progressAdvanceFn=f;
100 return of;
101 }
102
103
104
GWEN_Gui_SetProgressSetTotalFn(GWEN_GUI * gui,GWEN_GUI_PROGRESS_SETTOTAL_FN f)105 GWEN_GUI_PROGRESS_SETTOTAL_FN GWEN_Gui_SetProgressSetTotalFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_SETTOTAL_FN f)
106 {
107 GWEN_GUI_PROGRESS_SETTOTAL_FN of;
108
109 assert(gui);
110 of=gui->progressSetTotalFn;
111 gui->progressSetTotalFn=f;
112 return of;
113 }
114
115
116
GWEN_Gui_SetProgressLogFn(GWEN_GUI * gui,GWEN_GUI_PROGRESS_LOG_FN f)117 GWEN_GUI_PROGRESS_LOG_FN GWEN_Gui_SetProgressLogFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_LOG_FN f)
118 {
119 GWEN_GUI_PROGRESS_LOG_FN of;
120
121 assert(gui);
122 of=gui->progressLogFn;
123 gui->progressLogFn=f;
124 return of;
125 }
126
127
128
GWEN_Gui_SetProgressEndFn(GWEN_GUI * gui,GWEN_GUI_PROGRESS_END_FN f)129 GWEN_GUI_PROGRESS_END_FN GWEN_Gui_SetProgressEndFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_END_FN f)
130 {
131 GWEN_GUI_PROGRESS_END_FN of;
132
133 assert(gui);
134 of=gui->progressEndFn;
135 gui->progressEndFn=f;
136 return of;
137 }
138
139
140
GWEN_Gui_SetPrintFn(GWEN_GUI * gui,GWEN_GUI_PRINT_FN f)141 GWEN_GUI_PRINT_FN GWEN_Gui_SetPrintFn(GWEN_GUI *gui,
142 GWEN_GUI_PRINT_FN f)
143 {
144 GWEN_GUI_PRINT_FN of;
145
146 assert(gui);
147 of=gui->printFn;
148 gui->printFn=f;
149 return of;
150 }
151
152
153
GWEN_Gui_SetGetPasswordFn(GWEN_GUI * gui,GWEN_GUI_GETPASSWORD_FN f)154 GWEN_GUI_GETPASSWORD_FN GWEN_Gui_SetGetPasswordFn(GWEN_GUI *gui,
155 GWEN_GUI_GETPASSWORD_FN f)
156 {
157 GWEN_GUI_GETPASSWORD_FN of;
158
159 assert(gui);
160 of=gui->getPasswordFn;
161 gui->getPasswordFn=f;
162 return of;
163 }
164
165
166
GWEN_Gui_SetSetPasswordStatusFn(GWEN_GUI * gui,GWEN_GUI_SETPASSWORDSTATUS_FN f)167 GWEN_GUI_SETPASSWORDSTATUS_FN GWEN_Gui_SetSetPasswordStatusFn(GWEN_GUI *gui,
168 GWEN_GUI_SETPASSWORDSTATUS_FN f)
169 {
170 GWEN_GUI_SETPASSWORDSTATUS_FN of;
171
172 assert(gui);
173 of=gui->setPasswordStatusFn;
174 gui->setPasswordStatusFn=f;
175 return of;
176 }
177
178
179
GWEN_Gui_SetLogHookFn(GWEN_GUI * gui,GWEN_GUI_LOG_HOOK_FN f)180 GWEN_GUI_LOG_HOOK_FN GWEN_Gui_SetLogHookFn(GWEN_GUI *gui,
181 GWEN_GUI_LOG_HOOK_FN f)
182 {
183 GWEN_GUI_LOG_HOOK_FN of;
184
185 assert(gui);
186 of=gui->logHookFn;
187 gui->logHookFn=f;
188
189 return of;
190 }
191
192
193
GWEN_Gui_SetWaitForSocketsFn(GWEN_GUI * gui,GWEN_GUI_WAITFORSOCKETS_FN f)194 GWEN_GUI_WAITFORSOCKETS_FN GWEN_Gui_SetWaitForSocketsFn(GWEN_GUI *gui,
195 GWEN_GUI_WAITFORSOCKETS_FN f)
196 {
197 GWEN_GUI_WAITFORSOCKETS_FN of;
198
199 assert(gui);
200 of=gui->waitForSocketsFn;
201 gui->waitForSocketsFn=f;
202
203 return of;
204 }
205
206
207
GWEN_Gui_SetCheckCertFn(GWEN_GUI * gui,GWEN_GUI_CHECKCERT_FN f)208 GWEN_GUI_CHECKCERT_FN GWEN_Gui_SetCheckCertFn(GWEN_GUI *gui, GWEN_GUI_CHECKCERT_FN f)
209 {
210 GWEN_GUI_CHECKCERT_FN of;
211
212 assert(gui);
213 of=gui->checkCertFn;
214 gui->checkCertFn=f;
215
216 return of;
217 }
218
219
220
GWEN_Gui_SetExecDialogFn(GWEN_GUI * gui,GWEN_GUI_EXEC_DIALOG_FN f)221 GWEN_GUI_EXEC_DIALOG_FN GWEN_Gui_SetExecDialogFn(GWEN_GUI *gui, GWEN_GUI_EXEC_DIALOG_FN f)
222 {
223 GWEN_GUI_EXEC_DIALOG_FN of;
224
225 assert(gui);
226 of=gui->execDialogFn;
227 gui->execDialogFn=f;
228
229 return of;
230 }
231
232
233
GWEN_Gui_SetOpenDialogFn(GWEN_GUI * gui,GWEN_GUI_OPEN_DIALOG_FN f)234 GWEN_GUI_OPEN_DIALOG_FN GWEN_Gui_SetOpenDialogFn(GWEN_GUI *gui, GWEN_GUI_OPEN_DIALOG_FN f)
235 {
236 GWEN_GUI_OPEN_DIALOG_FN of;
237
238 assert(gui);
239 of=gui->openDialogFn;
240 gui->openDialogFn=f;
241
242 return of;
243 }
244
245
246
GWEN_Gui_SetCloseDialogFn(GWEN_GUI * gui,GWEN_GUI_CLOSE_DIALOG_FN f)247 GWEN_GUI_CLOSE_DIALOG_FN GWEN_Gui_SetCloseDialogFn(GWEN_GUI *gui, GWEN_GUI_CLOSE_DIALOG_FN f)
248 {
249 GWEN_GUI_CLOSE_DIALOG_FN of;
250
251 assert(gui);
252 of=gui->closeDialogFn;
253 gui->closeDialogFn=f;
254
255 return of;
256 }
257
258
259
GWEN_Gui_SetRunDialogFn(GWEN_GUI * gui,GWEN_GUI_RUN_DIALOG_FN f)260 GWEN_GUI_RUN_DIALOG_FN GWEN_Gui_SetRunDialogFn(GWEN_GUI *gui, GWEN_GUI_RUN_DIALOG_FN f)
261 {
262 GWEN_GUI_RUN_DIALOG_FN of;
263
264 assert(gui);
265 of=gui->runDialogFn;
266 gui->runDialogFn=f;
267
268 return of;
269 }
270
271
272
GWEN_Gui_SetReadDialogPrefsFn(GWEN_GUI * gui,GWEN_GUI_READ_DIALOG_PREFS_FN f)273 GWEN_GUI_READ_DIALOG_PREFS_FN GWEN_Gui_SetReadDialogPrefsFn(GWEN_GUI *gui, GWEN_GUI_READ_DIALOG_PREFS_FN f)
274 {
275 GWEN_GUI_READ_DIALOG_PREFS_FN of;
276
277 assert(gui);
278 of=gui->readDialogPrefsFn;
279 gui->readDialogPrefsFn=f;
280
281 return of;
282 }
283
284
285
GWEN_Gui_SetWriteDialogPrefsFn(GWEN_GUI * gui,GWEN_GUI_WRITE_DIALOG_PREFS_FN f)286 GWEN_GUI_WRITE_DIALOG_PREFS_FN GWEN_Gui_SetWriteDialogPrefsFn(GWEN_GUI *gui, GWEN_GUI_WRITE_DIALOG_PREFS_FN f)
287 {
288 GWEN_GUI_WRITE_DIALOG_PREFS_FN of;
289
290 assert(gui);
291 of=gui->writeDialogPrefsFn;
292 gui->writeDialogPrefsFn=f;
293
294 return of;
295 }
296
297
298
GWEN_Gui_SetGetFileNameFn(GWEN_GUI * gui,GWEN_GUI_GET_FILENAME_FN f)299 GWEN_GUI_GET_FILENAME_FN GWEN_Gui_SetGetFileNameFn(GWEN_GUI *gui, GWEN_GUI_GET_FILENAME_FN f)
300 {
301 GWEN_GUI_GET_FILENAME_FN of;
302
303 assert(gui);
304 of=gui->getFileNameFn;
305 gui->getFileNameFn=f;
306
307 return of;
308 }
309
310
311
GWEN_Gui_SetGetSyncIoFn(GWEN_GUI * gui,GWEN_GUI_GETSYNCIO_FN f)312 GWEN_GUI_GETSYNCIO_FN GWEN_Gui_SetGetSyncIoFn(GWEN_GUI *gui, GWEN_GUI_GETSYNCIO_FN f)
313 {
314 GWEN_GUI_GETSYNCIO_FN of;
315
316 assert(gui);
317 of=gui->getSyncIoFn;
318 gui->getSyncIoFn=f;
319
320 return of;
321 }
322
323
324
GWEN_Gui_SetKeyDataFromTextOpenSslFn(GWEN_GUI * gui,GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN f)325 GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN GWEN_Gui_SetKeyDataFromTextOpenSslFn(GWEN_GUI *gui,
326 GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN f)
327 {
328 GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN of;
329
330 assert(gui);
331 of=gui->keyDataFromTextOpenSslFn;
332 gui->keyDataFromTextOpenSslFn=f;
333
334 return of;
335
336 }
337
338
339
340
341
GWEN_Gui_MessageBox(uint32_t flags,const char * title,const char * text,const char * b1,const char * b2,const char * b3,uint32_t guiid)342 int GWEN_Gui_MessageBox(uint32_t flags,
343 const char *title,
344 const char *text,
345 const char *b1,
346 const char *b2,
347 const char *b3,
348 uint32_t guiid)
349 {
350 GWEN_GUI *gui;
351
352 gui=GWEN_Gui_GetGui();
353 if (gui && gui->messageBoxFn)
354 return gui->messageBoxFn(gui, flags, title, text, b1, b2, b3, guiid);
355 return GWEN_ERROR_NOT_IMPLEMENTED;
356 }
357
358
359
GWEN_Gui_InputBox(uint32_t flags,const char * title,const char * text,char * buffer,int minLen,int maxLen,uint32_t guiid)360 int GWEN_Gui_InputBox(uint32_t flags,
361 const char *title,
362 const char *text,
363 char *buffer,
364 int minLen,
365 int maxLen,
366 uint32_t guiid)
367 {
368 GWEN_GUI *gui;
369
370 gui=GWEN_Gui_GetGui();
371 if (gui && gui->inputBoxFn)
372 return gui->inputBoxFn(gui, flags, title, text, buffer, minLen, maxLen, guiid);
373 return GWEN_ERROR_NOT_IMPLEMENTED;
374 }
375
376
377
GWEN_Gui_ShowBox(uint32_t flags,const char * title,const char * text,uint32_t guiid)378 uint32_t GWEN_Gui_ShowBox(uint32_t flags,
379 const char *title,
380 const char *text,
381 uint32_t guiid)
382 {
383 GWEN_GUI *gui;
384
385 gui=GWEN_Gui_GetGui();
386 if (gui && gui->showBoxFn)
387 return gui->showBoxFn(gui, flags, title, text, guiid);
388 return 0;
389 }
390
391
392
GWEN_Gui_HideBox(uint32_t id)393 void GWEN_Gui_HideBox(uint32_t id)
394 {
395 GWEN_GUI *gui;
396
397 gui=GWEN_Gui_GetGui();
398 if (gui && gui->hideBoxFn)
399 return gui->hideBoxFn(gui, id);
400 }
401
402
403
GWEN_Gui_ProgressStart(uint32_t progressFlags,const char * title,const char * text,uint64_t total,uint32_t guiid)404 uint32_t GWEN_Gui_ProgressStart(uint32_t progressFlags,
405 const char *title,
406 const char *text,
407 uint64_t total,
408 uint32_t guiid)
409 {
410 GWEN_GUI *gui;
411
412 gui=GWEN_Gui_GetGui();
413 if (gui && gui->progressStartFn)
414 return gui->progressStartFn(gui, progressFlags, title, text, total, guiid);
415 return 0;
416 }
417
418
419
GWEN_Gui_ProgressAdvance(uint32_t id,uint32_t progress)420 int GWEN_Gui_ProgressAdvance(uint32_t id, uint32_t progress)
421 {
422 GWEN_GUI *gui;
423
424 gui=GWEN_Gui_GetGui();
425 if (gui && gui->progressAdvanceFn)
426 return gui->progressAdvanceFn(gui, id, progress);
427 return 0;
428 }
429
430
431
GWEN_Gui_ProgressSetTotal(uint32_t id,uint64_t total)432 int GWEN_Gui_ProgressSetTotal(uint32_t id, uint64_t total)
433 {
434 GWEN_GUI *gui;
435
436 gui=GWEN_Gui_GetGui();
437 if (gui && gui->progressSetTotalFn)
438 return gui->progressSetTotalFn(gui, id, total);
439 return 0;
440 }
441
442
443
GWEN_Gui_ProgressLog(uint32_t id,GWEN_LOGGER_LEVEL level,const char * text)444 int GWEN_Gui_ProgressLog(uint32_t id,
445 GWEN_LOGGER_LEVEL level,
446 const char *text)
447 {
448 GWEN_GUI *gui;
449
450 gui=GWEN_Gui_GetGui();
451 if (gui && gui->progressLogFn)
452 return gui->progressLogFn(gui, id, level, text);
453 return 0;
454 }
455
456
457
GWEN_Gui_ProgressLog2(uint32_t id,GWEN_LOGGER_LEVEL level,const char * fmt,...)458 int GWEN_Gui_ProgressLog2(uint32_t id,
459 GWEN_LOGGER_LEVEL level,
460 const char *fmt, ...)
461 {
462 va_list list;
463 char msgbuffer[2048];
464 int rv;
465
466 /* prepare list for va_arg */
467 va_start(list, fmt);
468 rv=vsnprintf(msgbuffer, sizeof(msgbuffer), fmt, list);
469 if (rv<0 || rv>=(int)(sizeof(msgbuffer))) {
470 DBG_WARN(GWEN_LOGDOMAIN, "Internal buffer too small for message, truncating (%d>%d)",
471 rv, (int)(sizeof(msgbuffer)));
472 }
473 va_end(list);
474
475 return GWEN_Gui_ProgressLog(id, level, msgbuffer);
476 }
477
478
479
GWEN_Gui_ProgressEnd(uint32_t id)480 int GWEN_Gui_ProgressEnd(uint32_t id)
481 {
482 GWEN_GUI *gui;
483
484 gui=GWEN_Gui_GetGui();
485 if (gui && gui->progressEndFn)
486 return gui->progressEndFn(gui, id);
487 return GWEN_ERROR_NOT_IMPLEMENTED;
488 }
489
490
491
GWEN_Gui_Print(const char * docTitle,const char * docType,const char * descr,const char * text,uint32_t guiid)492 int GWEN_Gui_Print(const char *docTitle,
493 const char *docType,
494 const char *descr,
495 const char *text,
496 uint32_t guiid)
497 {
498 GWEN_GUI *gui;
499
500 gui=GWEN_Gui_GetGui();
501 if (gui && gui->printFn)
502 return gui->printFn(gui, docTitle, docType, descr, text, guiid);
503 return GWEN_ERROR_NOT_IMPLEMENTED;
504 }
505
506
507
GWEN_Gui_LogHook(const char * logDomain,GWEN_LOGGER_LEVEL priority,const char * s)508 int GWEN_Gui_LogHook(const char *logDomain,
509 GWEN_LOGGER_LEVEL priority, const char *s)
510 {
511 GWEN_GUI *gui;
512
513 gui=GWEN_Gui_GetGui();
514 if (gui && gui->logHookFn) {
515 if (priority>=GWEN_LoggerLevel_Debug &&
516 logDomain &&
517 strcasecmp(logDomain, "gwenhywfar")==0)
518 /* don't send possibly sensitive data to the log function because
519 * some application tend to store the messages indiscriminately.
520 * In some cases sensitive information can be send to this function
521 * which we don't want the application to store */
522 return 0;
523 else {
524 int rv;
525
526 if (gui->inLogHook==0) {
527 /* otherwise the log message seems to be uncritical, convey it */
528 gui->inLogHook++;
529 rv=gui->logHookFn(gui, logDomain, priority, s);
530 gui->inLogHook--;
531 return rv;
532 }
533 else
534 /* loghook recursion, don't convey */
535 return 0;
536 }
537 }
538 else
539 /* handle as usual */
540 return 0;
541 }
542
543
544
GWEN_Gui_KeyDataFromText_OpenSSL(const char * text,unsigned char * buffer,unsigned int bufLength)545 int GWEN_Gui_KeyDataFromText_OpenSSL(const char *text,
546 unsigned char *buffer,
547 unsigned int bufLength)
548 {
549 GWEN_GUI *gui;
550
551 gui=GWEN_Gui_GetGui();
552 if (gui && gui->keyDataFromTextOpenSslFn)
553 return gui->keyDataFromTextOpenSslFn(gui, text, buffer, bufLength);
554 return GWEN_ERROR_NOT_IMPLEMENTED;
555 }
556
557
558
GWEN_Gui_ExecDialog(GWEN_DIALOG * dlg,uint32_t guiid)559 int GWEN_Gui_ExecDialog(GWEN_DIALOG *dlg, uint32_t guiid)
560 {
561 GWEN_GUI *gui;
562
563 gui=GWEN_Gui_GetGui();
564 if (gui && gui->execDialogFn)
565 return gui->execDialogFn(gui, dlg, guiid);
566 return GWEN_ERROR_NOT_IMPLEMENTED;
567 }
568
569
570
GWEN_Gui_OpenDialog(GWEN_DIALOG * dlg,uint32_t guiid)571 int GWEN_Gui_OpenDialog(GWEN_DIALOG *dlg, uint32_t guiid)
572 {
573 GWEN_GUI *gui;
574
575 gui=GWEN_Gui_GetGui();
576 if (gui && gui->openDialogFn)
577 return gui->openDialogFn(gui, dlg, guiid);
578 return GWEN_ERROR_NOT_IMPLEMENTED;
579 }
580
581
582
GWEN_Gui_CloseDialog(GWEN_DIALOG * dlg)583 int GWEN_Gui_CloseDialog(GWEN_DIALOG *dlg)
584 {
585 GWEN_GUI *gui;
586
587 gui=GWEN_Gui_GetGui();
588 if (gui && gui->closeDialogFn)
589 return gui->closeDialogFn(gui, dlg);
590 return GWEN_ERROR_NOT_IMPLEMENTED;
591 }
592
593
594
GWEN_Gui_RunDialog(GWEN_DIALOG * dlg,int untilEnd)595 int GWEN_Gui_RunDialog(GWEN_DIALOG *dlg, int untilEnd)
596 {
597 GWEN_GUI *gui;
598
599 gui=GWEN_Gui_GetGui();
600 if (gui && gui->runDialogFn)
601 return gui->runDialogFn(gui, dlg, untilEnd);
602 return GWEN_ERROR_NOT_IMPLEMENTED;
603 }
604
605
606
607
GWEN_Gui_GetFileName(const char * caption,GWEN_GUI_FILENAME_TYPE fnt,uint32_t flags,const char * patterns,GWEN_BUFFER * pathBuffer,uint32_t guiid)608 int GWEN_Gui_GetFileName(const char *caption,
609 GWEN_GUI_FILENAME_TYPE fnt,
610 uint32_t flags,
611 const char *patterns,
612 GWEN_BUFFER *pathBuffer,
613 uint32_t guiid)
614 {
615 GWEN_GUI *gui;
616
617 gui=GWEN_Gui_GetGui();
618 if (gui && gui->getFileNameFn)
619 return gui->getFileNameFn(gui, caption, fnt, flags, patterns, pathBuffer, guiid);
620 return GWEN_ERROR_NOT_IMPLEMENTED;
621 }
622
623
624
GWEN_Gui_ReadDialogPrefs(const char * groupName,const char * altName,GWEN_DB_NODE ** pDb)625 int GWEN_Gui_ReadDialogPrefs(const char *groupName,
626 const char *altName,
627 GWEN_DB_NODE **pDb)
628 {
629 GWEN_GUI *gui;
630
631 gui=GWEN_Gui_GetGui();
632 if (gui && gui->readDialogPrefsFn)
633 return gui->readDialogPrefsFn(gui, groupName, altName, pDb);
634 return GWEN_ERROR_NOT_IMPLEMENTED;
635 }
636
637
638
GWEN_Gui_WriteDialogPrefs(const char * groupName,GWEN_DB_NODE * db)639 int GWEN_Gui_WriteDialogPrefs(const char *groupName,
640 GWEN_DB_NODE *db)
641 {
642 GWEN_GUI *gui;
643
644 gui=GWEN_Gui_GetGui();
645 if (gui && gui->writeDialogPrefsFn)
646 return gui->writeDialogPrefsFn(gui, groupName, db);
647 return GWEN_ERROR_NOT_IMPLEMENTED;
648 }
649
650
651
GWEN_Gui_GetSyncIo(const char * url,const char * defaultProto,int defaultPort,GWEN_SYNCIO ** pSio)652 int GWEN_Gui_GetSyncIo(const char *url,
653 const char *defaultProto,
654 int defaultPort,
655 GWEN_SYNCIO **pSio)
656 {
657 GWEN_GUI *gui;
658
659 gui=GWEN_Gui_GetGui();
660 if (gui && gui->getSyncIoFn)
661 return gui->getSyncIoFn(gui, url, defaultProto, defaultPort, pSio);
662 return GWEN_ERROR_NOT_IMPLEMENTED;
663 }
664
665
666
GWEN_Gui_WaitForSockets(GWEN_SOCKET_LIST2 * readSockets,GWEN_SOCKET_LIST2 * writeSockets,uint32_t guiid,int msecs)667 int GWEN_Gui_WaitForSockets(GWEN_SOCKET_LIST2 *readSockets,
668 GWEN_SOCKET_LIST2 *writeSockets,
669 uint32_t guiid,
670 int msecs)
671 {
672 GWEN_GUI *gui;
673
674 gui=GWEN_Gui_GetGui();
675 if (gui && gui->waitForSocketsFn)
676 return gui->waitForSocketsFn(gui, readSockets, writeSockets, guiid, msecs);
677 else {
678 uint32_t pid;
679 time_t t0;
680 int wt;
681 int dist;
682
683 t0=time(0);
684 if (msecs==GWEN_TIMEOUT_NONE) {
685 wt=0;
686 dist=0;
687 }
688 else if (msecs==GWEN_TIMEOUT_FOREVER) {
689 wt=0;
690 dist=500;
691 }
692 else {
693 wt=msecs/1000;
694 dist=500;
695 }
696
697 pid=GWEN_Gui_ProgressStart(((wt!=0)?GWEN_GUI_PROGRESS_SHOW_PROGRESS:0) |
698 GWEN_GUI_PROGRESS_SHOW_ABORT |
699 GWEN_GUI_PROGRESS_DELAY |
700 GWEN_GUI_PROGRESS_ALLOW_EMBED,
701 I18N("Waiting for Data"),
702 "Waiting for data to become available",
703 wt,
704 0);
705 while (1) {
706 GWEN_SOCKETSET *rset;
707 GWEN_SOCKETSET *wset;
708 GWEN_SOCKET_LIST2_ITERATOR *sit;
709
710 rset=GWEN_SocketSet_new();
711 wset=GWEN_SocketSet_new();
712
713 /* fill read socket set */
714 if (readSockets) {
715 sit=GWEN_Socket_List2_First(readSockets);
716 if (sit) {
717 GWEN_SOCKET *s;
718
719 s=GWEN_Socket_List2Iterator_Data(sit);
720 assert(s);
721
722 while (s) {
723 GWEN_SocketSet_AddSocket(rset, s);
724 s=GWEN_Socket_List2Iterator_Next(sit);
725 }
726 GWEN_Socket_List2Iterator_free(sit);
727 }
728 }
729
730 /* fill write socket set */
731 if (writeSockets) {
732 sit=GWEN_Socket_List2_First(writeSockets);
733 if (sit) {
734 GWEN_SOCKET *s;
735
736 s=GWEN_Socket_List2Iterator_Data(sit);
737 assert(s);
738
739 while (s) {
740 GWEN_SocketSet_AddSocket(wset, s);
741 s=GWEN_Socket_List2Iterator_Next(sit);
742 }
743 GWEN_Socket_List2Iterator_free(sit);
744 }
745 }
746
747 if (GWEN_SocketSet_GetSocketCount(rset)==0 &&
748 GWEN_SocketSet_GetSocketCount(wset)==0) {
749 /* no sockets to wait for, sleep for a few ms to keep cpu load down */
750 GWEN_SocketSet_free(wset);
751 GWEN_SocketSet_free(rset);
752
753 if (msecs) {
754 /* only sleep if a timeout was given */
755 DBG_DEBUG(GWEN_LOGDOMAIN, "Sleeping (no socket)");
756 GWEN_Socket_Select(NULL, NULL, NULL, GWEN_GUI_CPU_TIMEOUT);
757 }
758 GWEN_Gui_ProgressEnd(pid);
759 return GWEN_ERROR_TIMEOUT;
760 }
761 else {
762 int rv;
763 int v=0;
764
765 rv=GWEN_Socket_Select(rset, wset, NULL, dist);
766 GWEN_SocketSet_free(wset);
767 GWEN_SocketSet_free(rset);
768
769 if (rv!=GWEN_ERROR_TIMEOUT) {
770 GWEN_Gui_ProgressEnd(pid);
771 return rv;
772 }
773
774 if (wt) {
775 time_t t1;
776
777 t1=time(0);
778 v=difftime(t1, t0);
779 if (v>wt) {
780 GWEN_Gui_ProgressEnd(pid);
781 return GWEN_ERROR_TIMEOUT;
782 }
783 }
784 rv=GWEN_Gui_ProgressAdvance(pid, v);
785 if (rv==GWEN_ERROR_USER_ABORTED) {
786 GWEN_Gui_ProgressEnd(pid);
787 return rv;
788 }
789 }
790 } /* loop */
791 }
792 }
793
794
795