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);
282 if (spaceNeeded==(
size_t) -1) {
283 fprintf(stderr,
"GWEN INTERNAL ERROR: vsnprintf returned -1?\n");
286 if (spaceNeeded>=bufLen) {
293 if (spaceNeeded>=bufLen) {
294 fprintf(stderr,
"GWEN INTERNAL ERROR: Still not enough space (%lu >=%lu)? SNH!\n",
295 (
long unsigned int) spaceNeeded, (
long unsigned int) bufLen);
296 assert(spaceNeeded<bufLen);
304 outbuf,
"UTF-8", gui->charSet);
359 while ((p=strchr(p,
'<'))) {
364 if (toupper(*t)==
'H') {
366 if (toupper(*t)==
'T') {
368 if (toupper(*t)==
'M') {
370 if (toupper(*t)==
'L') {
394 of=gui->messageBoxFn;
445 of=gui->progressStartFn;
446 gui->progressStartFn=f;
457 of=gui->progressAdvanceFn;
458 gui->progressAdvanceFn=f;
469 of=gui->progressSetTotalFn;
470 gui->progressSetTotalFn=f;
481 of=gui->progressLogFn;
482 gui->progressLogFn=f;
493 of=gui->progressEndFn;
494 gui->progressEndFn=f;
519 of=gui->getPasswordFn;
520 gui->getPasswordFn=f;
532 of=gui->setPasswordStatusFn;
533 gui->setPasswordStatusFn=f;
559 of=gui->waitForSocketsFn;
560 gui->waitForSocketsFn=f;
585 of=gui->execDialogFn;
598 of=gui->openDialogFn;
611 of=gui->closeDialogFn;
612 gui->closeDialogFn=f;
637 of=gui->readDialogPrefsFn;
638 gui->readDialogPrefsFn=f;
650 of=gui->writeDialogPrefsFn;
651 gui->writeDialogPrefsFn=f;
663 of=gui->getFileNameFn;
664 gui->getFileNameFn=f;
690 of=gui->keyDataFromTextOpenSslFn;
691 gui->keyDataFromTextOpenSslFn=f;
735 gui->name=strdup(name);
769 #if defined(HAVE_LANGINFO_H) 770 cs=nl_langinfo(CODESET);
771 #elif defined(HAVE_LOCALCHARSET_H) 781 if (strcasecmp(cs,
"UTF-8")==0)
790 "Missing iconv, cannot convert between UTF-8 and \"%s\"", cs);
800 p=(
char *)malloc(len+11);
802 sprintf(p,
"%s//TRANSLIT", cs);
803 ic=iconv_open(p,
"UTF-8");
804 if (ic==(iconv_t)-1) {
806 "Charset conversion from \"UTF-8\" to \"%s\" failed: %s (%d)",
807 p, strerror(errno), errno);
817 gui->charSet=(
char *)cs;
826 return gui->passwdStore;
835 if (gui->passwdStore && gui->passwdStore!=sto)
837 gui->passwdStore=sto;
852 gui->dbPasswords=dbPasswords;
853 gui->persistentPasswords=persistent;
860 return gui->dbPasswords;
896 char msgbuffer[2048];
901 rv=vsnprintf(msgbuffer,
sizeof(msgbuffer), fmt, list);
902 if (rv<0 || rv>=(
int)(
sizeof(msgbuffer))) {
904 rv, (
int)(
sizeof(msgbuffer)));
932 minLen, maxLen, guiid);
1016 const char *fmt, ...)
1019 char msgbuffer[2048];
1023 va_start(list, fmt);
1024 rv=vsnprintf(msgbuffer,
sizeof(msgbuffer), fmt, list);
1025 if (rv<0 || rv>=(
int)(
sizeof(msgbuffer))) {
1027 rv, (
int)(
sizeof(msgbuffer)));
1046 const char *docType,
1109 token, pin, status, guiid);
1121 strcasecmp(logDomain,
"gwenhywfar")==0)
1180 I18N(
"Waiting for Data"),
1181 "Waiting for data to become available",
1257 v=(int) difftime(t1, t0);
1291 const char *hashMd5;
1292 const char *hashSha1;
1293 const char *hashSha512;
1296 const char *statusOn;
1297 const char *statusOff;
1303 const char *unknown;
1304 const char *commonName;
1305 const char *organizationName;
1306 const char *organizationalUnitName;
1307 const char *countryName;
1308 const char *localityName;
1309 const char *stateOrProvinceName;
1312 "The following certificate has been received:\n" 1314 "Organisation : %s\n" 1319 "Valid after : %s\n" 1320 "Valid until : %s\n" 1322 "Hash (SHA1) : %s\n" 1323 "Hash (SHA512): %s\n" 1325 "Do you wish to accept this certificate?" 1329 " The following certificate has been received:" 1332 " <tr><td>Name</td><td>%s</td></tr>" 1333 " <tr><td>Organisation</td><td>%s</td></tr>" 1334 " <tr><td>Department</td><td>%s</td></tr>" 1335 " <tr><td>Country</td><td>%s</td></tr>" 1336 " <tr><td>City</td><td>%s</td></tr>" 1337 " <tr><td>State</td><td>%s</td></tr>" 1338 " <tr><td>Valid after</td><td>%s</td></tr>" 1339 " <tr><td>Valid until</td><td>%s</td></tr>" 1340 " <tr><td>Hash (MD5)</td><td>%s</td></tr>" 1341 " <tr><td>Hash (SHA1)</td><td>%s</td></tr>" 1342 " <tr><td>Hash (SHA512)</td><td>%s</td></tr>" 1343 " <tr><td>Status</td><td>%s%s%s</td></tr>" 1346 " Do you wish to accept this certificate?" 1351 memset(dbuffer1, 0,
sizeof(dbuffer1));
1352 memset(dbuffer2, 0,
sizeof(dbuffer2));
1353 memset(varName, 0,
sizeof(varName));
1376 "Could not convert beforeDate to string");
1390 "Could not convert untilDate to string");
1398 statusOn=
"<font color=red>";
1399 statusOff=
"</font>";
1402 statusOn=
"<font color=green>";
1403 statusOff=
"</font>";
1406 unknown=
I18N(
"unknown");
1411 if (!organizationName)
1412 organizationName=unknown;
1414 if (!organizationalUnitName)
1415 organizationalUnitName=unknown;
1418 countryName=unknown;
1421 localityName=unknown;
1423 if (!stateOrProvinceName)
1424 stateOrProvinceName=unknown;
1428 snprintf(buffer,
sizeof(buffer)-1,
1432 organizationalUnitName,
1435 stateOrProvinceName,
1444 organizationalUnitName,
1447 stateOrProvinceName,
1460 I18N(
"Certificate Received"),
1462 I18N(
"Yes"),
I18N(
"No"), 0, guiid);
1476 unsigned char *buffer,
1477 unsigned int bufLength)
1529 const char *patterns,
1547 const char *altName,
1568 const char *defaultProto,
1601 t=GWEN_ProgressData_Tree_GetParent(t);
1681 uint32_t progressFlags,
1691 id=++(gui->nextProgressId);
1694 progressFlags, title?title:
"(none)", (uint32_t) total, guiid);
1697 guiid=gui->lastProgressId;
1702 if (pdParent==
NULL) {
1705 title?title:
"no title",
1706 text?text:
"no text");
1714 GWEN_ProgressData_Tree_AddChild(pdParent, pd);
1716 GWEN_ProgressData_Tree_Add(gui->progressDataTree, pd);
1720 gui->lastProgressId=id;
1735 pid=gui->lastProgressId;
1755 previousPd=GWEN_ProgressData_Tree_GetParent(pd);
1758 while (previousPd) {
1761 previousPd=GWEN_ProgressData_Tree_GetParent(previousPd);
1812 else if (secondary==pd) {
1835 GWEN_ProgressData_Tree_Del(pd);
1850 pid=gui->lastProgressId;
1901 pid=gui->lastProgressId;
1950 if (level<=gui->minProgressLogLevel) {
1955 pid=gui->lastProgressId;
2078 id=++(gui->nextDialogId);
2132 const char *defaultProto,
2138 const char *sProtocol=
NULL;
2140 const char *addr=
NULL;
2145 if (!(url && *url)) {
2159 if (!(sProtocol && *sProtocol))
2160 sProtocol=defaultProto;
2165 if (!(addr && *addr)) {
2172 if (!(sProtocol && *sProtocol))
2177 if (strcasecmp(sProtocol,
"http")==0 ||
2178 strcasecmp(sProtocol,
"https")==0) {
2187 if (strcasecmp(sProtocol,
"https")==0) {
2245 DBG_INFO(
GWEN_LOGDOMAIN,
"No special handling of protocol \"%s\", returning raw base layer.", sProtocol?sProtocol:
"(empty)");
2254 const char *defaultProto,
2265 if (!(url && *url)) {
2288 if (!(addr && *addr)) {
2367 (gui->dbPasswords==
NULL)
2393 if (i>=minLen && i < maxLen) {
2394 memmove(buffer, s, i+1);
2406 if (gui->passwdStore) {
2426 "Password for [%s] missing in noninteractive mode, " 2461 I18N(
"Enforce PIN"),
2463 "You entered the same PIN twice.\n" 2464 "The PIN is marked as bad, do you want\n" 2468 "You entered the same PIN twice." 2471 "The PIN is marked as <b>bad</b>, " 2472 "do you want to use it anyway?" 2475 I18N(
"Yes, use anyway"),
2495 if (rv==1 && gui->passwdStore) {
2517 if (gui->passwdStore)
2519 if (gui->persistentPasswords==0)
2533 if (gui->passwdStore) {
2544 if (gui->persistentPasswords==0)
2559 return gui->minProgressLogLevel;
2567 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)