1 /***************************************************************************
2 begin : Mon Mar 01 2004
3 copyright : (C) 2004-2010 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10
11 #ifdef HAVE_CONFIG_H
12 # include <config.h>
13 #endif
14
15 #include "cppgui_p.hpp"
16 #include <assert.h>
17
18 #include <gwenhywfar/inherit.h>
19 #include <gwenhywfar/debug.h>
20 #include <gwenhywfar/gui_be.h>
21 #include <gwenhywfar/i18n.h>
22
23 #include <gwenhywfar/text.h>
24 #include <gwenhywfar/mdigest.h>
25 #include <gwenhywfar/debug.h>
26
27
28
29 GWEN_INHERIT(GWEN_GUI, CppGui);
30
31
32
33
Print(GWEN_GUI * gui,const char * docTitle,const char * docType,const char * descr,const char * text,uint32_t guiid)34 int CppGuiLinker::Print(GWEN_GUI *gui,
35 const char *docTitle,
36 const char *docType,
37 const char *descr,
38 const char *text,
39 uint32_t guiid) {
40 CppGui *xgui;
41
42 assert(gui);
43 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
44 assert(xgui);
45
46 return xgui->print(docTitle, docType, descr, text, guiid);
47 }
48
49
50
GetPassword(GWEN_GUI * gui,uint32_t flags,const char * token,const char * title,const char * text,char * buffer,int minLen,int maxLen,GWEN_GUI_PASSWORD_METHOD methodId,GWEN_DB_NODE * methodParams,uint32_t guiid)51 int CppGuiLinker::GetPassword(GWEN_GUI *gui,
52 uint32_t flags,
53 const char *token,
54 const char *title,
55 const char *text,
56 char *buffer,
57 int minLen,
58 int maxLen,
59 GWEN_GUI_PASSWORD_METHOD methodId,
60 GWEN_DB_NODE *methodParams,
61 uint32_t guiid) {
62 CppGui *xgui;
63
64 assert(gui);
65 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
66 assert(xgui);
67
68 return xgui->getPassword(flags, token, title, text, buffer, minLen, maxLen, methodId, methodParams, guiid);
69 }
70
71
72
SetPasswordStatus(GWEN_GUI * gui,const char * token,const char * pin,GWEN_GUI_PASSWORD_STATUS status,uint32_t guiid)73 int CppGuiLinker::SetPasswordStatus(GWEN_GUI *gui,
74 const char *token,
75 const char *pin,
76 GWEN_GUI_PASSWORD_STATUS status,
77 uint32_t guiid) {
78 CppGui *xgui;
79
80 assert(gui);
81 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
82 assert(xgui);
83
84 return xgui->setPasswordStatus(token, pin, status, guiid);
85 }
86
87
88
CheckCert(GWEN_GUI * gui,const GWEN_SSLCERTDESCR * cert,GWEN_SYNCIO * sio,uint32_t guiid)89 int CppGuiLinker::CheckCert(GWEN_GUI *gui,
90 const GWEN_SSLCERTDESCR *cert,
91 GWEN_SYNCIO *sio,
92 uint32_t guiid) {
93 CppGui *xgui;
94
95 assert(gui);
96 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
97 assert(xgui);
98
99 return xgui->checkCert(cert, sio, guiid);
100 }
101
102
103
LogHook(GWEN_GUI * gui,const char * logDomain,GWEN_LOGGER_LEVEL priority,const char * s)104 int CppGuiLinker::LogHook(GWEN_GUI *gui,
105 const char *logDomain,
106 GWEN_LOGGER_LEVEL priority, const char *s) {
107 CppGui *xgui;
108
109 assert(gui);
110 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
111 assert(xgui);
112
113 return xgui->logHook(logDomain, priority, s);
114 }
115
116
117
ExecDialog(GWEN_GUI * gui,GWEN_DIALOG * dlg,uint32_t guiid)118 int CppGuiLinker::ExecDialog(GWEN_GUI *gui,
119 GWEN_DIALOG *dlg,
120 uint32_t guiid) {
121 CppGui *xgui;
122
123 assert(gui);
124 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
125 assert(xgui);
126
127 return xgui->execDialog(dlg, guiid);
128 }
129
130
131
OpenDialog(GWEN_GUI * gui,GWEN_DIALOG * dlg,uint32_t guiid)132 int CppGuiLinker::OpenDialog(GWEN_GUI *gui,
133 GWEN_DIALOG *dlg,
134 uint32_t guiid) {
135 CppGui *xgui;
136
137 assert(gui);
138 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
139 assert(xgui);
140
141 DBG_ERROR(0, "CppGuiLinker::OpenDialog");
142
143 return xgui->openDialog(dlg, guiid);
144 }
145
146
147
CloseDialog(GWEN_GUI * gui,GWEN_DIALOG * dlg)148 int CppGuiLinker::CloseDialog(GWEN_GUI *gui,
149 GWEN_DIALOG *dlg) {
150 CppGui *xgui;
151
152 assert(gui);
153 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
154 assert(xgui);
155
156 return xgui->closeDialog(dlg);
157 }
158
159
160
RunDialog(GWEN_GUI * gui,GWEN_DIALOG * dlg,int untilEnd)161 int CppGuiLinker::RunDialog(GWEN_GUI *gui,
162 GWEN_DIALOG *dlg,
163 int untilEnd) {
164 CppGui *xgui;
165
166 assert(gui);
167 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
168 assert(xgui);
169
170 return xgui->runDialog(dlg, untilEnd);
171 }
172
173
174
GetFileName(GWEN_GUI * gui,const char * caption,GWEN_GUI_FILENAME_TYPE fnt,uint32_t flags,const char * patterns,GWEN_BUFFER * pathBuffer,uint32_t guiid)175 int CppGuiLinker::GetFileName(GWEN_GUI *gui,
176 const char *caption,
177 GWEN_GUI_FILENAME_TYPE fnt,
178 uint32_t flags,
179 const char *patterns,
180 GWEN_BUFFER *pathBuffer,
181 uint32_t guiid) {
182 CppGui *xgui;
183
184 assert(gui);
185 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
186 assert(xgui);
187
188 return xgui->getFileName(caption, fnt, flags, patterns, pathBuffer, guiid);
189 }
190
191
192
193 GWENHYWFAR_CB
freeData(void * bp,void * p)194 void CppGuiLinker::freeData(void *bp, void *p) {
195 CppGui *xgui;
196
197 DBG_NOTICE(0, "CppGuiLinker: Freeing CppGui");
198 xgui=(CppGui*)p;
199 if (xgui->_gui) {
200 xgui->_gui=0;
201 }
202 delete xgui;
203 }
204
205
206
207
208
209
210
211
212
213
214
215
CppGui()216 CppGui::CppGui()
217 :_checkCertFn(NULL)
218 ,_gui(NULL) {
219 _gui=GWEN_Gui_new();
220
221 GWEN_INHERIT_SETDATA(GWEN_GUI, CppGui,
222 _gui, this,
223 CppGuiLinker::freeData);
224 GWEN_Gui_UseDialogs(_gui);
225 _checkCertFn=GWEN_Gui_SetCheckCertFn(_gui, CppGuiLinker::CheckCert);
226 _printFn=GWEN_Gui_SetPrintFn(_gui, CppGuiLinker::Print);
227 _getPasswordFn=GWEN_Gui_SetGetPasswordFn(_gui, CppGuiLinker::GetPassword);
228 _setPasswordStatusFn=GWEN_Gui_SetSetPasswordStatusFn(_gui, CppGuiLinker::SetPasswordStatus);
229 GWEN_Gui_SetLogHookFn(_gui, CppGuiLinker::LogHook);
230 _execDialogFn=GWEN_Gui_SetExecDialogFn(_gui, CppGuiLinker::ExecDialog);
231 _openDialogFn=GWEN_Gui_SetOpenDialogFn(_gui, CppGuiLinker::OpenDialog);
232 _closeDialogFn=GWEN_Gui_SetCloseDialogFn(_gui, CppGuiLinker::CloseDialog);
233 _runDialogFn=GWEN_Gui_SetRunDialogFn(_gui, CppGuiLinker::RunDialog);
234 _getFileNameFn=GWEN_Gui_SetGetFileNameFn(_gui, CppGuiLinker::GetFileName);
235 }
236
237
238
~CppGui()239 CppGui::~CppGui() {
240 if (_gui) {
241 GWEN_INHERIT_UNLINK(GWEN_GUI, CppGui, _gui)
242 GWEN_Gui_free(_gui);
243 }
244 }
245
246
247
checkCert(const GWEN_SSLCERTDESCR * cd,GWEN_SYNCIO * sio,uint32_t guiid)248 int CppGui::checkCert(const GWEN_SSLCERTDESCR *cd,
249 GWEN_SYNCIO *sio,
250 uint32_t guiid) {
251 return checkCertBuiltIn(cd, sio, guiid);
252 }
253
254
255
logHook(const char * logDomain,GWEN_LOGGER_LEVEL priority,const char * s)256 int CppGui::logHook(const char *logDomain,
257 GWEN_LOGGER_LEVEL priority, const char *s) {
258 /* not hooked */
259 return 0;
260 }
261
262
263
execDialog(GWEN_DIALOG * dlg,uint32_t guiid)264 int CppGui::execDialog(GWEN_DIALOG *dlg, uint32_t guiid) {
265 return GWEN_ERROR_NOT_SUPPORTED;
266 }
267
268
269
openDialog(GWEN_DIALOG * dlg,uint32_t guiid)270 int CppGui::openDialog(GWEN_DIALOG *dlg, uint32_t guiid) {
271 DBG_ERROR(0, "CppGui::OpenDialog");
272
273 return GWEN_ERROR_NOT_SUPPORTED;
274 }
275
276
277
closeDialog(GWEN_DIALOG * dlg)278 int CppGui::closeDialog(GWEN_DIALOG *dlg) {
279 return GWEN_ERROR_NOT_SUPPORTED;
280 }
281
282
283
runDialog(GWEN_DIALOG * dlg,int untilEnd)284 int CppGui::runDialog(GWEN_DIALOG *dlg, int untilEnd) {
285 return GWEN_ERROR_NOT_SUPPORTED;
286 }
287
288
289
getFileName(const char * caption,GWEN_GUI_FILENAME_TYPE fnt,uint32_t flags,const char * patterns,GWEN_BUFFER * pathBuffer,uint32_t guiid)290 int CppGui::getFileName(const char *caption,
291 GWEN_GUI_FILENAME_TYPE fnt,
292 uint32_t flags,
293 const char *patterns,
294 GWEN_BUFFER *pathBuffer,
295 uint32_t guiid) {
296 DBG_ERROR(0, "Not supported");
297 return GWEN_ERROR_NOT_SUPPORTED;
298 }
299
300
301
print(const char * docTitle,const char * docType,const char * descr,const char * text,uint32_t guiid)302 int CppGui::print(const char *docTitle,
303 const char *docType,
304 const char *descr,
305 const char *text,
306 uint32_t guiid) {
307 if (_printFn)
308 return _printFn(_gui, docTitle, docType, descr, text, guiid);
309 else
310 return GWEN_ERROR_NOT_SUPPORTED;
311 }
312
313
314
315
checkCertBuiltIn(const GWEN_SSLCERTDESCR * cert,GWEN_SYNCIO * sio,uint32_t guiid)316 int CppGui::checkCertBuiltIn(const GWEN_SSLCERTDESCR *cert,
317 GWEN_SYNCIO *sio,
318 uint32_t guiid) {
319 if (_checkCertFn)
320 return _checkCertFn(_gui, cert, sio, guiid);
321 else {
322 DBG_ERROR(0, "No built-in checkcert function?");
323 return GWEN_ERROR_NOT_SUPPORTED;
324 }
325 }
326
327
328
getPassword(uint32_t flags,const char * token,const char * title,const char * text,char * buffer,int minLen,int maxLen,GWEN_GUI_PASSWORD_METHOD methodId,GWEN_DB_NODE * methodParams,uint32_t guiid)329 int CppGui::getPassword(uint32_t flags,
330 const char *token,
331 const char *title,
332 const char *text,
333 char *buffer,
334 int minLen,
335 int maxLen,
336 GWEN_GUI_PASSWORD_METHOD methodId,
337 GWEN_DB_NODE *methodParams,
338 uint32_t guiid) {
339 if (_getPasswordFn)
340 return _getPasswordFn(_gui, flags, token, title, text, buffer, minLen, maxLen, methodId, methodParams, guiid);
341 else
342 return GWEN_ERROR_NOT_SUPPORTED;
343 }
344
345
346
setPasswordStatus(const char * token,const char * pin,GWEN_GUI_PASSWORD_STATUS status,uint32_t guiid)347 int CppGui::setPasswordStatus(const char *token,
348 const char *pin,
349 GWEN_GUI_PASSWORD_STATUS status,
350 uint32_t guiid) {
351 if (_setPasswordStatusFn)
352 return _setPasswordStatusFn(_gui, token, pin, status, guiid);
353 else
354 return GWEN_ERROR_NOT_SUPPORTED;
355 }
356
357
358
359
360
setPasswordDb(GWEN_DB_NODE * dbPasswords,int persistent)361 void CppGui::setPasswordDb(GWEN_DB_NODE *dbPasswords, int persistent) {
362 GWEN_Gui_SetPasswordDb(_gui, dbPasswords, persistent);
363 }
364
365
366
setPasswordStore(GWEN_PASSWD_STORE * sto)367 void CppGui::setPasswordStore(GWEN_PASSWD_STORE *sto) {
368 GWEN_Gui_SetPasswdStore(_gui, sto);
369 }
370
371
372
getCInterface()373 GWEN_GUI *CppGui::getCInterface() {
374 return _gui;
375 }
376
377
378
getCppGui()379 CppGui *CppGui::getCppGui() {
380 GWEN_GUI *gui;
381 CppGui *xgui;
382
383 gui=GWEN_Gui_GetGui();
384 if (gui==NULL)
385 return NULL;
386 xgui=GWEN_INHERIT_GETDATA(GWEN_GUI, CppGui, gui);
387 return xgui;
388 }
389
390
391
392
393
394