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