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>
91 gui->progressDataTree=GWEN_ProgressData_Tree_new();
107 assert(gui->refCount);
108 if ((--gui->refCount)==0) {
112 GWEN_ProgressData_Tree_free(gui->progressDataTree);
117 if (gui->passwdStore)
146 assert(gui->refCount);
169 const char *fromCs,
const char *toCs) {
176 ic=iconv_open(toCs, fromCs);
177 if (ic==(iconv_t)-1) {
179 fromCs, toCs, strerror(errno));
201 done=iconv(ic, &pInbuf, &inLeft, &pOutbuf, &outLeft);
204 if (done==(
size_t)-1) {
220 strerror(errno), errno);
252 const char *fmt, ...) {
260 rv=vfprintf(stream, fmt, args);
263 rv=vfprintf(stderr, fmt, args);
282 outbuf,
"UTF-8", gui->charSet);
335 while ((p=strchr(p,
'<'))) {
340 if (toupper(*t)==
'H') {
342 if (toupper(*t)==
'T') {
344 if (toupper(*t)==
'M') {
346 if (toupper(*t)==
'L') {
369 of=gui->messageBoxFn;
417 of=gui->progressStartFn;
418 gui->progressStartFn=f;
429 of=gui->progressAdvanceFn;
430 gui->progressAdvanceFn=f;
441 of=gui->progressSetTotalFn;
442 gui->progressSetTotalFn=f;
453 of=gui->progressLogFn;
454 gui->progressLogFn=f;
465 of=gui->progressEndFn;
466 gui->progressEndFn=f;
489 of=gui->getPasswordFn;
490 gui->getPasswordFn=f;
502 of=gui->setPasswordStatusFn;
503 gui->setPasswordStatusFn=f;
527 of=gui->waitForSocketsFn;
528 gui->waitForSocketsFn=f;
551 of=gui->execDialogFn;
563 of=gui->openDialogFn;
575 of=gui->closeDialogFn;
576 gui->closeDialogFn=f;
600 of=gui->readDialogPrefsFn;
601 gui->readDialogPrefsFn=f;
613 of=gui->writeDialogPrefsFn;
614 gui->writeDialogPrefsFn=f;
625 of=gui->getFileNameFn;
626 gui->getFileNameFn=f;
651 of=gui->keyDataFromTextOpenSslFn;
652 gui->keyDataFromTextOpenSslFn=f;
690 if (name) gui->name=strdup(name);
720 #if defined(HAVE_LANGINFO_H)
721 cs=nl_langinfo(CODESET);
722 #elif defined(HAVE_LOCALCHARSET_H)
732 if (strcasecmp(cs,
"UTF-8")==0)
741 "Missing iconv, cannot convert between UTF-8 and \"%s\"", cs);
751 p=(
char *)malloc(len+11);
753 sprintf(p,
"%s//TRANSLIT", cs);
754 ic=iconv_open(p,
"UTF-8");
755 if (ic==(iconv_t)-1) {
757 "Charset conversion from \"UTF-8\" to \"%s\" failed: %s (%d)",
758 p, strerror(errno), errno);
768 gui->charSet=(
char *)cs;
776 return gui->passwdStore;
784 if (gui->passwdStore && gui->passwdStore!=sto)
786 gui->passwdStore=sto;
800 gui->dbPasswords=dbPasswords;
801 gui->persistentPasswords=persistent;
807 return gui->dbPasswords;
841 char msgbuffer[2048];
846 rv=vsnprintf(msgbuffer,
sizeof(msgbuffer), fmt, list);
847 if (rv<0 || rv>=(
int)(
sizeof(msgbuffer))) {
849 rv, (
int)(
sizeof(msgbuffer)));
875 minLen, maxLen, guiid);
953 const char *fmt, ...) {
955 char msgbuffer[2048];
960 rv=vsnprintf(msgbuffer,
sizeof(msgbuffer), fmt, list);
961 if (rv<0 || rv>=(
int)(
sizeof(msgbuffer))) {
963 rv, (
int)(
sizeof(msgbuffer)));
1040 token, pin, status, guiid);
1051 strcasecmp(logDomain,
"gwenhywfar")==0)
1109 I18N(
"Waiting for Data"),
1110 "Waiting for data to become available",
1186 v=(int) difftime(t1, t0);
1218 const char *hashMd5;
1219 const char *hashSha1;
1220 const char *hashSha512;
1223 const char *statusOn;
1224 const char *statusOff;
1230 const char *unknown;
1231 const char *commonName;
1232 const char *organizationName;
1233 const char *organizationalUnitName;
1234 const char *countryName;
1235 const char *localityName;
1236 const char *stateOrProvinceName;
1239 "The following certificate has been received:\n"
1241 "Organisation : %s\n"
1246 "Valid after : %s\n"
1247 "Valid until : %s\n"
1249 "Hash (SHA1) : %s\n"
1250 "Hash (SHA512): %s\n"
1252 "Do you wish to accept this certificate?"
1256 " The following certificate has been received:"
1259 " <tr><td>Name</td><td>%s</td></tr>"
1260 " <tr><td>Organisation</td><td>%s</td></tr>"
1261 " <tr><td>Department</td><td>%s</td></tr>"
1262 " <tr><td>Country</td><td>%s</td></tr>"
1263 " <tr><td>City</td><td>%s</td></tr>"
1264 " <tr><td>State</td><td>%s</td></tr>"
1265 " <tr><td>Valid after</td><td>%s</td></tr>"
1266 " <tr><td>Valid until</td><td>%s</td></tr>"
1267 " <tr><td>Hash (MD5)</td><td>%s</td></tr>"
1268 " <tr><td>Hash (SHA1)</td><td>%s</td></tr>"
1269 " <tr><td>Hash (SHA512)</td><td>%s</td></tr>"
1270 " <tr><td>Status</td><td>%s%s%s</td></tr>"
1273 " Do you wish to accept this certificate?"
1278 memset(dbuffer1, 0,
sizeof(dbuffer1));
1279 memset(dbuffer2, 0,
sizeof(dbuffer2));
1280 memset(varName, 0,
sizeof(varName));
1303 "Could not convert beforeDate to string");
1317 "Could not convert untilDate to string");
1325 statusOn=
"<font color=red>";
1326 statusOff=
"</font>";
1329 statusOn=
"<font color=green>";
1330 statusOff=
"</font>";
1333 unknown=
I18N(
"unknown");
1338 if (!organizationName)
1339 organizationName=unknown;
1341 if (!organizationalUnitName)
1342 organizationalUnitName=unknown;
1345 countryName=unknown;
1348 localityName=unknown;
1350 if (!stateOrProvinceName)
1351 stateOrProvinceName=unknown;
1355 snprintf(buffer,
sizeof(buffer)-1,
1359 organizationalUnitName,
1362 stateOrProvinceName,
1371 organizationalUnitName,
1374 stateOrProvinceName,
1387 I18N(
"Certificate Received"),
1389 I18N(
"Yes"),
I18N(
"No"), 0, guiid);
1403 unsigned char *buffer,
1404 unsigned int bufLength) {
1451 const char *patterns,
1468 const char *altName,
1487 const char *defaultProto,
1518 t=GWEN_ProgressData_Tree_GetParent(t);
1597 uint32_t progressFlags,
1606 id=++(gui->nextProgressId);
1609 progressFlags, title?title:
"(none)", (uint32_t) total, guiid);
1612 guiid=gui->lastProgressId;
1617 if (pdParent==
NULL) {
1620 title?title:
"no title",
1621 text?text:
"no text");
1629 GWEN_ProgressData_Tree_AddChild(pdParent, pd);
1631 GWEN_ProgressData_Tree_Add(gui->progressDataTree, pd);
1635 gui->lastProgressId=id;
1644 uint32_t parentPid=0;
1649 pid=gui->lastProgressId;
1669 previousPd=GWEN_ProgressData_Tree_GetParent(pd);
1675 previousPd=GWEN_ProgressData_Tree_GetParent(previousPd);
1726 else if (secondary==pd) {
1749 GWEN_ProgressData_Tree_Del(pd);
1763 pid=gui->lastProgressId;
1813 pid=gui->lastProgressId;
1861 if (level<=gui->minProgressLogLevel) {
1866 pid=gui->lastProgressId;
1986 id=++(gui->nextDialogId);
2040 const char *defaultProto,
2048 if (!(url && *url)) {
2071 if (!(addr && *addr)) {
2077 if (strcasecmp(s,
"http")==0 ||
2078 strcasecmp(s,
"https")==0) {
2097 if (strcasecmp(s,
"https")==0) {
2219 (gui->dbPasswords==
NULL)
2245 if (i>=minLen && i < maxLen) {
2246 memmove(buffer, s, i+1);
2258 if (gui->passwdStore) {
2278 "Password for [%s] missing in noninteractive mode, "
2313 I18N(
"Enforce PIN"),
2315 "You entered the same PIN twice.\n"
2316 "The PIN is marked as bad, do you want\n"
2320 "You entered the same PIN twice."
2323 "The PIN is marked as <b>bad</b>, "
2324 "do you want to use it anyway?"
2327 I18N(
"Yes, use anyway"),
2347 if (rv==1 && gui->passwdStore) {
2368 if (gui->passwdStore)
2370 if (gui->persistentPasswords==0)
2384 if (gui->passwdStore) {
2395 if (gui->persistentPasswords==0)
2409 return gui->minProgressLogLevel;
2416 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)
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
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_READ_DIALOG_PREFS_FN)(GWEN_GUI *gui, const char *groupName, const char *altName, GWEN_DB_NODE **pDb)
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)
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
int GWEN_Gui_Internal_InputBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid)
#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...)
GWEN_PROGRESS_DATA * GWEN_DlgProgress_GetSecondProgress(const GWEN_DIALOG *dlg)
int GWENHYWFAR_CB(* GWEN_GUI_WAITFORSOCKETS_FN)(GWEN_GUI *gui, GWEN_SOCKET_LIST2 *readSockets, GWEN_SOCKET_LIST2 *writeSockets, int msecs, uint32_t guiid)
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_PROGRESS_SETTOTAL_FN)(GWEN_GUI *gui, uint32_t id, uint64_t total)
int GWEN_Gui_Internal_ProgressAdvance(GWEN_GUI *gui, uint32_t pid, uint64_t progress)
int GWENHYWFAR_CB(* GWEN_GUI_SETPASSWORDSTATUS_FN)(GWEN_GUI *gui, const char *token, const char *pin, GWEN_GUI_PASSWORD_STATUS status, uint32_t guiid)
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)
const char * GWEN_Url_GetProtocol(const GWEN_URL *st)
int GWEN_Text_EscapeToBufferTolerant(const char *src, GWEN_BUFFER *buf)
int GWEN_Gui_Internal_MessageBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid)
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)
void(* GWEN_GUI_HIDEBOX_FN)(GWEN_GUI *gui, uint32_t id)
struct GWEN_SOCKETSETSTRUCT GWEN_SOCKETSET
#define GWEN_GUI_PROGRESS_DELAY
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_GUI_PROGRESS_ADVANCE_FN)(GWEN_GUI *gui, uint32_t id, uint64_t progress)
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 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)
uint32_t(* GWEN_GUI_SHOWBOX_FN)(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, uint32_t guiid)
struct GWEN_DIALOG GWEN_DIALOG
static GWEN_GUI * gwenhywfar_gui
int GWENHYWFAR_CB(* GWEN_GUI_CLOSE_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg)
GWEN_DIALOG * GWEN_DlgProgress_new(void)
char * GWEN_Buffer_GetPosPointer(const GWEN_BUFFER *bf)
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)
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 GWEN_Gui_GetSyncIo(const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio)
GWENHYWFAR_API int GWEN_StringList_RemoveString(GWEN_STRINGLIST *sl, const char *s)
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)
void GWEN_ProgressData_AddLogText(GWEN_PROGRESS_DATA *pd, GWEN_LOGGER_LEVEL level, const char *s)
GWEN_SYNCIO * GWEN_SyncIo_Http_new(GWEN_SYNCIO *baseIo)
int GWEN_Gui_ShowProgress(GWEN_PROGRESS_DATA *pd)
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_GUI_PASSWORD_METHOD methodId, GWEN_DB_NODE *methodParams, uint32_t guiid)
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)
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)
void GWEN_Gui_GetRawText(const GWEN_GUI *gui, const char *text, GWEN_BUFFER *tbuf)
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)
#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)
void GWEN_Gui_UseDialogs(GWEN_GUI *gui)
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)
int GWENHYWFAR_CB(* GWEN_GUI_EXEC_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid)
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
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)
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)
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)
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_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
const char * GWEN_SslCertDescr_GetCountryName(const GWEN_SSLCERTDESCR *st)
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 GWENHYWFAR_CB(* GWEN_GUI_KEYDATAFROMTEXT_OPENSSL_FN)(GWEN_GUI *gui, const char *text, unsigned char *buffer, unsigned int bufLength)
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)
int GWENHYWFAR_CB(* GWEN_GUI_LOG_HOOK_FN)(GWEN_GUI *gui, const char *logDomain, GWEN_LOGGER_LEVEL priority, const char *s)
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)
struct GWEN_PASSWD_STORE GWEN_PASSWD_STORE
int GWEN_Buffer_SetPos(GWEN_BUFFER *bf, uint32_t i)
int GWENHYWFAR_CB(* GWEN_GUI_WRITE_DIALOG_PREFS_FN)(GWEN_GUI *gui, const char *groupName, GWEN_DB_NODE *db)
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_GUI_PROGRESS_END_FN)(GWEN_GUI *gui, uint32_t id)
int GWEN_StringList_HasString(const GWEN_STRINGLIST *sl, const char *s)
void GWEN_Gui_SetPasswdStore(GWEN_GUI *gui, GWEN_PASSWD_STORE *sto)
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_PRINT_FN)(GWEN_GUI *gui, const char *docTitle, const char *docType, const char *descr, const char *text, 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)
int GWENHYWFAR_CB GWEN_Gui_Internal_GetSyncIo(GWEN_GUI *gui, const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio)
#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...)
static int GWEN_Gui__HashPair(const char *token, const char *pin, GWEN_BUFFER *buf)
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)
GWEN_DB_NODE * GWEN_Gui_GetPasswordDb(const GWEN_GUI *gui)
void GWEN_Gui_Attach(GWEN_GUI *gui)
int GWENHYWFAR_CB(* GWEN_GUI_CHECKCERT_FN)(GWEN_GUI *gui, const GWEN_SSLCERTDESCR *cert, GWEN_SYNCIO *sio, uint32_t guiid)
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)
int GWENHYWFAR_CB(* GWEN_GUI_GETSYNCIO_FN)(GWEN_GUI *gui, const char *url, const char *defaultProto, int defaultPort, GWEN_SYNCIO **pSio)
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)
int GWENHYWFAR_CB(* GWEN_GUI_RUN_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg, int timeout)
GWEN_DB_NODE * GWEN_DB_Group_new(const char *name)
#define GWEN_ERROR_TIMEOUT
int GWENHYWFAR_CB(* GWEN_GUI_OPEN_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid)
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)
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,...)
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)
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)
time_t GWEN_ProgressData_GetStartTime(const GWEN_PROGRESS_DATA *pd)
int(* GWEN_GUI_PROGRESS_LOG_FN)(GWEN_GUI *gui, uint32_t id, GWEN_LOGGER_LEVEL level, const char *text)
void GWEN_Gui_Internal_CheckShow(GWEN_GUI *gui, GWEN_PROGRESS_DATA *pd)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
const char * GWEN_Gui_GetCharSet(const GWEN_GUI *gui)
#define GWEN_TIMEOUT_FOREVER
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)
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)
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)