int LC_Client_InitCommon() { if (lc_client__initcounter==0) { int rv; GWEN_STRINGLIST *paths; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(LC_LOGDOMAIN, rv); return rv; } if (!GWEN_Logger_IsOpen(LC_LOGDOMAIN)) { const char *s; /* only set our logger if it not already has been */ GWEN_Logger_Open(LC_LOGDOMAIN, "chipcard3-client", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(LC_LOGDOMAIN, GWEN_LoggerLevel_Warning); s=getenv("LC_LOGLEVEL"); if (s) { GWEN_LOGGER_LEVEL ll; ll=GWEN_Logger_Name2Level(s); if (ll!=GWEN_LoggerLevel_Unknown) { GWEN_Logger_SetLevel(LC_LOGDOMAIN, ll); DBG_WARN(LC_LOGDOMAIN, "Overriding loglevel for Libchipcard-Client with \"%s\"", s); } else { DBG_ERROR(0, "Unknown loglevel \"%s\"", s); } } else { GWEN_Logger_SetLevel(LC_LOGDOMAIN, GWEN_LoggerLevel_Warning); } } /* define sysconf path */ GWEN_PathManager_DefinePath(LCC_PM_LIBNAME, LCC_PM_SYSCONFDIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(LCC_PM_LIBNAME, LCC_PM_LIBNAME, LCC_PM_SYSCONFDIR, LC_CLIENT_CONFIG_DIR, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(LCC_PM_LIBNAME, LCC_PM_LIBNAME, LCC_PM_SYSCONFDIR, LC_CLIENT_CONFIG_DIR); #endif /* define data path */ GWEN_PathManager_DefinePath(LCC_PM_LIBNAME, LCC_PM_DATADIR); #if defined(OS_WIN32) || defined(ENABLE_LOCAL_INSTALL) /* add folder relative to EXE */ GWEN_PathManager_AddRelPath(LCC_PM_LIBNAME, LCC_PM_LIBNAME, LCC_PM_DATADIR, LC_CLIENT_XML_DIR, GWEN_PathManager_RelModeExe); #else /* add absolute folder */ GWEN_PathManager_AddPath(LCC_PM_LIBNAME, LCC_PM_LIBNAME, LCC_PM_DATADIR, LC_CLIENT_XML_DIR); #endif /* load configuration file */ #if 0 paths=GWEN_PathManager_GetPaths(LCC_PM_LIBNAME, LCC_PM_SYSCONFDIR); if (paths) { GWEN_DB_NODE *db; GWEN_BUFFER *fbuf; db=GWEN_DB_Group_new("config"); fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(paths, LC_CLIENT_CONFIG_FILE, fbuf); if (rv) { DBG_INFO(LC_LOGDOMAIN, "Trying config file with suffix \".default\""); rv=GWEN_Directory_FindFileInPaths(paths, LC_CLIENT_CONFIG_FILE".default", fbuf); } GWEN_StringList_free(paths); if (rv) { DBG_WARN(LC_LOGDOMAIN, "No configuration file found, using defaults"); } else { DBG_INFO(LC_LOGDOMAIN, "Reading configuration file \"%s\"", GWEN_Buffer_GetStart(fbuf)); rv=GWEN_DB_ReadFile(db, GWEN_Buffer_GetStart(fbuf), GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv<0) { DBG_ERROR(LC_LOGDOMAIN, "Error in configuration file \"%s\" (%d)", GWEN_Buffer_GetStart(fbuf), rv); GWEN_Buffer_free(fbuf); /* undo all init stuff so far */ GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_DATADIR); GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_SYSCONFDIR); return rv; } } GWEN_Buffer_free(fbuf); lc_client__config=db; } else { DBG_ERROR(LC_LOGDOMAIN, "Internal error: Paths not found"); return GWEN_ERROR_INTERNAL; } #else lc_client__config=GWEN_DB_Group_new("config"); #endif /* load XML files */ paths=GWEN_PathManager_GetPaths(LCC_PM_LIBNAME, LCC_PM_DATADIR); if (paths) { GWEN_XMLNODE *n; GWEN_DB_NODE *db; GWEN_BUFFER *fbuf; uint32_t bpos; fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindPathForFile(paths, "cards/README", fbuf); GWEN_StringList_free(paths); if (rv) { DBG_ERROR(LC_LOGDOMAIN, "Data files not found (%d)", rv); /* undo all init stuff so far */ GWEN_Buffer_free(fbuf); GWEN_DB_Group_free(lc_client__config); lc_client__config=NULL; GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_DATADIR); GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_SYSCONFDIR); return rv; } /* load card files */ n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "cards"); if (LC_Client_ReadXmlFiles(n, GWEN_Buffer_GetStart(fbuf), "cards", "card")) { DBG_ERROR(LC_LOGDOMAIN, "Could not read card files"); GWEN_XMLNode_free(n); /* undo all init stuff so far */ GWEN_Buffer_free(fbuf); GWEN_DB_Group_free(lc_client__config); lc_client__config=NULL; GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_DATADIR); GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_SYSCONFDIR); return GWEN_ERROR_GENERIC; } lc_client__card_nodes=n; /* load app files */ n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "apps"); if (LC_Client_ReadXmlFiles(n, GWEN_Buffer_GetStart(fbuf), "apps", "app")) { DBG_ERROR(LC_LOGDOMAIN, "Could not read app files"); GWEN_XMLNode_free(n); /* undo all init stuff so far */ GWEN_XMLNode_free(lc_client__card_nodes); lc_client__card_nodes=NULL; GWEN_Buffer_free(fbuf); GWEN_DB_Group_free(lc_client__config); lc_client__config=NULL; GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_DATADIR); GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_SYSCONFDIR); return GWEN_ERROR_GENERIC; } lc_client__app_nodes=n; /*GWEN_XMLNode_WriteFile(n, "/tmp/apps", GWEN_XML_FLAGS_DEFAULT);*/ /* load driver files (if any) */ bpos=GWEN_Buffer_GetPos(fbuf); GWEN_Buffer_AppendString(fbuf, DIRSEP "drivers"); db=GWEN_DB_Group_new("drivers"); rv=LC_DriverInfo_ReadDrivers(GWEN_Buffer_GetStart(fbuf), db, 0, 1); if (rv) { DBG_INFO(LC_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(db); /* undo all init stuff so far */ GWEN_XMLNode_free(lc_client__app_nodes); lc_client__app_nodes=NULL; GWEN_XMLNode_free(lc_client__card_nodes); lc_client__card_nodes=NULL; GWEN_Buffer_free(fbuf); GWEN_DB_Group_free(lc_client__config); lc_client__config=NULL; GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_DATADIR); GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_SYSCONFDIR); return rv; } lc_client__driver_db=db; GWEN_Buffer_Crop(fbuf, 0, bpos); /* insert more loading here */ GWEN_Buffer_free(fbuf); } else { DBG_ERROR(LC_LOGDOMAIN, "No data files found."); /* undo all init stuff so far */ GWEN_DB_Group_free(lc_client__config); lc_client__config=NULL; GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_DATADIR); GWEN_PathManager_UndefinePath(LCC_PM_LIBNAME, LCC_PM_SYSCONFDIR); return GWEN_ERROR_GENERIC; } } lc_client__initcounter++; return 0; }
int AH_ImExporterOFX_Import(AB_IMEXPORTER *ie, AB_IMEXPORTER_CONTEXT *ctx, GWEN_IO_LAYER *io, GWEN_DB_NODE *params, uint32_t guiid) { AH_IMEXPORTER_OFX *ieh; LibofxContextPtr ofxctx; GWEN_BUFFER *dbuf; int rv; GWEN_STRINGLIST *paths; assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AH_IMEXPORTER_OFX, ie); assert(ieh); ieh->context=ctx; ofxctx=libofx_get_new_context(); ofx_set_account_cb(ofxctx, AH_ImExporterOFX_AccountCallback_cb, ieh); ofx_set_transaction_cb(ofxctx, AH_ImExporterOFX_TransactionCallback_cb, ieh); paths=AB_Banking_GetGlobalDataDirs(); if (paths) { GWEN_BUFFER *fbuf; int rv; fbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindPathForFile(paths, "libofx" DIRSEP "dtd" DIRSEP "ofx150.dtd", fbuf); GWEN_StringList_free(paths); if (rv==0) { GWEN_Buffer_AppendString(fbuf, DIRSEP "libofx" DIRSEP "dtd" DIRSEP); #ifdef LIBOFX_GT_0_8_4 DBG_INFO(AQBANKING_LOGDOMAIN, "Setting path for DTD files to [%s]", GWEN_Buffer_GetStart(fbuf)); libofx_set_dtd_dir(ofxctx, GWEN_Buffer_GetStart(fbuf)); #else DBG_INFO(AQBANKING_LOGDOMAIN, "Cannot set path for DTD files to [%s]: libofx is 0.8.3 or older", GWEN_Buffer_GetStart(fbuf)); #endif } GWEN_Buffer_free(fbuf); } /* read whole stream into buffer */ dbuf=GWEN_Buffer_new(0, 2048, 0, 1); GWEN_Buffer_SetStep(dbuf, 4096); rv=GWEN_Io_Layer_ReadToBufferUntilEof(io, dbuf, guiid, 2000); if (rv<0) { DBG_INFO(AQBANKING_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dbuf); libofx_free_context(ofxctx); return rv; } /* setup debugging parameters */ extern int ofx_PARSER_msg; extern int ofx_DEBUG_msg; extern int ofx_WARNING_msg; extern int ofx_ERROR_msg; extern int ofx_INFO_msg; extern int ofx_STATUS_msg; ofx_PARSER_msg=GWEN_DB_GetIntValue(params, "show_parser_msg", 0, 0); ofx_DEBUG_msg=GWEN_DB_GetIntValue(params, "show_debug_msg", 0, 0); ofx_WARNING_msg=GWEN_DB_GetIntValue(params, "show_warning_msg", 0, 1); ofx_ERROR_msg=GWEN_DB_GetIntValue(params, "show_error_msg", 0, 1); ofx_INFO_msg=GWEN_DB_GetIntValue(params, "show_info_msg", 0, 1); ofx_STATUS_msg=GWEN_DB_GetIntValue(params, "show_status_msg", 0, 1); /* now the buffer contains all the data */ rv=libofx_proc_buffer(ofxctx, GWEN_Buffer_GetStart(dbuf), GWEN_Buffer_GetUsedBytes(dbuf)); DBG_ERROR(0, "I'm back"); GWEN_Buffer_free(dbuf); libofx_free_context(ofxctx); ieh->context=0; if (rv) return GWEN_ERROR_BAD_DATA; DBG_ERROR(0, "Returning"); return 0; }