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(stderr, fmt, args);
291 outbuf,
"UTF-8", gui->charSet);
346 while ((p=strchr(p,
'<'))) {
351 if (toupper(*t)==
'H') {
353 if (toupper(*t)==
'T') {
355 if (toupper(*t)==
'M') {
357 if (toupper(*t)==
'L') {
381 of=gui->messageBoxFn;
432 of=gui->progressStartFn;
433 gui->progressStartFn=f;
444 of=gui->progressAdvanceFn;
445 gui->progressAdvanceFn=f;
456 of=gui->progressSetTotalFn;
457 gui->progressSetTotalFn=f;
468 of=gui->progressLogFn;
469 gui->progressLogFn=f;
480 of=gui->progressEndFn;
481 gui->progressEndFn=f;
506 of=gui->getPasswordFn;
507 gui->getPasswordFn=f;
519 of=gui->setPasswordStatusFn;
520 gui->setPasswordStatusFn=f;
546 of=gui->waitForSocketsFn;
547 gui->waitForSocketsFn=f;
572 of=gui->execDialogFn;
585 of=gui->openDialogFn;
598 of=gui->closeDialogFn;
599 gui->closeDialogFn=f;
624 of=gui->readDialogPrefsFn;
625 gui->readDialogPrefsFn=f;
637 of=gui->writeDialogPrefsFn;
638 gui->writeDialogPrefsFn=f;
650 of=gui->getFileNameFn;
651 gui->getFileNameFn=f;
677 of=gui->keyDataFromTextOpenSslFn;
678 gui->keyDataFromTextOpenSslFn=f;
722 gui->name=strdup(name);
756 #if defined(HAVE_LANGINFO_H) 757 cs=nl_langinfo(CODESET);
758 #elif defined(HAVE_LOCALCHARSET_H) 768 if (strcasecmp(cs,
"UTF-8")==0)
777 "Missing iconv, cannot convert between UTF-8 and \"%s\"", cs);
787 p=(
char *)malloc(len+11);
789 sprintf(p,
"%s//TRANSLIT", cs);
790 ic=iconv_open(p,
"UTF-8");
791 if (ic==(iconv_t)-1) {
793 "Charset conversion from \"UTF-8\" to \"%s\" failed: %s (%d)",
794 p, strerror(errno), errno);
804 gui->charSet=(
char *)cs;
813 return gui->passwdStore;
822 if (gui->passwdStore && gui->passwdStore!=sto)
824 gui->passwdStore=sto;
839 gui->dbPasswords=dbPasswords;
840 gui->persistentPasswords=persistent;
847 return gui->dbPasswords;
883 char msgbuffer[2048];
888 rv=vsnprintf(msgbuffer,
sizeof(msgbuffer), fmt, list);
889 if (rv<0 || rv>=(
int)(
sizeof(msgbuffer))) {
891 rv, (
int)(
sizeof(msgbuffer)));
919 minLen, maxLen, guiid);
1003 const char *fmt, ...)
1006 char msgbuffer[2048];
1010 va_start(list, fmt);
1011 rv=vsnprintf(msgbuffer,
sizeof(msgbuffer), fmt, list);
1012 if (rv<0 || rv>=(
int)(
sizeof(msgbuffer))) {
1014 rv, (
int)(
sizeof(msgbuffer)));
1033 const char *docType,
1096 token, pin, status, guiid);
1108 strcasecmp(logDomain,
"gwenhywfar")==0)
1167 I18N(
"Waiting for Data"),
1168 "Waiting for data to become available",
1244 v=(int) difftime(t1, t0);
1278 const char *hashMd5;
1279 const char *hashSha1;
1280 const char *hashSha512;
1283 const char *statusOn;
1284 const char *statusOff;
1290 const char *unknown;
1291 const char *commonName;
1292 const char *organizationName;
1293 const char *organizationalUnitName;
1294 const char *countryName;
1295 const char *localityName;
1296 const char *stateOrProvinceName;
1299 "The following certificate has been received:\n" 1301 "Organisation : %s\n" 1306 "Valid after : %s\n" 1307 "Valid until : %s\n" 1309 "Hash (SHA1) : %s\n" 1310 "Hash (SHA512): %s\n" 1312 "Do you wish to accept this certificate?" 1316 " The following certificate has been received:" 1319 " <tr><td>Name</td><td>%s</td></tr>" 1320 " <tr><td>Organisation</td><td>%s</td></tr>" 1321 " <tr><td>Department</td><td>%s</td></tr>" 1322 " <tr><td>Country</td><td>%s</td></tr>" 1323 " <tr><td>City</td><td>%s</td></tr>" 1324 " <tr><td>State</td><td>%s</td></tr>" 1325 " <tr><td>Valid after</td><td>%s</td></tr>" 1326 " <tr><td>Valid until</td><td>%s</td></tr>" 1327 " <tr><td>Hash (MD5)</td><td>%s</td></tr>" 1328 " <tr><td>Hash (SHA1)</td><td>%s</td></tr>" 1329 " <tr><td>Hash (SHA512)</td><td>%s</td></tr>" 1330 " <tr><td>Status</td><td>%s%s%s</td></tr>" 1333 " Do you wish to accept this certificate?" 1338 memset(dbuffer1, 0,
sizeof(dbuffer1));
1339 memset(dbuffer2, 0,
sizeof(dbuffer2));
1340 memset(varName, 0,
sizeof(varName));
1363 "Could not convert beforeDate to string");
1377 "Could not convert untilDate to string");
1385 statusOn=
"<font color=red>";
1386 statusOff=
"</font>";
1389 statusOn=
"<font color=green>";
1390 statusOff=
"</font>";
1393 unknown=
I18N(
"unknown");
1398 if (!organizationName)
1399 organizationName=unknown;
1401 if (!organizationalUnitName)
1402 organizationalUnitName=unknown;
1405 countryName=unknown;
1408 localityName=unknown;
1410 if (!stateOrProvinceName)
1411 stateOrProvinceName=unknown;
1415 snprintf(buffer,
sizeof(buffer)-1,
1419 organizationalUnitName,
1422 stateOrProvinceName,
1431 organizationalUnitName,
1434 stateOrProvinceName,
1447 I18N(
"Certificate Received"),
1449 I18N(
"Yes"),
I18N(
"No"), 0, guiid);
1463 unsigned char *buffer,
1464 unsigned int bufLength)
1516 const char *patterns,
1534 const char *altName,
1555 const char *defaultProto,
1588 t=GWEN_ProgressData_Tree_GetParent(t);
1668 uint32_t progressFlags,
1678 id=++(gui->nextProgressId);
1681 progressFlags, title?title:
"(none)", (uint32_t) total, guiid);
1684 guiid=gui->lastProgressId;
1689 if (pdParent==
NULL) {
1692 title?title:
"no title",
1693 text?text:
"no text");
1701 GWEN_ProgressData_Tree_AddChild(pdParent, pd);
1703 GWEN_ProgressData_Tree_Add(gui->progressDataTree, pd);
1707 gui->lastProgressId=id;
1722 pid=gui->lastProgressId;
1742 previousPd=GWEN_ProgressData_Tree_GetParent(pd);
1745 while (previousPd) {
1748 previousPd=GWEN_ProgressData_Tree_GetParent(previousPd);
1799 else if (secondary==pd) {
1822 GWEN_ProgressData_Tree_Del(pd);
1837 pid=gui->lastProgressId;
1888 pid=gui->lastProgressId;
1937 if (level<=gui->minProgressLogLevel) {
1942 pid=gui->lastProgressId;
2065 id=++(gui->nextDialogId);
2119 const char *defaultProto,
2125 const char *sProtocol=
NULL;
2127 const char *addr=
NULL;
2132 if (!(url && *url)) {
2146 if (!(sProtocol && *sProtocol))
2147 sProtocol=defaultProto;
2152 if (!(addr && *addr)) {
2159 if (!(sProtocol && *sProtocol))
2164 if (strcasecmp(sProtocol,
"http")==0 ||
2165 strcasecmp(sProtocol,
"https")==0) {
2174 if (strcasecmp(sProtocol,
"https")==0) {
2232 DBG_INFO(
GWEN_LOGDOMAIN,
"No special handling of protocol \"%s\", returning raw base layer.", sProtocol?sProtocol:
"(empty)");
2241 const char *defaultProto,
2252 if (!(url && *url)) {
2275 if (!(addr && *addr)) {
2354 (gui->dbPasswords==
NULL)
2380 if (i>=minLen && i < maxLen) {
2381 memmove(buffer, s, i+1);
2393 if (gui->passwdStore) {
2413 "Password for [%s] missing in noninteractive mode, " 2448 I18N(
"Enforce PIN"),
2450 "You entered the same PIN twice.\n" 2451 "The PIN is marked as bad, do you want\n" 2455 "You entered the same PIN twice." 2458 "The PIN is marked as <b>bad</b>, " 2459 "do you want to use it anyway?" 2462 I18N(
"Yes, use anyway"),
2482 if (rv==1 && gui->passwdStore) {
2504 if (gui->passwdStore)
2506 if (gui->persistentPasswords==0)
2520 if (gui->passwdStore) {
2531 if (gui->persistentPasswords==0)
2546 return gui->minProgressLogLevel;
2554 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
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)
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)
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)
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_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)
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)
int GWENHYWFAR_CB(* GWEN_GUI_EXEC_DIALOG_FN)(GWEN_GUI *gui, GWEN_DIALOG *dlg, uint32_t guiid)
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)
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)
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)
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)
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
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)
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)
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)
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...)
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)
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
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)