GWEN_XMLNODE *GWEN_XMLNode_FindTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue) { while(n) { if (-1!=GWEN_Text_ComparePattern(n->data, tname, 0)) { if (pname) { const char *p; p=GWEN_XMLNode_GetProperty(n, pname, 0); if (p) { if (!pvalue) return (GWEN_XMLNODE*)n; if (-1!=GWEN_Text_ComparePattern(pvalue, p, 0)) return (GWEN_XMLNODE*)n; } else { /* return this node if pvalue is 0 an the property does not exist */ if (!pvalue) return (GWEN_XMLNODE*)n; } } /* if pname */ else return (GWEN_XMLNODE*)n; } n=GWEN_XMLNode_GetNextTag(n); } /* while */ return 0; }
AB_USER *AB_Banking_FindUser(const AB_BANKING *ab, const char *backendName, const char *country, const char *bankId, const char *userId, const char *customerId) { AB_USER *u; assert(ab); if (AB_User_List_GetCount(ab->users)==0) { DBG_INFO(AQBANKING_LOGDOMAIN, "No users"); return 0; } u=AB_User_List_First(ab->users); assert(u); if (!backendName) backendName="*"; if (!country) country="*"; if (!bankId) bankId="*"; if (!userId) userId="*"; if (!customerId) customerId="*"; while(u) { const char *lCountry; const char *lBankCode; const char *lUserId; const char *lCustomerId; lCountry=AB_User_GetCountry(u); if (!lCountry) lCountry=""; lBankCode=AB_User_GetBankCode(u); if (!lBankCode) lBankCode=""; lUserId=AB_User_GetUserId(u); if (!lUserId) lUserId=""; lCustomerId=AB_User_GetCustomerId(u); if (!lCustomerId) lCustomerId=""; if ((-1!=GWEN_Text_ComparePattern(AB_User_GetBackendName(u), backendName, 0)) && (-1!=GWEN_Text_ComparePattern(lCountry, country, 0)) && (-1!=GWEN_Text_ComparePattern(lBankCode, bankId, 0)) && (-1!=GWEN_Text_ComparePattern(lUserId, userId, 0)) && (-1!=GWEN_Text_ComparePattern(lCustomerId, customerId, 0))) break; u=AB_User_List_Next(u); } /* while */ return u; }
LC_CLIENT_RESULT LC_EgkCard_ParseInsuranceData(GWEN_XMLNODE *root, LC_HI_INSURANCE_DATA **pData) { LC_CLIENT_RESULT res; GWEN_XMLNODE *n; LC_HI_INSURANCE_DATA *d=NULL; n=GWEN_XMLNode_FindFirstTag(root, "UC_allgemeineVersicherungsdatenXML", NULL, NULL); if (n) { const char *s; d=LC_HIInsuranceData_new(); s=GWEN_XMLNode_GetProperty(n, "CDM_VERSION", NULL); if (s) { DBG_INFO(LC_LOGDOMAIN, "CDM_VERSION is [%s]", s); if (GWEN_Text_ComparePattern(s, "5.*", 0)!=-1) { DBG_INFO(LC_LOGDOMAIN, "Reading as 5.1.0"); res=LC_EgkCard_ReadInsuranceData_5_1_0(n, d); } else if (GWEN_Text_ComparePattern(s, "3.*", 0)!=-1) { DBG_INFO(LC_LOGDOMAIN, "Reading as 3.0.0"); res=LC_EgkCard_ReadInsuranceData_3_0_0(n, d); } else { DBG_WARN(LC_LOGDOMAIN, "Unhandled CDM_VERSION [%s], trying 5.1.0", s); res=LC_EgkCard_ReadInsuranceData_5_1_0(n, d); } } else { DBG_INFO(LC_LOGDOMAIN, "Missing CDM_VERSION, trying old data type"); /*GWEN_XMLNode_Dump(n, stderr, 2);*/ res=LC_EgkCard_ReadInsuranceData_old(n, d); } if (res!=LC_Client_ResultOk) { DBG_INFO(LC_LOGDOMAIN, "here (%d)", res); LC_HIInsuranceData_free(d); return res; } } else { DBG_ERROR(LC_LOGDOMAIN, "UC_allgemeineVersicherungsdatenXML not found, data follows:"); GWEN_XMLNode_Dump(root, 2); return LC_Client_ResultNotFound; } *pData=d; return LC_Client_ResultOk; }
int AH_ImExporterOFX_CheckFile(AB_IMEXPORTER *ie, const char *fname, uint32_t guiid) { int fd; GWEN_BUFFEREDIO *bio; assert(ie); assert(fname); fd=open(fname, O_RDONLY); if (fd==-1) { /* error */ DBG_ERROR(AQBANKING_LOGDOMAIN, "open(%s): %s", fname, strerror(errno)); return GWEN_ERROR_NOT_FOUND; } bio=GWEN_BufferedIO_File_new(fd); GWEN_BufferedIO_SetReadBuffer(bio, 0, 256); while (!GWEN_BufferedIO_CheckEOF(bio)) { char lbuffer[256]; int err; err=GWEN_BufferedIO_ReadLine(bio, lbuffer, sizeof(lbuffer)); if (err) { DBG_INFO(AQBANKING_LOGDOMAIN, "File \"%s\" is not supported by this plugin", fname); GWEN_BufferedIO_Close(bio); GWEN_BufferedIO_free(bio); return GWEN_ERROR_BAD_DATA; } if (-1!=GWEN_Text_ComparePattern(lbuffer, "*<OFX>*", 0) || -1!=GWEN_Text_ComparePattern(lbuffer, "*<OFC>*", 0)) { /* match */ DBG_INFO(AQBANKING_LOGDOMAIN, "File \"%s\" is supported by this plugin", fname); GWEN_BufferedIO_Close(bio); GWEN_BufferedIO_free(bio); return 0; } } /* while */ GWEN_BufferedIO_Close(bio); GWEN_BufferedIO_free(bio); return GWEN_ERROR_BAD_DATA; }
int GWEN_Directory_GetAllEntries(const char *folder, GWEN_STRINGLIST *sl, const char *mask) { GWEN_DIRECTORY *d; int rv; char buffer[256]; d=GWEN_Directory_new(); rv=GWEN_Directory_Open(d, folder); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Directory_free(d); return rv; } while(0==GWEN_Directory_Read(d, buffer, sizeof(buffer))) { if (strcmp(buffer, ".")!=0 && strcmp(buffer, "..")!=0 && (mask==NULL || GWEN_Text_ComparePattern(buffer+1, mask, 0)!=-1)) GWEN_StringList_AppendString(sl, buffer, 0, 1); } GWEN_Directory_Close(d); GWEN_Directory_free(d); return 0; }
int AB_ImExporterYN_CheckFile(AB_IMEXPORTER *ie, const char *fname) { AB_IMEXPORTER_YELLOWNET *ieh; GWEN_SYNCIO *sio; int rv; uint8_t tbuf[256]; assert(ie); assert(fname); assert(ie); ieh=GWEN_INHERIT_GETDATA(AB_IMEXPORTER, AB_IMEXPORTER_YELLOWNET, ie); assert(ieh); sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return rv; } rv=GWEN_SyncIo_Read(sio, tbuf, sizeof(tbuf)-1); if (rv<1) { DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" is not supported by this plugin", fname); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return GWEN_ERROR_BAD_DATA; } tbuf[rv-1]=0; if (-1!=GWEN_Text_ComparePattern((const char *)tbuf, "*<?xml*", 0) && -1!=GWEN_Text_ComparePattern((const char *)tbuf, "*<KONAUS>*", 0)) { /* match */ DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" is supported by this plugin", fname); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return 0; } GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return GWEN_ERROR_BAD_DATA; }
const AB_COUNTRY *AB_Country_FindByCode(const char *code){ AB_COUNTRY *c; c=ab_country_list; while(c->name) { if (-1!=GWEN_Text_ComparePattern(c->code, code, 0)) { return c; } c++; } return 0; }
const AB_COUNTRY *AB_Country_FindByLocalName(const char *name){ AB_COUNTRY *c; c=ab_country_list; while(c->name) { if (-1!=GWEN_Text_ComparePattern(AB_Country_GetLocalName(c), name, 0)) { return c; } c++; } return 0; }
int LC_Client_GetReaderAndDriverType(const LC_CLIENT *cl, const char *readerName, GWEN_BUFFER *driverType, GWEN_BUFFER *readerType, uint32_t *pReaderFlags) { GWEN_DB_NODE *dbDriver; dbDriver=GWEN_DB_FindFirstGroup(lc_client__driver_db, "driver"); while(dbDriver) { const char *sDriverName; sDriverName=GWEN_DB_GetCharValue(dbDriver, "driverName", 0, NULL); if (sDriverName) { GWEN_DB_NODE *dbReader; dbReader=GWEN_DB_FindFirstGroup(dbDriver, "reader"); while(dbReader) { const char *sReaderName; const char *sTmpl; sReaderName=GWEN_DB_GetCharValue(dbReader, "readerType", 0, NULL); sTmpl=GWEN_DB_GetCharValue(dbReader, "devicePathTmpl", 0, NULL); if (sReaderName && sTmpl) { if (-1!=GWEN_Text_ComparePattern(readerName, sTmpl, 1)) { /* reader found */ GWEN_Buffer_AppendString(driverType, sDriverName); GWEN_Buffer_AppendString(readerType, sReaderName); *pReaderFlags=LC_ReaderFlags_fromDb(dbReader, "flags"); DBG_INFO(LC_LOGDOMAIN, "Reader [%s] is [%s]/[%s], %08x", readerName, sDriverName, sReaderName, *pReaderFlags); return 0; } } else { DBG_INFO(LC_LOGDOMAIN, "Either reader name or template missing"); } dbReader=GWEN_DB_FindNextGroup(dbReader, "reader"); } } else { DBG_INFO(LC_LOGDOMAIN, "Driver name is missing"); } dbDriver=GWEN_DB_FindNextGroup(dbDriver, "driver"); } return GWEN_ERROR_NOT_FOUND; }
int GWEN_Directory_GetFileEntriesWithType(const char *folder, GWEN_STRINGLIST *sl, const char *mask) { GWEN_DIRECTORY *d; int rv; char buffer[256]; GWEN_BUFFER *pbuf; uint32_t pos; d=GWEN_Directory_new(); rv=GWEN_Directory_Open(d, folder); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Directory_free(d); return rv; } pbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pbuf, folder); GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S); pos=GWEN_Buffer_GetPos(pbuf); while(0==GWEN_Directory_Read(d, buffer+1, sizeof(buffer)-2)) { if (strcmp(buffer, ".")!=0 && strcmp(buffer, "..")!=0 && (mask==NULL || GWEN_Text_ComparePattern(buffer+1, mask, 0)!=-1)) { struct stat st; GWEN_Buffer_AppendString(pbuf, buffer+1); if (stat(GWEN_Buffer_GetStart(pbuf), &st)==0) { if (S_ISREG(st.st_mode)) buffer[0]='f'; else if (S_ISDIR(st.st_mode)) buffer[0]='d'; else buffer[0]='?'; GWEN_StringList_AppendString(sl, buffer, 0, 1); } GWEN_Buffer_Crop(pbuf, 0, pos); } } GWEN_Directory_Close(d); GWEN_Directory_free(d); return 0; }
AB_COUNTRY_CONSTLIST2 *AB_Country_ListByLocalName(const char *name){ const AB_COUNTRY *c; AB_COUNTRY_CONSTLIST2 *cl; c=ab_country_list; cl=AB_Country_ConstList2_new(); while(c->name) { if (-1!=GWEN_Text_ComparePattern(AB_Country_GetLocalName(c), name, 0)){ AB_Country_ConstList2_PushBack(cl, c); } c++; } if (AB_Country_ConstList2_GetSize(cl)==0) { AB_Country_ConstList2_free(cl); return 0; } return cl; }
GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_XmlDb_CheckFile(GWEN_DBIO *dbio, const char *fname){ GWEN_SYNCIO *sio; int rv; uint8_t tbuf[256]; assert(dbio); assert(fname); sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultNotOk; } rv=GWEN_SyncIo_Read(sio, tbuf, sizeof(tbuf)-1); if (rv<1) { DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" is not supported by this plugin", fname); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultNotOk; } tbuf[rv-1]=0; if (-1!=GWEN_Text_ComparePattern((const char*) tbuf, "*<?xml*", 0)) { /* match */ DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" is supported by this plugin", fname); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); /* don't be too sure about this, we *may* support the file, * so we dont say we don't support this file */ return GWEN_DBIO_CheckFileResultUnknown; } GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultNotOk; }
const char *AH_User_FindSepaDescriptor(AB_USER *u, const char *tmpl) { AH_USER *ue; GWEN_STRINGLISTENTRY *se; assert(u); ue=GWEN_INHERIT_GETDATA(AB_USER, AH_USER, u); assert(ue); if (GWEN_StringList_Count(ue->sepaDescriptors)<1) AH_User_LoadSepaDescriptors(u); se=GWEN_StringList_FirstEntry(ue->sepaDescriptors); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s && -1!=GWEN_Text_ComparePattern(s, tmpl, 1)) return s; se=GWEN_StringListEntry_Next(se); } return NULL; }
static int listBal(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const char *ctxFile; const char *outFile; AB_IMEXPORTER_CONTEXT *ctx=0; AB_IMEXPORTER_ACCOUNTINFO *iea=0; const char *bankId; const char *accountId; const char *bankName; const char *accountName; FILE *f; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the account number", /* short description */ "Specify the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankName", /* name */ 0, /* minnum */ 1, /* maxnum */ "N", /* short option */ "bankname", /* long option */ "Specify the bank name", /* short description */ "Specify the bank name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "accountname", /* long option */ "Specify the account name", /* short description */ "Specify the account name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ctxFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "ctxfile", /* long option */ "Specify the file to store the context in", /* short description */ "Specify the file to store the context in" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "outFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "o", /* short option */ "outfile", /* long option */ "Specify the file to store the data in", /* short description */ "Specify the file to store the data in" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); bankName=GWEN_DB_GetCharValue(db, "bankName", 0, 0); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0); accountName=GWEN_DB_GetCharValue(db, "accountName", 0, 0); rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); rv=readContext(ctxFile, &ctx, 1); if (rv<0) { DBG_ERROR(0, "Error reading context (%d)", rv); return 4; } /* open output stream */ outFile=GWEN_DB_GetCharValue(db, "outFile", 0, 0); if (outFile==0) f=stdout; else f=fopen(outFile, "w+"); if (f==0) { DBG_ERROR(0, "Error selecting output file: %s", strerror(errno)); return 4; } iea=AB_ImExporterContext_GetFirstAccountInfo(ctx); while(iea) { int matches=1; const char *s; if (matches && bankId) { s=AB_ImExporterAccountInfo_GetBankCode(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, bankId, 0)) matches=0; } if (matches && bankName) { s=AB_ImExporterAccountInfo_GetBankName(iea); if (!s || !*s) s=AB_ImExporterAccountInfo_GetBankName(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, bankName, 0)) matches=0; } if (matches && accountId) { s=AB_ImExporterAccountInfo_GetAccountNumber(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, accountId, 0)) matches=0; } if (matches && accountName) { s=AB_ImExporterAccountInfo_GetAccountName(iea); if (!s || !*s) s=AB_ImExporterAccountInfo_GetAccountName(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, accountName, 0)) matches=0; } if (matches) { AB_ACCOUNT_STATUS *ast; ast=_getLastAccountStatus(iea); if (ast) { const GWEN_TIME *ti; const char *s; fprintf(f, "Account\t"); s=AB_ImExporterAccountInfo_GetBankCode(iea); if (!s) s=""; fprintf(f, "%s\t", s); s=AB_ImExporterAccountInfo_GetAccountNumber(iea); if (!s) s=""; fprintf(f, "%s\t", s); s=AB_ImExporterAccountInfo_GetBankName(iea); if (!s) s=""; fprintf(f, "%s\t", s); s=AB_ImExporterAccountInfo_GetAccountName(iea); if (!s) s=""; fprintf(f, "%s\t", s); ti=AB_AccountStatus_GetTime(ast); _dumpBal(AB_AccountStatus_GetBookedBalance(ast), ti, f); _dumpBal(AB_AccountStatus_GetNotedBalance(ast), ti, f); fprintf(f, "\n"); } } /* if matches */ iea=AB_ImExporterContext_GetNextAccountInfo(ctx); } /* while */ if (outFile) { if (fclose(f)) { DBG_ERROR(0, "Error closing output file: %s", strerror(errno)); return 4; } } rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
static int listTrans(AB_BANKING *ab, GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; int rv; const char *ctxFile; const char *outFile; const char *exporterName; const char *profileName; const char *profileFile; AB_IMEXPORTER_CONTEXT *ctx=0; AB_IMEXPORTER_CONTEXT *nctx=0; AB_IMEXPORTER_ACCOUNTINFO *iea=0; const char *bankId; const char *accountId; const char *bankName; const char *accountName; const GWEN_ARGS args[]={ { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankId", /* name */ 0, /* minnum */ 1, /* maxnum */ "b", /* short option */ "bank", /* long option */ "Specify the bank code", /* short description */ "Specify the bank code" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountId", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "account", /* long option */ "Specify the account number", /* short description */ "Specify the account number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "bankName", /* name */ 0, /* minnum */ 1, /* maxnum */ "N", /* short option */ "bankname", /* long option */ "Specify the bank name", /* short description */ "Specify the bank name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "accountName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "accountname", /* long option */ "Specify the account name", /* short description */ "Specify the account name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "ctxFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "c", /* short option */ "ctxfile", /* long option */ "Specify the file to store the context in", /* short description */ "Specify the file to store the context in" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "outFile", /* name */ 0, /* minnum */ 1, /* maxnum */ "o", /* short option */ "outfile", /* long option */ "Specify the file to store the data in", /* short description */ "Specify the file to store the data in" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "exporterName", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "exporter", /* long option */ "Specify the exporter to use", /* short description */ "Specify the exporter to use" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "profileName", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "profile", /* long option */ "Specify the export profile to use", /* short description */ "Specify the export profile to use" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "profileFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "profile-file", /* long option */ "Specify the file to load the export profile from",/* short description */ "Specify the file to load the export profile from" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, 0 /*GWEN_ARGS_MODE_ALLOW_FREEPARAM*/, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } exporterName=GWEN_DB_GetCharValue(db, "exporterName", 0, "csv"); profileName=GWEN_DB_GetCharValue(db, "profileName", 0, "default"); profileFile=GWEN_DB_GetCharValue(db, "profileFile", 0, NULL); bankId=GWEN_DB_GetCharValue(db, "bankId", 0, 0); bankName=GWEN_DB_GetCharValue(db, "bankName", 0, 0); accountId=GWEN_DB_GetCharValue(db, "accountId", 0, 0); accountName=GWEN_DB_GetCharValue(db, "accountName", 0, 0); outFile=GWEN_DB_GetCharValue(db, "outFile", 0, 0); rv=AB_Banking_Init(ab); if (rv) { DBG_ERROR(0, "Error on init (%d)", rv); return 2; } /* load ctx file */ ctxFile=GWEN_DB_GetCharValue(db, "ctxfile", 0, 0); rv=readContext(ctxFile, &ctx, 1); if (rv<0) { DBG_ERROR(0, "Error reading context (%d)", rv); AB_ImExporterContext_free(ctx); return 4; } nctx=AB_ImExporterContext_new(); iea=AB_ImExporterContext_GetFirstAccountInfo(ctx); while(iea) { int matches=1; const char *s; if (matches && bankId) { s=AB_ImExporterAccountInfo_GetBankCode(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, bankId, 0)) matches=0; } if (matches && bankName) { s=AB_ImExporterAccountInfo_GetBankName(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, bankName, 0)) matches=0; } if (matches && accountId) { s=AB_ImExporterAccountInfo_GetAccountNumber(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, accountId, 0)) matches=0; } if (matches && accountName) { s=AB_ImExporterAccountInfo_GetAccountName(iea); if (!s || !*s || -1==GWEN_Text_ComparePattern(s, accountName, 0)) matches=0; } if (matches) { AB_IMEXPORTER_ACCOUNTINFO *nai; nai=AB_ImExporterAccountInfo_dup(iea); AB_ImExporterContext_AddAccountInfo(nctx, nai); } /* if matches */ iea=AB_ImExporterContext_GetNextAccountInfo(ctx); } /* while */ AB_ImExporterContext_free(ctx); /* export new context */ rv=AB_Banking_ExportToFileWithProfile(ab, exporterName, nctx, profileName, profileFile, outFile); if (rv<0) { DBG_ERROR(0, "Error exporting (%d).", rv); AB_ImExporterContext_free(nctx); return 4; } AB_ImExporterContext_free(nctx); rv=AB_Banking_Fini(ab); if (rv) { fprintf(stderr, "ERROR: Error on deinit (%d)\n", rv); return 5; } return 0; }
LC_CLIENT_RESULT LC_EgkCard_ReadPersonalData(LC_CARD *card, LC_HI_PERSONAL_DATA **pData) { GWEN_BUFFER *dbuf; LC_CLIENT_RESULT res; dbuf=GWEN_Buffer_new(0, 256, 0, 1); res=LC_EgkCard_ReadPd(card, dbuf); if (res!=LC_Client_ResultOk) { DBG_INFO(LC_LOGDOMAIN, "here (%d)", res); GWEN_Buffer_free(dbuf); return res; } else { GWEN_XMLNODE *root; GWEN_XMLNODE *n; root=GWEN_XMLNode_fromString(GWEN_Buffer_GetStart(dbuf), GWEN_Buffer_GetUsedBytes(dbuf), GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_HANDLE_NAMESPACES); if (root==NULL) { DBG_INFO(LC_LOGDOMAIN, "Invalid XML string"); GWEN_Buffer_free(dbuf); return LC_Client_ResultDataError; } GWEN_Buffer_free(dbuf); GWEN_XMLNode_StripNamespaces(root); /*GWEN_XMLNode_Dump(root, stderr, 2);*/ n=GWEN_XMLNode_FindFirstTag(root, "UC_PersoenlicheVersichertendatenXML", NULL, NULL); if (n) { const char *s; LC_HI_PERSONAL_DATA *d; d=LC_HIPersonalData_new(); s=GWEN_XMLNode_GetProperty(n, "CDM_VERSION", NULL); if (s) { if (GWEN_Text_ComparePattern(s, "5.*", 0)!=-1) res=LC_EgkCard_ReadPersonalData_5_1_0(n, d); else if (GWEN_Text_ComparePattern(s, "3.*", 0)!=-1) res=LC_EgkCard_ReadPersonalData_3_0_0(n, d); else { DBG_WARN(LC_LOGDOMAIN, "Unhandled CDM_VERSION [%s], trying 5.1.0", s); res=LC_EgkCard_ReadPersonalData_5_1_0(n, d); } } else res=LC_EgkCard_ReadPersonalData_old(n, d); if (res!=LC_Client_ResultOk) { DBG_INFO(LC_LOGDOMAIN, "here (%d)", res); LC_HIPersonalData_free(d); GWEN_XMLNode_free(root); return res; } *pData=d; } GWEN_XMLNode_free(root); } return LC_Client_ResultOk; }
int GWEN_Directory_GetMatchingFilesRecursively(const char *folder, GWEN_STRINGLIST *sl, const char *mask) { GWEN_DIRECTORY *d; int rv; char buffer[256]; GWEN_BUFFER *pbuf; uint32_t pos; GWEN_STRINGLIST *folderList; folderList=GWEN_StringList_new(); d=GWEN_Directory_new(); rv=GWEN_Directory_Open(d, folder); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Directory_free(d); GWEN_StringList_free(folderList); return rv; } pbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pbuf, folder); GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S); pos=GWEN_Buffer_GetPos(pbuf); while(0==GWEN_Directory_Read(d, buffer, sizeof(buffer)-2)) { if (strcmp(buffer, ".")!=0 && strcmp(buffer, "..")!=0) { struct stat st; GWEN_Buffer_AppendString(pbuf, buffer); if (stat(GWEN_Buffer_GetStart(pbuf), &st)==0) { if (S_ISDIR(st.st_mode)) /* add folders to the folder list */ GWEN_StringList_AppendString(folderList, GWEN_Buffer_GetStart(pbuf), 0, 0); else { if (mask==NULL || GWEN_Text_ComparePattern(buffer, mask, 0)!=-1) /* don't check for duplicates here (i.e. last param =0) */ GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(pbuf), 0, 0); } } GWEN_Buffer_Crop(pbuf, 0, pos); } } GWEN_Directory_Close(d); GWEN_Directory_free(d); if (GWEN_StringList_Count(folderList)) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(folderList); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) GWEN_Directory_GetMatchingFilesRecursively(s, sl, mask); se=GWEN_StringListEntry_Next(se); } } GWEN_StringList_free(folderList); GWEN_Buffer_free(pbuf); return 0; }