30 #define DISABLE_DEBUGLOG 45 #include <gwenhywfar/debug.h> 46 #include <gwenhywfar/dialog_be.h> 47 #include <gwenhywfar/mdigest.h> 48 #include <gwenhywfar/text.h> 49 #include <gwenhywfar/url.h> 50 #include <gwenhywfar/syncio_socket.h> 51 #include <gwenhywfar/syncio_buffered.h> 52 #include <gwenhywfar/syncio_tls.h> 53 #include <gwenhywfar/syncio_http.h> 60 #if defined (HAVE_LANGINFO_H) 61 # include <langinfo.h> 62 #elif defined (HAVE_LOCALCHARSET_H) 63 # include <localcharset.h> 92 gui->progressDataTree=GWEN_ProgressData_Tree_new();
109 assert(gui->refCount);
110 if ((--gui->refCount)==0) {
114 GWEN_ProgressData_Tree_free(gui->progressDataTree);
119 if (gui->passwdStore)
150 assert(gui->refCount);
175 const char *fromCs,
const char *toCs)
183 ic=iconv_open(toCs, fromCs);
184 if (ic==(iconv_t)-1) {
186 fromCs, toCs, strerror(errno));
208 done=iconv(ic, &pInbuf, &inLeft, &pOutbuf, &outLeft);
211 if (done==(
size_t)-1) {
227 strerror(errno), errno);
260 const char *fmt, ...)
269 rv=vfprintf(stream, fmt, args);
272 rv=vfprintf(stream, fmt, args);
282 if (spaceNeeded==(
size_t) -1) {
283 fprintf(stderr,
"GWEN INTERNAL ERROR: vsnprintf returned -1 on fmt=\"%s\"?\n", fmt);
287 if (spaceNeeded>=bufLen) {
294 if (spaceNeeded>=bufLen) {
295 fprintf(stderr,
"GWEN INTERNAL ERROR: Still not enough space (%lu >=%lu)? SNH!\n",
296 (
long unsigned int) spaceNeeded, (
long unsigned int) bufLen);
297 assert(spaceNeeded<bufLen);
305 outbuf,
"UTF-8", gui->charSet);
360 while ((p=strchr(p,
'<'))) {
365 if (toupper(*t)==
'H') {
367 if (toupper(*t)==
'T') {
369 if (toupper(*t)==
'M') {
371 if (toupper(*t)==
'L') {
395 of=gui->messageBoxFn;
446 of=gui->progressStartFn;
447 gui->progressStartFn=f;
458 of=gui->progressAdvanceFn;
459 gui->progressAdvanceFn=f;
470 of=gui->progressSetTotalFn;
471 gui->progressSetTotalFn=f;
482 of=gui->progressLogFn;
483 gui->progressLogFn=f;
494 of=gui->progressEndFn;
495 gui->progressEndFn=f;
520 of=gui->getPasswordFn;
521 gui->getPasswordFn=f;
533 of=gui->setPasswordStatusFn;
534 gui->setPasswordStatusFn=f;
560 of=gui->waitForSocketsFn;
561 gui->waitForSocketsFn=f;
586 of=gui->execDialogFn;
599 of=gui->openDialogFn;
612 of=gui->closeDialogFn;
613 gui->closeDialogFn=f;
638 of=gui->readDialogPrefsFn;
639 gui->readDialogPrefsFn=f;
651 of=gui->writeDialogPrefsFn;
652 gui->writeDialogPrefsFn=f;
664 of=gui->getFileNameFn;
665 gui->getFileNameFn=f;
691 of=gui->keyDataFromTextOpenSslFn;
692 gui->keyDataFromTextOpenSslFn=f;
736 gui->name=strdup(name);
770 #if defined(HAVE_LANGINFO_H) 771 cs=nl_langinfo(CODESET);
772 #elif defined(HAVE_LOCALCHARSET_H) 782 if (strcasecmp(cs,
"UTF-8")==0)
791 "Missing iconv, cannot convert between UTF-8 and \"%s\"", cs);
801 p=(
char *)malloc(len+11);
803 sprintf(p,
"%s//TRANSLIT", cs);
804 ic=iconv_open(p,
"UTF-8");
805 if (ic==(iconv_t)-1) {
807 "Charset conversion from \"UTF-8\" to \"%s\" failed: %s (%d)",
808 p, strerror(errno), errno);
818 gui->charSet=(
char *)cs;
827 return gui->passwdStore;
836 if (gui->passwdStore && gui->passwdStore!=sto)
838 gui->passwdStore=sto;
853 gui->dbPasswords=dbPasswords;
854 gui->persistentPasswords=persistent;
861 return gui->dbPasswords;
897 char msgbuffer[2048];
902 rv=vsnprintf(msgbuffer,
sizeof(msgbuffer), fmt, list);
903 if (rv<0 || rv>=(
int)(
sizeof(msgbuffer))) {
905 rv, (
int)(
sizeof(msgbuffer)));
933 minLen, maxLen, guiid);
1017 const char *fmt, ...)
1020 char msgbuffer[2048];
1024 va_start(list, fmt);
1025 rv=vsnprintf(msgbuffer,
sizeof(msgbuffer), fmt, list);
1026 if (rv<0 || rv>=(
int)(
sizeof(msgbuffer))) {
1028 rv, (
int)(
sizeof(msgbuffer)));
1047 const char *docType,
1110 token, pin, status, guiid);
1122 strcasecmp(logDomain,
"gwenhywfar")==0)
1181 I18N(
"Waiting for Data"),
1182 "Waiting for data to become available",
1292 const char *hashMd5;
1293 const char *hashSha1;
1294 const char *hashSha512;
1297 const char *statusOn;
1298 const char *statusOff;
1304 const char *unknown;
1305 const char *commonName;
1306 const char *organizationName;
1307 const char *organizationalUnitName;
1308 const char *countryName;
1309 const char *localityName;
1310 const char *stateOrProvinceName;
1313 "The following certificate has been received:\n" 1315 "Organisation : %s\n" 1320 "Valid after : %s\n" 1321 "Valid until : %s\n" 1323 "Hash (SHA1) : %s\n" 1324 "Hash (SHA512): %s\n" 1326 "Do you wish to accept this certificate?" 1330 " The following certificate has been received:" 1333 " <tr><td>Name</td><td>%s</td></tr>" 1334 " <tr><td>Organisation</td><td>%s</td></tr>" 1335 " <tr><td>Department</td><td>%s</td></tr>" 1336 " <tr><td>Country</td><td>%s</td></tr>" 1337 " <tr><td>City</td><td>%s</td></tr>" 1338 " <tr><td>State</td><td>%s</td></tr>" 1339 " <tr><td>Valid after</td><td>%s</td></tr>" 1340 " <tr><td>Valid until</td><td>%s</td></tr>" 1341 " <tr><td>Hash (MD5)</td><td>%s</td></tr>" 1342 " <tr><td>Hash (SHA1)</td><td>%s</td></tr>" 1343 " <tr><td>Hash (SHA512)</td><td>%s</td></tr>" 1344 " <tr><td>Status</td><td>%s%s%s</td></tr>" 1347 " Do you wish to accept this certificate?" 1352 memset(dbuffer1, 0,
sizeof(dbuffer1));
1353 memset(dbuffer2, 0,
sizeof(dbuffer2));
1354 memset(varName, 0,
sizeof(varName));
1377 "Could not convert beforeDate to string");
1391 "Could not convert untilDate to string");
1399 statusOn=
"<font color=red>";
1400 statusOff=
"</font>";
1403 statusOn=
"<font color=green>";
1404 statusOff=
"</font>";
1407 unknown=
I18N(
"unknown");
1412 if (!organizationName)
1413 organizationName=unknown;
1415 if (!organizationalUnitName)
1416 organizationalUnitName=unknown;
1419 countryName=unknown;
1422 localityName=unknown;
1424 if (!stateOrProvinceName)
1425 stateOrProvinceName=unknown;
1429 snprintf(buffer,
sizeof(buffer)-1,
1433 organizationalUnitName,
1436 stateOrProvinceName,
1445 organizationalUnitName,
1448 stateOrProvinceName,
1461 I18N(
"Certificate Received"),
1463 I18N(
"Yes"),
I18N(
"No"), 0, guiid);
1477 unsigned char *buffer,
1478 unsigned int bufLength)
1530 const char *patterns,
1548 const char *altName,
1569 const char *defaultProto,
1602 t=GWEN_ProgressData_Tree_GetParent(t);
1682 uint32_t progressFlags,
1692 id=++(gui->nextProgressId);
1695 progressFlags, title?title:
"(none)", (uint32_t) total, guiid);
1698 guiid=gui->lastProgressId;
1703 if (pdParent==
NULL) {
1706 title?title:
"no title",
1707 text?text:
"no text");
1715 GWEN_ProgressData_Tree_AddChild(pdParent, pd);
1717 GWEN_ProgressData_Tree_Add(gui->progressDataTree, pd);
1721 gui->lastProgressId=id;
1736 pid=gui->lastProgressId;
1756 previousPd=GWEN_ProgressData_Tree_GetParent(pd);
1759 while (previousPd) {
1762 previousPd=GWEN_ProgressData_Tree_GetParent(previousPd);
1813 else if (secondary==pd) {
1836 GWEN_ProgressData_Tree_Del(pd);
1851 pid=gui->lastProgressId;
1902 pid=gui->lastProgressId;
1951 if (level<=gui->minProgressLogLevel) {
1956 pid=gui->lastProgressId;
2079 id=++(gui->nextDialogId);
2133 const char *defaultProto,
2139 const char *sProtocol=
NULL;
2141 const char *addr=
NULL;
2146 if (!(url && *url)) {
2160 if (!(sProtocol && *sProtocol))
2161 sProtocol=defaultProto;
2166 if (!(addr && *addr)) {
2173 if (!(sProtocol && *sProtocol))
2178 if (strcasecmp(sProtocol,
"http")==0 ||
2179 strcasecmp(sProtocol,
"https")==0) {
2188 if (strcasecmp(sProtocol,
"https")==0) {
2249 sProtocol?sProtocol:
"(empty)");
2258 const char *defaultProto,
2269 if (!(url && *url)) {
2292 if (!(addr && *addr)) {
2371 (gui->dbPasswords==
NULL)
2397 if (i>=minLen && i < maxLen) {
2398 memmove(buffer, s, i+1);
2410 if (gui->passwdStore) {
2430 "Password for [%s] missing in noninteractive mode, " 2465 I18N(
"Enforce PIN"),
2467 "You entered the same PIN twice.\n" 2468 "The PIN is marked as bad, do you want\n" 2472 "You entered the same PIN twice." 2475 "The PIN is marked as <b>bad</b>, " 2476 "do you want to use it anyway?" 2479 I18N(
"Yes, use anyway"),
2499 if (rv==1 && gui->passwdStore) {
2521 if (gui->passwdStore)
2523 if (gui->persistentPasswords==0)
2537 if (gui->passwdStore) {
2548 if (gui->persistentPasswords==0)
2563 return gui->minProgressLogLevel;
2571 gui->minProgressLogLevel=ll;
const char * GWEN_SslCertDescr_GetFingerPrintSha1(const GWEN_SSLCERTDESCR *st)
GWEN_GUI_CLOSE_DIALOG_FN GWEN_Gui_SetCloseDialogFn(GWEN_GUI *gui, GWEN_GUI_CLOSE_DIALOG_FN f)
GWEN_GUI_WRITE_DIALOG_PREFS_FN GWEN_Gui_SetWriteDialogPrefsFn(GWEN_GUI *gui, GWEN_GUI_WRITE_DIALOG_PREFS_FN f)
void GWEN_Url_free(GWEN_URL *st)
GWEN_DIALOG * GWEN_ProgressData_GetDialog(const GWEN_PROGRESS_DATA *pd)
int(* GWEN_GUI_PROGRESS_SETTOTAL_FN)(GWEN_GUI *gui, uint32_t id, uint64_t total)
struct GWEN_TIME GWEN_TIME
int GWEN_Gui_ProgressLog(uint32_t id, GWEN_LOGGER_LEVEL level, const char *text)
void GWEN_Gui_SubFlags(GWEN_GUI *gui, uint32_t fl)
struct GWEN_SSLCERTDESCR GWEN_SSLCERTDESCR
uint32_t(* GWEN_GUI_SHOWBOX_FN)(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, uint32_t guiid)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
void GWEN_PasswordStore_free(GWEN_PASSWD_STORE *sto)
GWEN_GUI_PROGRESS_END_FN GWEN_Gui_SetProgressEndFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_END_FN f)
int GWENHYWFAR_CB(* GWEN_GUI_WRITE_DIALOG_PREFS_FN)(GWEN_GUI *gui, const char *groupName, GWEN_DB_NODE *db)
GWENHYWFAR_API void GWEN_SocketSet_free(GWEN_SOCKETSET *ssp)
int GWEN_Gui_OpenDialog(GWEN_DIALOG *dlg, uint32_t guiid)
#define GWEN_DB_FLAGS_OVERWRITE_VARS
int GWEN_Gui_Internal_ProgressSetTotal(GWEN_GUI *gui, uint32_t pid, uint64_t total)
void GWEN_Gui_SetFlags(GWEN_GUI *gui, uint32_t fl)
int GWEN_Gui_ProgressAdvance(uint32_t id, uint32_t progress)
int GWEN_ProgressData_GetShown(const GWEN_PROGRESS_DATA *pd)
void GWEN_MDigest_free(GWEN_MDIGEST *md)
uint32_t(* GWEN_GUI_PROGRESS_START_FN)(GWEN_GUI *gui, uint32_t progressFlags, const char *title, const char *text, uint64_t total, uint32_t guiid)
struct GWEN_DB_NODE GWEN_DB_NODE
int GWEN_Buffer_AllocRoom(GWEN_BUFFER *bf, uint32_t size)
#define GWEN_INHERIT_FINI(t, element)
uint32_t GWEN_Buffer_GetMaxUnsegmentedWrite(GWEN_BUFFER *bf)
int GWEN_Gui_WaitForSockets(GWEN_SOCKET_LIST2 *readSockets, GWEN_SOCKET_LIST2 *writeSockets, uint32_t guiid, int msecs)
struct GWEN_SOCKET_LIST2 GWEN_SOCKET_LIST2
void GWEN_DlgProgress_SetStayOpen(GWEN_DIALOG *dlg, int b)
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
#define GWEN_ERROR_INVALID
GWEN_DIALOG * GWEN_Dialog_List_Next(const GWEN_DIALOG *element)
int GWEN_Gui_LogHook(const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s)
GWEN_GUI_PROGRESS_LOG_FN GWEN_Gui_SetProgressLogFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_LOG_FN f)
GWEN_DB_NODE * GWEN_SyncIo_Http_GetDbHeaderOut(const GWEN_SYNCIO *sio)
#define GWEN_GUI_PROGRESS_ALLOW_EMBED
#define GWEN_GUI_INPUT_FLAGS_CONFIRM
GWEN_GUI_HIDEBOX_FN GWEN_Gui_SetHideBoxFn(GWEN_GUI *gui, GWEN_GUI_HIDEBOX_FN f)
GWEN_GUI_GET_FILENAME_FN GWEN_Gui_SetGetFileNameFn(GWEN_GUI *gui, GWEN_GUI_GET_FILENAME_FN f)
#define GWEN_GUI_FLAGS_NONINTERACTIVE
#define DBG_NOTICE(dbg_logger, format, args...)
static int GWENHYWFAR_CB GWEN_Gui_Internal_GetPassword(GWEN_GUI *gui, uint32_t flags, const char *token, const char *title, const char *text, char *buffer, int minLen, int maxLen, GWEN_UNUSED GWEN_GUI_PASSWORD_METHOD methodId, GWEN_UNUSED GWEN_DB_NODE *methodParams, uint32_t guiid)
GWEN_PROGRESS_DATA * GWEN_DlgProgress_GetSecondProgress(const GWEN_DIALOG *dlg)
const char * GWEN_SslCertDescr_GetOrganizationName(const GWEN_SSLCERTDESCR *st)
int GWEN_Gui_Internal_ProgressLog(GWEN_GUI *gui, uint32_t pid, GWEN_LOGGER_LEVEL level, const char *text)
int GWEN_Gui_ProgressSetTotal(uint32_t id, uint64_t total)
uint32_t GWEN_ProgressData_GetFlags(const GWEN_PROGRESS_DATA *pd)
int GWEN_Gui_Internal_ProgressAdvance(GWEN_GUI *gui, uint32_t pid, uint64_t progress)
void GWEN_Gui_SetCharSet(GWEN_GUI *gui, const char *s)
GWEN_DIALOG * GWEN_Dialog_List_First(const GWEN_DIALOG_LIST *l)
void GWEN_Gui_SetMinProgressLogLevel(GWEN_GUI *gui, GWEN_LOGGER_LEVEL ll)
uint32_t GWEN_Gui_Internal_ShowBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, uint32_t guiid)
#define GWEN_FREE_OBJECT(varname)
void GWEN_DlgProgress_TotalChanged(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd)
void GWEN_SyncIo_Socket_SetAddress(GWEN_SYNCIO *sio, const char *s)
int GWENHYWFAR_CB(* GWEN_GUI_CLOSE_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg)
const char * GWEN_Url_GetProtocol(const GWEN_URL *st)
int GWEN_Text_EscapeToBufferTolerant(const char *src, GWEN_BUFFER *buf)
uint32_t GWEN_ProgressData_GetId(const GWEN_PROGRESS_DATA *pd)
int GWEN_Url_GetPort(const GWEN_URL *st)
#define GWEN_GUI_FLAGS_PERMPASSWORDS
const char * GWEN_SslCertDescr_GetFingerPrint(const GWEN_SSLCERTDESCR *st)
int GWEN_Gui_WriteDialogPrefs(const char *groupName, GWEN_DB_NODE *db)
int GWEN_Gui_Internal_MessageBox(GWEN_UNUSED GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, GWEN_UNUSED uint32_t guiid)
struct GWEN_SOCKETSETSTRUCT GWEN_SOCKETSET
#define GWEN_GUI_PROGRESS_DELAY
void GWEN_ProgressData_AddLogText(GWEN_PROGRESS_DATA *pd, GWEN_UNUSED GWEN_LOGGER_LEVEL level, const char *s)
GWEN_GUI_GETPASSWORD_FN GWEN_Gui_SetGetPasswordFn(GWEN_GUI *gui, GWEN_GUI_GETPASSWORD_FN f)
void GWEN_Gui_AddFlags(GWEN_GUI *gui, uint32_t fl)
int GWEN_Buffer_AdjustUsedBytes(GWEN_BUFFER *bf)
#define DBG_WARN(dbg_logger, format, args...)
GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN GWEN_Gui_SetKeyDataFromTextOpenSslFn(GWEN_GUI *gui, GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN f)
int GWEN_Gui_ConvertFromUtf8(const GWEN_GUI *gui, const char *text, int len, GWEN_BUFFER *tbuf)
GWEN_SOCKET * GWEN_Socket_List2Iterator_Data(GWEN_SOCKET_LIST2_ITERATOR *li)
int GWEN_Gui_MessageBox(uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid)
int GWENHYWFAR_CB(* GWEN_GUI_READ_DIALOG_PREFS_FN)(GWEN_GUI *gui, const char *groupName, const char *altName, GWEN_DB_NODE **pDb)
int GWEN_MDigest_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l)
int GWEN_Gui_ExecDialog(GWEN_DIALOG *dlg, uint32_t guiid)
GWEN_GUI_PRINT_FN GWEN_Gui_SetPrintFn(GWEN_GUI *gui, GWEN_GUI_PRINT_FN f)
int GWEN_Gui_Print(const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid)
int GWEN_PasswordStore_GetPassword(GWEN_PASSWD_STORE *sto, const char *token, char *buffer, int minLen, int maxLen)
#define GWEN_GUI_INPUT_FLAGS_DIRECT
GWEN_LOGGER_LEVEL GWEN_Gui_GetMinProgressLogLevel(const GWEN_GUI *gui)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
int GWENHYWFAR_CB(* GWEN_GUI_GET_FILENAME_FN)(GWEN_GUI *gui, const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid)
struct GWEN_DIALOG GWEN_DIALOG
static GWEN_GUI * gwenhywfar_gui
GWEN_DIALOG * GWEN_DlgProgress_new(void)
char * GWEN_Buffer_GetPosPointer(const GWEN_BUFFER *bf)
int GWEN_PasswordStore_SetPassword(GWEN_PASSWD_STORE *sto, const char *token, const char *secret)
int GWENHYWFAR_CB GWEN_Gui_CheckCertBuiltIn(GWEN_UNUSED GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cd, GWEN_UNUSED GWEN_SYNCIO *sio, uint32_t guiid)
GWEN_GUI_RUN_DIALOG_FN GWEN_Gui_SetRunDialogFn(GWEN_GUI *gui, GWEN_GUI_RUN_DIALOG_FN f)
const GWEN_TIME * GWEN_SslCertDescr_GetNotBefore(const GWEN_SSLCERTDESCR *st)
int GWEN_Buffer_IncrementPos(GWEN_BUFFER *bf, uint32_t i)
int GWENHYWFAR_CB(* GWEN_GUI_RUN_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg, int timeout)
int GWEN_Gui_GetSyncIo(const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio)
void GWEN_Dialog_List_Add(GWEN_DIALOG *element, GWEN_DIALOG_LIST *list)
void GWEN_DlgProgress_SetAllowClose(GWEN_DIALOG *dlg, int b)
int GWEN_Url_toCommandString(const GWEN_URL *url, GWEN_BUFFER *buf)
GWENHYWFAR_API int GWEN_SocketSet_GetSocketCount(GWEN_SOCKETSET *ssp)
const char * GWEN_SslCertDescr_GetStatusText(const GWEN_SSLCERTDESCR *st)
uint8_t * GWEN_MDigest_GetDigestPtr(GWEN_MDIGEST *md)
int GWENHYWFAR_CB(* GWEN_GUI_EXEC_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid)
GWEN_SYNCIO * GWEN_SyncIo_Http_new(GWEN_SYNCIO *baseIo)
int GWEN_Gui_ShowProgress(GWEN_PROGRESS_DATA *pd)
struct GWEN_SOCKET_LIST2_ITERATOR GWEN_SOCKET_LIST2_ITERATOR
time_t GWEN_ProgressData_GetCheckTime(const GWEN_PROGRESS_DATA *pd)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
const char * GWEN_SslCertDescr_GetOrganizationalUnitName(const GWEN_SSLCERTDESCR *st)
void(* GWEN_GUI_HIDEBOX_FN)(GWEN_GUI *gui, uint32_t id)
int GWEN_MDigest_Begin(GWEN_MDIGEST *md)
#define GWEN_GUI_PROGRESS_ONE
GWEN_GUI_PROGRESS_SETTOTAL_FN GWEN_Gui_SetProgressSetTotalFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_SETTOTAL_FN f)
const char * GWEN_Gui_GetName(void)
void GWEN_DlgProgress_SetSecondProgress(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd)
#define GWEN_NEW_OBJECT(typ, varname)
GWEN_GUI_SETPASSWORDSTATUS_FN GWEN_Gui_SetSetPasswordStatusFn(GWEN_GUI *gui, GWEN_GUI_SETPASSWORDSTATUS_FN f)
struct GWEN_SYNCIO GWEN_SYNCIO
void GWEN_ProgressData_SetCheckTime(GWEN_PROGRESS_DATA *pd, time_t t)
GWENHYWFAR_API int GWEN_Time_toString(const GWEN_TIME *t, const char *tmpl, GWEN_BUFFER *buf)
GWEN_SYNCIO * GWEN_SyncIo_Buffered_new(GWEN_SYNCIO *baseIo)
GWEN_SYNCIO * GWEN_SyncIo_Tls_new(GWEN_SYNCIO *baseIo)
int GWENHYWFAR_CB(* GWEN_GUI_GETSYNCIO_FN)(GWEN_GUI *gui, const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio)
#define GWEN_GUI_PROGRESS_NONE
int GWEN_Gui_InputBox(uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
#define GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS
GWEN_GUI_LOG_HOOK_FN GWEN_Gui_SetLogHookFn(GWEN_GUI *gui, GWEN_GUI_LOG_HOOK_FN f)
#define DBG_DEBUG(dbg_logger, format, args...)
uint32_t GWEN_Gui_ShowBox(uint32_t flags, const char *title, const char *text, uint32_t guiid)
GWEN_SYNCIO * GWEN_Gui_ExtendSyncIo(const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO *baseSio)
void GWEN_Gui_UseDialogs(GWEN_GUI *gui)
int GWENHYWFAR_CB GWEN_Gui_Internal_GetSyncIo(GWEN_UNUSED GWEN_GUI *gui, const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio)
GWEN_GUI_OPEN_DIALOG_FN GWEN_Gui_SetOpenDialogFn(GWEN_GUI *gui, GWEN_GUI_OPEN_DIALOG_FN f)
int GWEN_Gui_ProgressLog2(uint32_t id, GWEN_LOGGER_LEVEL level, const char *fmt,...)
static int GWENHYWFAR_CB GWEN_Gui_Internal_SetPasswordStatus(GWEN_GUI *gui, const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, GWEN_UNUSED uint32_t guiid)
GWEN_GUI_MESSAGEBOX_FN GWEN_Gui_SetMessageBoxFn(GWEN_GUI *gui, GWEN_GUI_MESSAGEBOX_FN f)
int GWEN_ProgressData_GetAborted(const GWEN_PROGRESS_DATA *pd)
#define GWEN_GUI_INPUT_FLAGS_TAN
uint64_t GWEN_ProgressData_GetCurrent(const GWEN_PROGRESS_DATA *pd)
void GWEN_Gui_HideBox(uint32_t id)
GWEN_GUI_PROGRESS_START_FN GWEN_Gui_SetProgressStartFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_START_FN f)
GWEN_PROGRESS_DATA * GWEN_DlgProgress_GetFirstProgress(const GWEN_DIALOG *dlg)
#define GWEN_ERROR_SSL_SECURITY
#define GWEN_GUI_MSG_FLAGS_SEVERITY_NORMAL
GWEN_GUI * GWEN_Gui_GetGui(void)
#define GWEN_ERROR_GENERIC
void GWEN_SyncIo_Tls_SetRemoteHostName(GWEN_SYNCIO *sio, const char *s)
void GWEN_Dialog_SetGuiId(GWEN_DIALOG *dlg, uint32_t guiid)
int GWEN_Gui_ConvertString(const char *text, size_t len, GWEN_BUFFER *tbuf, const char *fromCs, const char *toCs)
struct GWEN_MDIGEST GWEN_MDIGEST
int GWEN_StringList_RemoveString(GWEN_STRINGLIST *sl, const char *s)
void GWEN_Dialog_List_free(GWEN_DIALOG_LIST *l)
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
void GWEN_ProgressData_SetCurrent(GWEN_PROGRESS_DATA *pd, uint64_t i)
int GWENHYWFAR_CB(* GWEN_GUI_CHECKCERT_FN)(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cert, GWEN_SYNCIO *sio, uint32_t guiid)
GWEN_PROGRESS_DATA * GWEN_ProgressData_Tree_FindProgressById(GWEN_PROGRESS_DATA_TREE *pt, uint32_t id)
#define GWEN_INHERIT_INIT(t, element)
GWEN_PASSWD_STORE * GWEN_Gui_GetPasswdStore(const GWEN_GUI *gui)
GWENHYWFAR_API GWEN_SOCKETSET * GWEN_SocketSet_new(void)
void GWEN_DlgProgress_SetShowLog(GWEN_DIALOG *dlg, int b)
void GWEN_Gui_Internal_CheckShow(GWEN_UNUSED GWEN_GUI *gui, GWEN_PROGRESS_DATA *pd)
int GWEN_DlgMessage_GetResponse(const GWEN_DIALOG *dlg)
GWENHYWFAR_API int GWEN_SocketSet_AddSocket(GWEN_SOCKETSET *ssp, const GWEN_SOCKET *sp)
void GWEN_SyncIo_Socket_SetPort(GWEN_SYNCIO *sio, int i)
void GWEN_DlgProgress_AddLogText(GWEN_DIALOG *dlg, GWEN_LOGGER_LEVEL level, const char *s)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
const char * GWEN_SslCertDescr_GetCountryName(const GWEN_SSLCERTDESCR *st)
int GWENHYWFAR_CB(* GWEN_GUI_GETPASSWORD_FN)(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)
void GWEN_SyncIo_free(GWEN_SYNCIO *sio)
const char * GWEN_Url_GetServer(const GWEN_URL *st)
#define GWEN_GUI_MSG_FLAGS_TYPE_ERROR
GWEN_DIALOG_LIST * GWEN_Dialog_List_new()
GWEN_DIALOG * GWEN_DlgMessage_new(uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3)
uint32_t GWEN_Gui_ProgressStart(uint32_t progressFlags, const char *title, const char *text, uint64_t total, uint32_t guiid)
int GWEN_Gui_KeyDataFromText_OpenSSL(const char *text, unsigned char *buffer, unsigned int bufLength)
int GWEN_Gui_ProgressEnd(uint32_t id)
GWEN_GUI_SHOWBOX_FN GWEN_Gui_SetShowBoxFn(GWEN_GUI *gui, GWEN_GUI_SHOWBOX_FN f)
#define GWEN_GUI_PROGRESS_KEEP_OPEN
GWEN_DIALOG * GWEN_DlgShowBox_new(uint32_t flags, const char *title, const char *text)
int(* GWEN_GUI_INPUTBOX_FN)(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid)
int GWEN_Gui_CloseDialog(GWEN_DIALOG *dlg)
int GWEN_MDigest_End(GWEN_MDIGEST *md)
GWEN_DB_NODE * GWEN_SyncIo_Http_GetDbCommandOut(const GWEN_SYNCIO *sio)
int GWEN_SslCertDescr_GetIsError(const GWEN_SSLCERTDESCR *st)
#define DBG_ERROR(dbg_logger, format, args...)
const char * GWEN_SslCertDescr_GetCommonName(const GWEN_SSLCERTDESCR *st)
#define GWEN_GUI_CPU_TIMEOUT
GWEN_GUI_GETSYNCIO_FN GWEN_Gui_SetGetSyncIoFn(GWEN_GUI *gui, GWEN_GUI_GETSYNCIO_FN f)
int GWEN_Gui_ReadDialogPrefs(const char *groupName, const char *altName, GWEN_DB_NODE **pDb)
void GWEN_Socket_List2Iterator_free(GWEN_SOCKET_LIST2_ITERATOR *li)
void GWEN_Dialog_List_Del(GWEN_DIALOG *element)
unsigned int GWEN_MDigest_GetDigestSize(GWEN_MDIGEST *md)
int GWENHYWFAR_CB(* GWEN_GUI_SETPASSWORDSTATUS_FN)(GWEN_GUI *gui, const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid)
struct GWEN_PASSWD_STORE GWEN_PASSWD_STORE
int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i)
void GWEN_Gui_SetPasswordDb(GWEN_GUI *gui, GWEN_DB_NODE *dbPasswords, int persistent)
GWEN_GUI * GWEN_Gui_new(void)
#define GWEN_GUI_PROGRESS_SHOW_PROGRESS
GWENHYWFAR_API GWEN_MDIGEST * GWEN_MDigest_Md5_new(void)
int GWEN_StringList_HasString(const GWEN_STRINGLIST *sl, const char *s)
void GWEN_Gui_SetPasswdStore(GWEN_GUI *gui, GWEN_PASSWD_STORE *sto)
void GWEN_Gui_GetRawText(GWEN_UNUSED const GWEN_GUI *gui, const char *text, GWEN_BUFFER *tbuf)
GWENHYWFAR_API int GWEN_Socket_Select(GWEN_SOCKETSET *rs, GWEN_SOCKETSET *ws, GWEN_SOCKETSET *xs, int timeout)
GWEN_URL * GWEN_Url_fromString(const char *str)
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
#define GWEN_GUI_PROGRESS_SHOW_LOG
int GWENHYWFAR_CB(* GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN)(GWEN_GUI *gui, const char *text, unsigned char *buffer, unsigned int bufLength)
int GWENHYWFAR_CB(* GWEN_GUI_OPEN_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid)
int GWEN_Gui_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)
#define GWEN_GUI_MSG_FLAGS_CONFIRM_B1
struct GWEN_PROGRESS_DATA GWEN_PROGRESS_DATA
void GWEN_ProgressData_SetTotal(GWEN_PROGRESS_DATA *pd, uint64_t i)
#define GWEN_ERROR_NOT_FOUND
GWEN_GUI_INPUTBOX_FN GWEN_Gui_SetInputBoxFn(GWEN_GUI *gui, GWEN_GUI_INPUTBOX_FN f)
#define DBG_INFO(dbg_logger, format, args...)
int GWENHYWFAR_CB(* GWEN_GUI_PRINT_FN)(GWEN_GUI *gui, const char *docTitle, const char *docType, const char *descr, const char *text, uint32_t guiid)
static int GWEN_Gui__HashPair(const char *token, const char *pin, GWEN_BUFFER *buf)
int(* GWEN_GUI_MESSAGEBOX_FN)(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid)
GWEN_DB_NODE * GWEN_Gui_GetPasswordDb(const GWEN_GUI *gui)
void GWEN_Gui_Attach(GWEN_GUI *gui)
int(* GWEN_GUI_PROGRESS_END_FN)(GWEN_GUI *gui, uint32_t id)
int GWENHYWFAR_CB(* GWEN_GUI_LOG_HOOK_FN)(GWEN_GUI *gui, const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s)
struct GWEN_SOCKET GWEN_SOCKET
GWEN_PROGRESS_DATA * GWEN_ProgressData_new(GWEN_GUI *gui, uint32_t id, uint32_t progressFlags, const char *title, const char *text, uint64_t total)
int GWEN_Buffer_AppendBytes(GWEN_BUFFER *bf, const char *buffer, uint32_t size)
void GWEN_PasswordStore_ClearStoragePasswd(GWEN_PASSWD_STORE *sto)
GWEN_SYNCIO * GWEN_SyncIo_Socket_new(GWEN_SOCKETTYPE sockType, GWEN_AddressFamily addressFamily)
int GWEN_Gui_Internal_ProgressEnd(GWEN_GUI *gui, uint32_t pid)
GWEN_SOCKET_LIST2_ITERATOR * GWEN_Socket_List2_First(GWEN_SOCKET_LIST2 *l)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
#define GWEN_ERROR_TIMEOUT
const char * GWEN_SslCertDescr_GetFingerPrintSha512(const GWEN_SSLCERTDESCR *st)
void GWEN_Dialog_free(GWEN_DIALOG *dlg)
int GWEN_Gui_SetPasswordStatus(const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid)
void GWEN_ProgressData_SetPreviousId(GWEN_PROGRESS_DATA *pd, uint32_t i)
uint32_t GWEN_Dialog_GetGuiId(const GWEN_DIALOG *dlg)
#define GWEN_ERROR_INTERNAL
void GWEN_DlgProgress_Advanced(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd)
#define GWEN_ERROR_USER_ABORTED
void GWEN_ProgressData_SetShown(GWEN_PROGRESS_DATA *pd, int i)
#define GWEN_ERROR_NO_DATA
int GWEN_Gui_ReadString(const char *text, GWEN_BUFFER *tbuf)
void GWEN_Gui_SetName(GWEN_GUI *gui, const char *name)
int GWENHYWFAR_CB(* GWEN_GUI_WAITFORSOCKETS_FN)(GWEN_GUI *gui, GWEN_SOCKET_LIST2 *readSockets, GWEN_SOCKET_LIST2 *writeSockets, int msecs, uint32_t guiid)
uint32_t GWEN_ProgressData_GetPreviousId(const GWEN_PROGRESS_DATA *pd)
void GWEN_ProgressData_SetDialog(GWEN_PROGRESS_DATA *pd, GWEN_DIALOG *dlg)
void GWEN_Gui_free(GWEN_GUI *gui)
void GWEN_Gui_SetGui(GWEN_GUI *gui)
int GWEN_Gui_GetFileName(const char *caption, GWEN_GUI_FILENAME_TYPE fnt, uint32_t flags, const char *patterns, GWEN_BUFFER *pathBuffer, uint32_t guiid)
void GWEN_ProgressData_AddFlags(GWEN_PROGRESS_DATA *pd, uint32_t fl)
#define GWEN_TIMEOUT_NONE
int GWEN_Gui_StdPrintf(const GWEN_GUI *gui, FILE *stream, const char *fmt,...)
void GWEN_Gui_ShowError(const char *title, const char *fmt,...)
const GWEN_TIME * GWEN_SslCertDescr_GetNotAfter(const GWEN_SSLCERTDESCR *st)
int GWEN_DB_ClearGroup(GWEN_DB_NODE *n, const char *path)
GWEN_DIALOG * GWEN_Dialog_List_Last(const GWEN_DIALOG_LIST *l)
int GWEN_Gui_CheckCert(const GWEN_SSLCERTDESCR *cd, GWEN_SYNCIO *sio, uint32_t guiid)
GWEN_STRINGLIST * GWEN_StringList_new(void)
int GWEN_Gui_RunDialog(GWEN_DIALOG *dlg, int untilEnd)
uint32_t GWEN_Gui_Internal_ProgressStart(GWEN_GUI *gui, uint32_t progressFlags, const char *title, const char *text, uint64_t total, uint32_t guiid)
uint32_t GWEN_Gui_GetFlags(const GWEN_GUI *gui)
int GWEN_DlgProgress_GetStayOpen(const GWEN_DIALOG *dlg)
GWEN_GUI_EXEC_DIALOG_FN GWEN_Gui_SetExecDialogFn(GWEN_GUI *gui, GWEN_GUI_EXEC_DIALOG_FN f)
GWEN_GUI_PROGRESS_ADVANCE_FN GWEN_Gui_SetProgressAdvanceFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_ADVANCE_FN f)
#define GWEN_INHERIT_FUNCTIONS(t)
void GWEN_DlgProgress_SetFirstProgress(GWEN_DIALOG *dlg, GWEN_PROGRESS_DATA *pd)
const char * GWEN_SslCertDescr_GetLocalityName(const GWEN_SSLCERTDESCR *st)
int GWEN_Text_ToHexBuffer(const char *src, unsigned l, GWEN_BUFFER *buf, unsigned int groupsize, char delimiter, int skipLeadingZeroes)
GWEN_GUI_READ_DIALOG_PREFS_FN GWEN_Gui_SetReadDialogPrefsFn(GWEN_GUI *gui, GWEN_GUI_READ_DIALOG_PREFS_FN f)
int(* GWEN_GUI_PROGRESS_LOG_FN)(GWEN_GUI *gui, uint32_t id, GWEN_LOGGER_LEVEL level, const char *text)
time_t GWEN_ProgressData_GetStartTime(const GWEN_PROGRESS_DATA *pd)
int GWEN_Gui_Internal_InputBox(GWEN_UNUSED GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, GWEN_UNUSED uint32_t guiid)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
const char * GWEN_Gui_GetCharSet(const GWEN_GUI *gui)
#define GWEN_TIMEOUT_FOREVER
GWEN_SOCKET * GWEN_Socket_List2Iterator_Next(GWEN_SOCKET_LIST2_ITERATOR *li)
const char * GWEN_SslCertDescr_GetStateOrProvinceName(const GWEN_SSLCERTDESCR *st)
#define GWEN_GUI_DELAY_SECS
GWEN_GUI_WAITFORSOCKETS_FN GWEN_Gui_SetWaitForSocketsFn(GWEN_GUI *gui, GWEN_GUI_WAITFORSOCKETS_FN f)
int(* GWEN_GUI_PROGRESS_ADVANCE_FN)(GWEN_GUI *gui, uint32_t id, uint64_t progress)
void GWEN_Gui_Internal_HideBox(GWEN_GUI *gui, uint32_t id)
#define GWEN_GUI_PROGRESS_SHOW_ABORT
#define GWEN_GUI_MSG_FLAGS_TYPE_WARN
void GWEN_ProgressData_free(GWEN_PROGRESS_DATA *pd)
#define GWEN_ERROR_NOT_IMPLEMENTED
GWEN_GUI_CHECKCERT_FN GWEN_Gui_SetCheckCertFn(GWEN_GUI *gui, GWEN_GUI_CHECKCERT_FN f)